ERC-1155
Overview
Max Total Supply
0 SSJ
Holders
592
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DFOSuperSaiyanToken
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-09-19 */ // File: node_modules\@openzeppelin\contracts\introspection\IERC165.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin\contracts\token\ERC1155\IERC1155.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.2; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transfered from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; } // File: @openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; /** * _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns(bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); } // File: contracts\standalone\IERC1155Views.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; /** * @title IERC1155Views - An optional utility interface to improve the ERC-1155 Standard. * @dev This interface introduces some additional capabilities for ERC-1155 Tokens. */ interface IERC1155Views { /** * @dev Returns the total supply of the given token id * @param objectId the id of the token whose availability you want to know */ function totalSupply(uint256 objectId) external view returns (uint256); /** * @dev Returns the name of the given token id * @param objectId the id of the token whose name you want to know */ function name(uint256 objectId) external view returns (string memory); /** * @dev Returns the symbol of the given token id * @param objectId the id of the token whose symbol you want to know */ function symbol(uint256 objectId) external view returns (string memory); /** * @dev Returns the decimals of the given token id * @param objectId the id of the token whose decimals you want to know */ function decimals(uint256 objectId) external view returns (uint256); /** * @dev Returns the uri of the given token id * @param objectId the id of the token whose uri you want to know */ function uri(uint256 objectId) external view returns (string memory); } // File: @openzeppelin\contracts\token\ERC20\IERC20.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts\standalone\IERC20NFTWrapper.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; interface IERC20NFTWrapper is IERC20 { function init(uint256 objectId) external; function mainWrapper() external view returns (address); function objectId() external view returns (uint256); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint256); function mint(address owner, uint256 amount) external; function burn(address owner, uint256 amount) external; } // File: contracts\standalone\IERC1155Data.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; interface IERC1155Data { function name() external view returns (string memory); function symbol() external view returns (string memory); } // File: contracts\standalone\ISuperSaiyanToken.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; interface ISuperSaiyanToken is IERC1155, IERC1155Receiver, IERC1155Views, IERC1155Data { function init( address model, address source, string calldata name, string calldata symbol ) external; function fromDecimals(uint256 objectId, uint256 amount) external view returns (uint256); function toDecimals(uint256 objectId, uint256 amount) external view returns (uint256); function getMintData(uint256 objectId) external view returns ( string memory, string memory, uint256 ); function getModel() external view returns (address); function source() external view returns (address); function asERC20(uint256 objectId) external view returns (IERC20NFTWrapper); function emitTransferSingleEvent(address sender, address from, address to, uint256 objectId, uint256 amount) external; function mint(uint256 amount, string calldata partialUri) external returns (uint256, address); function burn( uint256 objectId, uint256 amount, bytes calldata data ) external; function burnBatch( uint256[] calldata objectIds, uint256[] calldata amounts, bytes calldata data ) external; event Mint(uint256 objectId, address tokenAddress); } // File: contracts\standalone\voting\IDFOSuperSaiyanToken.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; interface IDFOSuperSaiyanToken is ISuperSaiyanToken { function doubleProxy() external view returns(address); function setDoubleProxy(address newDoubleProxy) external; function setUri(uint256 objectId, string calldata uri) external; event UriChanged(uint256 indexed objectId, string oldUri, string newUri); } interface IDoubleProxy { function proxy() external view returns(address); } interface IMVDProxy { function getToken() external view returns(address); function getStateHolderAddress() external view returns(address); function getMVDWalletAddress() external view returns(address); function getMVDFunctionalitiesManagerAddress() external view returns(address); function getMVDFunctionalityProposalManagerAddress() external view returns(address); function submit(string calldata codeName, bytes calldata data) external payable returns(bytes memory returnData); } interface IStateHolder { function setUint256(string calldata name, uint256 value) external returns(uint256); function getUint256(string calldata name) external view returns(uint256); function getBool(string calldata varName) external view returns (bool); function clear(string calldata varName) external returns(string memory oldDataType, bytes memory oldVal); } interface IMVDFunctionalitiesManager { function isAuthorizedFunctionality(address functionality) external view returns(bool); } // File: @openzeppelin\contracts\GSN\Context.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin\contracts\math\SafeMath.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin\contracts\utils\Address.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin\contracts\introspection\ERC165.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) public view override returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } // File: contracts\standalone\SuperSaiyanToken.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; /** * @title SuperSaiyanToken - An improved ERC1155 token with ERC20 trading capabilities. * @dev In the SuperSaiyanToken standard, there is no a centralized storage where to save every objectId info. * In fact every NFT data is saved in a specific ERC20 token that can also work as a standalone one, and let transfer parts of an atomic object. * The ERC20 represents a unique Token Id, and its supply represents the entire supply of that Token Id. * You can instantiate a SuperSaiyanToken as a brand-new one, or as a wrapper for pre-existent classic ERC1155 NFT. * In the first case, you can introduce some particular permissions to mint new tokens. * In the second case, you need to send your NFTs to the Wrapped SuperSaiyanToken (using the classic safeTransferFrom or safeBatchTransferFrom methods) * and it will create a brand new ERC20 Token or mint new supply (in the case some tokens with the same id were transfered before yours). */ contract SuperSaiyanToken is ISuperSaiyanToken, Context, ERC165 { using SafeMath for uint256; using Address for address; bytes4 internal constant _INTERFACEobjectId_ERC1155 = 0xd9b67a26; address private _source; string internal _name; string internal _symbol; mapping(uint256 => string) internal _objectUris; bool private _supportsName; bool private _supportsSymbol; bool private _supportsDecimals; mapping(uint256 => address) internal _dest; mapping(address => bool) internal _isMine; mapping(address => mapping(address => bool)) internal _operatorApprovals; address internal _model; /** * @dev Constructor * When you create a SuperSaiyanToken, you can specify if you want to create a brand new one, passing the classic data like name, symbol, amd URI, * or wrap a pre-existent ERC1155 NFT, passing its contract address. * You can use just one of the two modes at the same time. * In both cases, a ERC20 token address is mandatory. It will be used as a model to be cloned for every minted NFT. * @param model the address of the ERC20 pre-deployed model. I will not be used in the procedure, but just cloned as a brand-new one every time a new NFT is minted. * @param source the address of the ERC1155 NFT to be wrapped. If you want to create a brand new NFT, this value must be address(0). * @param name the name of the brand new SuperSaiyanToken to be created. If you are wrapping a pre-existing ERC1155 NFT, this must be blank. * @param symbol the symbol of the brand new SuperSaiyanToken to be created. If you are wrapping a pre-existing ERC1155 NFT, this must be blank. */ constructor( address model, address source, string memory name, string memory symbol ) public { if(model != address(0)) { init(model, source, name, symbol); } } /** * @dev Utility method which contains the logic of the constructor. * This is a useful trick to instantiate a contract when it is cloned. */ function init( address model, address source, string memory name, string memory symbol ) public virtual override { require( _model == address(0), "Init already called!" ); require( model != address(0), "Model should be a valid ethereum address" ); _model = model; _source = source; require( _source != address(0) || keccak256(bytes(name)) != keccak256(""), "At least a source contract or a name must be set" ); require( _source != address(0) || keccak256(bytes(symbol)) != keccak256(""), "At least a source contract or a symbol must be set" ); _registerInterface(this.onERC1155Received.selector); _registerInterface(this.onERC1155BatchReceived.selector); bool safeBatchTransferFrom = _checkAndInsertSelector( this.safeBatchTransferFrom.selector ); bool cumulativeInterface = _checkAndInsertSelector( _INTERFACEobjectId_ERC1155 ); require( _source == address(0) || safeBatchTransferFrom || cumulativeInterface, "Looks like you're not wrapping a correct ERC1155 Token" ); _checkAndInsertSelector(this.balanceOf.selector); _checkAndInsertSelector(this.balanceOfBatch.selector); _checkAndInsertSelector(this.setApprovalForAll.selector); _checkAndInsertSelector(this.isApprovedForAll.selector); _checkAndInsertSelector(this.safeTransferFrom.selector); _checkAndInsertSelector(this.uri.selector); _checkAndInsertSelector(this.totalSupply.selector); _supportsName = _checkAndInsertSelector(0x00ad800c); //name(uint256) _supportsSymbol = _checkAndInsertSelector(0x4e41a1fb); //symbol(uint256) _supportsDecimals = _checkAndInsertSelector(this.decimals.selector); _supportsDecimals = _source == address(0) ? false : _supportsDecimals; _setAndCheckNameAndSymbol(name, symbol); } /** * @dev Mint * If the SuperSaiyanToken does not wrap a pre-existent NFT, this call is used to mint new NFTs, according to the permission rules provided by the Token creator. * @param amount The amount of tokens to be created. It must be greater than 1 unity. * @param objectUri The Uri to locate this new token's metadata. */ function mint(uint256 amount, string memory objectUri) public virtual override returns (uint256 objectId, address tokenAddress) { require(_source == address(0), "Cannot mint unexisting tokens"); require( keccak256(bytes(objectUri)) != keccak256(""), "Uri cannot be empty" ); (objectId, tokenAddress) = _mint(msg.sender, 0, amount, true); _objectUris[objectId] = objectUri; } /** * @dev Burn * You can choose to burn your NFTs. * In case this Token wraps a pre-existent ERC1155 NFT, you will receive the wrapped NFTs. */ function burn( uint256 objectId, uint256 amount, bytes memory data ) public virtual override { asERC20(objectId).burn(msg.sender, toDecimals(objectId, amount)); if (_source != address(0)) { IERC1155(_source).safeTransferFrom( address(this), msg.sender, objectId, amount, data ); } } /** * @dev Burn Batch * Same as burn, but for multiple NFTs at the same time */ function burnBatch( uint256[] memory objectIds, uint256[] memory amounts, bytes memory data ) public virtual override { for (uint256 i = 0; i < objectIds.length; i++) { asERC20(objectIds[i]).burn( msg.sender, toDecimals(objectIds[i], amounts[i]) ); } if (_source != address(0)) { IERC1155(_source).safeBatchTransferFrom( address(this), msg.sender, objectIds, amounts, data ); } } /** * @dev classic ERC-1155 onERC1155Received hook. * This method can be called only by the wrapped classic ERC1155 NFT, if it exists. * Call this method means that someone transfer original NFTs to receive wrapped ones. * So this method will provide brand new NFTs */ function onERC1155Received( address, address owner, uint256 objectId, uint256 amount, bytes memory ) public virtual override returns (bytes4) { require(msg.sender == _source, "Unauthorized action!"); _mint(owner, objectId, amount, false); return this.onERC1155Received.selector; } /** * @dev classic ERC-1155 onERC1155BatchReceived hook. * Same as onERC1155Received, but for multiple tokens at the same time */ function onERC1155BatchReceived( address, address owner, uint256[] memory objectIds, uint256[] memory amounts, bytes memory ) public virtual override returns (bytes4) { require(msg.sender == _source, "Unauthorized action!"); for (uint256 i = 0; i < objectIds.length; i++) { _mint(owner, objectIds[i], amounts[i], false); } return this.onERC1155BatchReceived.selector; } /** * @dev this method sends the correct creation parameters for the new ERC-20 to be minted. * It takes thata from the wrapped ERC1155 NFT or from the parameters passed at construction time. */ function getMintData(uint256 objectId) public virtual override view returns ( string memory name, string memory symbol, uint256 decimals ) { name = _name; symbol = _symbol; decimals = 18; if ( _source != address(0) && (_supportsName || _supportsSymbol || _supportsDecimals) ) { IERC1155Views views = IERC1155Views(_source); name = _supportsName ? views.name(objectId) : name; symbol = _supportsSymbol ? views.symbol(objectId) : symbol; decimals = _supportsDecimals ? views.decimals(objectId) : decimals; } } /** * @dev get the address of the ERC20 Contract used as a model */ function getModel() public virtual override view returns (address) { return _model; } /** * @dev Utility method to convert from decimals notation the original NFT (if any) to the ERC20 ones. */ function fromDecimals(uint256 objectId, uint256 amount) public virtual override view returns (uint256) { return _supportsDecimals ? amount : (amount / (10**decimals(objectId))); } /** * @dev Utility method to convert to decimals notation the original NFT (if any) to the ERC20 ones. */ function toDecimals(uint256 objectId, uint256 amount) public virtual override view returns (uint256) { return _supportsDecimals ? amount : (amount * (10**decimals(objectId))); } /** * @dev Returns the address of the wrapped ERC1155 NFT (if any) */ function source() public virtual override view returns (address) { return _source; } /** * @dev Gives back the address of the ERC20 Token representing this Token Id */ function asERC20(uint256 objectId) public virtual override view returns (IERC20NFTWrapper) { return IERC20NFTWrapper(_dest[objectId]); } /** * @dev Returns the total supply of the given token id * @param objectId the id of the token whose availability you want to know */ function totalSupply(uint256 objectId) public virtual override view returns (uint256) { return fromDecimals(objectId, asERC20(objectId).totalSupply()); } /** * @dev Returns the name of the given token id * @param objectId the id of the token whose name you want to know */ function name(uint256 objectId) public virtual override view returns (string memory) { return asERC20(objectId).name(); } function name() public virtual override view returns (string memory) { return _name; } /** * @dev Returns the symbol of the given token id * @param objectId the id of the token whose symbol you want to know */ function symbol(uint256 objectId) public virtual override view returns (string memory) { return asERC20(objectId).symbol(); } function symbol() public virtual override view returns (string memory) { return _symbol; } /** * @dev Returns the decimals of the given token id * @param objectId the id of the token whose decimals you want to know */ function decimals(uint256 objectId) public virtual override view returns (uint256) { return asERC20(objectId).decimals(); } /** * @dev Returns the uri of the given token id * @param objectId the id of the token whose uri you want to know */ function uri(uint256 objectId) public virtual override view returns (string memory) { return _source == address(0) ? _objectUris[objectId] : IERC1155Views(_source).uri(objectId); } /** * @dev Classic ERC1155 Standard Method */ function balanceOf(address account, uint256 objectId) public virtual override view returns (uint256) { return fromDecimals(objectId, asERC20(objectId).balanceOf(account)); } /** * @dev Classic ERC1155 Standard Method */ function balanceOfBatch( address[] memory accounts, uint256[] memory objectIds ) public virtual override view returns (uint256[] memory) { uint256[] memory balances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; i++) { balances[i] = balanceOf(accounts[i], objectIds[i]); } } /** * @dev Classic ERC1155 Standard Method */ function setApprovalForAll(address operator, bool approved) public virtual override { address sender = _msgSender(); require( sender != operator, "ERC1155: setting approval status for self" ); _operatorApprovals[sender][operator] = approved; emit ApprovalForAll(sender, operator, approved); } /** * @dev Classic ERC1155 Standard Method */ function isApprovedForAll(address account, address operator) public virtual override view returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev Classic ERC1155 Standard Method */ function safeTransferFrom( address from, address to, uint256 objectId, uint256 amount, bytes memory data ) public virtual override { require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); address operator = _msgSender(); asERC20(objectId).transferFrom(from, to, toDecimals(objectId, amount)); emit TransferSingle(operator, from, to, objectId, amount); _doSafeTransferAcceptanceCheck( operator, from, to, objectId, amount, data ); } /** * @dev Classic ERC1155 Standard Method */ function safeBatchTransferFrom( address from, address to, uint256[] memory objectIds, uint256[] memory amounts, bytes memory data ) public virtual override { require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); for (uint256 i = 0; i < objectIds.length; i++) { asERC20(objectIds[i]).transferFrom( from, to, toDecimals(objectIds[i], amounts[i]) ); } address operator = _msgSender(); emit TransferBatch(operator, from, to, objectIds, amounts); _doSafeBatchTransferAcceptanceCheck( operator, from, to, objectIds, amounts, data ); } function emitTransferSingleEvent(address sender, address from, address to, uint256 objectId, uint256 amount) public override { require(_dest[objectId] == msg.sender, "Unauthorized Action!"); uint256 entireAmount = fromDecimals(objectId, amount); if(entireAmount == 0) { return; } emit TransferSingle(sender, from, to, objectId, entireAmount); } function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received( operator, from, id, amount, data ) returns (bytes4 response) { if ( response != IERC1155Receiver(to).onERC1155Received.selector ) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived( operator, from, ids, amounts, data ) returns (bytes4 response) { if ( response != IERC1155Receiver(to).onERC1155BatchReceived.selector ) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _checkAndInsertSelector(bytes4 selector) internal virtual returns (bool response) { if (_source == address(0)) { _registerInterface(selector); return true; } try ERC165(_source).supportsInterface(selector) returns (bool res) { if (response = res) { _registerInterface(selector); } } catch {} } function _clone(address original) internal returns (address copy) { assembly { mstore( 0, or( 0x5880730000000000000000000000000000000000000000803b80938091923cF3, mul(original, 0x1000000000000000000) ) ) copy := create(0, 0, 32) switch extcodesize(copy) case 0 { invalid() } } } function _mint( address from, uint256 oldObjectId, uint256 amount, bool generateObjectId ) internal virtual returns (uint256, address) { uint256 objectId = oldObjectId; IERC20NFTWrapper wrapper = IERC20NFTWrapper(_dest[objectId]); if (_dest[objectId] == address(0) || generateObjectId) { require( amount > _getTokenUnity(objectId), "You need to pass more than a token" ); wrapper = IERC20NFTWrapper(_clone(getModel())); if(generateObjectId) { objectId = uint256(address(wrapper)); } wrapper.init(objectId); _isMine[_dest[objectId] = address(wrapper)] = true; emit Mint(objectId, address(wrapper)); } wrapper.mint(from, _convertForMint(objectId, amount)); emit TransferSingle(address(this), address(0), from, objectId, amount); return (objectId, address(wrapper)); } function _getTokenUnity(uint256 objectId) internal virtual view returns (uint256) { if (_source == address(0)) { return (10**18); } if (_supportsDecimals) { return (10**IERC1155Views(_source).decimals(objectId)); } return 1; } function _convertForMint(uint256 objectId, uint256 amount) internal virtual view returns (uint256) { if (_source != address(0) && _supportsDecimals) { return amount * (10**IERC1155Views(_source).decimals(objectId)); } return amount; } function _setAndCheckNameAndSymbol( string memory inputName, string memory inputSymbol ) internal virtual { _name = inputName; _symbol = inputSymbol; if (_source != address(0)) { IERC1155Data data = IERC1155Data(_source); try data.name() returns (string memory n) { _name = n; } catch {} try data.symbol() returns (string memory s) { _symbol = s; } catch {} } require(keccak256(bytes(_name)) != keccak256(""), "Name is mandatory"); require( keccak256(bytes(_symbol)) != keccak256(""), "Symbol is mandatory" ); } } // File: contracts\standalone\voting\DFOSuperSaiyanToken.sol // SPDX_License_Identifier: MIT pragma solidity ^0.6.0; /** * @title DFOSuperSaiyanToken */ contract DFOSuperSaiyanToken is IDFOSuperSaiyanToken, SuperSaiyanToken(address(0), address(0), "", "") { address private _doubleProxy; constructor( address model, address doubleProxy, string memory name, string memory symbol ) public { if(model != address(0)) { init(model, doubleProxy, name, symbol); } } function init( address model, address doubleProxy, string memory name, string memory symbol ) public override(ISuperSaiyanToken, SuperSaiyanToken) { super.init(model, address(0), name, symbol); _doubleProxy = doubleProxy; } modifier byDFO { if(_doubleProxy != address(0)) { require(IMVDFunctionalitiesManager(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getMVDFunctionalitiesManagerAddress()).isAuthorizedFunctionality(msg.sender), "Unauthorized Action!"); } _; } function doubleProxy() public override view returns(address) { return _doubleProxy; } function setDoubleProxy(address newDoubleProxy) public override byDFO { _doubleProxy = newDoubleProxy; } function mint(uint256 amount, string memory objectUri) public virtual override(ISuperSaiyanToken, SuperSaiyanToken) byDFO returns (uint256 objectId, address tokenAddress) { (objectId, tokenAddress) = super.mint(amount, objectUri); emit UriChanged(objectId, "", objectUri); } function setUri(uint256 objectId, string memory newUri) public byDFO override { emit UriChanged(objectId, _objectUris[objectId], newUri); _objectUris[objectId] = newUri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"model","type":"address"},{"internalType":"address","name":"doubleProxy","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"objectId","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"objectId","type":"uint256"},{"indexed":false,"internalType":"string","name":"oldUri","type":"string"},{"indexed":false,"internalType":"string","name":"newUri","type":"string"}],"name":"UriChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"asERC20","outputs":[{"internalType":"contract IERC20NFTWrapper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doubleProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransferSingleEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"fromDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"getMintData","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getModel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"model","type":"address"},{"internalType":"address","name":"doubleProxy","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"objectUri","type":"string"}],"name":"mint","outputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDoubleProxy","type":"address"}],"name":"setDoubleProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"string","name":"newUri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"source","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"toDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200527438038062005274833981810160405260808110156200003757600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200006357600080fd5b9083019060208201858111156200007957600080fd5b82516401000000008111828201881017156200009457600080fd5b82525081516020918201929091019080838360005b83811015620000c3578181015183820152602001620000a9565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b9083019060208201858111156200012b57600080fd5b82516401000000008111828201881017156200014657600080fd5b82525081516020918201929091019080838360005b83811015620001755781810151838201526020016200015b565b50505050905090810190601f168015620001a35780820380516001836020036101000a031916815260200191505b5060208082016040908152600080845281519283019091528082529450849350909150620001d86301ffc9a760e01b62000222565b6001600160a01b03841615620001f657620001f684848484620002a7565b505050506001600160a01b0384161562000218576200021884848484620002a7565b5050505062000c6e565b6001600160e01b0319808216141562000282576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b620002c18460008484620002e660201b62002fb31760201c565b5050600a80546001600160a01b0319166001600160a01b039290921691909117905550565b6009546001600160a01b03161562000345576040805162461bcd60e51b815260206004820152601460248201527f496e697420616c72656164792063616c6c656421000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0384166200038c5760405162461bcd60e51b8152600401808060200182810382526028815260200180620051946028913960400191505060405180910390fd5b600980546001600160a01b038087166001600160a01b031992831617909255600180548684169216919091179081905516151580620003e0575081516020830120600080516020620051bc83398151915214155b6200041d5760405162461bcd60e51b8152600401808060200182810382526030815260200180620052446030913960400191505060405180910390fd5b6001546001600160a01b03161515806200044c575080516020820120600080516020620051bc83398151915214155b620004895760405162461bcd60e51b8152600401808060200182810382526032815260200180620052126032913960400191505060405180910390fd5b6200049b63f23a6e6160e01b62000222565b620004ad63bc197c8160e01b62000222565b6000620004c1631759616b60e11b62000687565b90506000620004d7636cdb3d1360e11b62000687565b6001549091506001600160a01b03161580620004f05750815b80620004f95750805b620005365760405162461bcd60e51b8152600401808060200182810382526036815260200180620051dc6036913960400191505060405180910390fd5b62000547627eeac760e11b62000687565b506200055a6313849cfd60e21b62000687565b506200056d63a22cb46560e01b62000687565b506200058063e985e9c560e01b62000687565b5062000593637921219560e11b62000687565b50620005a66303a24d0760e21b62000687565b50620005b963bd85b03960e01b62000687565b50620005cb622b600360e21b62000687565b6005805460ff1916911515919091179055620005ee634e41a1fb60e01b62000687565b600580549115156101000261ff001990921691909117905562000618631fa3f33160e11b62000687565b60058054911515620100000262ff0000199092169190911790556001546001600160a01b031615620006565760055462010000900460ff1662000659565b60005b60058054911515620100000262ff0000199092169190911790556200067f848462000753565b505050505050565b6001546000906001600160a01b0316620006af57620006a68262000222565b5060016200074e565b600154604080516301ffc9a760e01b81526001600160e01b03198516600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b1580156200070557600080fd5b505afa9250505080156200072c57506040513d60208110156200072757600080fd5b505160015b62000737576200074e565b80915081156200074c576200074c8362000222565b505b919050565b81516200076890600290602085019062000bd2565b5080516200077e90600390602084019062000bd2565b506001546001600160a01b03161562000a3657600154604080516306fdde0360e01b815290516001600160a01b039092169182916306fdde03916004808301926000929190829003018186803b158015620007d857600080fd5b505afa925050508015620008c657506040513d6000823e601f3d908101601f1916820160405260208110156200080d57600080fd5b81019080805160405193929190846401000000008211156200082e57600080fd5b9083019060208201858111156200084457600080fd5b82516401000000008111828201881017156200085f57600080fd5b82525081516020918201929091019080838360005b838110156200088e57818101518382015260200162000874565b50505050905090810190601f168015620008bc5780820380516001836020036101000a031916815260200191505b5060405250505060015b620008d157620008e9565b8051620008e690600290602084019062000bd2565b50505b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200092357600080fd5b505afa92505050801562000a1157506040513d6000823e601f3d908101601f1916820160405260208110156200095857600080fd5b81019080805160405193929190846401000000008211156200097957600080fd5b9083019060208201858111156200098f57600080fd5b8251640100000000811182820188101715620009aa57600080fd5b82525081516020918201929091019080838360005b83811015620009d9578181015183820152602001620009bf565b50505050905090810190601f16801562000a075780820380516001836020036101000a031916815260200191505b5060405250505060015b62000a1c5762000a34565b805162000a3190600390602084019062000bd2565b50505b505b600080516020620051bc8339815191526002604051808280546001816001161561010002031660029004801562000aa75780601f1062000a8457610100808354040283529182019162000aa7565b820191906000526020600020905b81548152906001019060200180831162000a92575b50509150506040518091039020141562000afc576040805162461bcd60e51b81526020600482015260116024820152704e616d65206973206d616e6461746f727960781b604482015290519081900360640190fd5b600080516020620051bc8339815191526003604051808280546001816001161561010002031660029004801562000b6d5780601f1062000b4a57610100808354040283529182019162000b6d565b820191906000526020600020905b81548152906001019060200180831162000b58575b50509150506040518091039020141562000bce576040805162461bcd60e51b815260206004820152601360248201527f53796d626f6c206973206d616e6461746f727900000000000000000000000000604482015290519081900360640190fd5b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000c1557805160ff191683800117855562000c45565b8280016001018555821562000c45579182015b8281111562000c4557825182559160200191906001019062000c28565b5062000c5392915062000c57565b5090565b5b8082111562000c53576000815560010162000c58565b6145168062000c7e6000396000f3fe608060405234801561001057600080fd5b50600436106101d85760003560e01c806377097fc811610104578063bc197c81116100a2578063e82b15f411610071578063e82b15f414610f7e578063e985e9c514610fc0578063f23a6e6114610fee578063f242432a146110b7576101d8565b8063bc197c8114610bb5578063bd85b03914610d93578063cbd99d0314610db0578063e090fa3c14610dd6576101d8565b806395d89b41116100de57806395d89b4114610b5a578063a0bfa1e014610b62578063a22cb46514610b6a578063a728ca8314610b98576101d8565b806377097fc814610933578063782f08ae146109ff57806380a5a37114610aaa576101d8565b80633f47e6621161017c5780634eb9b5921161014b5780634eb9b592146107e257806367e828bf1461080657806372f71b221461080e57806373f1642514610831576101d8565b80633f47e662146104f35780634d91d7d9146105105780634e1273f4146106525780634e41a1fb146107c5576101d8565b806306fdde03116101b857806306fdde03146102e85780630e89341c146102f0578063174e20e61461030d5780632eb2c2d614610330576101d8565b8062ad800c146101dd578062fdd58e1461026f57806301ffc9a7146102ad575b600080fd5b6101fa600480360360208110156101f357600080fd5b5035611180565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023457818101518382015260200161021c565b50505050905090810190601f1680156102615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61029b6004803603604081101561028557600080fd5b506001600160a01b0381351690602001356112b6565b60408051918252519081900360200190f35b6102d4600480360360208110156102c357600080fd5b50356001600160e01b03191661134b565b604080519115158252519081900360200190f35b6101fa61136a565b6101fa6004803603602081101561030657600080fd5b50356113fe565b61029b6004803603604081101561032357600080fd5b50803590602001356115ec565b6104f1600480360360a081101561034657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561037957600080fd5b82018360208201111561038b57600080fd5b803590602001918460208302840111600160201b831117156103ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103fb57600080fd5b82018360208201111561040d57600080fd5b803590602001918460208302840111600160201b8311171561042e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561047d57600080fd5b82018360208201111561048f57600080fd5b803590602001918460018302840111600160201b831117156104b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611618945050505050565b005b61029b6004803603602081101561050957600080fd5b50356118b9565b6104f16004803603608081101561052657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561055957600080fd5b82018360208201111561056b57600080fd5b803590602001918460018302840111600160201b8311171561058c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156105de57600080fd5b8201836020820111156105f057600080fd5b803590602001918460018302840111600160201b8311171561061157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061192e945050505050565b6107756004803603604081101561066857600080fd5b810190602081018135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561070457600080fd5b82018360208201111561071657600080fd5b803590602001918460208302840111600160201b8311171561073757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611960945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107b1578181015183820152602001610799565b505050509050019250505060405180910390f35b6101fa600480360360208110156107db57600080fd5b5035611a0b565b6107ea611a4e565b604080516001600160a01b039092168252519081900360200190f35b6107ea611a5d565b61029b6004803603604081101561082457600080fd5b5080359060200135611a6c565b61084e6004803603602081101561084757600080fd5b5035611a99565b604051808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561089557818101518382015260200161087d565b50505050905090810190601f1680156108c25780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156108f55781810151838201526020016108dd565b50505050905090810190601f1680156109225780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6109de6004803603604081101561094957600080fd5b81359190810190604081016020820135600160201b81111561096a57600080fd5b82018360208201111561097c57600080fd5b803590602001918460018302840111600160201b8311171561099d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f30945050505050565b604080519283526001600160a01b0390911660208301528051918290030190f35b6104f160048036036040811015610a1557600080fd5b81359190810190604081016020820135600160201b811115610a3657600080fd5b820183602082011115610a4857600080fd5b803590602001918460018302840111600160201b83111715610a6957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121b1945050505050565b6104f160048036036060811015610ac057600080fd5b813591602081013591810190606081016040820135600160201b811115610ae657600080fd5b820183602082011115610af857600080fd5b803590602001918460018302840111600160201b83111715610b1957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506124ac945050505050565b6101fa61262f565b6107ea612690565b6104f160048036036040811015610b8057600080fd5b506001600160a01b038135169060200135151561269f565b6107ea60048036036020811015610bae57600080fd5b503561276a565b610d76600480360360a0811015610bcb57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b811115610bfe57600080fd5b820183602082011115610c1057600080fd5b803590602001918460208302840111600160201b83111715610c3157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c8057600080fd5b820183602082011115610c9257600080fd5b803590602001918460208302840111600160201b83111715610cb357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d0257600080fd5b820183602082011115610d1457600080fd5b803590602001918460018302840111600160201b83111715610d3557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612785945050505050565b604080516001600160e01b03199092168252519081900360200190f35b61029b60048036036020811015610da957600080fd5b503561283a565b6104f160048036036020811015610dc657600080fd5b50356001600160a01b0316612881565b6104f160048036036060811015610dec57600080fd5b810190602081018135600160201b811115610e0657600080fd5b820183602082011115610e1857600080fd5b803590602001918460208302840111600160201b83111715610e3957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e8857600080fd5b820183602082011115610e9a57600080fd5b803590602001918460208302840111600160201b83111715610ebb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f0a57600080fd5b820183602082011115610f1c57600080fd5b803590602001918460018302840111600160201b83111715610f3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612a58945050505050565b6104f1600480360360a0811015610f9457600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612c6f565b6102d460048036036040811015610fd657600080fd5b506001600160a01b0381358116916020013516612d50565b610d76600480360360a081101561100457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561104357600080fd5b82018360208201111561105557600080fd5b803590602001918460018302840111600160201b8311171561107657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612d7e945050505050565b6104f1600480360360a08110156110cd57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561110c57600080fd5b82018360208201111561111e57600080fd5b803590602001918460018302840111600160201b8311171561113f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612df8945050505050565b606061118b8261276a565b6001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561120057600080fd5b8101908080516040519392919084600160201b82111561121f57600080fd5b90830190602082018581111561123457600080fd5b8251600160201b81118282018810171561124d57600080fd5b82525081516020918201929091019080838360005b8381101561127a578181015183820152602001611262565b50505050905090810190601f1680156112a75780820380516001836020036101000a031916815260200191505b5060405250505090505b919050565b6000611342826112c58461276a565b6001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d602081101561133b57600080fd5b5051611a6c565b90505b92915050565b6001600160e01b03191660009081526020819052604090205460ff1690565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b820191906000526020600020905b8154815290600101906020018083116113d657829003601f168201915b505050505090505b90565b6001546060906001600160a01b03161561154e57600154604080516303a24d0760e21b81526004810185905290516001600160a01b0390921691630e89341c91602480820192600092909190829003018186803b15801561145e57600080fd5b505afa158015611472573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561149b57600080fd5b8101908080516040519392919084600160201b8211156114ba57600080fd5b9083019060208201858111156114cf57600080fd5b8251600160201b8111828201881017156114e857600080fd5b82525081516020918201929091019080838360005b838110156115155781810151838201526020016114fd565b50505050905090810190601f1680156115425780820380516001836020036101000a031916815260200191505b50604052505050611345565b60008281526004602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505092915050565b60055460009062010000900460ff1661161257611608836118b9565b600a0a8202611342565b50919050565b6001600160a01b03841661165d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b611665613314565b6001600160a01b0316856001600160a01b0316148061169057506116908561168b613314565b612d50565b6116cb5760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b60005b83518110156117bd576116f38482815181106116e657fe5b602002602001015161276a565b6001600160a01b03166323b872dd878761173388868151811061171257fe5b602002602001015188878151811061172657fe5b60200260200101516115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b505050506040513d60208110156117b357600080fd5b50506001016116ce565b5060006117c8613314565b9050846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561184f578181015183820152602001611837565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561188e578181015183820152602001611876565b5050505090500194505050505060405180910390a46118b1818787878787613318565b505050505050565b60006118c48261276a565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d602081101561192657600080fd5b505192915050565b61193b8460008484612fb3565b5050600a80546001600160a01b0319166001600160a01b039290921691909117905550565b606080835167ffffffffffffffff8111801561197b57600080fd5b506040519080825280602002602001820160405280156119a5578160200160208202803683370190505b50905060005b8451811015611a03576119e48582815181106119c357fe5b60200260200101518583815181106119d757fe5b60200260200101516112b6565b8282815181106119f057fe5b60209081029190910101526001016119ab565b505092915050565b6060611a168261276a565b6001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b600a546001600160a01b031690565b6001546001600160a01b031690565b60055460009062010000900460ff1661161257611a88836118b9565b600a0a8281611a9357fe5b04611342565b60028054604080516020601f600019610100600187161502019094168590049384018190048102820181019092528281526060938493600093830182828015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b505060038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815296995091945092508401905082828015611bb45780601f10611b8957610100808354040283529160200191611bb4565b820191906000526020600020905b815481529060010190602001808311611b9757829003601f168201915b5050600154939550601294505050506001600160a01b031615801590611c00575060055460ff1680611bed5750600554610100900460ff165b80611c00575060055462010000900460ff165b15611f29576001546005546001600160a01b039091169060ff16611c245783611d53565b806001600160a01b031662ad800c866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611c6757600080fd5b505afa158015611c7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ca457600080fd5b8101908080516040519392919084600160201b821115611cc357600080fd5b908301906020820185811115611cd857600080fd5b8251600160201b811182820188101715611cf157600080fd5b82525081516020918201929091019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b506040525050505b600554909450610100900460ff16611d6b5782611e9b565b806001600160a01b0316634e41a1fb866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611daf57600080fd5b505afa158015611dc3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611dec57600080fd5b8101908080516040519392919084600160201b821115611e0b57600080fd5b908301906020820185811115611e2057600080fd5b8251600160201b811182820188101715611e3957600080fd5b82525081516020918201929091019080838360005b83811015611e66578181015183820152602001611e4e565b50505050905090810190601f168015611e935780820380516001836020036101000a031916815260200191505b506040525050505b60055490935062010000900460ff16611eb45781611f25565b806001600160a01b0316633f47e662866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611ef857600080fd5b505afa158015611f0c573d6000803e3d6000fd5b505050506040513d6020811015611f2257600080fd5b50515b9150505b9193909250565b600a5460009081906001600160a01b0316156120ea57600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9457600080fd5b505afa158015611fa8573d6000803e3d6000fd5b505050506040513d6020811015611fbe57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561200257600080fd5b505afa158015612016573d6000803e3d6000fd5b505050506040513d602081101561202c57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b15801561207657600080fd5b505afa15801561208a573d6000803e3d6000fd5b505050506040513d60208110156120a057600080fd5b50516120ea576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6120f484846135cc565b8092508193505050817ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f7703484604051808060200180602001838103835260008152602001602001838103825284818151815260200191508051906020019080838360005b8381101561216f578181015183820152602001612157565b50505050905090810190601f16801561219c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a29250929050565b600a546001600160a01b03161561236657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561221057600080fd5b505afa158015612224573d6000803e3d6000fd5b505050506040513d602081101561223a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561227e57600080fd5b505afa158015612292573d6000803e3d6000fd5b505050506040513d60208110156122a857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156122f257600080fd5b505afa158015612306573d6000803e3d6000fd5b505050506040513d602081101561231c57600080fd5b5051612366576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600082815260046020908152604091829020825183815281546002600019610100600184161502019091160493810184905285937ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f770349386929182918201906060830190869080156124185780601f106123ed57610100808354040283529160200191612418565b820191906000526020600020905b8154815290600101906020018083116123fb57829003601f168201915b5050838103825284518152845160209182019186019080838360005b8381101561244c578181015183820152602001612434565b50505050905090810190601f1680156124795780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2600082815260046020908152604090912082516124a7928401906141cd565b505050565b6124b58361276a565b6001600160a01b0316639dc29fac336124ce86866115ec565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561251457600080fd5b505af1158015612528573d6000803e3d6000fd5b50506001546001600160a01b03161591506124a7905057600154604051637921219560e11b815230600482018181523360248401819052604484018890526064840187905260a060848501908152865160a486015286516001600160a01b039096169563f242432a9592938a938a938a93909160c40190602085019080838360005b838110156125c25781810151838201526020016125aa565b50505050905090810190601f1680156125ef5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b50505050505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b6009546001600160a01b031690565b60006126a9613314565b9050826001600160a01b0316816001600160a01b031614156126fc5760405162461bcd60e51b81526004018080602001828103825260298152602001806144b86029913960400191505060405180910390fd5b6001600160a01b03818116600081815260086020908152604080832094881680845294825291829020805460ff1916871515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6000908152600660205260409020546001600160a01b031690565b6001546000906001600160a01b031633146127de576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b60005b84518110156128275761281d868683815181106127fa57fe5b602002602001015186848151811061280e57fe5b602002602001015160006136ca565b50506001016127e1565b5063bc197c8160e01b9695505050505050565b6000611345826128498461276a565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561131157600080fd5b600a546001600160a01b031615612a3657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156128e057600080fd5b505afa1580156128f4573d6000803e3d6000fd5b505050506040513d602081101561290a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561294e57600080fd5b505afa158015612962573d6000803e3d6000fd5b505050506040513d602081101561297857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156129c257600080fd5b505afa1580156129d6573d6000803e3d6000fd5b505050506040513d60208110156129ec57600080fd5b5051612a36576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8351811015612b0f57612a738482815181106116e657fe5b6001600160a01b0316639dc29fac33612aa5878581518110612a9157fe5b602002602001015187868151811061172657fe5b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612aeb57600080fd5b505af1158015612aff573d6000803e3d6000fd5b505060019092019150612a5b9050565b506001546001600160a01b0316156124a757600154604051631759616b60e11b81523060048201818152336024840181905260a060448501908152885160a486015288516001600160a01b0390961695632eb2c2d69592938a938a938a9390916064810191608482019160c401906020808a01910280838360005b83811015612ba2578181015183820152602001612b8a565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612be1578181015183820152602001612bc9565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612c1d578181015183820152602001612c05565b50505050905090810190601f168015612c4a5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561261257600080fd5b6000828152600660205260409020546001600160a01b03163314612cd1576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6000612cdd8383611a6c565b905080612cea5750612d49565b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628685604051808381526020018281526020019250505060405180910390a4505b5050505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6001546000906001600160a01b03163314612dd7576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b612de485858560006136ca565b5063f23a6e6160e01b979650505050505050565b6001600160a01b038416612e3d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b612e45613314565b6001600160a01b0316856001600160a01b03161480612e6b5750612e6b8561168b613314565b612ea65760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b6000612eb0613314565b9050612ebb8461276a565b6001600160a01b03166323b872dd8787612ed588886115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015612f2b57600080fd5b505af1158015612f3f573d6000803e3d6000fd5b505050506040513d6020811015612f5557600080fd5b5050604080518581526020810185905281516001600160a01b03808916938a821693918616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a46118b1818787878787613908565b6009546001600160a01b031615613008576040805162461bcd60e51b8152602060048201526014602482015273496e697420616c72656164792063616c6c65642160601b604482015290519081900360640190fd5b6001600160a01b03841661304d5760405162461bcd60e51b81526004018080602001828103825260288152602001806143686028913960400191505060405180910390fd5b600980546001600160a01b038087166001600160a01b03199283161790925560018054868416921691909117908190551615158061309f57508151602083012060008051602061439083398151915214155b6130da5760405162461bcd60e51b81526004018080602001828103825260308152602001806144416030913960400191505060405180910390fd5b6001546001600160a01b031615158061310757508051602082012060008051602061439083398151915214155b6131425760405162461bcd60e51b815260040180806020018281038252603281526020018061440f6032913960400191505060405180910390fd5b61315263f23a6e6160e01b613a79565b61316263bc197c8160e01b613a79565b6000613174631759616b60e11b613afd565b90506000613188636cdb3d1360e11b613afd565b6001549091506001600160a01b031615806131a05750815b806131a85750805b6131e35760405162461bcd60e51b81526004018080602001828103825260368152602001806143d96036913960400191505060405180910390fd5b6131f2627eeac760e11b613afd565b506132036313849cfd60e21b613afd565b5061321463a22cb46560e01b613afd565b5061322563e985e9c560e01b613afd565b50613236637921219560e11b613afd565b506132476303a24d0760e21b613afd565b5061325863bd85b03960e01b613afd565b50613268622b600360e21b613afd565b6005805460ff1916911515919091179055613289634e41a1fb60e01b613afd565b600580549115156101000261ff00199092169190911790556132b1631fa3f33160e11b613afd565b60058054911515620100000262ff0000199092169190911790556001546001600160a01b0316156132ed5760055462010000900460ff166132f0565b60005b60058054911515620100000262ff0000199092169190911790556118b18484613bb6565b3390565b61332a846001600160a01b0316613ffc565b156118b157836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156133b85781810151838201526020016133a0565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156133f75781810151838201526020016133df565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561343357818101518382015260200161341b565b50505050905090810190601f1680156134605780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561348557600080fd5b505af19250505080156134aa57506040513d60208110156134a557600080fd5b505160015b61357d576134b6614266565b806134c15750613546565b8060405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561350b5781810151838201526020016134f3565b50505050905090810190601f1680156135385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60405162461bcd60e51b815260040180806020018281038252603481526020018061430c6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b60015460009081906001600160a01b03161561362f576040805162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206d696e7420756e6578697374696e6720746f6b656e73000000604482015290519081900360640190fd5b82516020840120600080516020614390833981519152141561368e576040805162461bcd60e51b81526020600482015260136024820152725572692063616e6e6f7420626520656d70747960681b604482015290519081900360640190fd5b61369c3360008660016136ca565b600082815260046020908152604090912086519395509193506136c292908601906141cd565b509250929050565b600083815260066020526040812054819085906001600160a01b03168015806136f05750845b1561383b576136fe82614026565b861161373b5760405162461bcd60e51b81526004018080602001828103825260228152602001806144966022913960400191505060405180910390fd5b61374b613746612690565b6140e3565b9050841561376057806001600160a01b031691505b806001600160a01b031663b7b0422d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137a657600080fd5b505af11580156137ba573d6000803e3d6000fd5b505050600083815260066020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558084526007835292819020805460ff1916600117905580518681529182019290925281517ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010293509081900390910190a15b806001600160a01b03166340c10f1989613855858a61411f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561389b57600080fd5b505af11580156138af573d6000803e3d6000fd5b505060408051858152602081018a905281516001600160a01b038d1694506000935030927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a49097909650945050505050565b61391a846001600160a01b0316613ffc565b156118b157836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139a9578181015183820152602001613991565b50505050905090810190601f1680156139d65780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156139f957600080fd5b505af1925050508015613a1e57506040513d6020811015613a1957600080fd5b505160015b613a2a576134b6614266565b6001600160e01b0319811663f23a6e6160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b6001600160e01b03198082161415613ad8576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b6001546000906001600160a01b0316613b2157613b1982613a79565b5060016112b1565b600154604080516301ffc9a760e01b81526001600160e01b03198516600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b158015613b7657600080fd5b505afa925050508015613b9b57506040513d6020811015613b9657600080fd5b505160015b613ba4576112b1565b80915081156116125761161283613a79565b8151613bc99060029060208501906141cd565b508051613bdd9060039060208401906141cd565b506001546001600160a01b031615613e7657600154604080516306fdde0360e01b815290516001600160a01b039092169182916306fdde03916004808301926000929190829003018186803b158015613c3557600080fd5b505afa925050508015613d1957506040513d6000823e601f3d908101601f191682016040526020811015613c6857600080fd5b8101908080516040519392919084600160201b821115613c8757600080fd5b908301906020820185811115613c9c57600080fd5b8251600160201b811182820188101715613cb557600080fd5b82525081516020918201929091019080838360005b83811015613ce2578181015183820152602001613cca565b50505050905090810190601f168015613d0f5780820380516001836020036101000a031916815260200191505b5060405250505060015b613d2257613d38565b8051613d359060029060208401906141cd565b50505b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015613d7157600080fd5b505afa925050508015613e5557506040513d6000823e601f3d908101601f191682016040526020811015613da457600080fd5b8101908080516040519392919084600160201b821115613dc357600080fd5b908301906020820185811115613dd857600080fd5b8251600160201b811182820188101715613df157600080fd5b82525081516020918201929091019080838360005b83811015613e1e578181015183820152602001613e06565b50505050905090810190601f168015613e4b5780820380516001836020036101000a031916815260200191505b5060405250505060015b613e5e57613e74565b8051613e719060039060208401906141cd565b50505b505b60008051602061439083398151915260026040518082805460018160011615610100020316600290048015613ee25780601f10613ec0576101008083540402835291820191613ee2565b820191906000526020600020905b815481529060010190602001808311613ece575b505091505060405180910390201415613f36576040805162461bcd60e51b81526020600482015260116024820152704e616d65206973206d616e6461746f727960781b604482015290519081900360640190fd5b60008051602061439083398151915260036040518082805460018160011615610100020316600290048015613fa25780601f10613f80576101008083540402835291820191613fa2565b820191906000526020600020905b815481529060010190602001808311613f8e575b505091505060405180910390201415613ff8576040805162461bcd60e51b815260206004820152601360248201527253796d626f6c206973206d616e6461746f727960681b604482015290519081900360640190fd5b5050565b6000813f60008051602061439083398151915281811480159061401e57508115155b949350505050565b6001546000906001600160a01b03166140485750670de0b6b3a76400006112b1565b60055462010000900460ff16156140db5760015460408051631fa3f33160e11b81526004810185905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b1580156140a557600080fd5b505afa1580156140b9573d6000803e3d6000fd5b505050506040513d60208110156140cf57600080fd5b5051600a0a90506112b1565b506001919050565b60006901000000000000000000820268803b80938091923cf36258807360e81b01176000526020600080f09050803b801561411d57611612565bfe5b6001546000906001600160a01b031615801590614144575060055462010000900460ff165b156116125760015460408051631fa3f33160e11b81526004810186905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b15801561419557600080fd5b505afa1580156141a9573d6000803e3d6000fd5b505050506040513d60208110156141bf57600080fd5b5051600a0a82029050611345565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061420e57805160ff191683800117855561423b565b8280016001018555821561423b579182015b8281111561423b578251825591602001919060010190614220565b5061424792915061424b565b5090565b5b80821115614247576000815560010161424c565b60e01c90565b600060443d1015614276576113fb565b600481823e6308c379a061428a8251614260565b14614294576113fb565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156142c457505050506113fb565b828401925082519150808211156142de57505050506113fb565b503d830160208284010111156142f6575050506113fb565b601f01601f191681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e734d6f64656c2073686f756c6420626520612076616c696420657468657265756d2061646472657373c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644c6f6f6b73206c696b6520796f75277265206e6f74207772617070696e67206120636f7272656374204552433131353520546f6b656e4174206c65617374206120736f7572636520636f6e7472616374206f7220612073796d626f6c206d757374206265207365744174206c65617374206120736f7572636520636f6e7472616374206f722061206e616d65206d75737420626520736574455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373596f75206e65656420746f2070617373206d6f7265207468616e206120746f6b656e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66a26469706673582212206129495e80a4eb8f411641e2b3eb9acb50fae6eccbe2338faa1ce27e9994ada664736f6c634300060c00334d6f64656c2073686f756c6420626520612076616c696420657468657265756d2061646472657373c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4704c6f6f6b73206c696b6520796f75277265206e6f74207772617070696e67206120636f7272656374204552433131353520546f6b656e4174206c65617374206120736f7572636520636f6e7472616374206f7220612073796d626f6c206d757374206265207365744174206c65617374206120736f7572636520636f6e7472616374206f722061206e616d65206d75737420626520736574000000000000000000000000ac4a31555059a286e899422c2eeb2b5b55b5a579000000000000000000000000faf23b66314e1bef6581ee76a78ac7434989e3a6000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001553757065722053616979612d6a696e20746f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000353534a0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101d85760003560e01c806377097fc811610104578063bc197c81116100a2578063e82b15f411610071578063e82b15f414610f7e578063e985e9c514610fc0578063f23a6e6114610fee578063f242432a146110b7576101d8565b8063bc197c8114610bb5578063bd85b03914610d93578063cbd99d0314610db0578063e090fa3c14610dd6576101d8565b806395d89b41116100de57806395d89b4114610b5a578063a0bfa1e014610b62578063a22cb46514610b6a578063a728ca8314610b98576101d8565b806377097fc814610933578063782f08ae146109ff57806380a5a37114610aaa576101d8565b80633f47e6621161017c5780634eb9b5921161014b5780634eb9b592146107e257806367e828bf1461080657806372f71b221461080e57806373f1642514610831576101d8565b80633f47e662146104f35780634d91d7d9146105105780634e1273f4146106525780634e41a1fb146107c5576101d8565b806306fdde03116101b857806306fdde03146102e85780630e89341c146102f0578063174e20e61461030d5780632eb2c2d614610330576101d8565b8062ad800c146101dd578062fdd58e1461026f57806301ffc9a7146102ad575b600080fd5b6101fa600480360360208110156101f357600080fd5b5035611180565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023457818101518382015260200161021c565b50505050905090810190601f1680156102615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61029b6004803603604081101561028557600080fd5b506001600160a01b0381351690602001356112b6565b60408051918252519081900360200190f35b6102d4600480360360208110156102c357600080fd5b50356001600160e01b03191661134b565b604080519115158252519081900360200190f35b6101fa61136a565b6101fa6004803603602081101561030657600080fd5b50356113fe565b61029b6004803603604081101561032357600080fd5b50803590602001356115ec565b6104f1600480360360a081101561034657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561037957600080fd5b82018360208201111561038b57600080fd5b803590602001918460208302840111600160201b831117156103ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103fb57600080fd5b82018360208201111561040d57600080fd5b803590602001918460208302840111600160201b8311171561042e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561047d57600080fd5b82018360208201111561048f57600080fd5b803590602001918460018302840111600160201b831117156104b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611618945050505050565b005b61029b6004803603602081101561050957600080fd5b50356118b9565b6104f16004803603608081101561052657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561055957600080fd5b82018360208201111561056b57600080fd5b803590602001918460018302840111600160201b8311171561058c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156105de57600080fd5b8201836020820111156105f057600080fd5b803590602001918460018302840111600160201b8311171561061157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061192e945050505050565b6107756004803603604081101561066857600080fd5b810190602081018135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561070457600080fd5b82018360208201111561071657600080fd5b803590602001918460208302840111600160201b8311171561073757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611960945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107b1578181015183820152602001610799565b505050509050019250505060405180910390f35b6101fa600480360360208110156107db57600080fd5b5035611a0b565b6107ea611a4e565b604080516001600160a01b039092168252519081900360200190f35b6107ea611a5d565b61029b6004803603604081101561082457600080fd5b5080359060200135611a6c565b61084e6004803603602081101561084757600080fd5b5035611a99565b604051808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561089557818101518382015260200161087d565b50505050905090810190601f1680156108c25780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156108f55781810151838201526020016108dd565b50505050905090810190601f1680156109225780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6109de6004803603604081101561094957600080fd5b81359190810190604081016020820135600160201b81111561096a57600080fd5b82018360208201111561097c57600080fd5b803590602001918460018302840111600160201b8311171561099d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f30945050505050565b604080519283526001600160a01b0390911660208301528051918290030190f35b6104f160048036036040811015610a1557600080fd5b81359190810190604081016020820135600160201b811115610a3657600080fd5b820183602082011115610a4857600080fd5b803590602001918460018302840111600160201b83111715610a6957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121b1945050505050565b6104f160048036036060811015610ac057600080fd5b813591602081013591810190606081016040820135600160201b811115610ae657600080fd5b820183602082011115610af857600080fd5b803590602001918460018302840111600160201b83111715610b1957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506124ac945050505050565b6101fa61262f565b6107ea612690565b6104f160048036036040811015610b8057600080fd5b506001600160a01b038135169060200135151561269f565b6107ea60048036036020811015610bae57600080fd5b503561276a565b610d76600480360360a0811015610bcb57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b811115610bfe57600080fd5b820183602082011115610c1057600080fd5b803590602001918460208302840111600160201b83111715610c3157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c8057600080fd5b820183602082011115610c9257600080fd5b803590602001918460208302840111600160201b83111715610cb357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d0257600080fd5b820183602082011115610d1457600080fd5b803590602001918460018302840111600160201b83111715610d3557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612785945050505050565b604080516001600160e01b03199092168252519081900360200190f35b61029b60048036036020811015610da957600080fd5b503561283a565b6104f160048036036020811015610dc657600080fd5b50356001600160a01b0316612881565b6104f160048036036060811015610dec57600080fd5b810190602081018135600160201b811115610e0657600080fd5b820183602082011115610e1857600080fd5b803590602001918460208302840111600160201b83111715610e3957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e8857600080fd5b820183602082011115610e9a57600080fd5b803590602001918460208302840111600160201b83111715610ebb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f0a57600080fd5b820183602082011115610f1c57600080fd5b803590602001918460018302840111600160201b83111715610f3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612a58945050505050565b6104f1600480360360a0811015610f9457600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612c6f565b6102d460048036036040811015610fd657600080fd5b506001600160a01b0381358116916020013516612d50565b610d76600480360360a081101561100457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561104357600080fd5b82018360208201111561105557600080fd5b803590602001918460018302840111600160201b8311171561107657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612d7e945050505050565b6104f1600480360360a08110156110cd57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561110c57600080fd5b82018360208201111561111e57600080fd5b803590602001918460018302840111600160201b8311171561113f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612df8945050505050565b606061118b8261276a565b6001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561120057600080fd5b8101908080516040519392919084600160201b82111561121f57600080fd5b90830190602082018581111561123457600080fd5b8251600160201b81118282018810171561124d57600080fd5b82525081516020918201929091019080838360005b8381101561127a578181015183820152602001611262565b50505050905090810190601f1680156112a75780820380516001836020036101000a031916815260200191505b5060405250505090505b919050565b6000611342826112c58461276a565b6001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d602081101561133b57600080fd5b5051611a6c565b90505b92915050565b6001600160e01b03191660009081526020819052604090205460ff1690565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b820191906000526020600020905b8154815290600101906020018083116113d657829003601f168201915b505050505090505b90565b6001546060906001600160a01b03161561154e57600154604080516303a24d0760e21b81526004810185905290516001600160a01b0390921691630e89341c91602480820192600092909190829003018186803b15801561145e57600080fd5b505afa158015611472573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561149b57600080fd5b8101908080516040519392919084600160201b8211156114ba57600080fd5b9083019060208201858111156114cf57600080fd5b8251600160201b8111828201881017156114e857600080fd5b82525081516020918201929091019080838360005b838110156115155781810151838201526020016114fd565b50505050905090810190601f1680156115425780820380516001836020036101000a031916815260200191505b50604052505050611345565b60008281526004602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505092915050565b60055460009062010000900460ff1661161257611608836118b9565b600a0a8202611342565b50919050565b6001600160a01b03841661165d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b611665613314565b6001600160a01b0316856001600160a01b0316148061169057506116908561168b613314565b612d50565b6116cb5760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b60005b83518110156117bd576116f38482815181106116e657fe5b602002602001015161276a565b6001600160a01b03166323b872dd878761173388868151811061171257fe5b602002602001015188878151811061172657fe5b60200260200101516115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b505050506040513d60208110156117b357600080fd5b50506001016116ce565b5060006117c8613314565b9050846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561184f578181015183820152602001611837565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561188e578181015183820152602001611876565b5050505090500194505050505060405180910390a46118b1818787878787613318565b505050505050565b60006118c48261276a565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d602081101561192657600080fd5b505192915050565b61193b8460008484612fb3565b5050600a80546001600160a01b0319166001600160a01b039290921691909117905550565b606080835167ffffffffffffffff8111801561197b57600080fd5b506040519080825280602002602001820160405280156119a5578160200160208202803683370190505b50905060005b8451811015611a03576119e48582815181106119c357fe5b60200260200101518583815181106119d757fe5b60200260200101516112b6565b8282815181106119f057fe5b60209081029190910101526001016119ab565b505092915050565b6060611a168261276a565b6001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b600a546001600160a01b031690565b6001546001600160a01b031690565b60055460009062010000900460ff1661161257611a88836118b9565b600a0a8281611a9357fe5b04611342565b60028054604080516020601f600019610100600187161502019094168590049384018190048102820181019092528281526060938493600093830182828015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b505060038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815296995091945092508401905082828015611bb45780601f10611b8957610100808354040283529160200191611bb4565b820191906000526020600020905b815481529060010190602001808311611b9757829003601f168201915b5050600154939550601294505050506001600160a01b031615801590611c00575060055460ff1680611bed5750600554610100900460ff165b80611c00575060055462010000900460ff165b15611f29576001546005546001600160a01b039091169060ff16611c245783611d53565b806001600160a01b031662ad800c866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611c6757600080fd5b505afa158015611c7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ca457600080fd5b8101908080516040519392919084600160201b821115611cc357600080fd5b908301906020820185811115611cd857600080fd5b8251600160201b811182820188101715611cf157600080fd5b82525081516020918201929091019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b506040525050505b600554909450610100900460ff16611d6b5782611e9b565b806001600160a01b0316634e41a1fb866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611daf57600080fd5b505afa158015611dc3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611dec57600080fd5b8101908080516040519392919084600160201b821115611e0b57600080fd5b908301906020820185811115611e2057600080fd5b8251600160201b811182820188101715611e3957600080fd5b82525081516020918201929091019080838360005b83811015611e66578181015183820152602001611e4e565b50505050905090810190601f168015611e935780820380516001836020036101000a031916815260200191505b506040525050505b60055490935062010000900460ff16611eb45781611f25565b806001600160a01b0316633f47e662866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611ef857600080fd5b505afa158015611f0c573d6000803e3d6000fd5b505050506040513d6020811015611f2257600080fd5b50515b9150505b9193909250565b600a5460009081906001600160a01b0316156120ea57600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9457600080fd5b505afa158015611fa8573d6000803e3d6000fd5b505050506040513d6020811015611fbe57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561200257600080fd5b505afa158015612016573d6000803e3d6000fd5b505050506040513d602081101561202c57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b15801561207657600080fd5b505afa15801561208a573d6000803e3d6000fd5b505050506040513d60208110156120a057600080fd5b50516120ea576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6120f484846135cc565b8092508193505050817ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f7703484604051808060200180602001838103835260008152602001602001838103825284818151815260200191508051906020019080838360005b8381101561216f578181015183820152602001612157565b50505050905090810190601f16801561219c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a29250929050565b600a546001600160a01b03161561236657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561221057600080fd5b505afa158015612224573d6000803e3d6000fd5b505050506040513d602081101561223a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561227e57600080fd5b505afa158015612292573d6000803e3d6000fd5b505050506040513d60208110156122a857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156122f257600080fd5b505afa158015612306573d6000803e3d6000fd5b505050506040513d602081101561231c57600080fd5b5051612366576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600082815260046020908152604091829020825183815281546002600019610100600184161502019091160493810184905285937ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f770349386929182918201906060830190869080156124185780601f106123ed57610100808354040283529160200191612418565b820191906000526020600020905b8154815290600101906020018083116123fb57829003601f168201915b5050838103825284518152845160209182019186019080838360005b8381101561244c578181015183820152602001612434565b50505050905090810190601f1680156124795780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2600082815260046020908152604090912082516124a7928401906141cd565b505050565b6124b58361276a565b6001600160a01b0316639dc29fac336124ce86866115ec565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561251457600080fd5b505af1158015612528573d6000803e3d6000fd5b50506001546001600160a01b03161591506124a7905057600154604051637921219560e11b815230600482018181523360248401819052604484018890526064840187905260a060848501908152865160a486015286516001600160a01b039096169563f242432a9592938a938a938a93909160c40190602085019080838360005b838110156125c25781810151838201526020016125aa565b50505050905090810190601f1680156125ef5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b50505050505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b6009546001600160a01b031690565b60006126a9613314565b9050826001600160a01b0316816001600160a01b031614156126fc5760405162461bcd60e51b81526004018080602001828103825260298152602001806144b86029913960400191505060405180910390fd5b6001600160a01b03818116600081815260086020908152604080832094881680845294825291829020805460ff1916871515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6000908152600660205260409020546001600160a01b031690565b6001546000906001600160a01b031633146127de576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b60005b84518110156128275761281d868683815181106127fa57fe5b602002602001015186848151811061280e57fe5b602002602001015160006136ca565b50506001016127e1565b5063bc197c8160e01b9695505050505050565b6000611345826128498461276a565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561131157600080fd5b600a546001600160a01b031615612a3657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156128e057600080fd5b505afa1580156128f4573d6000803e3d6000fd5b505050506040513d602081101561290a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561294e57600080fd5b505afa158015612962573d6000803e3d6000fd5b505050506040513d602081101561297857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156129c257600080fd5b505afa1580156129d6573d6000803e3d6000fd5b505050506040513d60208110156129ec57600080fd5b5051612a36576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8351811015612b0f57612a738482815181106116e657fe5b6001600160a01b0316639dc29fac33612aa5878581518110612a9157fe5b602002602001015187868151811061172657fe5b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612aeb57600080fd5b505af1158015612aff573d6000803e3d6000fd5b505060019092019150612a5b9050565b506001546001600160a01b0316156124a757600154604051631759616b60e11b81523060048201818152336024840181905260a060448501908152885160a486015288516001600160a01b0390961695632eb2c2d69592938a938a938a9390916064810191608482019160c401906020808a01910280838360005b83811015612ba2578181015183820152602001612b8a565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612be1578181015183820152602001612bc9565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612c1d578181015183820152602001612c05565b50505050905090810190601f168015612c4a5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561261257600080fd5b6000828152600660205260409020546001600160a01b03163314612cd1576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6000612cdd8383611a6c565b905080612cea5750612d49565b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628685604051808381526020018281526020019250505060405180910390a4505b5050505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6001546000906001600160a01b03163314612dd7576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b612de485858560006136ca565b5063f23a6e6160e01b979650505050505050565b6001600160a01b038416612e3d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b612e45613314565b6001600160a01b0316856001600160a01b03161480612e6b5750612e6b8561168b613314565b612ea65760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b6000612eb0613314565b9050612ebb8461276a565b6001600160a01b03166323b872dd8787612ed588886115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015612f2b57600080fd5b505af1158015612f3f573d6000803e3d6000fd5b505050506040513d6020811015612f5557600080fd5b5050604080518581526020810185905281516001600160a01b03808916938a821693918616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a46118b1818787878787613908565b6009546001600160a01b031615613008576040805162461bcd60e51b8152602060048201526014602482015273496e697420616c72656164792063616c6c65642160601b604482015290519081900360640190fd5b6001600160a01b03841661304d5760405162461bcd60e51b81526004018080602001828103825260288152602001806143686028913960400191505060405180910390fd5b600980546001600160a01b038087166001600160a01b03199283161790925560018054868416921691909117908190551615158061309f57508151602083012060008051602061439083398151915214155b6130da5760405162461bcd60e51b81526004018080602001828103825260308152602001806144416030913960400191505060405180910390fd5b6001546001600160a01b031615158061310757508051602082012060008051602061439083398151915214155b6131425760405162461bcd60e51b815260040180806020018281038252603281526020018061440f6032913960400191505060405180910390fd5b61315263f23a6e6160e01b613a79565b61316263bc197c8160e01b613a79565b6000613174631759616b60e11b613afd565b90506000613188636cdb3d1360e11b613afd565b6001549091506001600160a01b031615806131a05750815b806131a85750805b6131e35760405162461bcd60e51b81526004018080602001828103825260368152602001806143d96036913960400191505060405180910390fd5b6131f2627eeac760e11b613afd565b506132036313849cfd60e21b613afd565b5061321463a22cb46560e01b613afd565b5061322563e985e9c560e01b613afd565b50613236637921219560e11b613afd565b506132476303a24d0760e21b613afd565b5061325863bd85b03960e01b613afd565b50613268622b600360e21b613afd565b6005805460ff1916911515919091179055613289634e41a1fb60e01b613afd565b600580549115156101000261ff00199092169190911790556132b1631fa3f33160e11b613afd565b60058054911515620100000262ff0000199092169190911790556001546001600160a01b0316156132ed5760055462010000900460ff166132f0565b60005b60058054911515620100000262ff0000199092169190911790556118b18484613bb6565b3390565b61332a846001600160a01b0316613ffc565b156118b157836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156133b85781810151838201526020016133a0565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156133f75781810151838201526020016133df565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561343357818101518382015260200161341b565b50505050905090810190601f1680156134605780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561348557600080fd5b505af19250505080156134aa57506040513d60208110156134a557600080fd5b505160015b61357d576134b6614266565b806134c15750613546565b8060405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561350b5781810151838201526020016134f3565b50505050905090810190601f1680156135385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60405162461bcd60e51b815260040180806020018281038252603481526020018061430c6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b60015460009081906001600160a01b03161561362f576040805162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206d696e7420756e6578697374696e6720746f6b656e73000000604482015290519081900360640190fd5b82516020840120600080516020614390833981519152141561368e576040805162461bcd60e51b81526020600482015260136024820152725572692063616e6e6f7420626520656d70747960681b604482015290519081900360640190fd5b61369c3360008660016136ca565b600082815260046020908152604090912086519395509193506136c292908601906141cd565b509250929050565b600083815260066020526040812054819085906001600160a01b03168015806136f05750845b1561383b576136fe82614026565b861161373b5760405162461bcd60e51b81526004018080602001828103825260228152602001806144966022913960400191505060405180910390fd5b61374b613746612690565b6140e3565b9050841561376057806001600160a01b031691505b806001600160a01b031663b7b0422d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137a657600080fd5b505af11580156137ba573d6000803e3d6000fd5b505050600083815260066020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558084526007835292819020805460ff1916600117905580518681529182019290925281517ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010293509081900390910190a15b806001600160a01b03166340c10f1989613855858a61411f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561389b57600080fd5b505af11580156138af573d6000803e3d6000fd5b505060408051858152602081018a905281516001600160a01b038d1694506000935030927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a49097909650945050505050565b61391a846001600160a01b0316613ffc565b156118b157836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139a9578181015183820152602001613991565b50505050905090810190601f1680156139d65780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156139f957600080fd5b505af1925050508015613a1e57506040513d6020811015613a1957600080fd5b505160015b613a2a576134b6614266565b6001600160e01b0319811663f23a6e6160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b6001600160e01b03198082161415613ad8576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b6001546000906001600160a01b0316613b2157613b1982613a79565b5060016112b1565b600154604080516301ffc9a760e01b81526001600160e01b03198516600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b158015613b7657600080fd5b505afa925050508015613b9b57506040513d6020811015613b9657600080fd5b505160015b613ba4576112b1565b80915081156116125761161283613a79565b8151613bc99060029060208501906141cd565b508051613bdd9060039060208401906141cd565b506001546001600160a01b031615613e7657600154604080516306fdde0360e01b815290516001600160a01b039092169182916306fdde03916004808301926000929190829003018186803b158015613c3557600080fd5b505afa925050508015613d1957506040513d6000823e601f3d908101601f191682016040526020811015613c6857600080fd5b8101908080516040519392919084600160201b821115613c8757600080fd5b908301906020820185811115613c9c57600080fd5b8251600160201b811182820188101715613cb557600080fd5b82525081516020918201929091019080838360005b83811015613ce2578181015183820152602001613cca565b50505050905090810190601f168015613d0f5780820380516001836020036101000a031916815260200191505b5060405250505060015b613d2257613d38565b8051613d359060029060208401906141cd565b50505b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015613d7157600080fd5b505afa925050508015613e5557506040513d6000823e601f3d908101601f191682016040526020811015613da457600080fd5b8101908080516040519392919084600160201b821115613dc357600080fd5b908301906020820185811115613dd857600080fd5b8251600160201b811182820188101715613df157600080fd5b82525081516020918201929091019080838360005b83811015613e1e578181015183820152602001613e06565b50505050905090810190601f168015613e4b5780820380516001836020036101000a031916815260200191505b5060405250505060015b613e5e57613e74565b8051613e719060039060208401906141cd565b50505b505b60008051602061439083398151915260026040518082805460018160011615610100020316600290048015613ee25780601f10613ec0576101008083540402835291820191613ee2565b820191906000526020600020905b815481529060010190602001808311613ece575b505091505060405180910390201415613f36576040805162461bcd60e51b81526020600482015260116024820152704e616d65206973206d616e6461746f727960781b604482015290519081900360640190fd5b60008051602061439083398151915260036040518082805460018160011615610100020316600290048015613fa25780601f10613f80576101008083540402835291820191613fa2565b820191906000526020600020905b815481529060010190602001808311613f8e575b505091505060405180910390201415613ff8576040805162461bcd60e51b815260206004820152601360248201527253796d626f6c206973206d616e6461746f727960681b604482015290519081900360640190fd5b5050565b6000813f60008051602061439083398151915281811480159061401e57508115155b949350505050565b6001546000906001600160a01b03166140485750670de0b6b3a76400006112b1565b60055462010000900460ff16156140db5760015460408051631fa3f33160e11b81526004810185905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b1580156140a557600080fd5b505afa1580156140b9573d6000803e3d6000fd5b505050506040513d60208110156140cf57600080fd5b5051600a0a90506112b1565b506001919050565b60006901000000000000000000820268803b80938091923cf36258807360e81b01176000526020600080f09050803b801561411d57611612565bfe5b6001546000906001600160a01b031615801590614144575060055462010000900460ff165b156116125760015460408051631fa3f33160e11b81526004810186905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b15801561419557600080fd5b505afa1580156141a9573d6000803e3d6000fd5b505050506040513d60208110156141bf57600080fd5b5051600a0a82029050611345565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061420e57805160ff191683800117855561423b565b8280016001018555821561423b579182015b8281111561423b578251825591602001919060010190614220565b5061424792915061424b565b5090565b5b80821115614247576000815560010161424c565b60e01c90565b600060443d1015614276576113fb565b600481823e6308c379a061428a8251614260565b14614294576113fb565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156142c457505050506113fb565b828401925082519150808211156142de57505050506113fb565b503d830160208284010111156142f6575050506113fb565b601f01601f191681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e734d6f64656c2073686f756c6420626520612076616c696420657468657265756d2061646472657373c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644c6f6f6b73206c696b6520796f75277265206e6f74207772617070696e67206120636f7272656374204552433131353520546f6b656e4174206c65617374206120736f7572636520636f6e7472616374206f7220612073796d626f6c206d757374206265207365744174206c65617374206120736f7572636520636f6e7472616374206f722061206e616d65206d75737420626520736574455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373596f75206e65656420746f2070617373206d6f7265207468616e206120746f6b656e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66a26469706673582212206129495e80a4eb8f411641e2b3eb9acb50fae6eccbe2338faa1ce27e9994ada664736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ac4a31555059a286e899422c2eeb2b5b55b5a579000000000000000000000000faf23b66314e1bef6581ee76a78ac7434989e3a6000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001553757065722053616979612d6a696e20746f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000353534a0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : model (address): 0xAC4a31555059a286e899422c2eeB2b5B55b5a579
Arg [1] : doubleProxy (address): 0xFAF23B66314E1BEF6581Ee76a78AC7434989E3a6
Arg [2] : name (string): Super Saiya-jin token
Arg [3] : symbol (string): SSJ
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000ac4a31555059a286e899422c2eeb2b5b55b5a579
Arg [1] : 000000000000000000000000faf23b66314e1bef6581ee76a78ac7434989e3a6
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [5] : 53757065722053616979612d6a696e20746f6b656e0000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 53534a0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
53047:1777:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42096:185;;;;;;;;;;;;;;;;-1:-1:-1;42096:185:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43699:237;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43699:237:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29433:142;;;;;;;;;;;;;;;;-1:-1:-1;29433:142:0;-1:-1:-1;;;;;;29433:142:0;;:::i;:::-;;;;;;;;;;;;;;;;;;42289:100;;;:::i;43337:291::-;;;;;;;;;;;;;;;;-1:-1:-1;43337:291:0;;:::i;40821:241::-;;;;;;;;;;;;;;;;-1:-1:-1;40821:241:0;;;;;;;:::i;46082:985::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46082:985:0;;;;;;;;-1:-1:-1;46082:985:0;;-1:-1:-1;;;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46082:985:0;;;;;;;;-1:-1:-1;46082:985:0;;-1:-1:-1;;;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46082:985:0;;-1:-1:-1;46082:985:0;;-1:-1:-1;;;;;46082:985:0:i;:::-;;43002:187;;;;;;;;;;;;;;;;-1:-1:-1;43002:187:0;;:::i;53451:287::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53451:287:0;;;;;;;;-1:-1:-1;53451:287:0;;-1:-1:-1;;;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53451:287:0;;-1:-1:-1;53451:287:0;;-1:-1:-1;;;;;53451:287:0:i;44007:370::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44007:370:0;;;;;;;;-1:-1:-1;44007:370:0;;-1:-1:-1;;;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44007:370:0;;-1:-1:-1;44007:370:0;;-1:-1:-1;;;;;44007:370:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42543:189;;;;;;;;;;;;;;;;-1:-1:-1;42543:189:0;;:::i;54039:99::-;;;:::i;:::-;;;;-1:-1:-1;;;;;54039:99:0;;;;;;;;;;;;;;41157:98;;;:::i;40447:243::-;;;;;;;;;;;;;;;;-1:-1:-1;40447:243:0;;;;;;;:::i;39380:742::-;;;;;;;;;;;;;;;;-1:-1:-1;39380:742:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39380:742:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54272:347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54272:347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54272:347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54272:347:0;;-1:-1:-1;54272:347:0;;-1:-1:-1;;;;;54272:347:0:i;:::-;;;;;;;-1:-1:-1;;;;;54272:347:0;;;;;;;;;;;;;;;;54627:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54627:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54627:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54627:194:0;;-1:-1:-1;54627:194:0;;-1:-1:-1;;;;;54627:194:0:i;36655:457::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36655:457:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36655:457:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36655:457:0;;-1:-1:-1;36655:457:0;;-1:-1:-1;;;;;36655:457:0:i;42740:104::-;;;:::i;40215:99::-;;;:::i;44448:402::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44448:402:0;;;;;;;;;;:::i;41363:200::-;;;;;;;;;;;;;;;;-1:-1:-1;41363:200:0;;:::i;38681:473::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38681:473:0;;;;;;;;-1:-1:-1;38681:473:0;;-1:-1:-1;;;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38681:473:0;;;;;;;;-1:-1:-1;38681:473:0;;-1:-1:-1;;;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38681:473:0;;-1:-1:-1;38681:473:0;;-1:-1:-1;;;;;38681:473:0:i;:::-;;;;-1:-1:-1;;;;;;38681:473:0;;;;;;;;;;;;;;41729:217;;;;;;;;;;;;;;;;-1:-1:-1;41729:217:0;;:::i;54146:118::-;;;;;;;;;;;;;;;;-1:-1:-1;54146:118:0;-1:-1:-1;;;;;54146:118:0;;:::i;37223:623::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37223:623:0;;;;;;;;-1:-1:-1;37223:623:0;;-1:-1:-1;;;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37223:623:0;;;;;;;;-1:-1:-1;37223:623:0;;-1:-1:-1;;;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37223:623:0;;-1:-1:-1;37223:623:0;;-1:-1:-1;;;;;37223:623:0:i;47075:407::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47075:407:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44921:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44921:218:0;;;;;;;;;;:::i;38158:362::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38158:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38158:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38158:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38158:362:0;;-1:-1:-1;38158:362:0;;-1:-1:-1;;;;;38158:362:0:i;45210:801::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45210:801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;45210:801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;45210:801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45210:801:0;;-1:-1:-1;45210:801:0;;-1:-1:-1;;;;;45210:801:0:i;42096:185::-;42211:13;42249:17;42257:8;42249:7;:17::i;:::-;-1:-1:-1;;;;;42249:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42249:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42249:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42249:24:0;;;;;;-1:-1:-1;42249:24:0;;;;;;;;;;-1:-1:-1;42249:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42242:31;;42096:185;;;;:::o;43699:237::-;43836:7;43868:60;43881:8;43891:17;43899:8;43891:7;:17::i;:::-;-1:-1:-1;;;;;43891:27:0;;43919:7;43891:36;;;;;;;;;;;;;-1:-1:-1;;;;;43891:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43891:36:0;43868:12;:60::i;:::-;43861:67;;43699:237;;;;;:::o;29433:142::-;-1:-1:-1;;;;;;29534:33:0;29510:4;29534:33;;;;;;;;;;;;;;29433:142::o;42289:100::-;42376:5;42369:12;;;;;;;-1:-1:-1;;42369:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42343:13;;42369:12;;42376:5;;42369:12;;42376:5;42369:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42289:100;;:::o;43337:291::-;43502:7;;43451:13;;-1:-1:-1;;;;;43502:7:0;:21;:118;;43598:7;;43584:36;;;-1:-1:-1;;;43584:36:0;;;;;;;;;;-1:-1:-1;;;;;43598:7:0;;;;43584:26;;:36;;;;;43598:7;;43584:36;;;;;;;;43598:7;43584:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43584:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43584:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43584:36:0;;;;;;-1:-1:-1;43584:36:0;;;;;;;;;;-1:-1:-1;43584:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43502:118;;;43543:21;;;;:11;:21;;;;;;;;;43502:118;;;;;;-1:-1:-1;;43502:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43543:21;;43502:118;;43543:21;43502:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43482:138;43337:291;-1:-1:-1;;43337:291:0:o;40821:241::-;40990:17;;40958:7;;40990:17;;;;;:64;;41034:18;41043:8;41034;:18::i;:::-;41030:2;:22;41020:6;:33;40990:64;;;-1:-1:-1;41010:6:0;40821:241;-1:-1:-1;40821:241:0:o;46082:985::-;-1:-1:-1;;;;;46307:16:0;;46299:66;;;;-1:-1:-1;;;46299:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46406:12;:10;:12::i;:::-;-1:-1:-1;;;;;46398:20:0;:4;-1:-1:-1;;;;;46398:20:0;;:60;;;;46422:36;46439:4;46445:12;:10;:12::i;:::-;46422:16;:36::i;:::-;46376:151;;;;-1:-1:-1;;;46376:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46545:9;46540:222;46564:9;:16;46560:1;:20;46540:222;;;46602:21;46610:9;46620:1;46610:12;;;;;;;;;;;;;;46602:7;:21::i;:::-;-1:-1:-1;;;;;46602:34:0;;46655:4;46678:2;46699:36;46710:9;46720:1;46710:12;;;;;;;;;;;;;;46724:7;46732:1;46724:10;;;;;;;;;;;;;;46699;:36::i;:::-;46602:148;;;;;;;;;;;;;-1:-1:-1;;;;;46602:148:0;;;;;;-1:-1:-1;;;;;46602:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46582:3:0;;46540:222;;;;46774:16;46793:12;:10;:12::i;:::-;46774:31;;46853:2;-1:-1:-1;;;;;46823:53:0;46847:4;-1:-1:-1;;;;;46823:53:0;46837:8;-1:-1:-1;;;;;46823:53:0;;46857:9;46868:7;46823:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46889:170;46939:8;46962:4;46981:2;46998:9;47022:7;47044:4;46889:35;:170::i;:::-;46082:985;;;;;;:::o;43002:187::-;43121:7;43153:17;43161:8;43153:7;:17::i;:::-;-1:-1:-1;;;;;43153:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43153:28:0;;43002:187;-1:-1:-1;;43002:187:0:o;53451:287::-;53650:43;53661:5;53676:1;53680:4;53686:6;53650:10;:43::i;:::-;-1:-1:-1;;53704:12:0;:26;;-1:-1:-1;;;;;;53704:26:0;-1:-1:-1;;;;;53704:26:0;;;;;;;;;;-1:-1:-1;53451:287:0:o;44007:370::-;44149:16;44178:25;44220:8;:15;44206:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44206:30:0;;44178:58;;44252:9;44247:123;44271:8;:15;44267:1;:19;44247:123;;;44322:36;44332:8;44341:1;44332:11;;;;;;;;;;;;;;44345:9;44355:1;44345:12;;;;;;;;;;;;;;44322:9;:36::i;:::-;44308:8;44317:1;44308:11;;;;;;;;;;;;;;;;;:50;44288:3;;44247:123;;;;44007:370;;;;;:::o;42543:189::-;42660:13;42698:17;42706:8;42698:7;:17::i;:::-;-1:-1:-1;;;;;42698:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54039:99;54118:12;;-1:-1:-1;;;;;54118:12:0;54039:99;:::o;41157:98::-;41240:7;;-1:-1:-1;;;;;41240:7:0;41157:98;:::o;40447:243::-;40618:17;;40586:7;;40618:17;;;;;:64;;40662:18;40671:8;40662;:18::i;:::-;40658:2;:22;40648:6;:33;;;;;;40618:64;;39380:742;39635:5;39628:12;;;;;;;-1:-1:-1;;39628:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39516:18;;;;39584:16;;39628:12;;39635:5;39628:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39660:7:0;39651:16;;;;;;;;-1:-1:-1;;39651:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39628:12;;-1:-1:-1;39660:7:0;;-1:-1:-1;39651:16:0;-1:-1:-1;39651:16:0;;;-1:-1:-1;39660:7:0;39651:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39720:7:0;;39651:16;;-1:-1:-1;39689:2:0;;-1:-1:-1;;;;;;;;;39720:7:0;:21;;;;:93;;-1:-1:-1;39759:13:0;;;;;:32;;-1:-1:-1;39776:15:0;;;;;;;39759:32;:53;;;-1:-1:-1;39795:17:0;;;;;;;39759:53;39702:413;;;39876:7;;39906:13;;-1:-1:-1;;;;;39876:7:0;;;;39906:13;;:43;;39945:4;39906:43;;;39922:5;-1:-1:-1;;;;;39922:10:0;;39933:8;39922:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39922:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39922:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39922:20:0;;;;;;-1:-1:-1;39922:20:0;;;;;;;;;;-1:-1:-1;39922:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39906:43;39973:15;;39899:50;;-1:-1:-1;39973:15:0;;;;;:49;;40016:6;39973:49;;;39991:5;-1:-1:-1;;;;;39991:12:0;;40004:8;39991:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39991:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39991:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39991:22:0;;;;;;-1:-1:-1;39991:22:0;;;;;;;;;;-1:-1:-1;39991:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39973:49;40048:17;;39964:58;;-1:-1:-1;40048:17:0;;;;;:55;;40095:8;40048:55;;;40068:5;-1:-1:-1;;;;;40068:14:0;;40083:8;40068:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40068:24:0;40048:55;40037:66;;39702:413;;39380:742;;;;;:::o;54272:347::-;53775:12;;54448:16;;;;-1:-1:-1;;;;;53775:12:0;:26;53772:240;;53876:12;;;;;;;;;-1:-1:-1;;;;;53876:12:0;-1:-1:-1;;;;;53863:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53863:34:0;53853:83;;;-1:-1:-1;;;53853:83:0;;;;-1:-1:-1;;;;;53853:81:0;;;;;;:83;;;;;53863:34;;53853:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53853:83:0;53826:149;;;-1:-1:-1;;;53826:149:0;;53964:10;53826:149;;;;;;-1:-1:-1;;;;;53826:137:0;;;;;;:149;;;;;53853:83;;53826:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53826:149:0;53818:182;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;;;;54531:29:::1;54542:6;54550:9;54531:10;:29::i;:::-;54504:56;;;;;;;;54587:8;54576:35;54601:9;54576:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54272:347:::0;;;;;:::o;54627:194::-;53775:12;;-1:-1:-1;;;;;53775:12:0;:26;53772:240;;53876:12;;;;;;;;;-1:-1:-1;;;;;53876:12:0;-1:-1:-1;;;;;53863:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53863:34:0;53853:83;;;-1:-1:-1;;;53853:83:0;;;;-1:-1:-1;;;;;53853:81:0;;;;;;:83;;;;;53863:34;;53853:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53853:83:0;53826:149;;;-1:-1:-1;;;53826:149:0;;53964:10;53826:149;;;;;;-1:-1:-1;;;;;53826:137:0;;;;;;:149;;;;;53853:83;;53826:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53826:149:0;53818:182;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;;;;54742:21:::1;::::0;;;:11:::1;:21;::::0;;;;;;;;54721:51;;;;;;;::::1;-1:-1:-1::0;;54721:51:0::1;;::::0;::::1;;;::::0;;;::::1;;::::0;;;;;;54732:8;;54721:51:::1;::::0;54765:6;;54721:51;;;;::::1;::::0;;;;;54742:21;;54721:51;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;54721:51:0;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54783:21;::::0;;;:11:::1;:21;::::0;;;;;;;:30;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;54627:194:::0;;:::o;36655:457::-;36791:17;36799:8;36791:7;:17::i;:::-;-1:-1:-1;;;;;36791:22:0;;36814:10;36826:28;36837:8;36847:6;36826:10;:28::i;:::-;36791:64;;;;;;;;;;;;;-1:-1:-1;;;;;36791:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36870:7:0;;-1:-1:-1;;;;;36870:7:0;:21;;-1:-1:-1;36866:239:0;;-1:-1:-1;36866:239:0;36917:7;;36908:185;;-1:-1:-1;;;36908:185:0;;36969:4;36908:185;;;;;;36993:10;36908:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36917:7:0;;;;36908:34;;36993:10;;37022:8;;37049:6;;37074:4;;36908:185;;;;;;;;;;;;36917:7;36908:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36655:457;;;:::o;42740:104::-;42829:7;42822:14;;;;;;;;-1:-1:-1;;42822:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42796:13;;42822:14;;42829:7;;42822:14;;42829:7;42822:14;;;;;;;;;;;;;;;;;;;;;;;;40215:99;40300:6;;-1:-1:-1;;;;;40300:6:0;40215:99;:::o;44448:402::-;44575:14;44592:12;:10;:12::i;:::-;44575:29;;44647:8;-1:-1:-1;;;;;44637:18:0;:6;-1:-1:-1;;;;;44637:18:0;;;44615:109;;;;-1:-1:-1;;;44615:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44737:26:0;;;;;;;:18;:26;;;;;;;;:36;;;;;;;;;;;;;:47;;-1:-1:-1;;44737:47:0;;;;;;;;;;44800:42;;;;;;;;;;;;;;;;;44448:402;;;:::o;41363:200::-;41481:16;41539:15;;;:5;:15;;;;;;-1:-1:-1;;;;;41539:15:0;;41363:200::o;38681:473::-;38931:7;;38890:6;;-1:-1:-1;;;;;38931:7:0;38917:10;:21;38909:54;;;;;-1:-1:-1;;;38909:54:0;;;;;;;;;;;;-1:-1:-1;;;38909:54:0;;;;;;;;;;;;;;;38979:9;38974:119;38998:9;:16;38994:1;:20;38974:119;;;39036:45;39042:5;39049:9;39059:1;39049:12;;;;;;;;;;;;;;39063:7;39071:1;39063:10;;;;;;;;;;;;;;39075:5;39036;:45::i;:::-;-1:-1:-1;;39016:3:0;;38974:119;;;-1:-1:-1;;;;39110:36:0;38681:473;-1:-1:-1;;;;;;38681:473:0:o;41729:217::-;41851:7;41883:55;41896:8;41906:17;41914:8;41906:7;:17::i;:::-;-1:-1:-1;;;;;41906:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54146:118;53775:12;;-1:-1:-1;;;;;53775:12:0;:26;53772:240;;53876:12;;;;;;;;;-1:-1:-1;;;;;53876:12:0;-1:-1:-1;;;;;53863:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53863:34:0;53853:83;;;-1:-1:-1;;;53853:83:0;;;;-1:-1:-1;;;;;53853:81:0;;;;;;:83;;;;;53863:34;;53853:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53853:83:0;53826:149;;;-1:-1:-1;;;53826:149:0;;53964:10;53826:149;;;;;;-1:-1:-1;;;;;53826:137:0;;;;;;:149;;;;;53853:83;;53826:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53826:149:0;53818:182;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;;;;54227:12:::1;:29:::0;;-1:-1:-1;;;;;;54227:29:0::1;-1:-1:-1::0;;;;;54227:29:0;;;::::1;::::0;;;::::1;::::0;;54146:118::o;37223:623::-;37389:9;37384:199;37408:9;:16;37404:1;:20;37384:199;;;37446:21;37454:9;37464:1;37454:12;;;;;;;37446:21;-1:-1:-1;;;;;37446:26:0;;37491:10;37520:36;37531:9;37541:1;37531:12;;;;;;;;;;;;;;37545:7;37553:1;37545:10;;;;;;;37520:36;37446:125;;;;;;;;;;;;;-1:-1:-1;;;;;37446:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37426:3:0;;;;;-1:-1:-1;37384:199:0;;-1:-1:-1;37384:199:0;;-1:-1:-1;37597:7:0;;-1:-1:-1;;;;;37597:7:0;:21;37593:246;;37644:7;;37635:192;;-1:-1:-1;;;37635:192:0;;37701:4;37635:192;;;;;;37725:10;37635:192;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37644:7:0;;;;37635:39;;37725:10;;37754:9;;37782:7;;37808:4;;37635:192;;;;;;;;;;;;;;;;;;;;;;37644:7;37635:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47075:407;47219:15;;;;:5;:15;;;;;;-1:-1:-1;;;;;47219:15:0;47238:10;47219:29;47211:62;;;;;-1:-1:-1;;;47211:62:0;;;;;;;;;;;;-1:-1:-1;;;47211:62:0;;;;;;;;;;;;;;;47284:20;47307:30;47320:8;47330:6;47307:12;:30::i;:::-;47284:53;-1:-1:-1;47351:17:0;47348:55;;47385:7;;;47348:55;47447:2;-1:-1:-1;;;;;47418:56:0;47441:4;-1:-1:-1;;;;;47418:56:0;47433:6;-1:-1:-1;;;;;47418:56:0;;47451:8;47461:12;47418:56;;;;;;;;;;;;;;;;;;;;;;;;47075:407;;;;;;;:::o;44921:218::-;-1:-1:-1;;;;;45094:27:0;;;45065:4;45094:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;44921:218::o;38158:362::-;38383:7;;38342:6;;-1:-1:-1;;;;;38383:7:0;38369:10;:21;38361:54;;;;;-1:-1:-1;;;38361:54:0;;;;;;;;;;;;-1:-1:-1;;;38361:54:0;;;;;;;;;;;;;;;38426:37;38432:5;38439:8;38449:6;38457:5;38426;:37::i;:::-;-1:-1:-1;;;;38481:31:0;38158:362;-1:-1:-1;;;;;;;38158:362:0:o;45210:801::-;-1:-1:-1;;;;;45410:16:0;;45402:66;;;;-1:-1:-1;;;45402:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45509:12;:10;:12::i;:::-;-1:-1:-1;;;;;45501:20:0;:4;-1:-1:-1;;;;;45501:20:0;;:60;;;;45525:36;45542:4;45548:12;:10;:12::i;45525:36::-;45479:151;;;;-1:-1:-1;;;45479:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45643:16;45662:12;:10;:12::i;:::-;45643:31;;45687:17;45695:8;45687:7;:17::i;:::-;-1:-1:-1;;;;;45687:30:0;;45718:4;45724:2;45728:28;45739:8;45749:6;45728:10;:28::i;:::-;45687:70;;;;;;;;;;;;;-1:-1:-1;;;;;45687:70:0;;;;;;-1:-1:-1;;;;;45687:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45775:52:0;;;;;;45687:70;45775:52;;;;;;;-1:-1:-1;;;;;45775:52:0;;;;;;;;;;;;;;;;;;;;;;45840:163;45885:8;45908:4;45927:2;45944:8;45967:6;45988:4;45840:30;:163::i;33429:2181::-;33616:6;;-1:-1:-1;;;;;33616:6:0;:20;33594:90;;;;;-1:-1:-1;;;33594:90:0;;;;;;;;;;;;-1:-1:-1;;;33594:90:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33719:19:0;;33697:109;;;;-1:-1:-1;;;33697:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33817:6;:14;;-1:-1:-1;;;;;33817:14:0;;;-1:-1:-1;;;;;;33817:14:0;;;;;;;;33844:16;;;;;;;;;;;;;;;33895:7;:21;;;:64;;-1:-1:-1;33920:22:0;;;;;;-1:-1:-1;;;;;;;;;;;33920:39:0;;33895:64;33873:162;;;;-1:-1:-1;;;33873:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34068:7;;-1:-1:-1;;;;;34068:7:0;:21;;;:66;;-1:-1:-1;34093:24:0;;;;;;-1:-1:-1;;;;;;;;;;;34093:41:0;;34068:66;34046:166;;;;-1:-1:-1;;;34046:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34225:51;-1:-1:-1;;;34225:18:0;:51::i;:::-;34287:56;-1:-1:-1;;;34287:18:0;:56::i;:::-;34354:26;34383:84;-1:-1:-1;;;34383:23:0;:84::i;:::-;34354:113;-1:-1:-1;34478:24:0;34505:75;-1:-1:-1;;;34505:23:0;:75::i;:::-;34613:7;;34478:102;;-1:-1:-1;;;;;;34613:7:0;:21;;:63;;;34655:21;34613:63;:103;;;;34697:19;34613:103;34591:207;;;;-1:-1:-1;;;34591:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34809:48;-1:-1:-1;;;34809:23:0;:48::i;:::-;-1:-1:-1;34868:53:0;-1:-1:-1;;;34868:23:0;:53::i;:::-;-1:-1:-1;34932:56:0;-1:-1:-1;;;34932:23:0;:56::i;:::-;-1:-1:-1;34999:55:0;-1:-1:-1;;;34999:23:0;:55::i;:::-;-1:-1:-1;35065:55:0;-1:-1:-1;;;35065:23:0;:55::i;:::-;-1:-1:-1;35131:42:0;-1:-1:-1;;;35131:23:0;:42::i;:::-;-1:-1:-1;35184:50:0;-1:-1:-1;;;35184:23:0;:50::i;:::-;-1:-1:-1;35261:35:0;-1:-1:-1;;;35261:23:0;:35::i;:::-;35245:13;:51;;-1:-1:-1;;35245:51:0;;;;;;;;;;35341:35;-1:-1:-1;;;35341:23:0;:35::i;:::-;35323:15;:53;;;;;;;-1:-1:-1;;35323:53:0;;;;;;;;;35425:47;-1:-1:-1;;;35425:23:0;:47::i;:::-;35405:17;:67;;;;;;;-1:-1:-1;;35405:67:0;;;;;;;;;-1:-1:-1;35503:7:0;-1:-1:-1;;;;;35503:7:0;:21;:49;;35535:17;;;;;;;35503:49;;;35527:5;35503:49;35483:17;:69;;;;;;;-1:-1:-1;;35483:69:0;;;;;;;;;35563:39;35589:4;35595:6;35563:25;:39::i;16370:106::-;16458:10;16370:106;:::o;48449:1009::-;48698:15;:2;-1:-1:-1;;;;;48698:13:0;;:15::i;:::-;48694:757;;;48768:2;-1:-1:-1;;;;;48751:43:0;;48817:8;48848:4;48875:3;48901:7;48931:4;48751:203;;;;;;;;;;;;;-1:-1:-1;;;;;48751:203:0;;;;;;-1:-1:-1;;;;;48751:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48751:203:0;;;48730:710;;;;:::i;:::-;;;;;;;;49313:6;49306:14;;-1:-1:-1;;;49306:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48730:710;49362:62;;-1:-1:-1;;;49362:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48730:710;-1:-1:-1;;;;;;49039:85:0;;-1:-1:-1;;;49039:85:0;49013:224;;49167:50;;-1:-1:-1;;;49167:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35982:491;36170:7;;36106:16;;;;-1:-1:-1;;;;;36170:7:0;:21;36162:63;;;;;-1:-1:-1;;;36162:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36258:27;;;;;;-1:-1:-1;;;;;;;;;;;36258:44:0;;36236:113;;;;;-1:-1:-1;;;36236:113:0;;;;;;;;;;;;-1:-1:-1;;;36236:113:0;;;;;;;;;;;;;;;36387:34;36393:10;36405:1;36408:6;36416:4;36387:5;:34::i;:::-;36432:21;;;;:11;:21;;;;;;;;:33;;36360:61;;-1:-1:-1;36360:61:0;;-1:-1:-1;36432:33:0;;;;;;;:::i;:::-;;35982:491;;;;;:::o;50426:1029::-;50584:7;50698:15;;;:5;:15;;;;;;50584:7;;50632:11;;-1:-1:-1;;;;;50698:15:0;50729:29;;;:49;;;50762:16;50729:49;50725:532;;;50830:24;50845:8;50830:14;:24::i;:::-;50821:6;:33;50795:129;;;;-1:-1:-1;;;50795:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50966:18;50973:10;:8;:10::i;:::-;50966:6;:18::i;:::-;50939:46;;51003:16;51000:92;;;51067:7;-1:-1:-1;;;;;51051:25:0;51040:36;;51000:92;51106:7;-1:-1:-1;;;;;51106:12:0;;51119:8;51106:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;51143:43:0;51151:15;;;:5;:15;;;;;;;;:34;;-1:-1:-1;;;;;;51151:34:0;-1:-1:-1;;;;;51151:34:0;;;;;;;;51143:43;;;:7;:43;;;;;;:50;;-1:-1:-1;;51143:50:0;-1:-1:-1;51143:50:0;;;51213:32;;;;;;;;;;;;;;;;-1:-1:-1;51213:32:0;;;;;;;;;50725:532;51267:7;-1:-1:-1;;;;;51267:12:0;;51280:4;51286:33;51302:8;51312:6;51286:15;:33::i;:::-;51267:53;;;;;;;;;;;;;-1:-1:-1;;;;;51267:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51336:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;51336:65:0;;;-1:-1:-1;51374:1:0;;-1:-1:-1;51359:4:0;;51336:65;;;;;;;;51420:8;;;;-1:-1:-1;50426:1029:0;-1:-1:-1;;;;;50426:1029:0:o;47490:951::-;47714:15;:2;-1:-1:-1;;;;;47714:13:0;;:15::i;:::-;47710:724;;;47784:2;-1:-1:-1;;;;;47767:38:0;;47828:8;47859:4;47886:2;47911:6;47940:4;47767:196;;;;;;;;;;;;;-1:-1:-1;;;;;47767:196:0;;;;;;-1:-1:-1;;;;;47767:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47767:196:0;;;47746:677;;;;:::i;:::-;-1:-1:-1;;;;;;48048:59:0;;-1:-1:-1;;;48048:59:0;48022:198;;48150:50;;-1:-1:-1;;;48150:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29982:201;-1:-1:-1;;;;;;30066:25:0;;;;;30058:66;;;;;-1:-1:-1;;;30058:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30135:33:0;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;30135:40:0;30171:4;30135:40;;;29982:201::o;49466:444::-;49604:7;;49569:13;;-1:-1:-1;;;;;49604:7:0;49600:108;;49642:28;49661:8;49642:18;:28::i;:::-;-1:-1:-1;49692:4:0;49685:11;;49600:108;49729:7;;49722:43;;;-1:-1:-1;;;49722:43:0;;-1:-1:-1;;;;;;49722:43:0;;;;;;;;-1:-1:-1;;;;;49729:7:0;;;;49722:33;;:43;;;;;;;;;;;;;;;49729:7;49722:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49722:43:0;;;49718:185;;;;;49815:3;49804:14;;;49800:83;;;49839:28;49858:8;49839:18;:28::i;52142:727::-;52282:17;;;;:5;;:17;;;;;:::i;:::-;-1:-1:-1;52310:21:0;;;;:7;;:21;;;;;:::i;:::-;-1:-1:-1;52346:7:0;;-1:-1:-1;;;;;52346:7:0;:21;52342:317;;52417:7;;52444:11;;;-1:-1:-1;;;52444:11:0;;;;-1:-1:-1;;;;;52417:7:0;;;;;;52444:9;;:11;;;;;52384:17;;52444:11;;;;;;;52417:7;52444:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52444:11:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52444:11:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52444:11:0;;;;;;-1:-1:-1;52444:11:0;;;;;;;;;;-1:-1:-1;52444:11:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52440:95;;;;;52501:9;;;;:5;;:9;;;;;:::i;:::-;;52456:70;52440:95;52553:4;-1:-1:-1;;;;;52553:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52553:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52553:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52553:13:0;;;;;;-1:-1:-1;52553:13:0;;;;;;;;;;-1:-1:-1;52553:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52549:99;;;;;52612:11;;;;:7;;:11;;;;;:::i;:::-;;52567:72;52549:99;52342:317;;-1:-1:-1;;;;;;;;;;;52693:5:0;52677:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;52669:70;;;;;-1:-1:-1;;;52669:70:0;;;;;;;;;;;;-1:-1:-1;;;52669:70:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;52788:7:0;52772:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;52750:111;;;;;-1:-1:-1;;;52750:111:0;;;;;;;;;;;;-1:-1:-1;;;52750:111:0;;;;;;;;;;;;;;;52142:727;;:::o;22937:619::-;22997:4;23465:20;;-1:-1:-1;;;;;;;;;;;23505:23:0;;;;;;:42;;-1:-1:-1;23532:15:0;;;23505:42;23497:51;22937:619;-1:-1:-1;;;;22937:619:0:o;51463:343::-;51601:7;;51572;;-1:-1:-1;;;;;51601:7:0;51597:69;;-1:-1:-1;51647:6:0;51639:15;;51597:69;51680:17;;;;;;;51676:104;;;51740:7;;51726:41;;;-1:-1:-1;;;51726:41:0;;;;;;;;;;-1:-1:-1;;;;;51740:7:0;;;;51726:31;;:41;;;;;;;;;;;;;;;51740:7;51726:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51726:41:0;51722:2;:45;;-1:-1:-1;51714:54:0;;51676:104;-1:-1:-1;51797:1:0;51463:343;;;:::o;49918:500::-;49970:12;50192:21;50182:8;50178:36;-1:-1:-1;;;;;50064:169:0;50044:1;50019:229;50283:2;50280:1;50277;50270:16;50262:24;-1:-1:-1;50307:17:0;;50342:58;;;;50300:100;;50342:58;50372:9;51814:320;51969:7;;51940;;-1:-1:-1;;;;;51969:7:0;:21;;;;:42;;-1:-1:-1;51994:17:0;;;;;;;51969:42;51965:138;;;52063:7;;52049:41;;;-1:-1:-1;;;52049:41:0;;;;;;;;;;-1:-1:-1;;;;;52063:7:0;;;;52049:31;;:41;;;;;;;;;;;;;;;52063:7;52049:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52049:41:0;52045:2;:45;52035:56;;;-1:-1:-1;52028:63:0;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;110:106;195:3;191:15;;163:53::o;224:739::-;;297:4;279:16;276:26;273:2;;;305:5;;273:2;339:1;-1:-1;;318:23;414:10;357:34;-1:-1;382:8;357:34;:::i;:::-;406:19;396:2;;429:5;;396:2;460;454:9;496:16;-1:-1;;492:24;339:1;454:9;468:49;543:4;537:11;624:16;576:18;624:16;617:4;609:6;605:17;602:39;576:18;568:6;565:30;556:91;553:2;;;655:5;;;;;;553:2;693:6;687:4;683:17;672:28;;725:3;719:10;705:24;;576:18;740:6;737:30;734:2;;;770:5;;;;;;734:2;;847:16;841:4;837:27;807:4;814:6;802:3;794:27;;829:36;826:2;;;868:5;;;;;826:2;89:7;73:14;-1:-1;;69:28;892:50;;807:4;892:50;460:2;881:62;900:3;-1:-1;;267:696;:::o
Swarm Source
ipfs://6129495e80a4eb8f411641e2b3eb9acb50fae6eccbe2338faa1ce27e9994ada6
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.