Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Contract Name:
TombIndex
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// .^7??????????????????????????????????????????????????????????????????7!: .~7????????????????????????????????: // :#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Y ^#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5 // ^@@@@@@#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB&@@@@@B ~@@@@@@#BBBBBBBBBBBBBBBBBBBBBBBBBBBBB#7 // Y@@@@@# ~@@@@@@ P@@@@@G // .&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&G~ ~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Y :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&P~ // J&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#.!B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B~ .Y&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B // ...........................B@@@@@5 .7#@@@@@@@#?^.................... ..........................:#@@@@@J // ^5YYYJJJJJJJJJJJJJJJJJJJJJJJJJJY&@@@@@? .J&@@@@@@&5JJJJJJJJJJJJJJJJJJJYYYYYYYYYYJJJJJJJJJJJJJJJJJJJJJJJJJJY@@@@@@! // 5@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@? :5&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7 // !GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGPY~ ^JPGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGPJ^ // _______________________________________________________ Tomb Series ___________________________________________________ // :!JYYYYJ!. .JYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY?~. 7YYYYYYYYY?~. ^JYYYYYYYYY^ // ~&@@@@@@@@@@#7. ?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P &@@@@@@@@@@@@B! :@@@@@@@@@@@5 // ^@@@@@@BB@@@@@@@B! ?@@@@@&PGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG&@@@@@# JGGGGGGG#@@@@@@@G^ !PGGGGGGGGG! // 5@@@@@5 .7#@@@@@@@P^ ?@@@@@P .@@@@@@. .J&@@@@@@&5: // Y@@@@@Y .J&@@@@@@&5: ?@@@@@G @@@@@@. :Y&@@@@@@&J. // Y@@@@@5 :5&@@@@@@&J. ?@@@@@G @@@@@@. ^P@@@@@@@#7. // Y@@@@@5 ^P@@@@@@@#7. J@@@@@G @@@@@@. ~G@@@@@@@B! // Y@@@@@5 ~B@@@@@@@BG@@@@@@! PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP#@@@@@# JGPPPPPPPP5: .7#@@@@@@@GPPPPPPG~ // 5@@@@@5 .7#@@@@@@@@@@&! .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G &@@@@@@@@@@& .J&@@@@@@@@@@@@5 // ^5YYY5~ .!JYYYYY7: Y5YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYJ~. ?5YYYYYYY5J. :7JYYYYYYYY5^ // _______________________________________________________ Tomb Index _____________________________________________________ // _________________________________________________ Deployed by TERRAIN 2022 _______________________________________________ // _____________________________________________ All tombs drawn by David Rudnick ___________________________________________ // ______________________________________________ Contract architect: Luke Miles ____________________________________________ // SPDX-License-Identifier: MIT pragma solidity ^0.8.10; import "./lib.sol"; contract TombIndex is ERC721, Ownable { string public imageURI; bool public isFrozen; event TombUpdated(uint256 id); string[] private houses = ["GENESIS", "LUX", "X2", "SHADOW", "COMETS", "DEVASTATORS", "TERRA", "RONIN"]; struct deployment { uint16 chainID; bool deployed; address hostContract; uint256 tokenID; } struct Tomb { bool _initialized; uint32 weight; uint8 numberInHouse; uint house; deployment deployment; } mapping(uint8 => Tomb) public tombByID; mapping(uint8 => string) public tombNameByID; constructor( string memory _imageURI, address artistAddress ) ERC721("Tomb Series", "TOMB") { _initializeTombs(artistAddress); imageURI = _imageURI; } function freezeContract() public onlyOwner { isFrozen = true; } modifier notFrozen() { require(!isFrozen, "Contract is frozen"); _; } function _saveTomb(uint256 id, string memory name, Tomb memory tomb) internal { require(id > 0 && id <= 177, "Tomb out of bounds"); uint8 id8 = uint8(id); tombByID[id8] = tomb; tombNameByID[id8] = name; emit TombUpdated(id); } function saveTombs(uint256[] calldata ids, string[] calldata names, Tomb[] calldata tombs) public onlyOwner notFrozen { require(ids.length == tombs.length, "invalid input"); require(names.length == tombs.length, "invalid input"); for (uint256 i = 0; i < tombs.length; i++) { _saveTomb(ids[i], names[i], tombs[i]); } } function _initializeTombs(address artistAddress) internal onlyOwner { _saveTomb(1, "AEON", Tomb({ _initialized: true, weight: 18762694, numberInHouse: 1, house: 0, deployment: deployment({ hostContract: 0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405, tokenID: 20583, chainID: 1, deployed: true }) })); _saveTomb(2, "TAROT", Tomb({ _initialized: true, weight: 21598168, numberInHouse: 2, house: 0, deployment: deployment({ hostContract: 0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405, tokenID: 20586, chainID: 1, deployed: true }) })); _saveTomb(3, "CADMIUM", Tomb({ _initialized: true, weight: 24129641, numberInHouse: 3, house: 0, deployment: deployment({ hostContract: 0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405, tokenID: 20592, chainID: 1, deployed: true }) })); _saveTomb(4, "NIAGARA", Tomb({ _initialized: true, weight: 22108549, numberInHouse: 4, house: 0, deployment: deployment({ hostContract: 0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405, tokenID: 20609, chainID: 1, deployed: true }) })); _saveTomb(5, "ARK", Tomb({ _initialized: true, weight: 23257493, numberInHouse: 5, house: 0, deployment: deployment({ hostContract: 0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405, tokenID: 20614, chainID: 1, deployed: true }) })); _saveTomb(6, "ORION", Tomb({ _initialized: true, weight: 23205361, numberInHouse: 6, house: 0, deployment: deployment({ hostContract: 0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405, tokenID: 20616, chainID: 1, deployed: true }) })); _saveTomb(7, "MIDNIGHT", Tomb({ _initialized: true, weight: 19431160, numberInHouse: 7, house: 0, deployment: deployment({ hostContract: 0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405, tokenID: 20617, chainID: 1, deployed: true }) })); _saveTomb(8, "ORIGIN", Tomb({ _initialized: true, weight: 0, numberInHouse: 1, house: 1, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(9, "TURING", Tomb({ _initialized: true, weight: 0, numberInHouse: 1, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(10, "HOME", Tomb({ _initialized: true, weight: 0, numberInHouse: 1, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(11, "EPOCH", Tomb({ _initialized: true, weight: 0, numberInHouse: 1, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(12, "TEMPO", Tomb({ _initialized: true, weight: 0, numberInHouse: 2, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(13, "THE NEW JEWS", Tomb({ _initialized: true, weight: 0, numberInHouse: 1, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(14, "ORIGIN UNKNOWN", Tomb({ _initialized: true, weight: 0, numberInHouse: 1, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(15, "HEAT", Tomb({ _initialized: true, weight: 0, numberInHouse: 2, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(16, "FFF", Tomb({ _initialized: true, weight: 0, numberInHouse: 3, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(17, "NEW FORM ZONE", Tomb({ _initialized: true, weight: 0, numberInHouse: 2, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(18, "ANAMNESIS", Tomb({ _initialized: true, weight: 0, numberInHouse: 2, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(19, "SYNTAX", Tomb({ _initialized: true, weight: 0, numberInHouse: 2, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(20, "NUXUI-N", Tomb({ _initialized: true, weight: 18447712, numberInHouse: 3, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(21, "EQUINOX", Tomb({ _initialized: true, weight: 0, numberInHouse: 4, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(22, "EUROPE AFTER THE RAIN", Tomb({ _initialized: true, weight: 0, numberInHouse: 3, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(23, "SEA OF SQUARES", Tomb({ _initialized: true, weight: 0, numberInHouse: 3, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(24, "STORM", Tomb({ _initialized: true, weight: 0, numberInHouse: 4, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(25, "FANTAZIA", Tomb({ _initialized: true, weight: 0, numberInHouse: 5, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(26, "DREAMSCAPE", Tomb({ _initialized: true, weight: 0, numberInHouse: 6, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(27, "HYPERSPECTRAL DAWN", Tomb({ _initialized: true, weight: 0, numberInHouse: 4, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(28, "SKYLINE", Tomb({ _initialized: true, weight: 0, numberInHouse: 7, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(29, "KHAOS", Tomb({ _initialized: true, weight: 0, numberInHouse: 8, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(30, "ON REMAND", Tomb({ _initialized: true, weight: 0, numberInHouse: 9, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(31, "OUTER", Tomb({ _initialized: true, weight: 0, numberInHouse: 3, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(32, "ORDER", Tomb({ _initialized: true, weight: 0, numberInHouse: 4, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(33, "ALPHA", Tomb({ _initialized: true, weight: 0, numberInHouse: 1, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(34, "VAPOUR", Tomb({ _initialized: true, weight: 0, numberInHouse: 2, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(35, "HYPER", Tomb({ _initialized: true, weight: 0, numberInHouse: 3, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(36, "EXODUS", Tomb({ _initialized: true, weight: 0, numberInHouse: 4, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(37, "DAWN", Tomb({ _initialized: true, weight: 0, numberInHouse: 5, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(38, "TOTAL ECLIPSE", Tomb({ _initialized: true, weight: 0, numberInHouse: 6, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(39, "VANISHING POINT", Tomb({ _initialized: true, weight: 0, numberInHouse: 7, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(40, "FAINT", Tomb({ _initialized: true, weight: 0, numberInHouse: 8, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(41, "IRIDIUM", Tomb({ _initialized: true, weight: 0, numberInHouse: 8, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(42, "KILO", Tomb({ _initialized: true, weight: 0, numberInHouse: 9, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(43, "CENSER", Tomb({ _initialized: true, weight: 0, numberInHouse: 10, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(44, "QUARTO", Tomb({ _initialized: true, weight: 0, numberInHouse: 11, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(45, "KINGFISHER", Tomb({ _initialized: true, weight: 0, numberInHouse: 12, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(46, "UNITE OR PERISH", Tomb({ _initialized: true, weight: 0, numberInHouse: 13, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(47, "NANGA PARBAT", Tomb({ _initialized: true, weight: 0, numberInHouse: 14, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(48, "DUAL EVENT", Tomb({ _initialized: true, weight: 0, numberInHouse: 9, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(49, "OPACITY", Tomb({ _initialized: true, weight: 0, numberInHouse: 10, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(50, "NEXUS", Tomb({ _initialized: true, weight: 0, numberInHouse: 4, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(51, "POINT", Tomb({ _initialized: true, weight: 0, numberInHouse: 5, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(52, "HALON", Tomb({ _initialized: true, weight: 0, numberInHouse: 6, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(53, "VOID", Tomb({ _initialized: true, weight: 0, numberInHouse: 11, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(54, "EXCEEDING LIGHT", Tomb({ _initialized: true, weight: 0, numberInHouse: 12, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(55, "BLACK HOLES IN THE NOW", Tomb({ _initialized: true, weight: 0, numberInHouse: 13, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(56, "UNKNOWN", Tomb({ _initialized: true, weight: 0, numberInHouse: 14, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(57, "TRANSPARENCY", Tomb({ _initialized: true, weight: 0, numberInHouse: 15, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(58, "UNANIMOUS NIGHT", Tomb({ _initialized: true, weight: 0, numberInHouse: 16, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(59, "GHOST", Tomb({ _initialized: true, weight: 0, numberInHouse: 17, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(60, "ENTIRE WORLDS", Tomb({ _initialized: true, weight: 0, numberInHouse: 18, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(61, "ANTIGEN", Tomb({ _initialized: true, weight: 0, numberInHouse: 5, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(62, "FREED FROM DESIRE", Tomb({ _initialized: true, weight: 0, numberInHouse: 5, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(63, "PARADISE CONQUISTADORS", Tomb({ _initialized: true, weight: 0, numberInHouse: 5, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(64, "HARD LEADERS II", Tomb({ _initialized: true, weight: 0, numberInHouse: 10, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(65, "WHITE 001", Tomb({ _initialized: true, weight: 0, numberInHouse: 11, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(66, "JUNGLIST", Tomb({ _initialized: true, weight: 0, numberInHouse: 12, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(67, "VOID ARROWS", Tomb({ _initialized: true, weight: 0, numberInHouse: 6, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(68, "EARTH", Tomb({ _initialized: true, weight: 0, numberInHouse: 6, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(69, "THE KNOT TIES ITSELF", Tomb({ _initialized: true, weight: 0, numberInHouse: 6, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(70, "DEATH IMITATES LANGUAGE", Tomb({ _initialized: true, weight: 0, numberInHouse: 7, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(71, "NECTAR AND LIGHT", Tomb({ _initialized: true, weight: 0, numberInHouse: 7, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(72, "RECUR", Tomb({ _initialized: true, weight: 0, numberInHouse: 7, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(73, "PAX", Tomb({ _initialized: true, weight: 0, numberInHouse: 2, house: 1, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(74, "FLOW COMA", Tomb({ _initialized: true, weight: 0, numberInHouse: 13, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(75, "TOTAL XSTACY", Tomb({ _initialized: true, weight: 0, numberInHouse: 14, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(76, "TRAGEDY [FOR YOU]", Tomb({ _initialized: true, weight: 0, numberInHouse: 15, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(77, "VERDANT PERJURY", Tomb({ _initialized: true, weight: 0, numberInHouse: 8, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(78, "ACEN", Tomb({ _initialized: true, weight: 0, numberInHouse: 16, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(79, "PROTOCOL", Tomb({ _initialized: true, weight: 0, numberInHouse: 8, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(80, "NONREAL PACKET MAZE", Tomb({ _initialized: true, weight: 0, numberInHouse: 9, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(81, "ABSOLUTE POWER", Tomb({ _initialized: true, weight: 0, numberInHouse: 15, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(82, unicode"TANTŌ", Tomb({ _initialized: true, weight: 0, numberInHouse: 16, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(83, "JAG MANDIR", Tomb({ _initialized: true, weight: 0, numberInHouse: 17, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(84, "NATION", Tomb({ _initialized: true, weight: 0, numberInHouse: 18, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(85, "SESSION", Tomb({ _initialized: true, weight: 0, numberInHouse: 19, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(86, "HERE", Tomb({ _initialized: true, weight: 0, numberInHouse: 20, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(87, "TACTA", Tomb({ _initialized: true, weight: 0, numberInHouse: 21, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(88, "WING OF A BLUE ROLLER", Tomb({ _initialized: true, weight: 0, numberInHouse: 7, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(89, "SHADDAI", Tomb({ _initialized: true, weight: 0, numberInHouse: 3, house: 1, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(90, "DEFENSOR MUNDI", Tomb({ _initialized: true, weight: 0, numberInHouse: 8, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(91, "TIME PASSES", Tomb({ _initialized: true, weight: 0, numberInHouse: 22, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(92, "DYNAMICS", Tomb({ _initialized: true, weight: 0, numberInHouse: 23, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(93, "CONFUSION", Tomb({ _initialized: true, weight: 0, numberInHouse: 24, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(94, unicode"IDEEËN", Tomb({ _initialized: true, weight: 0, numberInHouse: 25, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(95, "ZEITUNG", Tomb({ _initialized: true, weight: 0, numberInHouse: 26, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(96, "MONUMENT", Tomb({ _initialized: true, weight: 0, numberInHouse: 27, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(97, "ENERGY REMAINS", Tomb({ _initialized: true, weight: 0, numberInHouse: 28, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(98, "HACKED AMAZON", Tomb({ _initialized: true, weight: 0, numberInHouse: 10, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(99, "SUPRA", Tomb({ _initialized: true, weight: 0, numberInHouse: 8, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(100, unicode"ÆTHER", Tomb({ _initialized: true, weight: 0, numberInHouse: 4, house: 1, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(101, "RADAR", Tomb({ _initialized: true, weight: 0, numberInHouse: 9, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(102, "ARRAY", Tomb({ _initialized: true, weight: 0, numberInHouse: 10, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(103, "QUADRATIC EMPIRE", Tomb({ _initialized: true, weight: 0, numberInHouse: 11, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(104, "ENERGY FLASH", Tomb({ _initialized: true, weight: 0, numberInHouse: 17, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(105, "INTO DREAMS", Tomb({ _initialized: true, weight: 0, numberInHouse: 18, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(106, "SLOW", Tomb({ _initialized: true, weight: 0, numberInHouse: 19, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(107, "VENOM HORIZON", Tomb({ _initialized: true, weight: 0, numberInHouse: 12, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(108, "2099", Tomb({ _initialized: true, weight: 0, numberInHouse: 20, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(109, "LEMUR", Tomb({ _initialized: true, weight: 0, numberInHouse: 9, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(110, "SUBTROPICAL SHRINES", Tomb({ _initialized: true, weight: 0, numberInHouse: 13, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(111, "TERRAIN", Tomb({ _initialized: true, weight: 22862184, numberInHouse: 10, house: 7, deployment: deployment({ hostContract: address(this), tokenID: 111, chainID: 1, deployed: true }) })); _saveTomb(112, "AEGIS", Tomb({ _initialized: true, weight: 0, numberInHouse: 9, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(113, "VIBE SARCOPHAGI", Tomb({ _initialized: true, weight: 0, numberInHouse: 14, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(114, "HALCYON", Tomb({ _initialized: true, weight: 0, numberInHouse: 21, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(115, "JOYRIDER 2", Tomb({ _initialized: true, weight: 0, numberInHouse: 22, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(116, "WORLD [PRICE OF LOVE]", Tomb({ _initialized: true, weight: 0, numberInHouse: 23, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(117, "OZYMANDIAS", Tomb({ _initialized: true, weight: 0, numberInHouse: 15, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(118, "FOREVER", Tomb({ _initialized: true, weight: 0, numberInHouse: 11, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(119, "FRONTIER", Tomb({ _initialized: true, weight: 0, numberInHouse: 10, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(120, "STRAYLIGHT", Tomb({ _initialized: true, weight: 0, numberInHouse: 12, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(121, "HYDRA", Tomb({ _initialized: true, weight: 0, numberInHouse: 11, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(122, "SWIFT", Tomb({ _initialized: true, weight: 0, numberInHouse: 12, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(123, "ANON", Tomb({ _initialized: true, weight: 0, numberInHouse: 19, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(124, "INDEX", Tomb({ _initialized: true, weight: 0, numberInHouse: 20, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(125, "HARD TARGET", Tomb({ _initialized: true, weight: 0, numberInHouse: 21, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(126, "BLACKBIRD", Tomb({ _initialized: true, weight: 0, numberInHouse: 22, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(127, "OBSERVE", Tomb({ _initialized: true, weight: 0, numberInHouse: 23, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(128, "AFTER EARTH", Tomb({ _initialized: true, weight: 0, numberInHouse: 24, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(129, "UMBRA", Tomb({ _initialized: true, weight: 0, numberInHouse: 25, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(130, "POEM", Tomb({ _initialized: true, weight: 0, numberInHouse: 26, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(131, "MONT BLANC", Tomb({ _initialized: true, weight: 0, numberInHouse: 29, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(132, "TOURBILLON", Tomb({ _initialized: true, weight: 0, numberInHouse: 30, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(133, "CALIBAN", Tomb({ _initialized: true, weight: 0, numberInHouse: 31, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(134, "CYGNUS", Tomb({ _initialized: true, weight: 0, numberInHouse: 32, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(135, "VOYAGES", Tomb({ _initialized: true, weight: 0, numberInHouse: 33, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(136, "LOAM", Tomb({ _initialized: true, weight: 0, numberInHouse: 34, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(137, "HNX_T01", Tomb({ _initialized: true, weight: 0, numberInHouse: 35, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(138, "ENDSTATE", Tomb({ _initialized: true, weight: 0, numberInHouse: 27, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(139, "TERMINAL", Tomb({ _initialized: true, weight: 0, numberInHouse: 28, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(140, "FORGERY", Tomb({ _initialized: true, weight: 0, numberInHouse: 11, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(141, "NOMAD", Tomb({ _initialized: true, weight: 0, numberInHouse: 13, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(142, "XENON", Tomb({ _initialized: true, weight: 0, numberInHouse: 14, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(143, "REVEAL", Tomb({ _initialized: true, weight: 0, numberInHouse: 29, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(144, "LONE AND LEVEL", Tomb({ _initialized: true, weight: 0, numberInHouse: 30, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(145, "PHANTOM", Tomb({ _initialized: true, weight: 0, numberInHouse: 31, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(146, "TRUE", Tomb({ _initialized: true, weight: 0, numberInHouse: 32, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(147, "STEALTH", Tomb({ _initialized: true, weight: 0, numberInHouse: 33, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(148, "VANTA", Tomb({ _initialized: true, weight: 0, numberInHouse: 34, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(149, "KAIROS", Tomb({ _initialized: true, weight: 0, numberInHouse: 35, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(150, "SHADOW", Tomb({ _initialized: true, weight: 0, numberInHouse: 36, house: 3, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(151, "TRANCE", Tomb({ _initialized: true, weight: 0, numberInHouse: 13, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(152, "REPLICA", Tomb({ _initialized: true, weight: 0, numberInHouse: 12, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(153, "THE FOG OF JUNK PSALMS", Tomb({ _initialized: true, weight: 0, numberInHouse: 16, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(154, "VALLEY OF THE SHADOWS", Tomb({ _initialized: true, weight: 0, numberInHouse: 24, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(155, "THE END", Tomb({ _initialized: true, weight: 0, numberInHouse: 25, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(156, "PHOSPHOR", Tomb({ _initialized: true, weight: 0, numberInHouse: 26, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(157, "ABOUT PLATO'S CAVE", Tomb({ _initialized: true, weight: 0, numberInHouse: 17, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(158, "IX. SECTOR", Tomb({ _initialized: true, weight: 0, numberInHouse: 14, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(159, "FICTION", Tomb({ _initialized: true, weight: 0, numberInHouse: 13, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(160, "SOLUTION", Tomb({ _initialized: true, weight: 0, numberInHouse: 15, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(161, "TOPOS", Tomb({ _initialized: true, weight: 0, numberInHouse: 15, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(162, "LIGHT", Tomb({ _initialized: true, weight: 0, numberInHouse: 16, house: 4, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(163, "THE BEZEL EPOQUE", Tomb({ _initialized: true, weight: 0, numberInHouse: 18, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(164, "I STILL DREAM", Tomb({ _initialized: true, weight: 0, numberInHouse: 27, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(165, "TIME PROBLEM", Tomb({ _initialized: true, weight: 0, numberInHouse: 28, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(166, "ARCOURS", Tomb({ _initialized: true, weight: 0, numberInHouse: 29, house: 5, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(167, "SELBSTVERSELBSTLICHUNG", Tomb({ _initialized: true, weight: 0, numberInHouse: 19, house: 2, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(168, "ISENHEIM", Tomb({ _initialized: true, weight: 0, numberInHouse: 14, house: 6, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(169, unicode"T1A–T [RONIN]", Tomb({ _initialized: true, weight: 0, numberInHouse: 16, house: 7, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(170, "ETERNA", Tomb({ _initialized: true, weight: 0, numberInHouse: 5, house: 1, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(171, "EMPYREAN", Tomb({ _initialized: true, weight: 0, numberInHouse: 36, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(172, "TACIT BLUE", Tomb({ _initialized: true, weight: 0, numberInHouse: 37, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(173, "ARDENNES", Tomb({ _initialized: true, weight: 0, numberInHouse: 38, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(174, "VOYAGES 2", Tomb({ _initialized: true, weight: 0, numberInHouse: 39, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(175, "INPUT", Tomb({ _initialized: true, weight: 0, numberInHouse: 40, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(176, "ULTRA", Tomb({ _initialized: true, weight: 0, numberInHouse: 41, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _saveTomb(177, "GENESIS", Tomb({ _initialized: true, weight: 0, numberInHouse: 42, house: 0, deployment: deployment({ hostContract: 0x0000000000000000000000000000000000000000, tokenID: 0, chainID: 0, deployed: false }) })); _mint(artistAddress, 111); } function setImageURI(string memory _url) public onlyOwner notFrozen { imageURI = _url; } function _tombName(uint8 id) internal view returns (string memory) { return string(abi.encodePacked("Tomb ", RomanNumeral.ofNum(id), unicode' — ', tombNameByID[id])); } function _ordinalString(uint8 number) internal pure returns (string memory) { if (number <= 0) { return "0"; } string memory suffix = "th"; uint8 j = number % 10; uint8 k = number % 100; if (j == 1 && k != 11) { suffix = "st"; } else if (j == 2 && k != 12) { suffix = "nd"; } else if (j == 3 && k != 13) { suffix = "rd"; } return string(abi.encodePacked(_u256toString(number), suffix)); } function _tombDescription(uint8 id, Tomb memory tomb) internal view returns (string memory) { return string(abi.encodePacked(tombNameByID[id], " is the ", _ordinalString(id), " Tomb in the Tomb Series. It is the ", _ordinalString(tomb.numberInHouse), " Tomb in the ", houses[tomb.house], " house, at a weight of ", _periodSeparatedNum(tomb.weight), ".")); } function ownerOfTomb(uint8 id) public view returns (address) { Tomb memory tomb = tombByID[id]; require(tomb._initialized, "Tomb doesn't exist"); require(tomb.deployment.chainID == 1, "Can only check ownership value for Ethereum mainnet based Tombs"); return ERC721(tomb.deployment.hostContract).ownerOf(tomb.deployment.tokenID); } function _makeAttribute(string memory name, string memory value, bool isJSONString) internal pure returns (string memory) { string memory strDelimiter = ''; if (isJSONString) { strDelimiter = '"'; } return string(abi.encodePacked( '{"trait_type":"', name, '","value":', strDelimiter, value, strDelimiter, '}' )); } function jsonForTomb(uint8 id) public view returns (bytes memory) { Tomb memory tomb = tombByID[id]; require(tomb._initialized, "Tomb doesn't exist"); return abi.encodePacked('{"name":"',_tombName(id), '","description":"', _tombDescription(id, tomb), '","image":"', imageURI, _u256toString(id), '.png","attributes":[', _makeAttribute('House', houses[tomb.house], true), ',', _makeAttribute('Weight', _u256toString(tomb.weight), false), ',', _makeAttribute('Number in house', _u256toString(tomb.numberInHouse), false), ']}'); } function tokenURI(uint256 id) public view override returns (string memory) { return string(abi.encodePacked('data:application/json;base64,', Base64.encode(jsonForTomb(uint8(id))))); } function supportsInterface(bytes4 interfaceId) public pure override(ERC721) returns (bool) { return interfaceId == 0x7f5828d0 || // ERC165 Interface ID for ERC173 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f || // ERC165 Interface ID for ERC165 interfaceId == 0x01ffc9a7; // ERC165 Interface ID for ERC721Metadata } function _concatDotParts(string memory base, uint256 part, bool needsDot) internal pure returns (string memory) { string memory glue = "."; if (!needsDot) { glue = ""; } return string(abi.encodePacked(_u256toString(part), glue, base)); } function _periodSeparatedNum(uint256 value) internal pure returns (string memory) { string memory result = ""; uint128 index; while(value > 0) { uint256 part = value % 10; bool needsDot = index != 0 && index % 3 == 0; result = _concatDotParts(result, part, needsDot); value = value / 10; index += 1; } return result; } function _u256toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; /// @notice Modern, minimalist, and gas efficient ERC-721 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) /// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC. abstract contract ERC721 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 indexed id); event Approval(address indexed owner, address indexed spender, uint256 indexed id); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /*/////////////////////////////////////////////////////////////// METADATA STORAGE/LOGIC //////////////////////////////////////////////////////////////*/ string public name; string public symbol; function tokenURI(uint256 id) public view virtual returns (string memory); /*/////////////////////////////////////////////////////////////// ERC721 STORAGE //////////////////////////////////////////////////////////////*/ mapping(address => uint256) public balanceOf; mapping(uint256 => address) public ownerOf; mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; } /*/////////////////////////////////////////////////////////////// ERC721 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 id) public virtual { address owner = ownerOf[id]; require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED"); getApproved[id] = spender; emit Approval(owner, spender, id); } function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom( address from, address to, uint256 id ) public virtual { require(from == ownerOf[id], "WRONG_FROM"); require(to != address(0), "INVALID_RECIPIENT"); require( msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED" ); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { balanceOf[from]--; balanceOf[to]++; } ownerOf[id] = to; delete getApproved[id]; emit Transfer(from, to, id); } function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function safeTransferFrom( address from, address to, uint256 id, bytes memory data ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } /*/////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 id) internal virtual { require(to != address(0), "INVALID_RECIPIENT"); require(ownerOf[id] == address(0), "ALREADY_MINTED"); // Counter overflow is incredibly unrealistic. unchecked { balanceOf[to]++; } ownerOf[id] = to; emit Transfer(address(0), to, id); } function _burn(uint256 id) internal virtual { address owner = ownerOf[id]; require(ownerOf[id] != address(0), "NOT_MINTED"); // Ownership check above ensures no underflow. unchecked { balanceOf[owner]--; } delete ownerOf[id]; delete getApproved[id]; emit Transfer(owner, address(0), id); } /*/////////////////////////////////////////////////////////////// INTERNAL SAFE MINT LOGIC //////////////////////////////////////////////////////////////*/ function _safeMint(address to, uint256 id) internal virtual { _mint(to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function _safeMint( address to, uint256 id, bytes memory data ) internal virtual { _mint(to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } } /// @notice A generic interface for a contract which properly accepts ERC721 tokens. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) interface ERC721TokenReceiver { function onERC721Received( address operator, address from, uint256 id, bytes calldata data ) external returns (bytes4); } /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*/////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*/////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*/////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*/////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } } /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @author Modified from Gnosis (https://github.com/gnosis/gp-v2-contracts/blob/main/src/contracts/libraries/GPv2SafeERC20.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller. library SafeTransferLib { /*/////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool callStatus; assembly { // Transfer the ETH and store if it succeeded or not. callStatus := call(gas(), to, amount, 0, 0, 0, 0) } require(callStatus, "ETH_TRANSFER_FAILED"); } /*/////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "from" argument. mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 100 because the calldata length is 4 + 32 * 3. callStatus := call(gas(), token, 0, freeMemoryPointer, 100, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 68 because the calldata length is 4 + 32 * 2. callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 68 because the calldata length is 4 + 32 * 2. callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "APPROVE_FAILED"); } /*/////////////////////////////////////////////////////////////// INTERNAL HELPER LOGIC //////////////////////////////////////////////////////////////*/ function didLastOptionalReturnCallSucceed(bool callStatus) private pure returns (bool success) { assembly { // Get how many bytes the call returned. let returnDataSize := returndatasize() // If the call reverted: if iszero(callStatus) { // Copy the revert message into memory. returndatacopy(0, 0, returnDataSize) // Revert with the same message. revert(0, returnDataSize) } switch returnDataSize case 32 { // Copy the return data into memory. returndatacopy(0, 0, returnDataSize) // Set success to whether it returned true. success := iszero(iszero(mload(0))) } case 0 { // There was no return data. success := 1 } default { // It returned some malformed output. success := 0 } } } } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /// @title Base64 /// @author Brecht Devos - <[email protected]> /// @notice Provides functions for encoding/decoding base64 library Base64 { string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; bytes internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000" hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000" hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000" hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000"; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE_ENCODE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for {} lt(dataPtr, endPtr) {} { // read 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // write 4 characters mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and( input, 0x3F)))) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } function decode(string memory _data) internal pure returns (bytes memory) { bytes memory data = bytes(_data); if (data.length == 0) return new bytes(0); require(data.length % 4 == 0, "invalid base64 decoder input"); // load the table into memory bytes memory table = TABLE_DECODE; // every 4 characters represent 3 bytes uint256 decodedLen = (data.length / 4) * 3; // add some extra buffer at the end required for the writing bytes memory result = new bytes(decodedLen + 32); assembly { // padding with '=' let lastBytes := mload(add(data, mload(data))) if eq(and(lastBytes, 0xFF), 0x3d) { decodedLen := sub(decodedLen, 1) if eq(and(lastBytes, 0xFFFF), 0x3d3d) { decodedLen := sub(decodedLen, 1) } } // set the actual output length mstore(result, decodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 4 characters at a time for {} lt(dataPtr, endPtr) {} { // read 4 characters dataPtr := add(dataPtr, 4) let input := mload(dataPtr) // write 3 bytes let output := add( add( shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)), shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))), add( shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)), and(mload(add(tablePtr, and( input , 0xFF))), 0xFF) ) ) mstore(resultPtr, shl(232, output)) resultPtr := add(resultPtr, 3) } } return result; } } error NumberTooBig(); // Only includes information to encode a subset of roman numerals library RomanNumeral { function ofNum(uint n) internal pure returns (string memory) { uint8[9] memory key = [100, 90, 50, 40, 10, 9, 5, 4, 1]; string[9] memory numerals = ["C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]; if (n >= 400) revert NumberTooBig(); bytes memory res = ""; for (uint i = 0; i < key.length; i++) { while (n >= key[i]) { n -= key[i]; res = abi.encodePacked(res, numerals[i]); } } return string(res); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_imageURI","type":"string"},{"internalType":"address","name":"artistAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NumberTooBig","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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"TombUpdated","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"imageURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"}],"name":"jsonForTomb","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"}],"name":"ownerOfTomb","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"string[]","name":"names","type":"string[]"},{"components":[{"internalType":"bool","name":"_initialized","type":"bool"},{"internalType":"uint32","name":"weight","type":"uint32"},{"internalType":"uint8","name":"numberInHouse","type":"uint8"},{"internalType":"uint256","name":"house","type":"uint256"},{"components":[{"internalType":"uint16","name":"chainID","type":"uint16"},{"internalType":"bool","name":"deployed","type":"bool"},{"internalType":"address","name":"hostContract","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"internalType":"struct TombIndex.deployment","name":"deployment","type":"tuple"}],"internalType":"struct TombIndex.Tomb[]","name":"tombs","type":"tuple[]"}],"name":"saveTombs","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":"_url","type":"string"}],"name":"setImageURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"tombByID","outputs":[{"internalType":"bool","name":"_initialized","type":"bool"},{"internalType":"uint32","name":"weight","type":"uint32"},{"internalType":"uint8","name":"numberInHouse","type":"uint8"},{"internalType":"uint256","name":"house","type":"uint256"},{"components":[{"internalType":"uint16","name":"chainID","type":"uint16"},{"internalType":"bool","name":"deployed","type":"bool"},{"internalType":"address","name":"hostContract","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"internalType":"struct TombIndex.deployment","name":"deployment","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"tombNameByID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60076101809081526647454e4553495360c81b6101a052608090815260036101c090815262098aab60eb1b6101e05260a0526002610200908152612c1960f11b6102205260c052600661024081815265534841444f5760d01b6102605260e05261028090815265434f4d45545360d01b6102a05261010052600b6102c09081526a44455641535441544f525360a81b6102e05261012052600561030081815264544552524160d81b6103205261014052610380604052610340908152642927a724a760d91b6103605261016052620000dc90600990600862005d41565b50348015620000ea57600080fd5b5060405162008a4138038062008a418339810160408190526200010d9162005eda565b604080518082018252600b81526a546f6d622053657269657360a81b6020808301918252835180850190945260048452632a27a6a160e11b9084015281519192916200015c9160009162005da5565b5080516200017290600190602084019062005da5565b5050506200018f62000189620001b860201b60201c565b620001bc565b6200019a816200020e565b8151620001af90600790602085019062005da5565b50505062006008565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b031633146200026e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6200031860016040518060400160405280600481526020016320a2a7a760e11b8152506040518060a0016040528060011515815260200163011e4bc663ffffffff168152602001600160ff168152602001600081526020016040518060800160405280600161ffff16815260200160011515815260200160008051602062008a218339815191526001600160a01b0316815260200161506781525081525062005ab460201b60201c565b620003c360026040518060400160405280600581526020016415105493d560da1b8152506040518060a001604052806001151581526020016301498fd863ffffffff168152602001600260ff168152602001600081526020016040518060800160405280600161ffff16815260200160011515815260200160008051602062008a218339815191526001600160a01b0316815260200161506a81525081525062005ab460201b60201c565b620004706003604051806040016040528060078152602001664341444d49554d60c81b8152506040518060a00160405280600115158152602001630170306963ffffffff168152602001600360ff168152602001600081526020016040518060800160405280600161ffff16815260200160011515815260200160008051602062008a218339815191526001600160a01b0316815260200161507081525081525062005ab460201b60201c565b6200051d6004604051806040016040528060078152602001664e49414741524160c81b8152506040518060a00160405280600115158152602001630151598563ffffffff168152602001600460ff168152602001600081526020016040518060800160405280600161ffff16815260200160011515815260200160008051602062008a218339815191526001600160a01b0316815260200161508181525081525062005ab460201b60201c565b620005c660056040518060400160405280600381526020016241524b60e81b8152506040518060a00160405280600115158152602001630162e19563ffffffff168152602001600560ff168152602001600081526020016040518060800160405280600161ffff16815260200160011515815260200160008051602062008a218339815191526001600160a01b0316815260200161508681525081525062005ab460201b60201c565b6200067160066040518060400160405280600581526020016427a924a7a760d91b8152506040518060a0016040528060011515815260200163016215f163ffffffff168152602001600660ff168152602001600081526020016040518060800160405280600161ffff16815260200160011515815260200160008051602062008a218339815191526001600160a01b0316815260200161508881525081525062005ab460201b60201c565b6200071f600760405180604001604052806008815260200167135251139251d21560c21b8152506040518060a001604052806001151581526020016301287ef863ffffffff168152602001600760ff168152602001600081526020016040518060800160405280600161ffff16815260200160011515815260200160008051602062008a218339815191526001600160a01b0316815260200161508981525081525062005ab460201b60201c565b620007b960086040518060400160405280600681526020016527a924a3a4a760d11b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600160ff168152602001600181526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b62000853600960405180604001604052806006815260200165545552494e4760d01b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600160ff168152602001600781526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b620008eb600a60405180604001604052806004815260200163484f4d4560e01b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600160ff168152602001600681526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b62000984600b6040518060400160405280600581526020016408aa09e86960db1b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600160ff168152602001600481526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b604080518082018252600581526454454d504f60d81b602080830191909152825160a081018452600181526000818301819052600282860152600460608084019190915285516080818101885283825294810183905295860182905285015290810192909252620009f991600c919062005ab4565b62000a99600d6040518060400160405280600c81526020016b544845204e4557204a45575360a01b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600160ff168152602001600281526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b62000b3b600e6040518060400160405280600e81526020016d27a924a3a4a7102aa725a727aba760911b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600160ff168152602001600581526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b60408051808201825260048152631211505560e21b602080830191909152825160a08101845260018152600081830181905260028286015260056060808401919091528551608081810188528382529481018390529586018290528501529081019290925262000baf91600f919062005ab4565b62000c4660106040518060400160405280600381526020016223232360e91b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600360ff168152602001600581526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b604080518082018252600d81526c4e455720464f524d205a4f4e4560981b602080830191909152825160a08101845260018152600081830181905260028286018190526060808401919091528551608081810188528382529481018390529586018290528501529081019290925262000cc3916011919062005ab4565b6040805180820182526009815268414e414d4e4553495360b81b602080830191909152825160a08101845260018152600081830181905260028286015260076060808401919091528551608081810188528382529481018390529586018290528501529081019290925262000d3c916012919062005ab4565b62000dd66013604051806040016040528060068152602001650a6b29ca882b60d31b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600260ff168152602001600681526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b604080518082018252600780825266272aac2aa496a760c91b602080840191909152835160a081018552600181526301197d60818301526003818601526060808201939093528451608081810187526000808352938201849052958101839052928301919091529283015262000e50916014919062005ab4565b62000eeb60156040518060400160405280600781526020016608aa2aa929c9eb60cb1b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600460ff168152602001600781526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b604080518082018252601581527f4555524f504520414654455220544845205241494e0000000000000000000000602080830191909152825160a08101845260018152600081830181905260038286015260066060808401919091528551608081810188528382529481018390529586018290528501529081019290925262000f78916016919062005ab4565b604080518082018252600e81526d534541204f46205351554152455360901b602080830191909152825160a08101845260018152600081830181905260038286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262000ff6916017919062005ab4565b6200108f60186040518060400160405280600581526020016453544f524d60d81b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600460ff168152602001600581526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b604080518082018252600881526746414e54415a494160c01b602080830191909152825160a08101845260018152600081830181905260058286018190526060808401919091528551608081810188528382529481018390529586018290528501529081019290925262001107916019919062005ab4565b604080518082018252600a815269445245414d534341504560b01b602080830191909152825160a0810184526001815260008183018190526006828601526005606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200118191601a919062005ab4565b6040805180820182526012815271242ca822a929a822a1aa2920a6102220aba760711b602080830191909152825160a0810184526001815260008183018190526004828601526002606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200120391601b919062005ab4565b6200129e601c60405180604001604052806007815260200166534b594c494e4560c81b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600760ff168152602001600581526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b62001337601d604051806040016040528060058152602001644b48414f5360d81b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600860ff168152602001600581526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b620013d4601e6040518060400160405280600981526020016813d38814915350539160ba1b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600960ff168152602001600581526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b604080518082018252600581526427aaaa22a960d91b602080830191909152825160a0810184526001815260008183018190526003828601526004606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200144991601f919062005ab4565b620014e260206040518060400160405280600581526020016427a92222a960d91b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600460ff168152602001600481526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b6200157b602160405180604001604052806005815260200164414c50484160d81b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600160ff168152602001600381526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b60408051808201825260068152652b20a827aaa960d11b602080830191909152825160a081018452600181526000818301819052600282860152600360608084019190915285516080818101885283825294810183905295860182905285015290810192909252620015f1916022919062005ab4565b6040805180820182526005815264242ca822a960d91b602080830191909152825160a08101845260018152600081830181905260038286018190526060808401919091528551608081810188528382529481018390529586018290528501529081019290925262001666916023919062005ab4565b604080518082018252600681526545584f44555360d01b602080830191909152825160a081018452600181526000818301819052600482860152600360608084019190915285516080818101885283825294810183905295860182905285015290810192909252620016dc916024919062005ab4565b60408051808201825260048152632220aba760e11b602080830191909152825160a08101845260018152600081830181905260058286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262001750916025919062005ab4565b604080518082018252600d81526c544f54414c2045434c4950534560981b602080830191909152825160a081018452600181526000818301819052600682860152600360608084019190915285516080818101885283825294810183905295860182905285015290810192909252620017cd916026919062005ab4565b604080518082018252600f81526e1590539254d2125391c81413d25395608a1b602080830191909152825160a0810184526001815260008183018190526007828601526003606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200184c916027919062005ab4565b6040805180820182526005815264119052539560da1b602080830191909152825160a081018452600181526000818301819052600882860152600360608084019190915285516080818101885283825294810183905295860182905285015290810192909252620018c1916028919062005ab4565b60408051808201825260078152664952494449554d60c81b602080830191909152825160a08101845260018152600081830181905260088286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262001935916029919062005ab4565b60408051808201825260048152634b494c4f60e01b602080830191909152825160a081018452600181526000818301819052600982860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620019a691602a919062005ab4565b604080518082018252600681526521a2a729a2a960d11b602080830191909152825160a081018452600181526000818301819052600a8286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262001a1991602b919062005ab4565b604080518082018252600681526551554152544f60d01b602080830191909152825160a081018452600181526000818301819052600b8286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262001a8c91602c919062005ab4565b604080518082018252600a81526925a4a723a324a9a422a960b11b602080830191909152825160a081018452600181526000818301819052600c8286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262001b0391602d919062005ab4565b604080518082018252600f81526e0aa9c92a88a409ea440a08aa492a69608b1b602080830191909152825160a081018452600181526000818301819052600d8286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262001b7f91602e919062005ab4565b604080518082018252600c81526b13905391d04814105490905560a21b602080830191909152825160a081018452600181526000818301819052600e8286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262001bf891602f919062005ab4565b604080518082018252600a8152691115505308115591539560b21b602080830191909152825160a08101845260018152600081830181905260098286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262001c72916030919062005ab4565b60408051808201825260078152664f50414349545960c81b602080830191909152825160a081018452600181526000818301819052600a8286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262001ce9916031919062005ab4565b60408051808201825260058152644e4558555360d81b602080830191909152825160a08101845260018152600081830181905260048286015260066060808401919091528551608081810188528382529481018390529586018290528501529081019290925262001d5e916032919062005ab4565b62001df76033604051806040016040528060058152602001641413d2539560da1b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600560ff168152602001600481526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b60408051808201825260058152642420a627a760d91b602080830191909152825160a08101845260018152600081830181905260068286015260046060808401919091528551608081810188528382529481018390529586018290528501529081019290925262001e6c916034919062005ab4565b60408051808201825260048152631593d25160e21b602080830191909152825160a081018452600181526000818301819052600b8286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262001ee0916035919062005ab4565b604080518082018252600f81526e115610d15151125391c8131251d215608a1b602080830191909152825160a081018452600181526000818301819052600c8286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262001f5f916036919062005ab4565b604080518082018252601681527f424c41434b20484f4c455320494e20544845204e4f5700000000000000000000602080830191909152825160a081018452600181526000818301819052600d8286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262001fec916037919062005ab4565b60408051808201825260078152662aa725a727aba760c91b602080830191909152825160a081018452600181526000818301819052600e8286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262002063916038919062005ab4565b604080518082018252600c81526b5452414e53504152454e435960a01b602080830191909152825160a081018452600181526000818301819052600f82860152600360608084019190915285516080818101885283825294810183905295860182905285015290810192909252620020df916039919062005ab4565b604080518082018252600f81526e15539053925353d554c8139251d215608a1b602080830191909152825160a0810184526001815260008183018190526010828601526003606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200215e91603a919062005ab4565b604080518082018252600581526411d213d4d560da1b602080830191909152825160a081018452600181526000818301819052601182860152600360608084019190915285516080818101885283825294810183905295860182905285015290810192909252620021d391603b919062005ab4565b604080518082018252600d81526c454e5449524520574f524c445360981b602080830191909152825160a0810184526001815260008183018190526012828601526003606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200225091603c919062005ab4565b620022eb603d6040518060400160405280600781526020016620a72a24a3a2a760c91b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600560ff168152602001600781526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b604080518082018252601181527046524545442046524f4d2044455349524560781b602080830191909152825160a0810184526001815260008183018190526005828601526006606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200236c91603e919062005ab4565b604080518082018252601681527f504152414449534520434f4e515549535441444f525300000000000000000000602080830191909152825160a081018452600181526000818301819052600582860152600260608084019190915285516080818101885283825294810183905295860182905285015290810192909252620023f991603f919062005ab4565b6200249b604080518060400160405280600f81526020016e48415244204c45414445525320494960881b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600a60ff168152602001600581526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b604080518082018252600981526857484954452030303160b81b602080830191909152825160a081018452600181526000818301819052600b8286015260056060808401919091528551608081810188528382529481018390529586018290528501529081019290925262002514916041919062005ab4565b604080518082018252600881526712955391d31254d560c21b602080830191909152825160a081018452600181526000818301819052600c828601526005606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200258c916042919062005ab4565b604080518082018252600b81526a564f4944204152524f575360a81b602080830191909152825160a08101845260018152600081830181905260068286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262002607916043919062005ab4565b604080518082018252600581526408a82a4a8960db1b602080830191909152825160a0810184526001815260008183018190526006828601526007606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200267c916044919062005ab4565b604080518082018252601481527f544845204b4e4f54205449455320495453454c46000000000000000000000000602080830191909152825160a08101845260018152600081830181905260068286018190526060808401919091528551608081810188528382529481018390529586018290528501529081019290925262002709916045919062005ab4565b604080518082018252601781527f444541544820494d495441544553204c414e4755414745000000000000000000602080830191909152825160a08101845260018152600081830181905260078286018190526060808401919091528551608081810188528382529481018390529586018290528501529081019290925262002796916046919062005ab4565b604080518082018252601081526f139150d510548810539108131251d21560821b602080830191909152825160a08101845260018152600081830181905260078286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262002816916047919062005ab4565b60408051808201825260058152642922a1aaa960d91b602080830191909152825160a0810184526001815260008183018190526007828601526004606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200288b916048919062005ab4565b60408051808201825260038152620a082b60eb1b602080830191909152825160a081018452600180825260008284018190526002838701526060808401929092528551608081810188528282529481018290529586018190529085015290810192909252620028fe916049919062005ab4565b6040805180820182526009815268464c4f5720434f4d4160b81b602080830191909152825160a081018452600181526000818301819052600d828601526005606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200297791604a919062005ab4565b604080518082018252600c81526b544f54414c2058535441435960a01b602080830191909152825160a081018452600181526000818301819052600e82860152600560608084019190915285516080818101885283825294810183905295860182905285015290810192909252620029f391604b919062005ab4565b604080518082018252601181527054524147454459205b464f5220594f555d60781b602080830191909152825160a081018452600181526000818301819052600f8286015260056060808401919091528551608081810188528382529481018390529586018290528501529081019290925262002a7491604c919062005ab4565b604080518082018252600f81526e56455244414e54205045524a55525960881b602080830191909152825160a08101845260018152600081830181905260088286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262002af391604d919062005ab4565b604080518082018252600481526320a1a2a760e11b602080830191909152825160a08101845260018152600081830181905260108286015260056060808401919091528551608081810188528382529481018390529586018290528501529081019290925262002b6791604e919062005ab4565b62002c03604f60405180604001604052806008815260200167141493d513d0d3d360c21b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600860ff168152602001600781526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b604080518082018252601381527f4e4f4e5245414c205041434b4554204d415a4500000000000000000000000000602080830191909152825160a08101845260018152600081830181905260098286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262002c90916050919062005ab4565b604080518082018252600e81526d20a129a7a62aaa22902827aba2a960911b602080830191909152825160a081018452600181526000818301819052600f8286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262002d0b916051919062005ab4565b604080518082018252600681526515105395316360d21b602080830191909152825160a08101845260018152600081830181905260108286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262002d7e916052919062005ab4565b604080518082018252600a8152692520a39026a0a72224a960b11b602080830191909152825160a08101845260018152600081830181905260118286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262002df5916053919062005ab4565b60408051808201825260068152652720aa24a7a760d11b602080830191909152825160a08101845260018152600081830181905260128286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262002e68916054919062005ab4565b604080518082018252600781526629a2a9a9a4a7a760c91b602080830191909152825160a08101845260018152600081830181905260138286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262002edc916055919062005ab4565b60408051808201825260048152634845524560e01b602080830191909152825160a08101845260018152600081830181905260148286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262002f4d916056919062005ab4565b6040805180820182526005815264544143544160d81b602080830191909152825160a08101845260018152600081830181905260158286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262002fbf916057919062005ab4565b604080518082018252601581527f57494e47204f46204120424c554520524f4c4c45520000000000000000000000602080830191909152825160a0810184526001815260008183018190526007828601526006606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200304c916058919062005ab4565b60408051808201825260078152665348414444414960c81b602080830191909152825160a081018452600180825260008284018190526003838701526060808401929092528551608081810188528282529481018290529586018190529085015290810192909252620030c3916059919062005ab4565b604080518082018252600e81526d444546454e534f52204d554e444960901b602080830191909152825160a0810184526001815260008183018190526008828601526006606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200314191605a919062005ab4565b604080518082018252600b81526a54494d452050415353455360a81b602080830191909152825160a081018452600181526000818301819052601682860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620031b991605b919062005ab4565b604080518082018252600881526744594e414d49435360c01b602080830191909152825160a0810184526001815260008183018190526017828601526060808301829052855160808181018852838252948101839052958601829052850152908101929092526200322e91605c919062005ab4565b604080518082018252600981526821a7a7232aa9a4a7a760b91b602080830191909152825160a081018452600181526000818301819052601882860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620032a491605d919062005ab4565b604080518082018252600781526624a222a2e1c5a760c91b602080830191909152825160a0810184526001815260008183018190526019828601526060808301829052855160808181018852838252948101839052958601829052850152908101929092526200331891605e919062005ab4565b60408051808201825260078152665a454954554e4760c81b602080830191909152825160a081018452600181526000818301819052601a828601526060808301829052855160808181018852838252948101839052958601829052850152908101929092526200338c91605f919062005ab4565b620034286060604051806040016040528060088152602001671353d3955351539560c21b8152506040518060a00160405280600115158152602001600063ffffffff168152602001601b60ff168152602001600081526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b604080518082018252600e81526d454e455247592052454d41494e5360901b602080830191909152825160a081018452600181526000818301819052601c82860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620034a3916061919062005ab4565b604080518082018252600d81526c2420a1a5a2a21020a6a0ad27a760991b602080830191909152825160a081018452600181526000818301819052600a8286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003520916062919062005ab4565b6040805180820182526005815264535550524160d81b602080830191909152825160a08101845260018152600081830181905260088286015260046060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003595916063919062005ab4565b604080518082018252600681526561c32a2422a960d11b602080830191909152825160a0810184526001808252600082840181905260048387015260608084019290925285516080818101885282825294810182905295860181905290850152908101929092526200360b916064919062005ab4565b60408051808201825260058152642920a220a960d91b602080830191909152825160a08101845260018152600081830181905260098286015260046060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003680916065919062005ab4565b6040805180820182526005815264415252415960d81b602080830191909152825160a081018452600181526000818301819052600a82860152600460608084019190915285516080818101885283825294810183905295860182905285015290810192909252620036f5916066919062005ab4565b604080518082018252601081526f51554144524154494320454d5049524560801b602080830191909152825160a081018452600181526000818301819052600b8286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003775916067919062005ab4565b604080518082018252600c81526b08a9c8aa48eb2408c9882a6960a31b602080830191909152825160a081018452600181526000818301819052601182860152600560608084019190915285516080818101885283825294810183905295860182905285015290810192909252620037f1916068919062005ab4565b604080518082018252600b81526a494e544f20445245414d5360a81b602080830191909152825160a0810184526001815260008183018190526012828601526005606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200386c916069919062005ab4565b6040805180820182526004815263534c4f5760e01b602080830191909152825160a081018452600181526000818301819052601382860152600560608084019190915285516080818101885283825294810183905295860182905285015290810192909252620038e091606a919062005ab4565b604080518082018252600d81526c2b22a727a6902427a924ad27a760991b602080830191909152825160a081018452600181526000818301819052600c828601526002606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200395d91606b919062005ab4565b60408051808201825260048152633230393960e01b602080830191909152825160a081018452600181526000818301819052601482860152600560608084019190915285516080818101885283825294810183905295860182905285015290810192909252620039d191606c919062005ab4565b60408051808201825260058152642622a6aaa960d91b602080830191909152825160a08101845260018152600081830181905260098286015260076060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003a4691606d919062005ab4565b604080518082018252601381527f53554254524f504943414c20534852494e455300000000000000000000000000602080830191909152825160a081018452600181526000818301819052600d8286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003ad391606e919062005ab4565b62003b70606f604051806040016040528060078152602001662a22a92920a4a760c91b8152506040518060a0016040528060011515815260200163015cd96863ffffffff168152602001600a60ff168152602001600781526020016040518060800160405280600161ffff168152602001600115158152602001306001600160a01b03168152602001606f81525081525062005ab460201b60201c565b6040805180820182526005815264414547495360d81b602080830191909152825160a08101845260018152600081830181905260098286015260066060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003be5916070919062005ab4565b604080518082018252600f81526e5649424520534152434f504841474960881b602080830191909152825160a081018452600181526000818301819052600e8286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003c64916071919062005ab4565b60408051808201825260078152662420a621aca7a760c91b602080830191909152825160a08101845260018152600081830181905260158286015260056060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003cdb916072919062005ab4565b604080518082018252600a8152692527aca924a222a9101960b11b602080830191909152825160a08101845260018152600081830181905260168286015260056060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003d55916073919062005ab4565b604080518082018252601581527f574f524c44205b5052494345204f46204c4f56455d0000000000000000000000602080830191909152825160a08101845260018152600081830181905260178286015260056060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003de2916074919062005ab4565b604080518082018252600a8152694f5a594d414e4449415360b01b602080830191909152825160a081018452600181526000818301819052600f8286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003e5c916075919062005ab4565b62003ef76076604051806040016040528060078152602001662327a922ab22a960c91b8152506040518060a00160405280600115158152602001600063ffffffff168152602001600b60ff168152602001600781526020016040518060800160405280600061ffff16815260200160001515815260200160006001600160a01b03168152602001600081525081525062005ab460201b60201c565b6040805180820182526008815267232927a72a24a2a960c11b602080830191909152825160a081018452600181526000818301819052600a8286015260066060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003f6f916077919062005ab4565b604080518082018252600a81526914d5149056531251d21560b21b602080830191909152825160a081018452600181526000818301819052600c8286015260076060808401919091528551608081810188528382529481018390529586018290528501529081019290925262003fe9916078919062005ab4565b6040805180820182526005815264485944524160d81b602080830191909152825160a081018452600181526000818301819052600b828601526004606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200405e916079919062005ab4565b604080518082018252600581526414d5d2519560da1b602080830191909152825160a081018452600181526000818301819052600c82860152600460608084019190915285516080818101885283825294810183905295860182905285015290810192909252620040d391607a919062005ab4565b604080518082018252600481526320a727a760e11b602080830191909152825160a0810184526001815260008183018190526013828601526003606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200414791607b919062005ab4565b60408051808201825260058152640929c888ab60db1b602080830191909152825160a081018452600181526000818301819052601482860152600360608084019190915285516080818101885283825294810183905295860182905285015290810192909252620041bc91607c919062005ab4565b604080518082018252600b81526a121054910815105491d15560aa1b602080830191909152825160a0810184526001815260008183018190526015828601526003606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200423791607d919062005ab4565b604080518082018252600981526810931050d2d092549160ba1b602080830191909152825160a081018452600181526000818301819052601682860152600360608084019190915285516080818101885283825294810183905295860182905285015290810192909252620042b091607e919062005ab4565b60408051808201825260078152664f42534552564560c81b602080830191909152825160a0810184526001815260008183018190526017828601526003606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200432791607f919062005ab4565b604080518082018252600b81526a0828ca88aa4408a82a4a8960ab1b602080830191909152825160a081018452600181526000818301819052601882860152600360608084019190915285516080818101885283825294810183905295860182905285015280820193909352620043a19290919062005ab4565b6040805180820182526005815264554d42524160d81b602080830191909152825160a08101845260018152600081830181905260198286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004416916081919062005ab4565b6040805180820182526004815263504f454d60e01b602080830191909152825160a081018452600181526000818301819052601a828601526003606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200448a916082919062005ab4565b604080518082018252600a8152694d4f4e5420424c414e4360b01b602080830191909152825160a081018452600181526000818301819052601d8286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262004501916083919062005ab4565b604080518082018252600a8152692a27aaa92124a62627a760b11b602080830191909152825160a081018452600181526000818301819052601e8286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262004578916084919062005ab4565b604080518082018252600781526621a0a624a120a760c91b602080830191909152825160a081018452600181526000818301819052601f82860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620045ec916085919062005ab4565b60408051808201825260068152654359474e555360d01b602080830191909152825160a0810184526001815260008183018190528185018390526060808301829052855160808181018852838252948101839052958601829052850152908101929092526200465f916086919062005ab4565b6040805180820182526007815266564f594147455360c81b602080830191909152825160a081018452600181526000818301819052602182860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620046d3916087919062005ab4565b60408051808201825260048152634c4f414d60e01b602080830191909152825160a08101845260018152600081830181905260228286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262004744916088919062005ab4565b6040805180820182526007815266484e585f54303160c81b602080830191909152825160a081018452600181526000818301819052602382860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620047b8916089919062005ab4565b6040805180820182526008815267454e44535441544560c01b602080830191909152825160a081018452600181526000818301819052601b828601526003606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200483091608a919062005ab4565b6040805180820182526008815267151154935253905360c21b602080830191909152825160a081018452600181526000818301819052601c82860152600360608084019190915285516080818101885283825294810183905295860182905285015290810192909252620048a891608b919062005ab4565b6040805180820182526007815266464f524745525960c81b602080830191909152825160a081018452600181526000818301819052600b828601526006606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200491f91608c919062005ab4565b60408051808201825260058152641393d3505160da1b602080830191909152825160a081018452600181526000818301819052600d828601526004606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200499491608d919062005ab4565b60408051808201825260058152642c22a727a760d91b602080830191909152825160a081018452600181526000818301819052600e8286015260046060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004a0991608e919062005ab4565b604080518082018252600681526514915591505360d21b602080830191909152825160a081018452600181526000818301819052601d8286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004a7f91608f919062005ab4565b604080518082018252600e81526d1313d3914810539108131155915360921b602080830191909152825160a081018452600181526000818301819052601e8286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004afd916090919062005ab4565b60408051808201825260078152665048414e544f4d60c81b602080830191909152825160a081018452600181526000818301819052601f8286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004b74916091919062005ab4565b60408051808201825260048152635452554560e01b602080830191909152825160a08101845260018152600081830181905281850183905260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004be8916092919062005ab4565b60408051808201825260078152660a6a88a8298a8960cb1b602080830191909152825160a08101845260018152600081830181905260218286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004c5f916093919062005ab4565b604080518082018252600581526456414e544160d81b602080830191909152825160a08101845260018152600081830181905260228286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004cd4916094919062005ab4565b60408051808201825260068152654b4149524f5360d01b602080830191909152825160a08101845260018152600081830181905260238286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004d4a916095919062005ab4565b6040805180820182526006815265534841444f5760d01b602080830191909152825160a08101845260018152600081830181905260248286015260036060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004dc0916096919062005ab4565b60408051808201825260068152655452414e434560d01b602080830191909152825160a081018452600181526000818301819052600d8286015260076060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004e36916097919062005ab4565b60408051808201825260078152665245504c49434160c81b602080830191909152825160a081018452600181526000818301819052600c8286015260066060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004ead916098919062005ab4565b604080518082018252601681527f54484520464f47204f46204a554e4b205053414c4d5300000000000000000000602080830191909152825160a08101845260018152600081830181905260108286015260026060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004f3a916099919062005ab4565b604080518082018252601581527f56414c4c4559204f462054484520534841444f57530000000000000000000000602080830191909152825160a08101845260018152600081830181905260188286015260056060808401919091528551608081810188528382529481018390529586018290528501529081019290925262004fc791609a919062005ab4565b60408051808201825260078152661512114811539160ca1b602080830191909152825160a0810184526001815260008183018190526019828601526005606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200503e91609b919062005ab4565b6040805180820182526008815267282427a9a82427a960c11b602080830191909152825160a081018452600181526000818301819052601a82860152600560608084019190915285516080818101885283825294810183905295860182905285015290810192909252620050b691609c919062005ab4565b604080518082018252601281527141424f555420504c41544f2753204341564560701b602080830191909152825160a0810184526001815260008183018190526011828601526002606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200513891609d919062005ab4565b604080518082018252600a81526924ac171029a2a1aa27a960b11b602080830191909152825160a081018452600181526000818301819052600e82860152600760608084019190915285516080818101885283825294810183905295860182905285015290810192909252620051b291609e919062005ab4565b60408051808201825260078152662324a1aa24a7a760c91b602080830191909152825160a081018452600181526000818301819052600d828601526006606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200522991609f919062005ab4565b604080518082018252600881526729a7a62aaa24a7a760c11b602080830191909152825160a08181018552600182526000828401819052600f83870152600760608085019190915286516080818101895283825295810183905296870182905286015291810193909352620052a19290919062005ab4565b6040805180820182526005815264544f504f5360d81b602080830191909152825160a081018452600181526000818301819052600f82860152600460608084019190915285516080818101885283825294810183905295860182905285015290810192909252620053169160a1919062005ab4565b6040805180820182526005815264131251d21560da1b602080830191909152825160a0810184526001815260008183018190526010828601526004606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200538b9160a2919062005ab4565b604080518082018252601081526f5448452042455a454c2045504f51554560801b602080830191909152825160a0810184526001815260008183018190526012828601526002606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200540b9160a3919062005ab4565b604080518082018252600d81526c49205354494c4c20445245414d60981b602080830191909152825160a081018452600181526000818301819052601b82860152600560608084019190915285516080818101885283825294810183905295860182905285015290810192909252620054889160a4919062005ab4565b604080518082018252600c81526b54494d452050524f424c454d60a01b602080830191909152825160a081018452600181526000818301819052601c82860152600560608084019190915285516080818101885283825294810183905295860182905285015290810192909252620055049160a5919062005ab4565b60408051808201825260078152664152434f55525360c81b602080830191909152825160a081018452600181526000818301819052601d828601526005606080840191909152855160808181018852838252948101839052958601829052850152908101929092526200557b9160a6919062005ab4565b604080518082018252601681527f53454c42535456455253454c4253544c494348554e4700000000000000000000602080830191909152825160a081018452600181526000818301819052601382860152600260608084019190915285516080818101885283825294810183905295860182905285015290810192909252620056089160a7919062005ab4565b60408051808201825260088152674953454e4845494d60c01b602080830191909152825160a081018452600181526000818301819052600e82860152600660608084019190915285516080818101885283825294810183905295860182905285015290810192909252620056809160a8919062005ab4565b604080518082018252600f81526e543141e2809354205b524f4e494e5d60881b602080830191909152825160a081018452600181526000818301819052601082860152600760608084019190915285516080818101885283825294810183905295860182905285015290810192909252620056ff9160a9919062005ab4565b6040805180820182526006815265455445524e4160d01b602080830191909152825160a081018452600180825260008284018190526005838701526060808401929092528551608081810188528282529481018290529586018190529085015290810192909252620057759160aa919062005ab4565b604080518082018252600881526722a6a82ca922a0a760c11b602080830191909152825160a081018452600181526000818301819052602482860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620057ea9160ab919062005ab4565b604080518082018252600a815269544143495420424c554560b01b602080830191909152825160a081018452600181526000818301819052602582860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620058619160ac919062005ab4565b6040805180820182526008815267415244454e4e455360c01b602080830191909152825160a081018452600181526000818301819052602682860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620058d69160ad919062005ab4565b60408051808201825260098152682b27aca0a3a2a9901960b91b602080830191909152825160a0810184526001815260008183018190526027828601526060808301829052855160808181018852838252948101839052958601829052850152908101929092526200594c9160ae919062005ab4565b6040805180820182526005815264125394155560da1b602080830191909152825160a081018452600181526000818301819052602882860152606080830182905285516080818101885283825294810183905295860182905285015290810192909252620059be9160af919062005ab4565b6040805180820182526005815264554c54524160d81b602080830191909152825160a08101845260018152600081830181905260298286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262005a309160b0919062005ab4565b604080518082018252600781526647454e4553495360c81b602080830191909152825160a081018452600181526000818301819052602a8286015260608083018290528551608081810188528382529481018390529586018290528501529081019290925262005aa49160b1919062005ab4565b62005ab181606f62005c32565b50565b60008311801562005ac6575060b18311155b62005b095760405162461bcd60e51b8152602060048201526012602482015271546f6d62206f7574206f6620626f756e647360701b604482015260640162000265565b60ff8084166000908152600a60209081526040808320855181548488015184890151909716650100000000000260ff60281b1963ffffffff9098166101000264ffffffff00199315159390931664ffffffffff1990921691909117919091179590951694909417845560608086015160018601556080860151805160028701805483870151848701516001600160a01b03166301000000026301000000600160b81b0319911515620100000262ffffff1990931661ffff9095169490941791909117169190911790550151600390940193909355600b81529190208351859262005bf892919086019062005da5565b506040518481527f313e0c7e7afb141c4dcd7a0ecc8e39f4abfdde2d0fac678d22beb2f18dd28eb99060200160405180910390a150505050565b6001600160a01b03821662005c7e5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640162000265565b6000818152600360205260409020546001600160a01b03161562005cd65760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b604482015260640162000265565b6001600160a01b038216600081815260026020908152604080832080546001019055848352600390915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805482825590600052602060002090810192821562005d93579160200282015b8281111562005d93578251805162005d8291849160209091019062005da5565b509160200191906001019062005d62565b5062005da192915062005e30565b5090565b82805462005db39062005fcb565b90600052602060002090601f01602090048101928262005dd7576000855562005e22565b82601f1062005df257805160ff191683800117855562005e22565b8280016001018555821562005e22579182015b8281111562005e2257825182559160200191906001019062005e05565b5062005da192915062005e51565b8082111562005da157600062005e47828262005e68565b5060010162005e30565b5b8082111562005da1576000815560010162005e52565b50805462005e769062005fcb565b6000825580601f1062005e87575050565b601f01602090049060005260206000209081019062005ab1919062005e51565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b038116811462005ed557600080fd5b919050565b6000806040838503121562005eee57600080fd5b82516001600160401b038082111562005f0657600080fd5b818501915085601f83011262005f1b57600080fd5b81518181111562005f305762005f3062005ea7565b604051601f8201601f19908116603f0116810190838211818310171562005f5b5762005f5b62005ea7565b8160405282815260209350888484870101111562005f7857600080fd5b600091505b8282101562005f9c578482018401518183018501529083019062005f7d565b8282111562005fae5760008484830101525b955062005fc091505085820162005ebd565b925050509250929050565b600181811c9082168062005fe057607f821691505b602082108114156200600257634e487b7160e01b600052602260045260246000fd5b50919050565b612a0980620060186000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063b88d4fde11610097578063e985e9c511610071578063e985e9c51461042c578063f2fde38b1461045a578063f518c3fd1461046d578063fc12eabf1461048057600080fd5b8063b88d4fde146103f3578063c87b56dd14610406578063d5ce23911461041957600080fd5b806370a0823114610389578063715018a6146103b75780638da5cb5b146103bf57806395d89b41146103d0578063a22cb465146103d8578063a584a9b5146103eb57600080fd5b806323b872dd1161013057806323b872dd1461022657806333eeb1471461023957806340f201b91461024657806342842e0e1461033a578063571a2b021461034d5780636352211e1461036057600080fd5b806301ffc9a71461017857806304787ca2146101a057806306fdde03146101b5578063081812fc146101ca578063095ea7b31461020b578063135d088d1461021e575b600080fd5b61018b610186366004611d51565b610493565b60405190151581526020015b60405180910390f35b6101b36101ae366004611e46565b610500565b005b6101bd610592565b6040516101979190611ee7565b6101f36101d8366004611efa565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610197565b6101b3610219366004611f28565b610620565b6101bd610702565b6101b3610234366004611f54565b61070f565b60085461018b9060ff1681565b6102d6610254366004611fab565b600a60209081526000918252604091829020805460018201548451608081018652600284015461ffff8116825260ff6201000082048116151596830196909652630100000090046001600160a01b031695810195909552600390920154606085015282811693610100820463ffffffff1693600160281b909204909116919085565b60408051951515865263ffffffff90941660208087019190915260ff90931685850152606080860192909252805161ffff16608086015291820151151560a0850152918101516001600160a01b031660c0840152015160e082015261010001610197565b6101b3610348366004611f54565b6108d6565b6101f361035b366004611fab565b6109ce565b6101f361036e366004611efa565b6003602052600090815260409020546001600160a01b031681565b6103a9610397366004611fc6565b60026020526000908152604090205481565b604051908152602001610197565b6101b3610bc1565b6006546001600160a01b03166101f3565b6101bd610bf7565b6101b36103e6366004611ff3565b610c04565b6101b3610c70565b6101b3610401366004612028565b610ca9565b6101bd610414366004611efa565b610d8e565b6101b36104273660046120f4565b610dc7565b61018b61043a3660046121bd565b600560209081526000928352604080842090915290825290205460ff1681565b6101b3610468366004611fc6565b610f82565b6101bd61047b366004611fab565b61101d565b6101bd61048e366004611fab565b61129c565b60006307f5828d60e41b6001600160e01b0319831614806104c457506380ac58cd60e01b6001600160e01b03198316145b806104df5750635b5e139f60e01b6001600160e01b03198316145b806104fa57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146105335760405162461bcd60e51b815260040161052a906121f6565b60405180910390fd5b60085460ff161561057b5760405162461bcd60e51b815260206004820152601260248201527121b7b73a3930b1ba1034b990333937bd32b760711b604482015260640161052a565b805161058e906007906020840190611ca2565b5050565b6000805461059f9061222b565b80601f01602080910402602001604051908101604052809291908181526020018280546105cb9061222b565b80156106185780601f106105ed57610100808354040283529160200191610618565b820191906000526020600020905b8154815290600101906020018083116105fb57829003601f168201915b505050505081565b6000818152600360205260409020546001600160a01b03163381148061066957506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6106a65760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161052a565b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6007805461059f9061222b565b6000818152600360205260409020546001600160a01b038481169116146107655760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b604482015260640161052a565b6001600160a01b0382166107af5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640161052a565b336001600160a01b03841614806107dc57506000818152600460205260409020546001600160a01b031633145b8061080a57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b6108475760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161052a565b6001600160a01b0380841660008181526002602090815260408083208054600019019055938616808352848320805460010190558583526003825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6108e183838361070f565b6001600160a01b0382163b158061098a5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af115801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190612266565b6001600160e01b031916145b6109c95760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b604482015260640161052a565b505050565b60ff8181166000908152600a60209081526040808320815160a081018352815480871615158252610100810463ffffffff1682860152600160281b90048616818401526001820154606080830191909152835160808082018652600285015461ffff8116835262010000810490991615159682019690965263010000009097046001600160a01b03169387019390935260039091015491850191909152908101929092528151909190610ab85760405162461bcd60e51b8152602060048201526012602482015271151bdb5888191bd95cdb89dd08195e1a5cdd60721b604482015260640161052a565b80608001516000015161ffff16600114610b3a5760405162461bcd60e51b815260206004820152603f60248201527f43616e206f6e6c7920636865636b206f776e6572736869702076616c7565206660448201527f6f7220457468657265756d206d61696e6e657420626173656420546f6d627300606482015260840161052a565b608081015160408082015160609092015190516331a9108f60e11b81526001600160a01b0390921691636352211e91610b799160040190815260200190565b602060405180830381865afa158015610b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bba9190612283565b9392505050565b6006546001600160a01b03163314610beb5760405162461bcd60e51b815260040161052a906121f6565b610bf560006112b5565b565b6001805461059f9061222b565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b03163314610c9a5760405162461bcd60e51b815260040161052a906121f6565b6008805460ff19166001179055565b610cb484848461070f565b6001600160a01b0383163b1580610d495750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a0290610cfa9033908990889088906004016122a0565b6020604051808303816000875af1158015610d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3d9190612266565b6001600160e01b031916145b610d885760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b604482015260640161052a565b50505050565b6060610da1610d9c8361101d565b611307565b604051602001610db191906122f9565b6040516020818303038152906040529050919050565b6006546001600160a01b03163314610df15760405162461bcd60e51b815260040161052a906121f6565b60085460ff1615610e395760405162461bcd60e51b815260206004820152601260248201527121b7b73a3930b1ba1034b990333937bd32b760711b604482015260640161052a565b848114610e785760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081a5b9c1d5d609a1b604482015260640161052a565b828114610eb75760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081a5b9c1d5d609a1b604482015260640161052a565b60005b81811015610f7957610f67878783818110610ed757610ed761233e565b90506020020135868684818110610ef057610ef061233e565b9050602002810190610f029190612354565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150869050818110610f4b57610f4b61233e565b90506101000201803603810190610f62919061239b565b61146d565b80610f718161247d565b915050610eba565b50505050505050565b6006546001600160a01b03163314610fac5760405162461bcd60e51b815260040161052a906121f6565b6001600160a01b0381166110115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161052a565b61101a816112b5565b50565b60ff8181166000908152600a6020908152604091829020825160a081018452815480861615158252610100810463ffffffff1682850152600160281b90048516818501526001820154606080830191909152845160808082018752600285015461ffff8116835262010000810490981615159582019590955263010000009096046001600160a01b031694860194909452600390910154848401529081019290925281519091906111055760405162461bcd60e51b8152602060048201526012602482015271151bdb5888191bd95cdb89dd08195e1a5cdd60721b604482015260640161052a565b61110e836115e6565b6111188483611618565b60076111268660ff166116a2565b6111f860405180604001604052806005815260200164486f75736560d81b815250600987606001518154811061115e5761115e61233e565b9060005260206000200180546111739061222b565b80601f016020809104026020016040519081016040528092919081815260200182805461119f9061222b565b80156111ec5780601f106111c1576101008083540402835291602001916111ec565b820191906000526020600020905b8154815290600101906020018083116111cf57829003601f168201915b505050505060016117a8565b6112346040518060400160405280600681526020016515d95a59da1d60d21b81525061122d886020015163ffffffff166116a2565b60006117a8565b61126f6040518060400160405280600f81526020016e4e756d62657220696e20686f75736560881b81525061122d896040015160ff166116a2565b6040516020016112859796959493929190612532565b604051602081830303815290604052915050919050565b600b602052600090815260409020805461059f9061222b565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606081516000141561132757505060408051602081019091526000815290565b600060405180606001604052806040815260200161299460409139905060006003845160026113569190612651565b611360919061267f565b61136b906004612693565b9050600061137a826020612651565b67ffffffffffffffff81111561139257611392611d6e565b6040519080825280601f01601f1916602001820160405280156113bc576020820181803683370190505b509050818152600183018586518101602084015b81831015611428576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f81168501518253506001016113d0565b60038951066001811461144257600281146114535761145f565b613d3d60f01b60011983015261145f565b603d60f81b6000198301525b509398975050505050505050565b60008311801561147e575060b18311155b6114bf5760405162461bcd60e51b8152602060048201526012602482015271546f6d62206f7574206f6620626f756e647360701b604482015260640161052a565b60ff8084166000908152600a60209081526040808320855181548488015184890151909716600160281b0265ff00000000001963ffffffff9098166101000264ffffffff00199315159390931664ffffffffff1990921691909117919091179590951694909417845560608086015160018601556080860151805160028701805483870151848701516001600160a01b03166301000000026301000000600160b81b0319911515620100000262ffffff1990931661ffff9095169490941791909117169190911790550151600390940193909355600b8152919020835185926115ac929190860190611ca2565b506040518481527f313e0c7e7afb141c4dcd7a0ecc8e39f4abfdde2d0fac678d22beb2f18dd28eb99060200160405180910390a150505050565b60606115f48260ff1661180a565b60ff83166000908152600b60209081526040918290209151610db1939291016126b2565b60ff82166000908152600b6020526040902060609061163684611a7a565b6116438460400151611a7a565b600985606001518154811061165a5761165a61233e565b90600052602060002001611677866020015163ffffffff16611bc8565b60405160200161168b9594939291906126fa565b604051602081830303815290604052905092915050565b6060816116c65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116f057806116da8161247d565b91506116e99050600a8361267f565b91506116ca565b60008167ffffffffffffffff81111561170b5761170b611d6e565b6040519080825280601f01601f191660200182016040528015611735576020820181803683370190505b5090505b84156117a05761174a6001836127ef565b9150611757600a86612806565b611762906030612651565b60f81b8183815181106117775761177761233e565b60200101906001600160f81b031916908160001a905350611799600a8661267f565b9450611739565b949350505050565b60408051602081019091526000815260609082156117da57506040805180820190915260018152601160f91b60208201525b848185836040516020016117f1949392919061281a565b6040516020818303038152906040529150509392505050565b60606000604051806101200160405280606460ff168152602001605a60ff168152602001603260ff168152602001602860ff168152602001600a60ff168152602001600960ff168152602001600560ff168152602001600460ff168152602001600160ff1681525090506000604051806101200160405280604051806040016040528060018152602001604360f81b815250815260200160405180604001604052806002815260200161584360f01b8152508152602001604051806040016040528060018152602001601360fa1b815250815260200160405180604001604052806002815260200161161360f21b8152508152602001604051806040016040528060018152602001600b60fb1b815250815260200160405180604001604052806002815260200161092b60f31b8152508152602001604051806040016040528060018152602001602b60f91b81525081526020016040518060400160405280600281526020016124ab60f11b8152508152602001604051806040016040528060018152602001604960f81b815250815250905061019084106119bf57604051632c8ee55f60e01b815260040160405180910390fd5b604080516020810190915260008082525b6009811015611a71575b8381600981106119ec576119ec61233e565b602002015160ff168610611a5f57838160098110611a0c57611a0c61233e565b6020020151611a1e9060ff16876127ef565b955081838260098110611a3357611a3361233e565b6020020151604051602001611a499291906128b7565b60405160208183030381529060405291506119da565b80611a698161247d565b9150506119d0565b50949350505050565b606060008260ff1611611aa45750506040805180820190915260018152600360fc1b602082015290565b6040805180820190915260028152610e8d60f31b60208201526000611aca600a856128e6565b90506000611ad96064866128e6565b90508160ff166001148015611af257508060ff16600b14155b15611b1957604051806040016040528060028152602001611cdd60f21b8152509250611b91565b8160ff166002148015611b3057508060ff16600c14155b15611b5757604051806040016040528060028152602001611b9960f21b8152509250611b91565b8160ff166003148015611b6e57508060ff16600d14155b15611b9157604051806040016040528060028152602001611c9960f21b81525092505b611b9d8560ff166116a2565b83604051602001611baf9291906128b7565b6040516020818303038152906040529350505050919050565b60408051602081019091526000808252606091905b8315611c4d576000611bf0600a86612806565b905060006001600160801b03831615801590611c1d5750611c12600384612908565b6001600160801b0316155b9050611c2a848383611c54565b9350611c37600a8761267f565b9550611c4460018461292e565b92505050611bdd565b5092915050565b6040805180820190915260018152601760f91b602082015260609082611c8557506040805160208101909152600081525b611c8e846116a2565b81866040516020016117f193929190612950565b828054611cae9061222b565b90600052602060002090601f016020900481019282611cd05760008555611d16565b82601f10611ce957805160ff1916838001178555611d16565b82800160010185558215611d16579182015b82811115611d16578251825591602001919060010190611cfb565b50611d22929150611d26565b5090565b5b80821115611d225760008155600101611d27565b6001600160e01b03198116811461101a57600080fd5b600060208284031215611d6357600080fd5b8135610bba81611d3b565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715611da757611da7611d6e565b60405290565b6040516080810167ffffffffffffffff81118282101715611da757611da7611d6e565b600067ffffffffffffffff80841115611deb57611deb611d6e565b604051601f8501601f19908116603f01168101908282118183101715611e1357611e13611d6e565b81604052809350858152868686011115611e2c57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611e5857600080fd5b813567ffffffffffffffff811115611e6f57600080fd5b8201601f81018413611e8057600080fd5b6117a084823560208401611dd0565b60005b83811015611eaa578181015183820152602001611e92565b83811115610d885750506000910152565b60008151808452611ed3816020860160208601611e8f565b601f01601f19169290920160200192915050565b602081526000610bba6020830184611ebb565b600060208284031215611f0c57600080fd5b5035919050565b6001600160a01b038116811461101a57600080fd5b60008060408385031215611f3b57600080fd5b8235611f4681611f13565b946020939093013593505050565b600080600060608486031215611f6957600080fd5b8335611f7481611f13565b92506020840135611f8481611f13565b929592945050506040919091013590565b803560ff81168114611fa657600080fd5b919050565b600060208284031215611fbd57600080fd5b610bba82611f95565b600060208284031215611fd857600080fd5b8135610bba81611f13565b80358015158114611fa657600080fd5b6000806040838503121561200657600080fd5b823561201181611f13565b915061201f60208401611fe3565b90509250929050565b6000806000806080858703121561203e57600080fd5b843561204981611f13565b9350602085013561205981611f13565b925060408501359150606085013567ffffffffffffffff81111561207c57600080fd5b8501601f8101871361208d57600080fd5b61209c87823560208401611dd0565b91505092959194509250565b60008083601f8401126120ba57600080fd5b50813567ffffffffffffffff8111156120d257600080fd5b6020830191508360208260051b85010111156120ed57600080fd5b9250929050565b6000806000806000806060878903121561210d57600080fd5b863567ffffffffffffffff8082111561212557600080fd5b6121318a838b016120a8565b9098509650602089013591508082111561214a57600080fd5b6121568a838b016120a8565b9096509450604089013591508082111561216f57600080fd5b818901915089601f83011261218357600080fd5b81358181111561219257600080fd5b8a60208260081b85010111156121a757600080fd5b6020830194508093505050509295509295509295565b600080604083850312156121d057600080fd5b82356121db81611f13565b915060208301356121eb81611f13565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061223f57607f821691505b6020821081141561226057634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561227857600080fd5b8151610bba81611d3b565b60006020828403121561229557600080fd5b8151610bba81611f13565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122d390830184611ebb565b9695505050505050565b600081516122ef818560208601611e8f565b9290920192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161233181601d850160208701611e8f565b91909101601d0192915050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261236b57600080fd5b83018035915067ffffffffffffffff82111561238657600080fd5b6020019150368190038213156120ed57600080fd5b60008183036101008112156123af57600080fd5b6123b7611d84565b6123c084611fe3565b8152602084013563ffffffff811681146123d957600080fd5b60208201526123ea60408501611f95565b6040820152606084013560608201526080607f198301121561240b57600080fd5b612413611dad565b9150608084013561ffff8116811461242a57600080fd5b825261243860a08501611fe3565b602083015260c084013561244b81611f13565b604083015260e093909301356060820152608083015250919050565b634e487b7160e01b600052601160045260246000fd5b600060001982141561249157612491612467565b5060010190565b8054600090600181811c90808316806124b257607f831692505b60208084108214156124d457634e487b7160e01b600052602260045260246000fd5b8180156124e857600181146124f957612526565b60ff19861689528489019650612526565b60008881526020902060005b8681101561251e5781548b820152908501908301612505565b505084890196505b50505050505092915050565b683d913730b6b2911d1160b91b81528751600090612557816009850160208d01611e8f565b701116113232b9b1b934b83a34b7b7111d1160791b600991840191820152885161258881601a840160208d01611e8f565b6a11161134b6b0b3b2911d1160a91b601a92909101918201526125ae6025820189612498565b905086516125c0818360208b01611e8f565b732e706e67222c2261747472696275746573223a5b60601b910190815285516125f0816014840160208a01611e8f565b600b60fa1b601492909101918201528451612612816015840160208901611e8f565b61264261263461262e601584860101600b60fa1b815260010190565b876122dd565b615d7d60f01b815260020190565b9b9a5050505050505050505050565b6000821982111561266457612664612467565b500190565b634e487b7160e01b600052601260045260246000fd5b60008261268e5761268e612669565b500490565b60008160001904831182151516156126ad576126ad612467565b500290565b6402a37b6b1160dd1b8152600083516126d2816005850160208801611e8f565b6401071404a160dd1b6005918401918201526126f1600a820185612498565b95945050505050565b60006127068288612498565b6701034b9903a3432960c51b81528651612727816008840160208b01611e8f565b7f20546f6d6220696e2074686520546f6d62205365726965732e20497420697320600892909101918201526303a3432960e51b6028820152855161277281602c840160208a01611e8f565b6c0102a37b6b11034b7103a34329609d1b602c929091019182015261279a6039820186612498565b90507f20686f7573652c206174206120776569676874206f6620000000000000000000815283516127d2816017840160208801611e8f565b601760f91b60179290910191820152601801979650505050505050565b60008282101561280157612801612467565b500390565b60008261281557612815612669565b500690565b6e3d913a3930b4ba2fba3cb832911d1160891b8152845160009061284581600f850160208a01611e8f565b691116113b30b63ab2911d60b11b600f91840191820152855161286f816019840160208a01611e8f565b8551910190612885816019840160208901611e8f565b845191019061289b816019840160208801611e8f565b607d60f81b60199290910191820152601a019695505050505050565b600083516128c9818460208801611e8f565b8351908301906128dd818360208801611e8f565b01949350505050565b600060ff8316806128f9576128f9612669565b8060ff84160691505092915050565b60006001600160801b038084168061292257612922612669565b92169190910692915050565b60006001600160801b038083168185168083038211156128dd576128dd612467565b60008451612962818460208901611e8f565b845190830190612976818360208901611e8f565b8451910190612989818360208801611e8f565b019594505050505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220065cedb3b4627cb868160a90e1ac8107334df71992b9b922425e7f79ae8dd35264736f6c634300080a00330000000000000000000000003b3ee1931dc30c1957379fac9aba94d1c48a540500000000000000000000000000000000000000000000000000000000000000400000000000000000000000004a61d76ea05a758c1db9c9b5a5ad22f445a38c46000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f746f6d62736572692e65732f696d672f0000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063b88d4fde11610097578063e985e9c511610071578063e985e9c51461042c578063f2fde38b1461045a578063f518c3fd1461046d578063fc12eabf1461048057600080fd5b8063b88d4fde146103f3578063c87b56dd14610406578063d5ce23911461041957600080fd5b806370a0823114610389578063715018a6146103b75780638da5cb5b146103bf57806395d89b41146103d0578063a22cb465146103d8578063a584a9b5146103eb57600080fd5b806323b872dd1161013057806323b872dd1461022657806333eeb1471461023957806340f201b91461024657806342842e0e1461033a578063571a2b021461034d5780636352211e1461036057600080fd5b806301ffc9a71461017857806304787ca2146101a057806306fdde03146101b5578063081812fc146101ca578063095ea7b31461020b578063135d088d1461021e575b600080fd5b61018b610186366004611d51565b610493565b60405190151581526020015b60405180910390f35b6101b36101ae366004611e46565b610500565b005b6101bd610592565b6040516101979190611ee7565b6101f36101d8366004611efa565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610197565b6101b3610219366004611f28565b610620565b6101bd610702565b6101b3610234366004611f54565b61070f565b60085461018b9060ff1681565b6102d6610254366004611fab565b600a60209081526000918252604091829020805460018201548451608081018652600284015461ffff8116825260ff6201000082048116151596830196909652630100000090046001600160a01b031695810195909552600390920154606085015282811693610100820463ffffffff1693600160281b909204909116919085565b60408051951515865263ffffffff90941660208087019190915260ff90931685850152606080860192909252805161ffff16608086015291820151151560a0850152918101516001600160a01b031660c0840152015160e082015261010001610197565b6101b3610348366004611f54565b6108d6565b6101f361035b366004611fab565b6109ce565b6101f361036e366004611efa565b6003602052600090815260409020546001600160a01b031681565b6103a9610397366004611fc6565b60026020526000908152604090205481565b604051908152602001610197565b6101b3610bc1565b6006546001600160a01b03166101f3565b6101bd610bf7565b6101b36103e6366004611ff3565b610c04565b6101b3610c70565b6101b3610401366004612028565b610ca9565b6101bd610414366004611efa565b610d8e565b6101b36104273660046120f4565b610dc7565b61018b61043a3660046121bd565b600560209081526000928352604080842090915290825290205460ff1681565b6101b3610468366004611fc6565b610f82565b6101bd61047b366004611fab565b61101d565b6101bd61048e366004611fab565b61129c565b60006307f5828d60e41b6001600160e01b0319831614806104c457506380ac58cd60e01b6001600160e01b03198316145b806104df5750635b5e139f60e01b6001600160e01b03198316145b806104fa57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146105335760405162461bcd60e51b815260040161052a906121f6565b60405180910390fd5b60085460ff161561057b5760405162461bcd60e51b815260206004820152601260248201527121b7b73a3930b1ba1034b990333937bd32b760711b604482015260640161052a565b805161058e906007906020840190611ca2565b5050565b6000805461059f9061222b565b80601f01602080910402602001604051908101604052809291908181526020018280546105cb9061222b565b80156106185780601f106105ed57610100808354040283529160200191610618565b820191906000526020600020905b8154815290600101906020018083116105fb57829003601f168201915b505050505081565b6000818152600360205260409020546001600160a01b03163381148061066957506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6106a65760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161052a565b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6007805461059f9061222b565b6000818152600360205260409020546001600160a01b038481169116146107655760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b604482015260640161052a565b6001600160a01b0382166107af5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640161052a565b336001600160a01b03841614806107dc57506000818152600460205260409020546001600160a01b031633145b8061080a57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b6108475760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161052a565b6001600160a01b0380841660008181526002602090815260408083208054600019019055938616808352848320805460010190558583526003825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6108e183838361070f565b6001600160a01b0382163b158061098a5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af115801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190612266565b6001600160e01b031916145b6109c95760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b604482015260640161052a565b505050565b60ff8181166000908152600a60209081526040808320815160a081018352815480871615158252610100810463ffffffff1682860152600160281b90048616818401526001820154606080830191909152835160808082018652600285015461ffff8116835262010000810490991615159682019690965263010000009097046001600160a01b03169387019390935260039091015491850191909152908101929092528151909190610ab85760405162461bcd60e51b8152602060048201526012602482015271151bdb5888191bd95cdb89dd08195e1a5cdd60721b604482015260640161052a565b80608001516000015161ffff16600114610b3a5760405162461bcd60e51b815260206004820152603f60248201527f43616e206f6e6c7920636865636b206f776e6572736869702076616c7565206660448201527f6f7220457468657265756d206d61696e6e657420626173656420546f6d627300606482015260840161052a565b608081015160408082015160609092015190516331a9108f60e11b81526001600160a01b0390921691636352211e91610b799160040190815260200190565b602060405180830381865afa158015610b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bba9190612283565b9392505050565b6006546001600160a01b03163314610beb5760405162461bcd60e51b815260040161052a906121f6565b610bf560006112b5565b565b6001805461059f9061222b565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b03163314610c9a5760405162461bcd60e51b815260040161052a906121f6565b6008805460ff19166001179055565b610cb484848461070f565b6001600160a01b0383163b1580610d495750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a0290610cfa9033908990889088906004016122a0565b6020604051808303816000875af1158015610d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3d9190612266565b6001600160e01b031916145b610d885760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b604482015260640161052a565b50505050565b6060610da1610d9c8361101d565b611307565b604051602001610db191906122f9565b6040516020818303038152906040529050919050565b6006546001600160a01b03163314610df15760405162461bcd60e51b815260040161052a906121f6565b60085460ff1615610e395760405162461bcd60e51b815260206004820152601260248201527121b7b73a3930b1ba1034b990333937bd32b760711b604482015260640161052a565b848114610e785760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081a5b9c1d5d609a1b604482015260640161052a565b828114610eb75760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081a5b9c1d5d609a1b604482015260640161052a565b60005b81811015610f7957610f67878783818110610ed757610ed761233e565b90506020020135868684818110610ef057610ef061233e565b9050602002810190610f029190612354565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150869050818110610f4b57610f4b61233e565b90506101000201803603810190610f62919061239b565b61146d565b80610f718161247d565b915050610eba565b50505050505050565b6006546001600160a01b03163314610fac5760405162461bcd60e51b815260040161052a906121f6565b6001600160a01b0381166110115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161052a565b61101a816112b5565b50565b60ff8181166000908152600a6020908152604091829020825160a081018452815480861615158252610100810463ffffffff1682850152600160281b90048516818501526001820154606080830191909152845160808082018752600285015461ffff8116835262010000810490981615159582019590955263010000009096046001600160a01b031694860194909452600390910154848401529081019290925281519091906111055760405162461bcd60e51b8152602060048201526012602482015271151bdb5888191bd95cdb89dd08195e1a5cdd60721b604482015260640161052a565b61110e836115e6565b6111188483611618565b60076111268660ff166116a2565b6111f860405180604001604052806005815260200164486f75736560d81b815250600987606001518154811061115e5761115e61233e565b9060005260206000200180546111739061222b565b80601f016020809104026020016040519081016040528092919081815260200182805461119f9061222b565b80156111ec5780601f106111c1576101008083540402835291602001916111ec565b820191906000526020600020905b8154815290600101906020018083116111cf57829003601f168201915b505050505060016117a8565b6112346040518060400160405280600681526020016515d95a59da1d60d21b81525061122d886020015163ffffffff166116a2565b60006117a8565b61126f6040518060400160405280600f81526020016e4e756d62657220696e20686f75736560881b81525061122d896040015160ff166116a2565b6040516020016112859796959493929190612532565b604051602081830303815290604052915050919050565b600b602052600090815260409020805461059f9061222b565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606081516000141561132757505060408051602081019091526000815290565b600060405180606001604052806040815260200161299460409139905060006003845160026113569190612651565b611360919061267f565b61136b906004612693565b9050600061137a826020612651565b67ffffffffffffffff81111561139257611392611d6e565b6040519080825280601f01601f1916602001820160405280156113bc576020820181803683370190505b509050818152600183018586518101602084015b81831015611428576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f81168501518253506001016113d0565b60038951066001811461144257600281146114535761145f565b613d3d60f01b60011983015261145f565b603d60f81b6000198301525b509398975050505050505050565b60008311801561147e575060b18311155b6114bf5760405162461bcd60e51b8152602060048201526012602482015271546f6d62206f7574206f6620626f756e647360701b604482015260640161052a565b60ff8084166000908152600a60209081526040808320855181548488015184890151909716600160281b0265ff00000000001963ffffffff9098166101000264ffffffff00199315159390931664ffffffffff1990921691909117919091179590951694909417845560608086015160018601556080860151805160028701805483870151848701516001600160a01b03166301000000026301000000600160b81b0319911515620100000262ffffff1990931661ffff9095169490941791909117169190911790550151600390940193909355600b8152919020835185926115ac929190860190611ca2565b506040518481527f313e0c7e7afb141c4dcd7a0ecc8e39f4abfdde2d0fac678d22beb2f18dd28eb99060200160405180910390a150505050565b60606115f48260ff1661180a565b60ff83166000908152600b60209081526040918290209151610db1939291016126b2565b60ff82166000908152600b6020526040902060609061163684611a7a565b6116438460400151611a7a565b600985606001518154811061165a5761165a61233e565b90600052602060002001611677866020015163ffffffff16611bc8565b60405160200161168b9594939291906126fa565b604051602081830303815290604052905092915050565b6060816116c65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116f057806116da8161247d565b91506116e99050600a8361267f565b91506116ca565b60008167ffffffffffffffff81111561170b5761170b611d6e565b6040519080825280601f01601f191660200182016040528015611735576020820181803683370190505b5090505b84156117a05761174a6001836127ef565b9150611757600a86612806565b611762906030612651565b60f81b8183815181106117775761177761233e565b60200101906001600160f81b031916908160001a905350611799600a8661267f565b9450611739565b949350505050565b60408051602081019091526000815260609082156117da57506040805180820190915260018152601160f91b60208201525b848185836040516020016117f1949392919061281a565b6040516020818303038152906040529150509392505050565b60606000604051806101200160405280606460ff168152602001605a60ff168152602001603260ff168152602001602860ff168152602001600a60ff168152602001600960ff168152602001600560ff168152602001600460ff168152602001600160ff1681525090506000604051806101200160405280604051806040016040528060018152602001604360f81b815250815260200160405180604001604052806002815260200161584360f01b8152508152602001604051806040016040528060018152602001601360fa1b815250815260200160405180604001604052806002815260200161161360f21b8152508152602001604051806040016040528060018152602001600b60fb1b815250815260200160405180604001604052806002815260200161092b60f31b8152508152602001604051806040016040528060018152602001602b60f91b81525081526020016040518060400160405280600281526020016124ab60f11b8152508152602001604051806040016040528060018152602001604960f81b815250815250905061019084106119bf57604051632c8ee55f60e01b815260040160405180910390fd5b604080516020810190915260008082525b6009811015611a71575b8381600981106119ec576119ec61233e565b602002015160ff168610611a5f57838160098110611a0c57611a0c61233e565b6020020151611a1e9060ff16876127ef565b955081838260098110611a3357611a3361233e565b6020020151604051602001611a499291906128b7565b60405160208183030381529060405291506119da565b80611a698161247d565b9150506119d0565b50949350505050565b606060008260ff1611611aa45750506040805180820190915260018152600360fc1b602082015290565b6040805180820190915260028152610e8d60f31b60208201526000611aca600a856128e6565b90506000611ad96064866128e6565b90508160ff166001148015611af257508060ff16600b14155b15611b1957604051806040016040528060028152602001611cdd60f21b8152509250611b91565b8160ff166002148015611b3057508060ff16600c14155b15611b5757604051806040016040528060028152602001611b9960f21b8152509250611b91565b8160ff166003148015611b6e57508060ff16600d14155b15611b9157604051806040016040528060028152602001611c9960f21b81525092505b611b9d8560ff166116a2565b83604051602001611baf9291906128b7565b6040516020818303038152906040529350505050919050565b60408051602081019091526000808252606091905b8315611c4d576000611bf0600a86612806565b905060006001600160801b03831615801590611c1d5750611c12600384612908565b6001600160801b0316155b9050611c2a848383611c54565b9350611c37600a8761267f565b9550611c4460018461292e565b92505050611bdd565b5092915050565b6040805180820190915260018152601760f91b602082015260609082611c8557506040805160208101909152600081525b611c8e846116a2565b81866040516020016117f193929190612950565b828054611cae9061222b565b90600052602060002090601f016020900481019282611cd05760008555611d16565b82601f10611ce957805160ff1916838001178555611d16565b82800160010185558215611d16579182015b82811115611d16578251825591602001919060010190611cfb565b50611d22929150611d26565b5090565b5b80821115611d225760008155600101611d27565b6001600160e01b03198116811461101a57600080fd5b600060208284031215611d6357600080fd5b8135610bba81611d3b565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715611da757611da7611d6e565b60405290565b6040516080810167ffffffffffffffff81118282101715611da757611da7611d6e565b600067ffffffffffffffff80841115611deb57611deb611d6e565b604051601f8501601f19908116603f01168101908282118183101715611e1357611e13611d6e565b81604052809350858152868686011115611e2c57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611e5857600080fd5b813567ffffffffffffffff811115611e6f57600080fd5b8201601f81018413611e8057600080fd5b6117a084823560208401611dd0565b60005b83811015611eaa578181015183820152602001611e92565b83811115610d885750506000910152565b60008151808452611ed3816020860160208601611e8f565b601f01601f19169290920160200192915050565b602081526000610bba6020830184611ebb565b600060208284031215611f0c57600080fd5b5035919050565b6001600160a01b038116811461101a57600080fd5b60008060408385031215611f3b57600080fd5b8235611f4681611f13565b946020939093013593505050565b600080600060608486031215611f6957600080fd5b8335611f7481611f13565b92506020840135611f8481611f13565b929592945050506040919091013590565b803560ff81168114611fa657600080fd5b919050565b600060208284031215611fbd57600080fd5b610bba82611f95565b600060208284031215611fd857600080fd5b8135610bba81611f13565b80358015158114611fa657600080fd5b6000806040838503121561200657600080fd5b823561201181611f13565b915061201f60208401611fe3565b90509250929050565b6000806000806080858703121561203e57600080fd5b843561204981611f13565b9350602085013561205981611f13565b925060408501359150606085013567ffffffffffffffff81111561207c57600080fd5b8501601f8101871361208d57600080fd5b61209c87823560208401611dd0565b91505092959194509250565b60008083601f8401126120ba57600080fd5b50813567ffffffffffffffff8111156120d257600080fd5b6020830191508360208260051b85010111156120ed57600080fd5b9250929050565b6000806000806000806060878903121561210d57600080fd5b863567ffffffffffffffff8082111561212557600080fd5b6121318a838b016120a8565b9098509650602089013591508082111561214a57600080fd5b6121568a838b016120a8565b9096509450604089013591508082111561216f57600080fd5b818901915089601f83011261218357600080fd5b81358181111561219257600080fd5b8a60208260081b85010111156121a757600080fd5b6020830194508093505050509295509295509295565b600080604083850312156121d057600080fd5b82356121db81611f13565b915060208301356121eb81611f13565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061223f57607f821691505b6020821081141561226057634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561227857600080fd5b8151610bba81611d3b565b60006020828403121561229557600080fd5b8151610bba81611f13565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122d390830184611ebb565b9695505050505050565b600081516122ef818560208601611e8f565b9290920192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161233181601d850160208701611e8f565b91909101601d0192915050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261236b57600080fd5b83018035915067ffffffffffffffff82111561238657600080fd5b6020019150368190038213156120ed57600080fd5b60008183036101008112156123af57600080fd5b6123b7611d84565b6123c084611fe3565b8152602084013563ffffffff811681146123d957600080fd5b60208201526123ea60408501611f95565b6040820152606084013560608201526080607f198301121561240b57600080fd5b612413611dad565b9150608084013561ffff8116811461242a57600080fd5b825261243860a08501611fe3565b602083015260c084013561244b81611f13565b604083015260e093909301356060820152608083015250919050565b634e487b7160e01b600052601160045260246000fd5b600060001982141561249157612491612467565b5060010190565b8054600090600181811c90808316806124b257607f831692505b60208084108214156124d457634e487b7160e01b600052602260045260246000fd5b8180156124e857600181146124f957612526565b60ff19861689528489019650612526565b60008881526020902060005b8681101561251e5781548b820152908501908301612505565b505084890196505b50505050505092915050565b683d913730b6b2911d1160b91b81528751600090612557816009850160208d01611e8f565b701116113232b9b1b934b83a34b7b7111d1160791b600991840191820152885161258881601a840160208d01611e8f565b6a11161134b6b0b3b2911d1160a91b601a92909101918201526125ae6025820189612498565b905086516125c0818360208b01611e8f565b732e706e67222c2261747472696275746573223a5b60601b910190815285516125f0816014840160208a01611e8f565b600b60fa1b601492909101918201528451612612816015840160208901611e8f565b61264261263461262e601584860101600b60fa1b815260010190565b876122dd565b615d7d60f01b815260020190565b9b9a5050505050505050505050565b6000821982111561266457612664612467565b500190565b634e487b7160e01b600052601260045260246000fd5b60008261268e5761268e612669565b500490565b60008160001904831182151516156126ad576126ad612467565b500290565b6402a37b6b1160dd1b8152600083516126d2816005850160208801611e8f565b6401071404a160dd1b6005918401918201526126f1600a820185612498565b95945050505050565b60006127068288612498565b6701034b9903a3432960c51b81528651612727816008840160208b01611e8f565b7f20546f6d6220696e2074686520546f6d62205365726965732e20497420697320600892909101918201526303a3432960e51b6028820152855161277281602c840160208a01611e8f565b6c0102a37b6b11034b7103a34329609d1b602c929091019182015261279a6039820186612498565b90507f20686f7573652c206174206120776569676874206f6620000000000000000000815283516127d2816017840160208801611e8f565b601760f91b60179290910191820152601801979650505050505050565b60008282101561280157612801612467565b500390565b60008261281557612815612669565b500690565b6e3d913a3930b4ba2fba3cb832911d1160891b8152845160009061284581600f850160208a01611e8f565b691116113b30b63ab2911d60b11b600f91840191820152855161286f816019840160208a01611e8f565b8551910190612885816019840160208901611e8f565b845191019061289b816019840160208801611e8f565b607d60f81b60199290910191820152601a019695505050505050565b600083516128c9818460208801611e8f565b8351908301906128dd818360208801611e8f565b01949350505050565b600060ff8316806128f9576128f9612669565b8060ff84160691505092915050565b60006001600160801b038084168061292257612922612669565b92169190910692915050565b60006001600160801b038083168185168083038211156128dd576128dd612467565b60008451612962818460208901611e8f565b845190830190612976818360208901611e8f565b8451910190612989818360208801611e8f565b019594505050505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220065cedb3b4627cb868160a90e1ac8107334df71992b9b922425e7f79ae8dd35264736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000004a61d76ea05a758c1db9c9b5a5ad22f445a38c46000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f746f6d62736572692e65732f696d672f0000000000000000
-----Decoded View---------------
Arg [0] : _imageURI (string): https://tombseri.es/img/
Arg [1] : artistAddress (address): 0x4a61d76ea05A758c1db9C9b5a5ad22f445A38C46
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000004a61d76ea05a758c1db9c9b5a5ad22f445a38c46
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [3] : 68747470733a2f2f746f6d62736572692e65732f696d672f0000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.