Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|
21006722 | 66 days ago | 0 ETH | |||||
20705399 | 108 days ago | 0 ETH | |||||
20648759 | 115 days ago | 0 ETH | |||||
20630177 | 118 days ago | 0 ETH | |||||
20606330 | 121 days ago | 0 ETH | |||||
20570541 | 126 days ago | 0 ETH | |||||
20524110 | 133 days ago | 0 ETH | |||||
20518629 | 134 days ago | 0 ETH | |||||
20514121 | 134 days ago | 0 ETH | |||||
20401473 | 150 days ago | 0 ETH | |||||
20373473 | 154 days ago | 0 ETH | |||||
20355383 | 156 days ago | 0 ETH | |||||
20354740 | 157 days ago | 0 ETH | |||||
20354740 | 157 days ago | 0 ETH | |||||
20354740 | 157 days ago | 0 ETH | |||||
20354740 | 157 days ago | 0 ETH | |||||
20200042 | 178 days ago | 0 ETH | |||||
20185993 | 180 days ago | 0 ETH | |||||
20005143 | 205 days ago | 0 ETH | |||||
19898204 | 220 days ago | 0 ETH | |||||
19890850 | 221 days ago | 0 ETH | |||||
19857504 | 226 days ago | 0 ETH | |||||
19857355 | 226 days ago | 0 ETH | |||||
19857355 | 226 days ago | 0 ETH | |||||
19857355 | 226 days ago | 0 ETH |
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.