Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Machina
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-18 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; // Import Solidity Modules // Lightweight & Readable Batch Minting ERC721 by 0xInuarashi // Library: CypherMate // Inspirations: ERC721G, ERC721A /** @dev this contract uses batch minting logic which modifies _mint to take AMOUNT argument instead of TOKENID argument */ abstract contract ERC721TokenReceiver { function onERC721Received(address, address, uint256, bytes calldata) external virtual returns (bytes4) { return ERC721TokenReceiver.onERC721Received.selector; } } abstract contract ERC721B { ///// Events ///// event Transfer(address indexed from_, address indexed to_, uint256 indexed tokenId_); event Approval(address indexed owner_, address indexed spender_, uint256 indexed id_); event ApprovalForAll(address indexed owner_, address indexed operator_, bool approved_); ///// Token Data ///// string public name; string public symbol; uint256 public nextTokenId; uint256 public totalBurned; uint256 public constant maxBatchSize = 20; // default: 20 /** @dev change or override this to modify the starting token Id */ function startTokenId() public pure virtual returns (uint256) { return 0; } /** @dev totalSupply performs arithmetics and then returns */ function totalSupply() public view virtual returns (uint256) { return nextTokenId - totalBurned - startTokenId(); } ///// Constructor ///// constructor(string memory name_, string memory symbol_) { name = name_; symbol = symbol_; nextTokenId = startTokenId(); } ///// Token Storage ///// struct TokenData { address owner; uint40 lastTransfer; bool burned; /** @dev burned stores the burn state of token to revert on query */ bool nextInitialized; /** @dev helps saves 1 SLOAD on bookmark N+1 lookup */ /** @dev 6 free bytes */ } struct BalanceData { uint32 balance; uint32 mintedAmount; /** @dev 24 free bytes */ } /** @dev these mappings replace ownerOf and balanceOf with structs */ mapping(uint256 => TokenData) public _tokenData; mapping(address => BalanceData) public _balanceData; ///// Token Approvals ///// mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; ///// ERC721B Batch Logic ///// /** @dev _getTokenDataOf returns the TokenData struct of the tokenId_ by either returning the initialized TokenData or performing a lookup-trace to the bookmarked location */ function _getTokenDataOf(uint256 tokenId_) public view virtual returns (TokenData memory) { // Set the starting lookupId to save on gas on operations uint256 _lookupId = tokenId_; // The tokenId must be above the startTokenId only require(_lookupId >= startTokenId(), "_getTokenDataOf _lookupId < startTokenId"); // Load the TokenData into memory for subsequent operations TokenData memory _TokenData = _tokenData[_lookupId]; // If the TokenData is initialized and not burned, return it to end the flow if (_TokenData.owner != address(0) && !_TokenData.burned) return _TokenData; // If that's not the case, check if the token is burned. If so, revert require(!_TokenData.burned, "_getTokenDataOf burned token!"); // If it's not initialized, check if it's above nextTokenId require(_lookupId < nextTokenId, "_getTokenDataOf _lookupId > _nextTokenId"); // If it's not initialized and in-bounds, perform a lookup-trace /** @dev this part can be optimized */ /** @dev we don't need to check burn status here because _burn logic does automatic bookmarking making such circumstance impossible */ unchecked { while(_tokenData[--_lookupId].owner == address(0)) {} } return _tokenData[_lookupId]; } /** @dev returns the balance in the stored BalanceData struct of address */ function balanceOf(address owner_) public virtual view returns (uint256) { require(owner_ != address(0), "balanceOf to 0x0"); return _balanceData[owner_].balance; } /** @dev _getTokenDataOf reverts on burned tokens and out-of-bounds tokens thus it will always return non-null addresses only */ function ownerOf(uint256 tokenId_) public view returns (address) { return _getTokenDataOf(tokenId_).owner; } ///// ERC721 Functions ///// /** @dev _mint and _burn does not have totalMinted manipulations */ function _mintInternal(address to_, uint256 amount_) internal virtual { unchecked { // We cannot mint to 0x0 require(to_ != address(0), "_mint to 0x0"); // We store the _startId from _nextTokenId to use for subsequent operations uint256 _startId = nextTokenId; uint256 _endId = _startId + amount_; // Store the initial TokenData bookmark at _startId _tokenData[_startId].owner = to_; _tokenData[_startId].lastTransfer = uint40(block.timestamp); // Add the balance and mint data to the minter _balanceData[to_].balance += uint32(amount_); _balanceData[to_].mintedAmount += uint32(amount_); // Phantom Mint all the tokens do { emit Transfer(address(0), to_, _startId); } while (++_startId < _endId); // Set the totalMinted as the _endId nextTokenId = _endId; }} /** @dev we use a max batch size to prevent high lookup costs in the future */ function _mint(address to_, uint256 amount_) internal virtual { uint256 _amountToMint = amount_; while (_amountToMint > maxBatchSize) { _amountToMint -= maxBatchSize; _mintInternal(to_, maxBatchSize); } _mintInternal(to_, _amountToMint); } /** @dev _mint uses a burn flag instead of deleting token data */ function _burn(uint256 tokenId_, bool checkApproved_) internal virtual { unchecked { // Load the TokenData into memory /** @dev if the token is burned, _getTokenDataOf will revert, so we can assume from here that flow is to an unburned token only. _getTokenDataOf also ensures that the TokenData returned is within valid tokenId bounds */ TokenData memory _TokenData = _getTokenDataOf(tokenId_); address _owner = _TokenData.owner; // Special checkApproved_ logical flow to save 1 SLOAD if (checkApproved_) require(_isApprovedOrOwner(_owner, msg.sender, tokenId_), "_burn not approved"); // Delete getApproved to clear any approvals for cleanliness delete getApproved[tokenId_]; // Store the burner data at tokenId_ _tokenData[tokenId_].owner = _owner; _tokenData[tokenId_].lastTransfer = uint40(block.timestamp); // Set the burned flag to true on the token _tokenData[tokenId_].burned = true; // After a burn, the next token must always be initialized _tokenData[tokenId_].nextInitialized = true; /** @dev Bookmarking Logic */ // First, we check if slot N+1 is initialized if (!_TokenData.nextInitialized) { // Check if the slot at N+1 is actually initialized or not // because it is possible that the state above is false but // the token is actually initialized (from mint-state) uint256 _tokenIdIncremented = tokenId_ + 1; if (_tokenData[_tokenIdIncremented].owner == address(0)) { // If it's not, we see if the tokenId is in-bounds for bookmarking if (tokenId_ < nextTokenId - 1) { // If it is, we bookmark the N+1 slot with the current loaded TokenData /** @dev This retains the owner of subsequent tokens and prevents unintended overwriting of owner data */ _tokenData[_tokenIdIncremented] = _TokenData; } } } // Update user balances _balanceData[_owner].balance--; // Emit a Burn Transfer emit Transfer(_owner, address(0), tokenId_); // Increment Burned Amount totalBurned++; }} // /** @dev _burn using standard arguments */ // function _burn(uint256 tokenId_) internal virtual { // _burn(tokenId_, false); // } /** @dev _transfer has a special checkApproved_ argument for gas-efficiency */ function _transfer(address from_, address to_, uint256 tokenId_, bool checkApproved_) internal virtual { unchecked { // We can't transfer to 0x0 require(to_ != address(0), "_transfer to 0x0"); // Load the TokenData into memory for further operations TokenData memory _TokenData = _getTokenDataOf(tokenId_); address _owner = _TokenData.owner; // Argument from_ must be the owner require(from_ == _owner, "_transfer not from owner"); // Special checkApproved_ logical flow to save 1 SLOAD if (checkApproved_) require(_isApprovedOrOwner(_owner, msg.sender, tokenId_), "_transfer not approved"); // Delete getApproved to clear any approvals on transfer delete getApproved[tokenId_]; // Transfer the token _tokenData[tokenId_].owner = to_; _tokenData[tokenId_].lastTransfer = uint40(block.timestamp); // After a transfer, the next token must always be initialized _tokenData[tokenId_].nextInitialized = true; /** @dev Bookmarking Logic */ // First, we check if slot N+1 is initialized from token at N if (!_TokenData.nextInitialized) { // Check if the slot at N+1 is actually initialized or not // because it is possible that the state above is false but // the token is actually initialized (from mint-state) uint256 _tokenIdIncremented = tokenId_ + 1; if (_tokenData[_tokenIdIncremented].owner == address(0)) { // If it's not, we see if the tokenId is in-bounds for bookmarking if (tokenId_ < nextTokenId - 1) { // If it is, we bookmark the N+1 slot with the current loaded TokenData /** @dev This retains the owner of subsequent tokens and prevents unintended overwriting of owner data */ _tokenData[_tokenIdIncremented] = _TokenData; } } } // Update the balances _balanceData[from_].balance--; _balanceData[to_].balance++; // Emit a Transfer emit Transfer(from_, to_, tokenId_); }} // /** @dev a standard-style transfer mimics ERC721 _transfer behavior with // no approval checks */ // function _transfer(address from_, address to_, uint256 tokenId_) internal virtual { // _transfer(from_, to_, tokenId_, false); // } /** @dev transferFrom uses special _transfer with approval check flow which saves 1 SLOAD */ function transferFrom(address from_, address to_, uint256 tokenId_) public virtual { _transfer(from_, to_, tokenId_, true); } function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory data_) public virtual { transferFrom(from_, to_, tokenId_); require(to_.code.length == 0 || ERC721TokenReceiver(to_) .onERC721Received(msg.sender, from_, tokenId_, data_) == ERC721TokenReceiver.onERC721Received.selector, "safeTransferFrom to unsafe address"); } function safeTransferFrom(address from_, address to_, uint256 tokenId_) public virtual { safeTransferFrom(from_, to_, tokenId_, ""); } ///// ERC721 Approvals ///// function approve(address spender_, uint256 tokenId_) public virtual { address _owner = ownerOf(tokenId_); require(msg.sender == _owner || isApprovedForAll[_owner][msg.sender], "approve not authorized!"); getApproved[tokenId_] = spender_; emit Approval(_owner, spender_, tokenId_); } function setApprovalForAll(address operator_, bool approved_) public virtual { isApprovedForAll[msg.sender][operator_] = approved_; emit ApprovalForAll(msg.sender, operator_, approved_); } /** @dev _isApprovedOrOwner has a special owner_ argument for gas-efficiency */ function _isApprovedOrOwner(address owner_, address spender_, uint256 tokenId_) internal virtual view returns (bool) { return (owner_ == spender_ || getApproved[tokenId_] == spender_ || isApprovedForAll[owner_][spender_]); } ///// ERC165 Interface ///// function supportsInterface(bytes4 iid_) public virtual view returns (bool) { return iid_ == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 iid_ == 0x80ac58cd || // ERC165 Interface ID for ERC721 iid_ == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /** @dev tokenURI is not implemented */ function tokenURI(uint256 tokenId_) public virtual view returns (string memory); bytes32[50] private ___gap; } abstract contract ERC721TokenURI { string public baseTokenURI; function _setBaseTokenURI(string memory uri_) internal virtual { baseTokenURI = uri_; } function _toString(uint256 value_) internal pure virtual returns (string memory _str) { assembly { let m := add(mload(0x40), 0xa0) mstore(0x40, m) _str := sub(m, 0x20) mstore(_str, 0) let end := _str for { let temp := value_ } 1 {} { _str := sub(_str, 1) mstore8(_str, add(48, mod(temp, 10))) temp := div(temp, 10) if iszero(temp) { break } } let length := sub(end, _str) _str := sub(_str, 0x20) mstore(_str, length) } } } // Short and Simple Ownable by 0xInuarashi // Ownable follows EIP-173 compliant standard abstract contract Ownable { event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); address public owner; constructor() { owner = msg.sender; } modifier onlyOwner { require(owner == msg.sender, "onlyOwner not owner!"); _; } function transferOwnership(address new_) external onlyOwner { address _old = owner; owner = new_; emit OwnershipTransferred(_old, new_); } } /** Controllerable: Dynamic Controller System string controllerType is a string version of controllerSlot bytes32 controllerSlot is a keccak256(abi.encodePacked("ControllerName"<string>)) used to store the type of controller type address controller is the address of the controller bool status is the status of controller (true = is controller, false = is not) usage: call isController with string type_ and address of user to receive a boolean */ abstract contract Controllerable is Ownable { event ControllerSet(string indexed controllerType, bytes32 indexed controllerSlot, address indexed controller, bool status); mapping(bytes32 => mapping(address => bool)) internal __controllers; function isController(string memory type_, address controller_) public view returns (bool) { bytes32 _slot = keccak256(abi.encodePacked(type_)); return __controllers[_slot][controller_]; } function setController(string calldata type_, address controller_, bool bool_) external onlyOwner { bytes32 _slot = keccak256(abi.encodePacked(type_)); __controllers[_slot][controller_] = bool_; emit ControllerSet(type_, _slot, controller_, bool_); } } /** OSSubscribeFilter is a simple subscription for OpenSea's Filter Registry. */ interface iOperatorFilterRegistry { function registerAndSubscribe(address registerer_, address subscribeTo_) external; function isOperatorAllowed(address registrant_, address operator_) external view returns (bool); } abstract contract OSSubscribeFilter { // Errors error OperatorNotAllowed(address operator); // Targets iOperatorFilterRegistry public constant OSFilterRegistry = iOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); // Register and Subscribe (Required to be compliant) /** @dev Default subscribeTo_ is: 0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6 */ function _OSRegisterAndSubscribe(address subscribeTo_) internal { OSFilterRegistry.registerAndSubscribe(address(this), subscribeTo_); } // This is for TransferFroms modifier onlyAllowedOperator(address from_) virtual { // First, if from is the msg.sender, it is the owner and should be allowed. if (msg.sender == from_) { _; return; } // However, if from_ is not the msg.sender, means it's an approved operator // In this case, let's check if the operator is a smart contract. if (from_.code.length > 0) { if (!OSFilterRegistry.isOperatorAllowed(address(this), msg.sender)) { // If the operator (msg.sender) is not allowed based on the list // We revert with OperatorNotAllowed(address) revert OperatorNotAllowed(msg.sender); } } _; } // This is for Approves modifier onlyAllowedOperatorApproval(address operator_) virtual { // For an approval, we simply check the registry if the caller is able // to set any approval for the specified address. // Again, we use our checks to be able to disable and such. if (!OSFilterRegistry.isOperatorAllowed(address(this), operator_)) { revert OperatorNotAllowed(operator_); } _; } bytes32[50] private ___gap; } contract Machina is ERC721B("Machina", "MACHINA"), ERC721TokenURI, Ownable, Controllerable, OSSubscribeFilter { ///// Proxy Initializer ///// bool public proxyIsInitialized; function proxyInitialize(address newOwner_) public { require(!proxyIsInitialized, "Proxy already initialized"); proxyIsInitialized = true; // Hardcode owner = newOwner_; // Ownable.sol name = "Machina"; // ERC721B.sol symbol = "MACHINA"; // ERC721B.sol nextTokenId = startTokenId(); // ERC721B.sol } ///// Constructor (For Implementation Contract) ///// constructor() { proxyInitialize(msg.sender); } ///// Controllerable Config ///// modifier onlyMinter() { require(isController("Minter", msg.sender), "Controllerable: Not Minter!"); _; } ///// ERC721B Overrides ///// function startTokenId() public pure virtual override returns (uint256) { return 1; } ///// Ownable Functions ///// function ownerMint(address to_, uint256 amount_) external onlyOwner { _mint(to_, amount_); } function ownerBurn(uint256[] calldata tokenIds_) external onlyOwner { uint256 l = tokenIds_.length; uint256 i; unchecked { do { _burn(tokenIds_[i], false); } while (++i < l); } } ///// Controllerable Functions ///// function mintAsController(address to_, uint256 amount_) external onlyMinter { _mint(to_, amount_); } ///// Metadata Governance ///// function setBaseTokenURI(string calldata uri_) external onlyOwner { _setBaseTokenURI(uri_); } ///// OS Subscribe Filter Config ///// function setOSRegisterAndSubscribe(address subscribeTo_) external onlyOwner { _OSRegisterAndSubscribe(subscribeTo_); } ///// OS Subscribe Filter Overrides ///// function setApprovalForAll(address operator_, bool approved_) public override onlyAllowedOperatorApproval(operator_) { super.setApprovalForAll(operator_, approved_); } function approve(address operator_, uint256 tokenId_) public override onlyAllowedOperatorApproval(operator_) { super.approve(operator_, tokenId_); } function transferFrom(address from_, address to_, uint256 tokenId_) public override onlyAllowedOperator(from_) { super.transferFrom(from_, to_, tokenId_); } function safeTransferFrom(address from_, address to_, uint256 tokenId_) public override onlyAllowedOperator(from_) { super.safeTransferFrom(from_, to_, tokenId_); } function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory data_) public override onlyAllowedOperator(from_) { super.safeTransferFrom(from_, to_, tokenId_, data_); } ///// OS Subscribe Filter View ///// function isOperatorAllowedOS(address operator_) external view returns (bool) { return OSFilterRegistry.isOperatorAllowed(address(this), operator_); } ///// TokenURI ///// function tokenURI(uint256 tokenId_) public virtual view override returns (string memory) { require(ownerOf(tokenId_) != address(0), "Token does not exist!"); return string(abi.encodePacked(baseTokenURI, _toString(tokenId_))); } bytes32[50] private ___gap; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner_","type":"address"},{"indexed":true,"internalType":"address","name":"spender_","type":"address"},{"indexed":true,"internalType":"uint256","name":"id_","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner_","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":true,"internalType":"string","name":"controllerType","type":"string"},{"indexed":true,"internalType":"bytes32","name":"controllerSlot","type":"bytes32"},{"indexed":true,"internalType":"address","name":"controller","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ControllerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from_","type":"address"},{"indexed":true,"internalType":"address","name":"to_","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OSFilterRegistry","outputs":[{"internalType":"contract iOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceData","outputs":[{"internalType":"uint32","name":"balance","type":"uint32"},{"internalType":"uint32","name":"mintedAmount","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"_getTokenDataOf","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint40","name":"lastTransfer","type":"uint40"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"bool","name":"nextInitialized","type":"bool"}],"internalType":"struct ERC721B.TokenData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tokenData","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint40","name":"lastTransfer","type":"uint40"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"bool","name":"nextInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"type_","type":"string"},{"internalType":"address","name":"controller_","type":"address"}],"name":"isController","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"}],"name":"isOperatorAllowedOS","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mintAsController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"ownerBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"proxyInitialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxyIsInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","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":"string","name":"uri_","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"type_","type":"string"},{"internalType":"address","name":"controller_","type":"address"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"subscribeTo_","type":"address"}],"name":"setOSRegisterAndSubscribe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"iid_","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"new_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051806040016040528060078152602001664d616368696e6160c81b815250604051806040016040528060078152602001664d414348494e4160c81b81525081600090816200006391906200022b565b5060016200007282826200022b565b5060016002555050603b80546001600160a01b031916339081179091556200009a90620000a0565b620002f7565b606f5460ff1615620000f85760405162461bcd60e51b815260206004820152601960248201527f50726f787920616c726561647920696e697469616c697a656400000000000000604482015260640160405180910390fd5b606f805460ff19166001179055603b80546001600160a01b0383166001600160a01b03199091161790556040805180820190915260078152664d616368696e6160c81b60208201526000906200014f90826200022b565b506040805180820190915260078152664d414348494e4160c81b60208201526001906200017d90826200022b565b50600160025550565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001b157607f821691505b602082108103620001d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022657600081815260208120601f850160051c81016020861015620002015750805b601f850160051c820191505b8181101562000222578281556001016200020d565b5050505b505050565b81516001600160401b0381111562000247576200024762000186565b6200025f816200025884546200019c565b84620001d8565b602080601f8311600181146200029757600084156200027e5750858301515b600019600386901b1c1916600185901b17855562000222565b600085815260208120601f198616915b82811015620002c857888601518255948401946001909101908401620002a7565b5085821015620002e75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6123e880620003076000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806375794a3c11610125578063bd5404a8116100ad578063d89135cd1161007c578063d89135cd14610561578063dd88259b1461056a578063e6798baa1461057d578063e985e9c514610584578063f2fde38b146105b257600080fd5b8063bd5404a814610520578063c87b56dd14610533578063d547cfb714610546578063d8016d201461054e57600080fd5b8063a22cb465116100f4578063a22cb46514610478578063a46db1f91461048b578063a64bc18f146104a0578063b88d4fde146104b3578063ba745f2e146104c657600080fd5b806375794a3c146104415780638cb87a021461044a5780638da5cb5b1461045d57806395d89b411461047057600080fd5b806323b872dd116101a857806342842e0e1161017757806342842e0e146103a6578063484b973c146103b95780635266069d146103cc5780636352211e1461041b57806370a082311461042e57600080fd5b806323b872dd146102f25780632913daa0146103055780632c2cdd601461030d57806330176e131461039357600080fd5b80630bbfe555116101e45780630bbfe555146102a9578063153db98a146102bc57806317170f3a146102cf57806318160ddd146102dc57600080fd5b806301ffc9a71461021657806306fdde031461023e578063081812fc14610253578063095ea7b314610294575b600080fd5b610229610224366004611c5e565b6105c5565b60405190151581526020015b60405180910390f35b610246610617565b6040516102359190611cd2565b61027c610261366004611ce5565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610235565b6102a76102a2366004611d1a565b6106a5565b005b6102296102b7366004611dd0565b61075f565b6102a76102ca366004611d1a565b6107b5565b606f546102299060ff1681565b6102e4610837565b604051908152602001610235565b6102a7610300366004611e32565b61085a565b6102e4601481565b61035b61031b366004611ce5565b6004602052600090815260409020546001600160a01b0381169064ffffffffff600160a01b8204169060ff600160c81b8204811691600160d01b90041684565b604080516001600160a01b03909516855264ffffffffff90931660208501529015159183019190915215156060820152608001610235565b6102a76103a1366004611eb7565b61092e565b6102a76103b4366004611e32565b610997565b6102a76103c7366004611d1a565b610a60565b6103fe6103da366004611ef9565b60056020526000908152604090205463ffffffff8082169164010000000090041682565b6040805163ffffffff938416815292909116602083015201610235565b61027c610429366004611ce5565b610a8a565b6102e461043c366004611ef9565b610a9c565b6102e460025481565b6102a7610458366004611f14565b610b09565b603b5461027c906001600160a01b031681565b610246610b6a565b6102a7610486366004611f97565b610b77565b61027c6daaeb6d7670e522a718067333cd4e81565b6102a76104ae366004611fce565b610c27565b6102a76104c1366004612035565b610cff565b6104d96104d4366004611ce5565b610dd6565b604051610235919081516001600160a01b0316815260208083015164ffffffffff169082015260408083015115159082015260609182015115159181019190915260800190565b6102a761052e366004611ef9565b611021565b610246610541366004611ce5565b6110fe565b61024661118b565b6102a761055c366004611ef9565b611198565b6102e460035481565b610229610578366004611ef9565b6111ce565b60016102e4565b6102296105923660046120b1565b600760209081526000928352604080842090915290825290205460ff1681565b6102a76105c0366004611ef9565b61124d565b60006301ffc9a760e01b6001600160e01b0319831614806105f657506380ac58cd60e01b6001600160e01b03198316145b806106115750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610624906120db565b80601f0160208091040260200160405190810160405280929190818152602001828054610650906120db565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b505050505081565b604051633185c44d60e21b81523060048201526001600160a01b038316602482015282906daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107239190612115565b61075057604051633b79c77360e21b81526001600160a01b03821660048201526024015b60405180910390fd5b61075a83836112c9565b505050565b600080836040516020016107739190612132565b60408051601f1981840301815291815281516020928301206000908152603c83528181206001600160a01b038716825290925290205460ff1691505092915050565b6107dd6040518060400160405280600681526020016526b4b73a32b960d11b8152503361075f565b6108295760405162461bcd60e51b815260206004820152601b60248201527f436f6e74726f6c6c657261626c653a204e6f74204d696e7465722100000000006044820152606401610747565b61083382826113b8565b5050565b6000600160035460025461084b919061214e565b610855919061214e565b905090565b826001600160a01b038116330361087b576108768484846113ea565b610928565b6001600160a01b0381163b1561091d57604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156108da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fe9190612115565b61091d57604051633b79c77360e21b8152336004820152602401610747565b6109288484846113ea565b50505050565b603b546001600160a01b031633146109585760405162461bcd60e51b81526004016107479061216f565b61083382828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113f792505050565b826001600160a01b03811633036109b357610876848484611403565b6001600160a01b0381163b15610a5557604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a369190612115565b610a5557604051633b79c77360e21b8152336004820152602401610747565b610928848484611403565b603b546001600160a01b031633146108295760405162461bcd60e51b81526004016107479061216f565b6000610a9582610dd6565b5192915050565b60006001600160a01b038216610ae75760405162461bcd60e51b815260206004820152601060248201526f062616c616e63654f6620746f203078360841b6044820152606401610747565b506001600160a01b031660009081526005602052604090205463ffffffff1690565b603b546001600160a01b03163314610b335760405162461bcd60e51b81526004016107479061216f565b8060005b610b5a848483818110610b4c57610b4c61219d565b90506020020135600061141e565b600101818110610b375750505050565b60018054610624906120db565b604051633185c44d60e21b81523060048201526001600160a01b038316602482015282906daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf59190612115565b610c1d57604051633b79c77360e21b81526001600160a01b0382166004820152602401610747565b61075a8383611603565b603b546001600160a01b03163314610c515760405162461bcd60e51b81526004016107479061216f565b60008484604051602001610c669291906121b3565b60408051808303601f1901815282825280516020918201206000818152603c83528381206001600160a01b038916808352935292909220805460ff1916861515179055909250908290610cbc90889088906121b3565b6040519081900381208515158252907f519b8f8a91fff81fe4f9a7ac479d388b3ff624a8246d0e59d9f088d8bf20c7149060200160405180910390a45050505050565b836001600160a01b0381163303610d2157610d1c8585858561166f565b610dcf565b6001600160a01b0381163b15610dc357604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610d80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da49190612115565b610dc357604051633b79c77360e21b8152336004820152602401610747565b610dcf8585858561166f565b5050505050565b604080516080810182526000808252602082018190529181018290526060810191909152816001811015610e5d5760405162461bcd60e51b815260206004820152602860248201527f5f676574546f6b656e446174614f66205f6c6f6f6b75704964203c20737461726044820152671d151bdad95b925960c21b6064820152608401610747565b600081815260046020908152604091829020825160808101845290546001600160a01b03811680835264ffffffffff600160a01b8304169383019390935260ff600160c81b82048116151594830194909452600160d01b90049092161515606083015215801590610ed057508060400151155b15610edc579392505050565b806040015115610f2e5760405162461bcd60e51b815260206004820152601d60248201527f5f676574546f6b656e446174614f66206275726e656420746f6b656e210000006044820152606401610747565b6002548210610f905760405162461bcd60e51b815260206004820152602860248201527f5f676574546f6b656e446174614f66205f6c6f6f6b75704964203e205f6e65786044820152671d151bdad95b925960c21b6064820152608401610747565b5b6000199091016000818152600460205260409020549091906001600160a01b031615610f915750600090815260046020908152604091829020825160808101845290546001600160a01b038116825264ffffffffff600160a01b8204169282019290925260ff600160c81b83048116151593820193909352600160d01b9091049091161515606082015292915050565b606f5460ff16156110745760405162461bcd60e51b815260206004820152601960248201527f50726f787920616c726561647920696e697469616c697a6564000000000000006044820152606401610747565b606f805460ff19166001179055603b80546001600160a01b0383166001600160a01b03199091161790556040805180820190915260078152664d616368696e6160c81b60208201526000906110c99082612211565b506040805180820190915260078152664d414348494e4160c81b60208201526001906110f59082612211565b50600160025550565b6060600061110b83610a8a565b6001600160a01b0316036111595760405162461bcd60e51b8152602060048201526015602482015274546f6b656e20646f6573206e6f742065786973742160581b6044820152606401610747565b603a61116483611766565b6040516020016111759291906122d1565b6040516020818303038152906040529050919050565b603a8054610624906120db565b603b546001600160a01b031633146111c25760405162461bcd60e51b81526004016107479061216f565b6111cb816117aa565b50565b604051633185c44d60e21b81523060048201526001600160a01b03821660248201526000906daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106119190612115565b603b546001600160a01b031633146112775760405162461bcd60e51b81526004016107479061216f565b603b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006112d482610a8a565b9050336001600160a01b038216148061131057506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b61135c5760405162461bcd60e51b815260206004820152601760248201527f617070726f7665206e6f7420617574686f72697a6564210000000000000000006044820152606401610747565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b805b60148111156113e0576113ce60148261214e565b90506113db836014611813565b6113ba565b61075a8382611813565b61075a838383600161192f565b603a6108338282612211565b61075a83838360405180602001604052806000815250610cff565b600061142983610dd6565b805190915082156114805761143f813386611bd5565b6114805760405162461bcd60e51b815260206004820152601260248201527117d89d5c9b881b9bdd08185c1c1c9bdd995960721b6044820152606401610747565b600084815260066020908152604080832080546001600160a01b03191690556004909152902080546001600160a01b0383166001600160c81b031990911617600160a01b4264ffffffffff16021761ffff60c81b191661010160c81b179055606082015161159657600184016000818152600460205260409020546001600160a01b0316611594576001600254038510156115945760008181526004602090815260409182902085518154928701519387015160608801511515600160d01b0260ff60d01b19911515600160c81b029190911661ffff60c81b1964ffffffffff909616600160a01b026001600160c81b03199095166001600160a01b03909316929092179390931793909316929092171790555b505b6001600160a01b038116600081815260056020526040808220805463ffffffff19811663ffffffff91821660001901909116179055518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a450506003805460010190555050565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61167a84848461085a565b6001600160a01b0383163b158061170f5750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906116c0903390899088908890600401612358565b6020604051808303816000875af11580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190612395565b6001600160e01b031916145b6109285760405162461bcd60e51b815260206004820152602260248201527f736166655472616e7366657246726f6d20746f20756e73616665206164647265604482015261737360f01b6064820152608401610747565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806117805750819003601f19909101908152919050565b604051633e9f1edf60e11b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe90604401600060405180830381600087803b1580156117ff57600080fd5b505af1158015610dcf573d6000803e3d6000fd5b6001600160a01b0382166118585760405162461bcd60e51b815260206004820152600c60248201526b05f6d696e7420746f203078360a41b6044820152606401610747565b600254600081815260046020908152604080832080546001600160a01b0388166001600160c81b03199091168117600160a01b4264ffffffffff160217909155835260059091529020805467ffffffffffffffff19811663ffffffff8083168601811691821764010000000063ffffffff1990941690921783900481168601169091021790558181015b60405182906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082600101925082106118e257600255505050565b6001600160a01b0383166119785760405162461bcd60e51b815260206004820152601060248201526f05f7472616e7366657220746f203078360841b6044820152606401610747565b600061198383610dd6565b80519091506001600160a01b03868116908216146119e35760405162461bcd60e51b815260206004820152601860248201527f5f7472616e73666572206e6f742066726f6d206f776e657200000000000000006044820152606401610747565b8215611a39576119f4813386611bd5565b611a395760405162461bcd60e51b815260206004820152601660248201527517dd1c985b9cd9995c881b9bdd08185c1c1c9bdd995960521b6044820152606401610747565b600084815260066020908152604080832080546001600160a01b031916905560049091529020805460ff60d01b1964ffffffffff4216600160a01b026001600160c81b03199092166001600160a01b038916179190911716600160d01b1790556060820151611b5057600184016000818152600460205260409020546001600160a01b0316611b4e57600160025403851015611b4e5760008181526004602090815260409182902085518154928701519387015160608801511515600160d01b0260ff60d01b19911515600160c81b029190911661ffff60c81b1964ffffffffff909616600160a01b026001600160c81b03199095166001600160a01b03909316929092179390931793909316929092171790555b505b6001600160a01b03868116600081815260056020526040808220805463ffffffff1980821663ffffffff92831660001901831617909255948a1680845282842080549283169287166001019096169190911790945551879392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050505050565b6000826001600160a01b0316846001600160a01b03161480611c1057506000828152600660205260409020546001600160a01b038481169116145b80611c4057506001600160a01b0380851660009081526007602090815260408083209387168352929052205460ff165b949350505050565b6001600160e01b0319811681146111cb57600080fd5b600060208284031215611c7057600080fd5b8135611c7b81611c48565b9392505050565b60005b83811015611c9d578181015183820152602001611c85565b50506000910152565b60008151808452611cbe816020860160208601611c82565b601f01601f19169290920160200192915050565b602081526000611c7b6020830184611ca6565b600060208284031215611cf757600080fd5b5035919050565b80356001600160a01b0381168114611d1557600080fd5b919050565b60008060408385031215611d2d57600080fd5b611d3683611cfe565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611d7557611d75611d44565b604051601f8501601f19908116603f01168101908282118183101715611d9d57611d9d611d44565b81604052809350858152868686011115611db657600080fd5b858560208301376000602087830101525050509392505050565b60008060408385031215611de357600080fd5b823567ffffffffffffffff811115611dfa57600080fd5b8301601f81018513611e0b57600080fd5b611e1a85823560208401611d5a565b925050611e2960208401611cfe565b90509250929050565b600080600060608486031215611e4757600080fd5b611e5084611cfe565b9250611e5e60208501611cfe565b9150604084013590509250925092565b60008083601f840112611e8057600080fd5b50813567ffffffffffffffff811115611e9857600080fd5b602083019150836020828501011115611eb057600080fd5b9250929050565b60008060208385031215611eca57600080fd5b823567ffffffffffffffff811115611ee157600080fd5b611eed85828601611e6e565b90969095509350505050565b600060208284031215611f0b57600080fd5b611c7b82611cfe565b60008060208385031215611f2757600080fd5b823567ffffffffffffffff80821115611f3f57600080fd5b818501915085601f830112611f5357600080fd5b813581811115611f6257600080fd5b8660208260051b8501011115611f7757600080fd5b60209290920196919550909350505050565b80151581146111cb57600080fd5b60008060408385031215611faa57600080fd5b611fb383611cfe565b91506020830135611fc381611f89565b809150509250929050565b60008060008060608587031215611fe457600080fd5b843567ffffffffffffffff811115611ffb57600080fd5b61200787828801611e6e565b909550935061201a905060208601611cfe565b9150604085013561202a81611f89565b939692955090935050565b6000806000806080858703121561204b57600080fd5b61205485611cfe565b935061206260208601611cfe565b925060408501359150606085013567ffffffffffffffff81111561208557600080fd5b8501601f8101871361209657600080fd5b6120a587823560208401611d5a565b91505092959194509250565b600080604083850312156120c457600080fd5b6120cd83611cfe565b9150611e2960208401611cfe565b600181811c908216806120ef57607f821691505b60208210810361210f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561212757600080fd5b8151611c7b81611f89565b60008251612144818460208701611c82565b9190910192915050565b8181038181111561061157634e487b7160e01b600052601160045260246000fd5b6020808252601490820152736f6e6c794f776e6572206e6f74206f776e65722160601b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b601f82111561075a57600081815260208120601f850160051c810160208610156121ea5750805b601f850160051c820191505b81811015612209578281556001016121f6565b505050505050565b815167ffffffffffffffff81111561222b5761222b611d44565b61223f8161223984546120db565b846121c3565b602080601f831160018114612274576000841561225c5750858301515b600019600386901b1c1916600185901b178555612209565b600085815260208120601f198616915b828110156122a357888601518255948401946001909101908401612284565b50858210156122c15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008084546122df816120db565b600182811680156122f7576001811461230c5761233b565b60ff198416875282151583028701945061233b565b8860005260208060002060005b858110156123325781548a820152908401908201612319565b50505082870194505b50505050835161234f818360208801611c82565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061238b90830184611ca6565b9695505050505050565b6000602082840312156123a757600080fd5b8151611c7b81611c4856fea26469706673582212200d11667aba1d5cb854594ef026606f6582c71c3b6c592c2e533496c00a79099164736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c806375794a3c11610125578063bd5404a8116100ad578063d89135cd1161007c578063d89135cd14610561578063dd88259b1461056a578063e6798baa1461057d578063e985e9c514610584578063f2fde38b146105b257600080fd5b8063bd5404a814610520578063c87b56dd14610533578063d547cfb714610546578063d8016d201461054e57600080fd5b8063a22cb465116100f4578063a22cb46514610478578063a46db1f91461048b578063a64bc18f146104a0578063b88d4fde146104b3578063ba745f2e146104c657600080fd5b806375794a3c146104415780638cb87a021461044a5780638da5cb5b1461045d57806395d89b411461047057600080fd5b806323b872dd116101a857806342842e0e1161017757806342842e0e146103a6578063484b973c146103b95780635266069d146103cc5780636352211e1461041b57806370a082311461042e57600080fd5b806323b872dd146102f25780632913daa0146103055780632c2cdd601461030d57806330176e131461039357600080fd5b80630bbfe555116101e45780630bbfe555146102a9578063153db98a146102bc57806317170f3a146102cf57806318160ddd146102dc57600080fd5b806301ffc9a71461021657806306fdde031461023e578063081812fc14610253578063095ea7b314610294575b600080fd5b610229610224366004611c5e565b6105c5565b60405190151581526020015b60405180910390f35b610246610617565b6040516102359190611cd2565b61027c610261366004611ce5565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610235565b6102a76102a2366004611d1a565b6106a5565b005b6102296102b7366004611dd0565b61075f565b6102a76102ca366004611d1a565b6107b5565b606f546102299060ff1681565b6102e4610837565b604051908152602001610235565b6102a7610300366004611e32565b61085a565b6102e4601481565b61035b61031b366004611ce5565b6004602052600090815260409020546001600160a01b0381169064ffffffffff600160a01b8204169060ff600160c81b8204811691600160d01b90041684565b604080516001600160a01b03909516855264ffffffffff90931660208501529015159183019190915215156060820152608001610235565b6102a76103a1366004611eb7565b61092e565b6102a76103b4366004611e32565b610997565b6102a76103c7366004611d1a565b610a60565b6103fe6103da366004611ef9565b60056020526000908152604090205463ffffffff8082169164010000000090041682565b6040805163ffffffff938416815292909116602083015201610235565b61027c610429366004611ce5565b610a8a565b6102e461043c366004611ef9565b610a9c565b6102e460025481565b6102a7610458366004611f14565b610b09565b603b5461027c906001600160a01b031681565b610246610b6a565b6102a7610486366004611f97565b610b77565b61027c6daaeb6d7670e522a718067333cd4e81565b6102a76104ae366004611fce565b610c27565b6102a76104c1366004612035565b610cff565b6104d96104d4366004611ce5565b610dd6565b604051610235919081516001600160a01b0316815260208083015164ffffffffff169082015260408083015115159082015260609182015115159181019190915260800190565b6102a761052e366004611ef9565b611021565b610246610541366004611ce5565b6110fe565b61024661118b565b6102a761055c366004611ef9565b611198565b6102e460035481565b610229610578366004611ef9565b6111ce565b60016102e4565b6102296105923660046120b1565b600760209081526000928352604080842090915290825290205460ff1681565b6102a76105c0366004611ef9565b61124d565b60006301ffc9a760e01b6001600160e01b0319831614806105f657506380ac58cd60e01b6001600160e01b03198316145b806106115750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610624906120db565b80601f0160208091040260200160405190810160405280929190818152602001828054610650906120db565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b505050505081565b604051633185c44d60e21b81523060048201526001600160a01b038316602482015282906daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107239190612115565b61075057604051633b79c77360e21b81526001600160a01b03821660048201526024015b60405180910390fd5b61075a83836112c9565b505050565b600080836040516020016107739190612132565b60408051601f1981840301815291815281516020928301206000908152603c83528181206001600160a01b038716825290925290205460ff1691505092915050565b6107dd6040518060400160405280600681526020016526b4b73a32b960d11b8152503361075f565b6108295760405162461bcd60e51b815260206004820152601b60248201527f436f6e74726f6c6c657261626c653a204e6f74204d696e7465722100000000006044820152606401610747565b61083382826113b8565b5050565b6000600160035460025461084b919061214e565b610855919061214e565b905090565b826001600160a01b038116330361087b576108768484846113ea565b610928565b6001600160a01b0381163b1561091d57604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156108da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fe9190612115565b61091d57604051633b79c77360e21b8152336004820152602401610747565b6109288484846113ea565b50505050565b603b546001600160a01b031633146109585760405162461bcd60e51b81526004016107479061216f565b61083382828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113f792505050565b826001600160a01b03811633036109b357610876848484611403565b6001600160a01b0381163b15610a5557604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a369190612115565b610a5557604051633b79c77360e21b8152336004820152602401610747565b610928848484611403565b603b546001600160a01b031633146108295760405162461bcd60e51b81526004016107479061216f565b6000610a9582610dd6565b5192915050565b60006001600160a01b038216610ae75760405162461bcd60e51b815260206004820152601060248201526f062616c616e63654f6620746f203078360841b6044820152606401610747565b506001600160a01b031660009081526005602052604090205463ffffffff1690565b603b546001600160a01b03163314610b335760405162461bcd60e51b81526004016107479061216f565b8060005b610b5a848483818110610b4c57610b4c61219d565b90506020020135600061141e565b600101818110610b375750505050565b60018054610624906120db565b604051633185c44d60e21b81523060048201526001600160a01b038316602482015282906daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf59190612115565b610c1d57604051633b79c77360e21b81526001600160a01b0382166004820152602401610747565b61075a8383611603565b603b546001600160a01b03163314610c515760405162461bcd60e51b81526004016107479061216f565b60008484604051602001610c669291906121b3565b60408051808303601f1901815282825280516020918201206000818152603c83528381206001600160a01b038916808352935292909220805460ff1916861515179055909250908290610cbc90889088906121b3565b6040519081900381208515158252907f519b8f8a91fff81fe4f9a7ac479d388b3ff624a8246d0e59d9f088d8bf20c7149060200160405180910390a45050505050565b836001600160a01b0381163303610d2157610d1c8585858561166f565b610dcf565b6001600160a01b0381163b15610dc357604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610d80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da49190612115565b610dc357604051633b79c77360e21b8152336004820152602401610747565b610dcf8585858561166f565b5050505050565b604080516080810182526000808252602082018190529181018290526060810191909152816001811015610e5d5760405162461bcd60e51b815260206004820152602860248201527f5f676574546f6b656e446174614f66205f6c6f6f6b75704964203c20737461726044820152671d151bdad95b925960c21b6064820152608401610747565b600081815260046020908152604091829020825160808101845290546001600160a01b03811680835264ffffffffff600160a01b8304169383019390935260ff600160c81b82048116151594830194909452600160d01b90049092161515606083015215801590610ed057508060400151155b15610edc579392505050565b806040015115610f2e5760405162461bcd60e51b815260206004820152601d60248201527f5f676574546f6b656e446174614f66206275726e656420746f6b656e210000006044820152606401610747565b6002548210610f905760405162461bcd60e51b815260206004820152602860248201527f5f676574546f6b656e446174614f66205f6c6f6f6b75704964203e205f6e65786044820152671d151bdad95b925960c21b6064820152608401610747565b5b6000199091016000818152600460205260409020549091906001600160a01b031615610f915750600090815260046020908152604091829020825160808101845290546001600160a01b038116825264ffffffffff600160a01b8204169282019290925260ff600160c81b83048116151593820193909352600160d01b9091049091161515606082015292915050565b606f5460ff16156110745760405162461bcd60e51b815260206004820152601960248201527f50726f787920616c726561647920696e697469616c697a6564000000000000006044820152606401610747565b606f805460ff19166001179055603b80546001600160a01b0383166001600160a01b03199091161790556040805180820190915260078152664d616368696e6160c81b60208201526000906110c99082612211565b506040805180820190915260078152664d414348494e4160c81b60208201526001906110f59082612211565b50600160025550565b6060600061110b83610a8a565b6001600160a01b0316036111595760405162461bcd60e51b8152602060048201526015602482015274546f6b656e20646f6573206e6f742065786973742160581b6044820152606401610747565b603a61116483611766565b6040516020016111759291906122d1565b6040516020818303038152906040529050919050565b603a8054610624906120db565b603b546001600160a01b031633146111c25760405162461bcd60e51b81526004016107479061216f565b6111cb816117aa565b50565b604051633185c44d60e21b81523060048201526001600160a01b03821660248201526000906daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106119190612115565b603b546001600160a01b031633146112775760405162461bcd60e51b81526004016107479061216f565b603b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006112d482610a8a565b9050336001600160a01b038216148061131057506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b61135c5760405162461bcd60e51b815260206004820152601760248201527f617070726f7665206e6f7420617574686f72697a6564210000000000000000006044820152606401610747565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b805b60148111156113e0576113ce60148261214e565b90506113db836014611813565b6113ba565b61075a8382611813565b61075a838383600161192f565b603a6108338282612211565b61075a83838360405180602001604052806000815250610cff565b600061142983610dd6565b805190915082156114805761143f813386611bd5565b6114805760405162461bcd60e51b815260206004820152601260248201527117d89d5c9b881b9bdd08185c1c1c9bdd995960721b6044820152606401610747565b600084815260066020908152604080832080546001600160a01b03191690556004909152902080546001600160a01b0383166001600160c81b031990911617600160a01b4264ffffffffff16021761ffff60c81b191661010160c81b179055606082015161159657600184016000818152600460205260409020546001600160a01b0316611594576001600254038510156115945760008181526004602090815260409182902085518154928701519387015160608801511515600160d01b0260ff60d01b19911515600160c81b029190911661ffff60c81b1964ffffffffff909616600160a01b026001600160c81b03199095166001600160a01b03909316929092179390931793909316929092171790555b505b6001600160a01b038116600081815260056020526040808220805463ffffffff19811663ffffffff91821660001901909116179055518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a450506003805460010190555050565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61167a84848461085a565b6001600160a01b0383163b158061170f5750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906116c0903390899088908890600401612358565b6020604051808303816000875af11580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190612395565b6001600160e01b031916145b6109285760405162461bcd60e51b815260206004820152602260248201527f736166655472616e7366657246726f6d20746f20756e73616665206164647265604482015261737360f01b6064820152608401610747565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806117805750819003601f19909101908152919050565b604051633e9f1edf60e11b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe90604401600060405180830381600087803b1580156117ff57600080fd5b505af1158015610dcf573d6000803e3d6000fd5b6001600160a01b0382166118585760405162461bcd60e51b815260206004820152600c60248201526b05f6d696e7420746f203078360a41b6044820152606401610747565b600254600081815260046020908152604080832080546001600160a01b0388166001600160c81b03199091168117600160a01b4264ffffffffff160217909155835260059091529020805467ffffffffffffffff19811663ffffffff8083168601811691821764010000000063ffffffff1990941690921783900481168601169091021790558181015b60405182906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082600101925082106118e257600255505050565b6001600160a01b0383166119785760405162461bcd60e51b815260206004820152601060248201526f05f7472616e7366657220746f203078360841b6044820152606401610747565b600061198383610dd6565b80519091506001600160a01b03868116908216146119e35760405162461bcd60e51b815260206004820152601860248201527f5f7472616e73666572206e6f742066726f6d206f776e657200000000000000006044820152606401610747565b8215611a39576119f4813386611bd5565b611a395760405162461bcd60e51b815260206004820152601660248201527517dd1c985b9cd9995c881b9bdd08185c1c1c9bdd995960521b6044820152606401610747565b600084815260066020908152604080832080546001600160a01b031916905560049091529020805460ff60d01b1964ffffffffff4216600160a01b026001600160c81b03199092166001600160a01b038916179190911716600160d01b1790556060820151611b5057600184016000818152600460205260409020546001600160a01b0316611b4e57600160025403851015611b4e5760008181526004602090815260409182902085518154928701519387015160608801511515600160d01b0260ff60d01b19911515600160c81b029190911661ffff60c81b1964ffffffffff909616600160a01b026001600160c81b03199095166001600160a01b03909316929092179390931793909316929092171790555b505b6001600160a01b03868116600081815260056020526040808220805463ffffffff1980821663ffffffff92831660001901831617909255948a1680845282842080549283169287166001019096169190911790945551879392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050505050565b6000826001600160a01b0316846001600160a01b03161480611c1057506000828152600660205260409020546001600160a01b038481169116145b80611c4057506001600160a01b0380851660009081526007602090815260408083209387168352929052205460ff165b949350505050565b6001600160e01b0319811681146111cb57600080fd5b600060208284031215611c7057600080fd5b8135611c7b81611c48565b9392505050565b60005b83811015611c9d578181015183820152602001611c85565b50506000910152565b60008151808452611cbe816020860160208601611c82565b601f01601f19169290920160200192915050565b602081526000611c7b6020830184611ca6565b600060208284031215611cf757600080fd5b5035919050565b80356001600160a01b0381168114611d1557600080fd5b919050565b60008060408385031215611d2d57600080fd5b611d3683611cfe565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611d7557611d75611d44565b604051601f8501601f19908116603f01168101908282118183101715611d9d57611d9d611d44565b81604052809350858152868686011115611db657600080fd5b858560208301376000602087830101525050509392505050565b60008060408385031215611de357600080fd5b823567ffffffffffffffff811115611dfa57600080fd5b8301601f81018513611e0b57600080fd5b611e1a85823560208401611d5a565b925050611e2960208401611cfe565b90509250929050565b600080600060608486031215611e4757600080fd5b611e5084611cfe565b9250611e5e60208501611cfe565b9150604084013590509250925092565b60008083601f840112611e8057600080fd5b50813567ffffffffffffffff811115611e9857600080fd5b602083019150836020828501011115611eb057600080fd5b9250929050565b60008060208385031215611eca57600080fd5b823567ffffffffffffffff811115611ee157600080fd5b611eed85828601611e6e565b90969095509350505050565b600060208284031215611f0b57600080fd5b611c7b82611cfe565b60008060208385031215611f2757600080fd5b823567ffffffffffffffff80821115611f3f57600080fd5b818501915085601f830112611f5357600080fd5b813581811115611f6257600080fd5b8660208260051b8501011115611f7757600080fd5b60209290920196919550909350505050565b80151581146111cb57600080fd5b60008060408385031215611faa57600080fd5b611fb383611cfe565b91506020830135611fc381611f89565b809150509250929050565b60008060008060608587031215611fe457600080fd5b843567ffffffffffffffff811115611ffb57600080fd5b61200787828801611e6e565b909550935061201a905060208601611cfe565b9150604085013561202a81611f89565b939692955090935050565b6000806000806080858703121561204b57600080fd5b61205485611cfe565b935061206260208601611cfe565b925060408501359150606085013567ffffffffffffffff81111561208557600080fd5b8501601f8101871361209657600080fd5b6120a587823560208401611d5a565b91505092959194509250565b600080604083850312156120c457600080fd5b6120cd83611cfe565b9150611e2960208401611cfe565b600181811c908216806120ef57607f821691505b60208210810361210f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561212757600080fd5b8151611c7b81611f89565b60008251612144818460208701611c82565b9190910192915050565b8181038181111561061157634e487b7160e01b600052601160045260246000fd5b6020808252601490820152736f6e6c794f776e6572206e6f74206f776e65722160601b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b601f82111561075a57600081815260208120601f850160051c810160208610156121ea5750805b601f850160051c820191505b81811015612209578281556001016121f6565b505050505050565b815167ffffffffffffffff81111561222b5761222b611d44565b61223f8161223984546120db565b846121c3565b602080601f831160018114612274576000841561225c5750858301515b600019600386901b1c1916600185901b178555612209565b600085815260208120601f198616915b828110156122a357888601518255948401946001909101908401612284565b50858210156122c15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008084546122df816120db565b600182811680156122f7576001811461230c5761233b565b60ff198416875282151583028701945061233b565b8860005260208060002060005b858110156123325781548a820152908401908201612319565b50505082870194505b50505050835161234f818360208801611c82565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061238b90830184611ca6565b9695505050505050565b6000602082840312156123a757600080fd5b8151611c7b81611c4856fea26469706673582212200d11667aba1d5cb854594ef026606f6582c71c3b6c592c2e533496c00a79099164736f6c63430008110033
Deployed Bytecode Sourcemap
18675:3442:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13316:310;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;13316:310:0;;;;;;;;975:18;;;:::i;:::-;;;;;;;:::i;2405:46::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2405:46:0;;;;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;2405:46:0;1533:203:1;20822:167:0;;;;;;:::i;:::-;;:::i;:::-;;15956:217;;;;;;:::i;:::-;;:::i;20125:114::-;;;;;;:::i;:::-;;:::i;18830:30::-;;;;;;;;;1404:129;;;:::i;:::-;;;3627:25:1;;;3615:2;3600:18;1404:129:0;3481:177:1;20995:175:0;;;;;;:::i;:::-;;:::i;1098:41::-;;1137:2;1098:41;;2258:47;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2258:47:0;;;;-1:-1:-1;;;2258:47:0;;;;;-1:-1:-1;;;2258:47:0;;;;;-1:-1:-1;;;2258:47:0;;;;;;;;;-1:-1:-1;;;;;4231:32:1;;;4213:51;;4312:12;4300:25;;;4295:2;4280:18;;4273:53;4369:14;;4362:22;4342:18;;;4335:50;;;;4428:14;4421:22;4416:2;4401:18;;4394:50;4200:3;4185:19;2258:47:0;3996:454:1;20284:107:0;;;;;;:::i;:::-;;:::i;21176:183::-;;;;;;:::i;:::-;;:::i;19740:106::-;;;;;;:::i;:::-;;:::i;2312:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;5595:10:1;5632:15;;;5614:34;;5684:15;;;;5679:2;5664:18;;5657:43;5558:18;2312:51:0;5415:291:1;4595:122:0;;;;;;:::i;:::-;;:::i;4246:187::-;;;;;;:::i;:::-;;:::i;1030:26::-;;;;;;19852:223;;;;;;:::i;:::-;;:::i;14863:20::-;;;;;-1:-1:-1;;;;;14863:20:0;;;1001;;;:::i;20630:186::-;;;;;;:::i;:::-;;:::i;16935:135::-;;17027:42;16935:135;;16181:288;;;;;;:::i;:::-;;:::i;21365:211::-;;;;;;:::i;:::-;;:::i;2786:1371::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;8526:13:1;;-1:-1:-1;;;;;8522:39:1;8504:58;;8622:4;8610:17;;;8604:24;8630:12;8600:43;8578:20;;;8571:73;8714:4;8702:17;;;8696:24;8689:32;8682:40;8660:20;;;8653:70;8793:4;8781:17;;;8775:24;8768:32;8761:40;8739:20;;;8732:70;;;;8491:3;8476:19;;8305:503;18867:371:0;;;;;;:::i;:::-;;:::i;21823:256::-;;;;;;:::i;:::-;;:::i;13843:26::-;;;:::i;20443:132::-;;;;;;:::i;:::-;;:::i;1063:26::-;;;;;;21626:163;;;;;;:::i;:::-;;:::i;19599:98::-;19688:1;19599:98;;2458:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;15018:170;;;;;;:::i;:::-;;:::i;13316:310::-;13385:4;-1:-1:-1;;;;;;;;;13410:18:0;;;;:91;;-1:-1:-1;;;;;;;;;;13483:18:0;;;13410:91;:164;;;-1:-1:-1;;;;;;;;;;13556:18:0;;;13410:164;13402:172;13316:310;-1:-1:-1;;13316:310:0:o;975:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20822:167::-;18489:60;;-1:-1:-1;;;18489:60:0;;18532:4;18489:60;;;9675:34:1;-1:-1:-1;;;;;9745:15:1;;9725:18;;;9718:43;20925:9:0;;17027:42;;18489:34;;9610:18:1;;18489:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18484:130;;18573:29;;-1:-1:-1;;;18573:29:0;;-1:-1:-1;;;;;1697:32:1;;18573:29:0;;;1679:51:1;1652:18;;18573:29:0;;;;;;;;18484:130;20947:34:::1;20961:9;20972:8;20947:13;:34::i;:::-;20822:167:::0;;;:::o;15956:217::-;16047:4;16064:13;16107:5;16090:23;;;;;;;;:::i;:::-;;;;-1:-1:-1;;16090:23:0;;;;;;;;;16080:34;;16090:23;16080:34;;;;16132:20;;;;:13;:20;;;;;-1:-1:-1;;;;;16132:33:0;;;;;;;;;;;;;-1:-1:-1;;15956:217:0;;;;:::o;20125:114::-;19453:34;;;;;;;;;;;;;;-1:-1:-1;;;19453:34:0;;;19476:10;19453:12;:34::i;:::-;19445:91;;;;-1:-1:-1;;;19445:91:0;;10518:2:1;19445:91:0;;;10500:21:1;10557:2;10537:18;;;10530:30;10596:29;10576:18;;;10569:57;10643:18;;19445:91:0;10316:351:1;19445:91:0;20212:19:::1;20218:3;20223:7;20212:5;:19::i;:::-;20125:114:::0;;:::o;1404:129::-;1456:7;19688:1;1497:11;;1483;;:25;;;;:::i;:::-;:42;;;;:::i;:::-;1476:49;;1404:129;:::o;20995:175::-;21104:5;-1:-1:-1;;;;;17565:19:0;;:10;:19;17561:74;;21122:40:::1;21141:5;21148:3;21153:8;21122:18;:40::i;:::-;17617:7:::0;;17561:74;-1:-1:-1;;;;;17811:17:0;;;:21;17807:338;;17854:61;;-1:-1:-1;;;17854:61:0;;17897:4;17854:61;;;9675:34:1;17904:10:0;9725:18:1;;;9718:43;17027:42:0;;17854:34;;9610:18:1;;17854:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17849:285;;18088:30;;-1:-1:-1;;;18088:30:0;;18107:10;18088:30;;;1679:51:1;1652:18;;18088:30:0;1533:203:1;17849:285:0;21122:40:::1;21141:5;21148:3;21153:8;21122:18;:40::i;:::-;20995:175:::0;;;;:::o;20284:107::-;14962:5;;-1:-1:-1;;;;;14962:5:0;14971:10;14962:19;14954:52;;;;-1:-1:-1;;;14954:52:0;;;;;;;:::i;:::-;20361:22:::1;20378:4;;20361:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;20361:16:0::1;::::0;-1:-1:-1;;;20361:22:0:i:1;21176:183::-:0;21289:5;-1:-1:-1;;;;;17565:19:0;;:10;:19;17561:74;;21307:44:::1;21330:5;21337:3;21342:8;21307:22;:44::i;17561:74::-:0;-1:-1:-1;;;;;17811:17:0;;;:21;17807:338;;17854:61;;-1:-1:-1;;;17854:61:0;;17897:4;17854:61;;;9675:34:1;17904:10:0;9725:18:1;;;9718:43;17027:42:0;;17854:34;;9610:18:1;;17854:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17849:285;;18088:30;;-1:-1:-1;;;18088:30:0;;18107:10;18088:30;;;1679:51:1;1652:18;;18088:30:0;1533:203:1;17849:285:0;21307:44:::1;21330:5;21337:3;21342:8;21307:22;:44::i;19740:106::-:0;14962:5;;-1:-1:-1;;;;;14962:5:0;14971:10;14962:19;14954:52;;;;-1:-1:-1;;;14954:52:0;;;;;;;:::i;4595:122::-;4651:7;4678:25;4694:8;4678:15;:25::i;:::-;:31;;4595:122;-1:-1:-1;;4595:122:0:o;4246:187::-;4310:7;-1:-1:-1;;;;;4338:20:0;;4330:49;;;;-1:-1:-1;;;4330:49:0;;11453:2:1;4330:49:0;;;11435:21:1;11492:2;11472:18;;;11465:30;-1:-1:-1;;;11511:18:1;;;11504:46;11567:18;;4330:49:0;11251:340:1;4330:49:0;-1:-1:-1;;;;;;4397:20:0;;;;;:12;:20;;;;;:28;;;;4246:187::o;19852:223::-;14962:5;;-1:-1:-1;;;;;14962:5:0;14971:10;14962:19;14954:52;;;;-1:-1:-1;;;14954:52:0;;;;;;;:::i;:::-;19943:9;19931::::1;19993:73;20011:26;20017:9;;20027:1;20017:12;;;;;;;:::i;:::-;;;;;;;20031:5;20011;:26::i;:::-;20057:3;;:7:::0;;::::1;19993:73;;19920:155;;19852:223:::0;;:::o;1001:20::-;;;;;;;:::i;20630:186::-;18489:60;;-1:-1:-1;;;18489:60:0;;18532:4;18489:60;;;9675:34:1;-1:-1:-1;;;;;9745:15:1;;9725:18;;;9718:43;20741:9:0;;17027:42;;18489:34;;9610:18:1;;18489:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18484:130;;18573:29;;-1:-1:-1;;;18573:29:0;;-1:-1:-1;;;;;1697:32:1;;18573:29:0;;;1679:51:1;1652:18;;18573:29:0;1533:203:1;18484:130:0;20763:45:::1;20787:9;20798;20763:23;:45::i;16181:288::-:0;14962:5;;-1:-1:-1;;;;;14962:5:0;14971:10;14962:19;14954:52;;;;-1:-1:-1;;;14954:52:0;;;;;;;:::i;:::-;16296:13:::1;16339:5;;16322:23;;;;;;;;;:::i;:::-;;::::0;;;;::::1;-1:-1:-1::0;;16322:23:0;;;;;;16312:34;;16322:23:::1;16312:34:::0;;::::1;::::0;16357:20:::1;::::0;;;:13:::1;:20:::0;;;;;-1:-1:-1;;;;;16357:33:0;::::1;::::0;;;;;;;;;:41;;-1:-1:-1;;16357:41:0::1;::::0;::::1;;;::::0;;16312:34;;-1:-1:-1;16357:33:0;16312:34;;16414:47:::1;::::0;16428:5;;;;16414:47:::1;:::i;:::-;;::::0;;;;::::1;::::0;;565:14:1;;558:22;540:41;;16414:47:0;::::1;::::0;528:2:1;513:18;16414:47:0::1;;;;;;;16285:184;16181:288:::0;;;;:::o;21365:211::-;21499:5;-1:-1:-1;;;;;17565:19:0;;:10;:19;17561:74;;21517:51:::1;21540:5;21547:3;21552:8;21562:5;21517:22;:51::i;:::-;17617:7:::0;;17561:74;-1:-1:-1;;;;;17811:17:0;;;:21;17807:338;;17854:61;;-1:-1:-1;;;17854:61:0;;17897:4;17854:61;;;9675:34:1;17904:10:0;9725:18:1;;;9718:43;17027:42:0;;17854:34;;9610:18:1;;17854:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17849:285;;18088:30;;-1:-1:-1;;;18088:30:0;;18107:10;18088:30;;;1679:51:1;1652:18;;18088:30:0;1533:203:1;17849:285:0;21517:51:::1;21540:5;21547:3;21552:8;21562:5;21517:22;:51::i;:::-;21365:211:::0;;;;;:::o;2786:1371::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2980:8:0;19688:1;3067:9;:27;;3059:80;;;;-1:-1:-1;;;3059:80:0;;12208:2:1;3059:80:0;;;12190:21:1;12247:2;12227:18;;;12220:30;12286:34;12266:18;;;12259:62;-1:-1:-1;;;12337:18:1;;;12330:38;12385:19;;3059:80:0;12006:404:1;3059:80:0;3219:27;3249:21;;;:10;:21;;;;;;;;;3219:51;;;;;;;;;-1:-1:-1;;;;;3219:51:0;;;;;;-1:-1:-1;;;3219:51:0;;;;;;;;;;;-1:-1:-1;;;3219:51:0;;;;;;;;;;;;;-1:-1:-1;;;3219:51:0;;;;;;;;;;;3371:30;;;;:52;;;3406:10;:17;;;3405:18;3371:52;3367:75;;;3432:10;2786:1371;-1:-1:-1;;;2786:1371:0:o;3367:75::-;3542:10;:17;;;3541:18;3533:60;;;;-1:-1:-1;;;3533:60:0;;12617:2:1;3533:60:0;;;12599:21:1;12656:2;12636:18;;;12629:30;12695:31;12675:18;;;12668:59;12744:18;;3533:60:0;12415:353:1;3533:60:0;3693:11;;3681:9;:23;3673:76;;;;-1:-1:-1;;;3673:76:0;;12975:2:1;3673:76:0;;;12957:21:1;13014:2;12994:18;;;12987:30;13053:34;13033:18;;;13026:62;-1:-1:-1;;;13104:18:1;;;13097:38;13152:19;;3673:76:0;12773:404:1;3673:76:0;4056:53;-1:-1:-1;;4073:11:0;;;4103:1;4062:23;;;:10;:23;;;;;:29;4073:11;;-1:-1:-1;;;;;;4062:29:0;4056:53;;;-1:-1:-1;4128:21:0;;;;:10;:21;;;;;;;;;4121:28;;;;;;;;;-1:-1:-1;;;;;4121:28:0;;;;;-1:-1:-1;;;4121:28:0;;;;;;;;;;;-1:-1:-1;;;4121:28:0;;;;;;;;;;;;;-1:-1:-1;;;4121:28:0;;;;;;;;;;;;;2786:1371;-1:-1:-1;;2786:1371:0:o;18867:371::-;18938:18;;;;18937:19;18929:57;;;;-1:-1:-1;;;18929:57:0;;13384:2:1;18929:57:0;;;13366:21:1;13423:2;13403:18;;;13396:30;13462:27;13442:18;;;13435:55;13507:18;;18929:57:0;13182:349:1;18929:57:0;18997:18;:25;;-1:-1:-1;;18997:25:0;19018:4;18997:25;;;19056:5;:17;;-1:-1:-1;;;;;19056:17:0;;-1:-1:-1;;;;;;19056:17:0;;;;;;19101:16;;;;;;;;;;;;-1:-1:-1;;;19101:16:0;;;;18997:18;;19101:16;;18997:18;19101:16;:::i;:::-;-1:-1:-1;19143:18:0;;;;;;;;;;;;-1:-1:-1;;;19143:18:0;;;;:6;;:18;;:6;:18;:::i;:::-;-1:-1:-1;19688:1:0;19187:11;:28;-1:-1:-1;18867:371:0:o;21823:256::-;21903:13;21966:1;21937:17;21945:8;21937:7;:17::i;:::-;-1:-1:-1;;;;;21937:31:0;;21929:65;;;;-1:-1:-1;;;21929:65:0;;15942:2:1;21929:65:0;;;15924:21:1;15981:2;15961:18;;;15954:30;-1:-1:-1;;;16000:18:1;;;15993:51;16061:18;;21929:65:0;15740:345:1;21929:65:0;22036:12;22050:19;22060:8;22050:9;:19::i;:::-;22019:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22005:66;;21823:256;;;:::o;13843:26::-;;;;;;;:::i;20443:132::-;14962:5;;-1:-1:-1;;;;;14962:5:0;14971:10;14962:19;14954:52;;;;-1:-1:-1;;;14954:52:0;;;;;;;:::i;:::-;20530:37:::1;20554:12;20530:23;:37::i;:::-;20443:132:::0;:::o;21626:163::-;21721:60;;-1:-1:-1;;;21721:60:0;;21764:4;21721:60;;;9675:34:1;-1:-1:-1;;;;;9745:15:1;;9725:18;;;9718:43;21697:4:0;;17027:42;;21721:34;;9610:18:1;;21721:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15018:170::-;14962:5;;-1:-1:-1;;;;;14962:5:0;14971:10;14962:19;14954:52;;;;-1:-1:-1;;;14954:52:0;;;;;;;:::i;:::-;15104:5:::1;::::0;;-1:-1:-1;;;;;15120:12:0;;::::1;-1:-1:-1::0;;;;;;15120:12:0;::::1;::::0;::::1;::::0;;;15148:32:::1;::::0;15104:5;::::1;::::0;15120:12;15104:5;;15148:32:::1;::::0;15089:12:::1;::::0;15148:32:::1;15078:110;15018:170:::0;:::o;12348:340::-;12427:14;12444:17;12452:8;12444:7;:17::i;:::-;12427:34;-1:-1:-1;12480:10:0;-1:-1:-1;;;;;12480:20:0;;;;:60;;-1:-1:-1;;;;;;12504:24:0;;;;;;:16;:24;;;;;;;;12529:10;12504:36;;;;;;;;;;12480:60;12472:113;;;;-1:-1:-1;;;12472:113:0;;17317:2:1;12472:113:0;;;17299:21:1;17356:2;17336:18;;;17329:30;17395:25;17375:18;;;17368:53;17438:18;;12472:113:0;17115:347:1;12472:113:0;12596:21;;;;:11;:21;;;;;;:32;;-1:-1:-1;;;;;;12596:32:0;-1:-1:-1;;;;;12596:32:0;;;;;;;;;12644:36;;12596:21;;12644:36;;;;;;;12416:272;12348:340;;:::o;5821:306::-;5918:7;5936:140;1137:2;5943:13;:28;5936:140;;;5988:29;1137:2;5988:29;;:::i;:::-;;;6032:32;6046:3;1137:2;6032:13;:32::i;:::-;5936:140;;;6086:33;6100:3;6105:13;6086;:33::i;11574:139::-;11668:37;11678:5;11685:3;11690:8;11700:4;11668:9;:37::i;13878:101::-;13952:12;:19;13967:4;13952:12;:19;:::i;12152:154::-;12256:42;12273:5;12280:3;12285:8;12256:42;;;;;;;;;;;;:16;:42::i;6206:2440::-;6626:27;6656:25;6672:8;6656:15;:25::i;:::-;6709:16;;6626:55;;-1:-1:-1;6800:136:0;;;;6828:48;6847:6;6855:10;6867:8;6828:18;:48::i;:::-;6820:116;;;;-1:-1:-1;;;6820:116:0;;17669:2:1;6820:116:0;;;17651:21:1;17708:2;17688:18;;;17681:30;-1:-1:-1;;;17727:18:1;;;17720:48;17785:18;;6820:116:0;17467:342:1;6820:116:0;7024:21;;;;:11;:21;;;;;;;;7017:28;;-1:-1:-1;;;;;;7017:28:0;;;7102:10;:20;;;;;:35;;-1:-1:-1;;;;;7102:35:0;;-1:-1:-1;;;;;;7148:59:0;;;;-1:-1:-1;;;7191:15:0;7148:59;;;;-1:-1:-1;;;;7384:43:0;-1:-1:-1;;;7384:43:0;;;7539:26;;;;7534:873;;7837:1;7826:12;;7796:27;7857:31;;;:10;:31;;;;;:37;-1:-1:-1;;;;;7857:37:0;7853:543;;8042:1;8028:11;;:15;8017:8;:26;8013:368;;;8317:31;;;;:10;:31;;;;;;;;;:44;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8317:44:0;-1:-1:-1;;;;8317:44:0;;;-1:-1:-1;;;8317:44:0;;;;;-1:-1:-1;;;;8317:44:0;;;;-1:-1:-1;;;8317:44:0;-1:-1:-1;;;;;;8317:44:0;;;-1:-1:-1;;;;;8317:44:0;;;;;;;;;;;;;;;;;;;;;;8013:368;7567:840;7534:873;-1:-1:-1;;;;;8460:20:0;;;;;;:12;:20;;;;;;:30;;-1:-1:-1;;8460:30:0;;;;;;-1:-1:-1;;8460:30:0;;;;;;;8539:38;8568:8;;8460:20;8539:38;;8460:20;;8539:38;-1:-1:-1;;8624:11:0;:13;;;;;;-1:-1:-1;;6206:2440:0:o;12694:211::-;12799:10;12782:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;12782:39:0;;;;;;;;;;;;:51;;-1:-1:-1;;12782:51:0;;;;;;;;;;12849:48;;540:41:1;;;12782:39:0;;12799:10;12849:48;;513:18:1;12849:48:0;;;;;;;12694:211;;:::o;11719:427::-;11842:34;11855:5;11862:3;11867:8;11842:12;:34::i;:::-;-1:-1:-1;;;;;11895:15:0;;;:20;;:190;;-1:-1:-1;11932:91:0;;-1:-1:-1;;;11932:91:0;;;12040:45;-1:-1:-1;;;;;11932:55:0;;;12040:45;;11932:91;;11988:10;;12000:5;;12007:8;;12017:5;;11932:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;11932:153:0;;11895:190;11887:251;;;;-1:-1:-1;;;11887:251:0;;18764:2:1;11887:251:0;;;18746:21:1;18803:2;18783:18;;;18776:30;18842:34;18822:18;;;18815:62;-1:-1:-1;;;18893:18:1;;;18886:32;18935:19;;11887:251:0;18562:398:1;13987:653:0;14059:18;14140:4;14133;14127:11;14123:22;14172:1;14166:4;14159:15;14203:4;14200:1;14196:12;14188:20;;;14235:1;14229:4;14222:15;14264:4;14302:6;14284:223;14353:1;14347:4;14343:12;14335:20;;14405:2;14399:4;14395:13;14391:2;14387:22;14381:4;14373:37;14446:2;14436:13;;14467:25;14284:223;14467:25;-1:-1:-1;14537:14:0;;;-1:-1:-1;;14573:15:0;;;14602:20;;;14573:15;13987:653;-1:-1:-1;13987:653:0:o;17222:149::-;17297:66;;-1:-1:-1;;;17297:66:0;;17343:4;17297:66;;;9675:34:1;-1:-1:-1;;;;;9745:15:1;;9725:18;;;9718:43;17027:42:0;;17297:37;;9610:18:1;;17297:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4832:899;-1:-1:-1;;;;;4967:17:0;;4959:42;;;;-1:-1:-1;;;4959:42:0;;19167:2:1;4959:42:0;;;19149:21:1;19206:2;19186:18;;;19179:30;-1:-1:-1;;;19225:18:1;;;19218:42;19277:18;;4959:42:0;18965:336:1;4959:42:0;5116:11;;5097:16;5245:20;;;:10;:20;;;;;;;;:32;;-1:-1:-1;;;;;5245:32:0;;-1:-1:-1;;;;;;5288:59:0;;;;;-1:-1:-1;;;5331:15:0;5288:59;;;;;;;5414:17;;:12;:17;;;;;:44;;-1:-1:-1;;5469:49:0;;5414:44;;;;;;;;5469:49;;;;-1:-1:-1;;5414:44:0;;;;;;5469:49;;;;;;;;;;;;;;5155:18;;;5569:77;5579:35;;5605:8;;-1:-1:-1;;;;;5579:35:0;;;5596:1;;5579:35;;5596:1;;5579:35;5638:6;5625:10;;;;;;:19;5569:77;;5702:11;:20;-1:-1:-1;;;4832:899:0:o;8895:2284::-;-1:-1:-1;;;;;9072:17:0;;9064:46;;;;-1:-1:-1;;;9064:46:0;;19508:2:1;9064:46:0;;;19490:21:1;19547:2;19527:18;;;19520:30;-1:-1:-1;;;19566:18:1;;;19559:46;19622:18;;9064:46:0;19306:340:1;9064:46:0;9187:27;9217:25;9233:8;9217:15;:25::i;:::-;9270:16;;9187:55;;-1:-1:-1;;;;;;9350:15:0;;;;;;;9342:52;;;;-1:-1:-1;;;9342:52:0;;19853:2:1;9342:52:0;;;19835:21:1;19892:2;19872:18;;;19865:30;19931:26;19911:18;;;19904:54;19975:18;;9342:52:0;19651:348:1;9342:52:0;9473:14;9469:135;;;9497:48;9516:6;9524:10;9536:8;9497:18;:48::i;:::-;9489:115;;;;-1:-1:-1;;;9489:115:0;;20206:2:1;9489:115:0;;;20188:21:1;20245:2;20225:18;;;20218:30;-1:-1:-1;;;20264:18:1;;;20257:52;20326:18;;9489:115:0;20004:346:1;9489:115:0;9688:21;;;;:11;:21;;;;;;;;9681:28;;-1:-1:-1;;;;;;9681:28:0;;;9751:10;:20;;;;;:32;;-1:-1:-1;;;;9794:59:0;9837:15;9794:59;-1:-1:-1;;;9794:59:0;-1:-1:-1;;;;;;9794:59:0;;;-1:-1:-1;;;;;9751:32:0;;9794:59;;;;;9937:43;-1:-1:-1;;;9937:43:0;;;10116:26;;;;10111:874;;10414:1;10403:12;;10373:27;10434:31;;;:10;:31;;;;;:37;-1:-1:-1;;;;;10434:37:0;10430:544;;10619:1;10605:11;;:15;10594:8;:26;10590:369;;;10895:31;;;;:10;:31;;;;;;;;;:44;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10895:44:0;-1:-1:-1;;;;10895:44:0;;;-1:-1:-1;;;10895:44:0;;;;;-1:-1:-1;;;;10895:44:0;;;;-1:-1:-1;;;10895:44:0;-1:-1:-1;;;;;;10895:44:0;;;-1:-1:-1;;;;;10895:44:0;;;;;;;;;;;;;;;;;;;;;;10590:369;10144:841;10111:874;-1:-1:-1;;;;;11029:19:0;;;;;;;:12;:19;;;;;;:29;;-1:-1:-1;;11029:29:0;;;;;;;-1:-1:-1;;11029:29:0;;;;;;;11069:17;;;;;;;;;:27;;;;;;;;-1:-1:-1;11069:27:0;;;;;;;;;;;11140:30;11161:8;;11069:17;11029:19;11140:30;;;9006:2172;;8895:2284;;;;:::o;12996:278::-;13113:4;13148:8;-1:-1:-1;;;;;13138:18:0;:6;-1:-1:-1;;;;;13138:18:0;;:72;;;-1:-1:-1;13177:21:0;;;;:11;:21;;;;;;-1:-1:-1;;;;;13177:33:0;;;:21;;:33;13138:72;:127;;;-1:-1:-1;;;;;;13231:24:0;;;;;;;:16;:24;;;;;;;;:34;;;;;;;;;;;;13138:127;13130:136;12996:278;-1:-1:-1;;;;12996:278:0:o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:1;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:1:o;2178:127::-;2239:10;2234:3;2230:20;2227:1;2220:31;2270:4;2267:1;2260:15;2294:4;2291:1;2284:15;2310:632;2375:5;2405:18;2446:2;2438:6;2435:14;2432:40;;;2452:18;;:::i;:::-;2527:2;2521:9;2495:2;2581:15;;-1:-1:-1;;2577:24:1;;;2603:2;2573:33;2569:42;2557:55;;;2627:18;;;2647:22;;;2624:46;2621:72;;;2673:18;;:::i;:::-;2713:10;2709:2;2702:22;2742:6;2733:15;;2772:6;2764;2757:22;2812:3;2803:6;2798:3;2794:16;2791:25;2788:45;;;2829:1;2826;2819:12;2788:45;2879:6;2874:3;2867:4;2859:6;2855:17;2842:44;2934:1;2927:4;2918:6;2910;2906:19;2902:30;2895:41;;;;2310:632;;;;;:::o;2947:529::-;3025:6;3033;3086:2;3074:9;3065:7;3061:23;3057:32;3054:52;;;3102:1;3099;3092:12;3054:52;3142:9;3129:23;3175:18;3167:6;3164:30;3161:50;;;3207:1;3204;3197:12;3161:50;3230:22;;3283:4;3275:13;;3271:27;-1:-1:-1;3261:55:1;;3312:1;3309;3302:12;3261:55;3335:76;3403:7;3398:2;3385:16;3378:4;3374:2;3370:13;3335:76;:::i;:::-;3325:86;;;3430:40;3464:4;3453:9;3449:20;3430:40;:::i;:::-;3420:50;;2947:529;;;;;:::o;3663:328::-;3740:6;3748;3756;3809:2;3797:9;3788:7;3784:23;3780:32;3777:52;;;3825:1;3822;3815:12;3777:52;3848:29;3867:9;3848:29;:::i;:::-;3838:39;;3896:38;3930:2;3919:9;3915:18;3896:38;:::i;:::-;3886:48;;3981:2;3970:9;3966:18;3953:32;3943:42;;3663:328;;;;;:::o;4455:348::-;4507:8;4517:6;4571:3;4564:4;4556:6;4552:17;4548:27;4538:55;;4589:1;4586;4579:12;4538:55;-1:-1:-1;4612:20:1;;4655:18;4644:30;;4641:50;;;4687:1;4684;4677:12;4641:50;4724:4;4716:6;4712:17;4700:29;;4776:3;4769:4;4760:6;4752;4748:19;4744:30;4741:39;4738:59;;;4793:1;4790;4783:12;4738:59;4455:348;;;;;:::o;4808:411::-;4879:6;4887;4940:2;4928:9;4919:7;4915:23;4911:32;4908:52;;;4956:1;4953;4946:12;4908:52;4996:9;4983:23;5029:18;5021:6;5018:30;5015:50;;;5061:1;5058;5051:12;5015:50;5100:59;5151:7;5142:6;5131:9;5127:22;5100:59;:::i;:::-;5178:8;;5074:85;;-1:-1:-1;4808:411:1;-1:-1:-1;;;;4808:411:1:o;5224:186::-;5283:6;5336:2;5324:9;5315:7;5311:23;5307:32;5304:52;;;5352:1;5349;5342:12;5304:52;5375:29;5394:9;5375:29;:::i;5711:615::-;5797:6;5805;5858:2;5846:9;5837:7;5833:23;5829:32;5826:52;;;5874:1;5871;5864:12;5826:52;5914:9;5901:23;5943:18;5984:2;5976:6;5973:14;5970:34;;;6000:1;5997;5990:12;5970:34;6038:6;6027:9;6023:22;6013:32;;6083:7;6076:4;6072:2;6068:13;6064:27;6054:55;;6105:1;6102;6095:12;6054:55;6145:2;6132:16;6171:2;6163:6;6160:14;6157:34;;;6187:1;6184;6177:12;6157:34;6240:7;6235:2;6225:6;6222:1;6218:14;6214:2;6210:23;6206:32;6203:45;6200:65;;;6261:1;6258;6251:12;6200:65;6292:2;6284:11;;;;;6314:6;;-1:-1:-1;5711:615:1;;-1:-1:-1;;;;5711:615:1:o;6331:118::-;6417:5;6410:13;6403:21;6396:5;6393:32;6383:60;;6439:1;6436;6429:12;6454:315;6519:6;6527;6580:2;6568:9;6559:7;6555:23;6551:32;6548:52;;;6596:1;6593;6586:12;6548:52;6619:29;6638:9;6619:29;:::i;:::-;6609:39;;6698:2;6687:9;6683:18;6670:32;6711:28;6733:5;6711:28;:::i;:::-;6758:5;6748:15;;;6454:315;;;;;:::o;7014:614::-;7100:6;7108;7116;7124;7177:2;7165:9;7156:7;7152:23;7148:32;7145:52;;;7193:1;7190;7183:12;7145:52;7233:9;7220:23;7266:18;7258:6;7255:30;7252:50;;;7298:1;7295;7288:12;7252:50;7337:59;7388:7;7379:6;7368:9;7364:22;7337:59;:::i;:::-;7415:8;;-1:-1:-1;7311:85:1;-1:-1:-1;7469:38:1;;-1:-1:-1;7503:2:1;7488:18;;7469:38;:::i;:::-;7459:48;;7557:2;7546:9;7542:18;7529:32;7570:28;7592:5;7570:28;:::i;:::-;7014:614;;;;-1:-1:-1;7014:614:1;;-1:-1:-1;;7014:614:1:o;7633:667::-;7728:6;7736;7744;7752;7805:3;7793:9;7784:7;7780:23;7776:33;7773:53;;;7822:1;7819;7812:12;7773:53;7845:29;7864:9;7845:29;:::i;:::-;7835:39;;7893:38;7927:2;7916:9;7912:18;7893:38;:::i;:::-;7883:48;;7978:2;7967:9;7963:18;7950:32;7940:42;;8033:2;8022:9;8018:18;8005:32;8060:18;8052:6;8049:30;8046:50;;;8092:1;8089;8082:12;8046:50;8115:22;;8168:4;8160:13;;8156:27;-1:-1:-1;8146:55:1;;8197:1;8194;8187:12;8146:55;8220:74;8286:7;8281:2;8268:16;8263:2;8259;8255:11;8220:74;:::i;:::-;8210:84;;;7633:667;;;;;;;:::o;8813:260::-;8881:6;8889;8942:2;8930:9;8921:7;8917:23;8913:32;8910:52;;;8958:1;8955;8948:12;8910:52;8981:29;9000:9;8981:29;:::i;:::-;8971:39;;9029:38;9063:2;9052:9;9048:18;9029:38;:::i;9078:380::-;9157:1;9153:12;;;;9200;;;9221:61;;9275:4;9267:6;9263:17;9253:27;;9221:61;9328:2;9320:6;9317:14;9297:18;9294:38;9291:161;;9374:10;9369:3;9365:20;9362:1;9355:31;9409:4;9406:1;9399:15;9437:4;9434:1;9427:15;9291:161;;9078:380;;;:::o;9772:245::-;9839:6;9892:2;9880:9;9871:7;9867:23;9863:32;9860:52;;;9908:1;9905;9898:12;9860:52;9940:9;9934:16;9959:28;9981:5;9959:28;:::i;10022:289::-;10153:3;10191:6;10185:13;10207:66;10266:6;10261:3;10254:4;10246:6;10242:17;10207:66;:::i;:::-;10289:16;;;;;10022:289;-1:-1:-1;;10022:289:1:o;10672:225::-;10739:9;;;10760:11;;;10757:134;;;10813:10;10808:3;10804:20;10801:1;10794:31;10848:4;10845:1;10838:15;10876:4;10873:1;10866:15;10902:344;11104:2;11086:21;;;11143:2;11123:18;;;11116:30;-1:-1:-1;;;11177:2:1;11162:18;;11155:50;11237:2;11222:18;;10902:344::o;11596:127::-;11657:10;11652:3;11648:20;11645:1;11638:31;11688:4;11685:1;11678:15;11712:4;11709:1;11702:15;11728:273;11913:6;11905;11900:3;11887:33;11869:3;11939:16;;11964:13;;;11939:16;11728:273;-1:-1:-1;11728:273:1:o;13662:545::-;13764:2;13759:3;13756:11;13753:448;;;13800:1;13825:5;13821:2;13814:17;13870:4;13866:2;13856:19;13940:2;13928:10;13924:19;13921:1;13917:27;13911:4;13907:38;13976:4;13964:10;13961:20;13958:47;;;-1:-1:-1;13999:4:1;13958:47;14054:2;14049:3;14045:12;14042:1;14038:20;14032:4;14028:31;14018:41;;14109:82;14127:2;14120:5;14117:13;14109:82;;;14172:17;;;14153:1;14142:13;14109:82;;;14113:3;;;13662:545;;;:::o;14383:1352::-;14509:3;14503:10;14536:18;14528:6;14525:30;14522:56;;;14558:18;;:::i;:::-;14587:97;14677:6;14637:38;14669:4;14663:11;14637:38;:::i;:::-;14631:4;14587:97;:::i;:::-;14739:4;;14803:2;14792:14;;14820:1;14815:663;;;;15522:1;15539:6;15536:89;;;-1:-1:-1;15591:19:1;;;15585:26;15536:89;-1:-1:-1;;14340:1:1;14336:11;;;14332:24;14328:29;14318:40;14364:1;14360:11;;;14315:57;15638:81;;14785:944;;14815:663;13609:1;13602:14;;;13646:4;13633:18;;-1:-1:-1;;14851:20:1;;;14969:236;14983:7;14980:1;14977:14;14969:236;;;15072:19;;;15066:26;15051:42;;15164:27;;;;15132:1;15120:14;;;;14999:19;;14969:236;;;14973:3;15233:6;15224:7;15221:19;15218:201;;;15294:19;;;15288:26;-1:-1:-1;;15377:1:1;15373:14;;;15389:3;15369:24;15365:37;15361:42;15346:58;15331:74;;15218:201;-1:-1:-1;;;;;15465:1:1;15449:14;;;15445:22;15432:36;;-1:-1:-1;14383:1352:1:o;16090:1020::-;16266:3;16295:1;16328:6;16322:13;16358:36;16384:9;16358:36;:::i;:::-;16413:1;16430:18;;;16457:133;;;;16604:1;16599:356;;;;16423:532;;16457:133;-1:-1:-1;;16490:24:1;;16478:37;;16563:14;;16556:22;16544:35;;16535:45;;;-1:-1:-1;16457:133:1;;16599:356;16630:6;16627:1;16620:17;16660:4;16705:2;16702:1;16692:16;16730:1;16744:165;16758:6;16755:1;16752:13;16744:165;;;16836:14;;16823:11;;;16816:35;16879:16;;;;16773:10;;16744:165;;;16748:3;;;16938:6;16933:3;16929:16;16922:23;;16423:532;;;;;16986:6;16980:13;17002:68;17061:8;17056:3;17049:4;17041:6;17037:17;17002:68;:::i;:::-;17086:18;;16090:1020;-1:-1:-1;;;;16090:1020:1:o;17814:489::-;-1:-1:-1;;;;;18083:15:1;;;18065:34;;18135:15;;18130:2;18115:18;;18108:43;18182:2;18167:18;;18160:34;;;18230:3;18225:2;18210:18;;18203:31;;;18008:4;;18251:46;;18277:19;;18269:6;18251:46;:::i;:::-;18243:54;17814:489;-1:-1:-1;;;;;;17814:489:1:o;18308:249::-;18377:6;18430:2;18418:9;18409:7;18405:23;18401:32;18398:52;;;18446:1;18443;18436:12;18398:52;18478:9;18472:16;18497:30;18521:5;18497:30;:::i
Swarm Source
ipfs://0d11667aba1d5cb854594ef026606f6582c71c3b6c592c2e533496c00a790991
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.