[ { "inputs": [ { "internalType": "address", "name": "_galaxisRegistry", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "OperatorNotAllowed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "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": false, "internalType": "string", "name": "contractURI", "type": "string" } ], "name": "ContractURIset", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "", "type": "bool" } ], "name": "Locked", "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": "stage", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "randNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_shiftsBy", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_start", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_end", "type": "uint256" } ], "name": "RandomProcessed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_address", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "mode", "type": "bool" } ], "name": "contractControllerEvent", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_address", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "mode", "type": "bool" } ], "name": "contractManagerEvent", "type": "event" }, { "inputs": [], "name": "DEFAULT_SUBSCRIPTION", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "OPERATOR_FILTER_REGISTRY", "outputs": [ { "internalType": "contract IOperatorFilterRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "OSFiltering", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REGISTRY_KEY_RANDOM_CONTRACT", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOKEN_CONTRACT_ACCESS_ADMIN", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOKEN_CONTRACT_ACCESS_LOCK", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOKEN_CONTRACT_ACCESS_REVEAL", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOKEN_CONTRACT_ACCESS_SALE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOKEN_CONTRACT_GIVEAWAY", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "USER_RANDOM", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VRFShifting", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "_reserved", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "chain", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRevealCount", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "n", "type": "uint256" } ], "name": "findRevealRangeForN", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "galaxisRegistry", "outputs": [ { "internalType": "contract IRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFirstGiveawayCardId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokenInfoForSale", "outputs": [ { "components": [ { "internalType": "uint256", "name": "projectID", "type": "uint256" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" }, { "internalType": "uint256", "name": "reservedSupply", "type": "uint256" } ], "internalType": "struct TokenInfoForSale", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "giveawaySupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "key", "type": "bytes32" }, { "internalType": "address", "name": "user", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "projectID", "type": "uint256" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" }, { "internalType": "string", "name": "erc721name", "type": "string" }, { "internalType": "string", "name": "erc721symbol", "type": "string" }, { "internalType": "string", "name": "tokenPreRevealURI", "type": "string" }, { "internalType": "string", "name": "tokenRevealURI", "type": "string" }, { "internalType": "bool", "name": "transferLocked", "type": "bool" }, { "internalType": "uint256", "name": "reservedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "giveawaySupply", "type": "uint256" }, { "internalType": "bool", "name": "VRFShifting", "type": "bool" } ], "internalType": "struct TokenConstructorConfig", "name": "config", "type": "tuple" }, { "internalType": "address", "name": "_actualOwner", "type": "address" } ], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "user", "type": "address" } ], "name": "isAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastReveal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastRevealRequested", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_index", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "mintGiveawayCard", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numberOfCards", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintIncrementalCards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numberOfCards", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintReservedCards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "mintedReserve", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintedSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "myCommunityRegistry", "outputs": [ { "internalType": "contract CommunityRegistry", "name": "", "type": "address" } ], "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": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_random", "type": "uint256" }, { "internalType": "uint256", "name": "_requestId", "type": "uint256" } ], "name": "process", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "projectID", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "requestToRevealId", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reservedSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tracker", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "retrieve721", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tracker", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "retrieveERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "retrieveETH", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revealAtCurrentSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revealURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "reveals", "outputs": [ { "internalType": "uint256", "name": "REQUEST_ID", "type": "uint256" }, { "internalType": "uint256", "name": "RANDOM_NUM", "type": "uint256" }, { "internalType": "uint256", "name": "SHIFT", "type": "uint256" }, { "internalType": "uint256", "name": "RANGE_START", "type": "uint256" }, { "internalType": "uint256", "name": "RANGE_END", "type": "uint256" }, { "internalType": "bool", "name": "processed", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_contractURI", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_tokenPreRevealURI", "type": "string" } ], "name": "setPreRevealURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_tokenRevealURI", "type": "string" } ], "name": "setRevealURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_locked", "type": "bool" } ], "name": "setTransferLock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tellEverything", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "uint256", "name": "projectID", "type": "uint256" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" }, { "internalType": "uint256", "name": "mintedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "mintedReserve", "type": "uint256" }, { "internalType": "uint256", "name": "reservedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "giveawaySupply", "type": "uint256" }, { "internalType": "string", "name": "tokenPreRevealURI", "type": "string" }, { "internalType": "string", "name": "tokenRevealURI", "type": "string" }, { "internalType": "bool", "name": "transferLocked", "type": "bool" }, { "internalType": "bool", "name": "lastRevealRequested", "type": "bool" }, { "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "REQUEST_ID", "type": "uint256" }, { "internalType": "uint256", "name": "RANDOM_NUM", "type": "uint256" }, { "internalType": "uint256", "name": "SHIFT", "type": "uint256" }, { "internalType": "uint256", "name": "RANGE_START", "type": "uint256" }, { "internalType": "uint256", "name": "RANGE_END", "type": "uint256" }, { "internalType": "bool", "name": "processed", "type": "bool" } ], "internalType": "struct revealStruct[]", "name": "reveals", "type": "tuple[]" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address[]", "name": "managers", "type": "address[]" }, { "internalType": "address[]", "name": "controllers", "type": "address[]" }, { "internalType": "uint256", "name": "version", "type": "uint256" }, { "internalType": "bool", "name": "VRFShifting", "type": "bool" } ], "internalType": "struct TokenInfo", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "toggleOSFilterOperatorState", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenPreRevealURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenRevealURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "transferLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "n", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "useCommunityRandom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" } ]
60a060405260228054743cc6cdda760b79bafa08df41ecfa224f810dceb6016001600160a81b0319909116179055602380546001600160a01b0319166daaeb6d7670e522a718067333cd4e17905534801561005957600080fd5b50604051614ce6380380614ce68339810160408190526100789161016a565b80806040518060400160405280601581526020017f474f4c44454e5f544f4b454e5f434f4e545241435400000000000000000000008152506040518060400160405280600281526020016111d560f21b81525081600090816100da919061023b565b5060016100e7828261023b565b5050506101006100fb61011460201b60201c565b610118565b6001600160a01b0316608052506102fa9050565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020828403121561017c57600080fd5b81516001600160a01b038116811461019357600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806101c457607f821691505b6020821081036101e457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610236576000816000526020600020601f850160051c810160208610156102135750805b601f850160051c820191505b818110156102325782815560010161021f565b5050505b505050565b81516001600160401b038111156102545761025461019a565b6102688161026284546101b0565b846101ea565b602080601f83116001811461029d57600084156102855750858301515b600019600386901b1c1916600185901b178555610232565b600085815260208120601f198616915b828110156102cc578886015182559484019460019091019084016102ad565b50858210156102ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516149ca61031c600039600081816106770152612fd101526149ca6000f3fe608060405234801561001057600080fd5b50600436106104335760003560e01c8063938e3d7b11610236578063c763e5a11161013b578063e9419325116100c3578063f2fde38b11610087578063f2fde38b146109dc578063f9c0611c146109ef578063fbd106f914610a07578063fc83b82714610a1c578063fd6a382e14610a4357600080fd5b8063e941932514610953578063e985e9c514610966578063ea09e473146109a2578063ea9d6824146109cc578063ee198b97146109d457600080fd5b8063d5b014c31161010a578063d5b014c3146108ec578063dbd5fd9b146108f4578063e288e73314610918578063e7713baa14610921578063e8a3d4851461094b57600080fd5b8063c763e5a1146108b5578063c87b56dd146108bd578063d255fe03146108d0578063d5abeb01146108e357600080fd5b8063a4b744e2116101be578063afa88e551161018d578063afa88e551461086c578063b88d4fde1461087e578063bcc0f72514610891578063bff3561814610899578063c1bd8cf9146108ac57600080fd5b8063a4b744e21461082b578063a5b3abfb1461083e578063a811a37b14610851578063abb8def31461086457600080fd5b806398f5b2381161020557806398f5b238146107605780639c30ea51146107d55780639d759d5f146107de5780639e0f0018146107f1578063a22cb4651461081857600080fd5b8063938e3d7b1461072b5780639456d7271461073e57806395d89b41146107505780639871d6fa1461075857600080fd5b806342842e0e1161033c57806370a08231116102c45780637f72f036116102935780637f72f036146106ba57806382027b6d146106cd5780638da5cb5b146106e05780638ffc20e2146106f157806391d148541461071857600080fd5b806370a0823114610657578063715018a61461066a5780637671114d1461067257806377d4b5041461069957600080fd5b80634f6ccce71161030b5780634f6ccce7146105ed57806354fd4d50146106005780636352211e1461060a57806366d47d841461061d57806369b2b9a71461064457600080fd5b806342842e0e1461059e578063432e2006146105b157806344d19d2b146105b95780634cf29258146105c257600080fd5b806317fd1e2f116103bf5780632a85db551161038e5780632a85db551461053d5780632f151b76146105505780632f745c59146105655780633f5916561461057857806341f434341461058b57600080fd5b806317fd1e2f146104fc57806318160ddd1461050f5780631f4bc79d1461051757806323b872dd1461052a57600080fd5b8063095ea7b311610406578063095ea7b3146104b75780630e89341c146104cc57806310d51dd9146104df57806312686aae146104e7578063160fba56146104f457600080fd5b806301ffc9a7146104385780630677ef811461046057806306fdde0314610477578063081812fc1461048c575b600080fd5b61044b6104463660046139f8565b610a50565b60405190151581526020015b60405180910390f35b610469600e5481565b604051908152602001610457565b61047f610a7b565b6040516104579190613a65565b61049f61049a366004613a78565b610b0d565b6040516001600160a01b039091168152602001610457565b6104ca6104c5366004613ab6565b610b34565b005b6104696104da366004613a78565b610b56565b61047f610c1c565b60135461044b9060ff1681565b61047f610caa565b6104ca61050a366004613ab6565b610cb7565b600854610469565b61044b610525366004613a78565b610d35565b6104ca610538366004613ae2565b610d79565b6104ca61054b366004613b23565b610dad565b610558610dfe565b6040516104579190613c40565b610469610573366004613ab6565b611347565b6104ca610586366004613de0565b6113dd565b60235461049f906001600160a01b031681565b6104ca6105ac366004613ae2565b611672565b6104696116a6565b610469600f5481565b61047f6040518060400160405280600c81526020016b052414e444f4d56325f5353560a41b81525081565b6104696105fb366004613a78565b6116d5565b6378a4676d610469565b61049f610618366004613a78565b611768565b6104697f78095cc8201dcba39b170f4873756afcc9c5fe4c54fba1731ca3be8a9544e76b81565b6104ca610652366004613e02565b6117c8565b610469610665366004613e32565b611957565b6104ca6119dd565b61049f7f000000000000000000000000000000000000000000000000000000000000000081565b6017546106a79061ffff1681565b60405161ffff9091168152602001610457565b6106a76106c8366004613a78565b6119f1565b61044b6106db366004613e02565b611a45565b600a546001600160a01b031661049f565b6104697f7d4398cf7d551d8cb071f228c3b0838dfaf546b384e93039ea180fba606dfac381565b61044b610726366004613e02565b611a84565b6104ca610739366004613f43565b611afa565b60195461044b90610100900460ff1681565b61047f611b77565b6104ca611b86565b6107a661076e366004613f77565b601460205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff1686565b6040805196875260208701959095529385019290925260608401526080830152151560a082015260c001610457565b610469600b5481565b601d5461049f906001600160a01b031681565b6104697f2f237764fc2d5c1022c2b3369211bf066f9f9b112c1a699afe91573a989d407f81565b6104ca610826366004613fb4565b611e3d565b6104ca610839366004613fe2565b611e5b565b6104ca61084c366004613ab6565b611ee4565b6104ca61085f366004613b23565b611f56565b6104ca611f98565b60135461044b90610100900460ff1681565b6104ca61088c36600461411c565b611fb4565b61047f611fe9565b6104ca6108a736600461419b565b611ff6565b610469600d5481565b61047f61207e565b61047f6108cb366004613a78565b61208b565b6104ca6108de366004613e02565b61233d565b610469600c5481565b6104ca612496565b6106a7610902366004613a78565b60156020526000908152604090205461ffff1681565b61046960105481565b6109296124cd565b6040805182518152602080840151908201529181015190820152606001610457565b61047f612517565b6104ca610961366004613e02565b612524565b61044b6109743660046141b8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61047f6040518060400160405280600b81526020016a555345525f52414e444f4d60a81b81525081565b6104ca612665565b61044b600181565b6104ca6109ea366004613e32565b6128de565b60225461049f9061010090046001600160a01b031681565b61046960008051602061497583398151915281565b6104697fdbd612d55a9aa50e9cdaf6dcccb9ec8386fea10c2783e3ba35c8652cd4932d7c81565b60225461044b9060ff1681565b60006001600160e01b0319821663780e9d6360e01b1480610a755750610a7582612954565b92915050565b6060601b8054610a8a906141e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab6906141e6565b8015610b035780601f10610ad857610100808354040283529160200191610b03565b820191906000526020600020905b815481529060010190602001808311610ae657829003601f168201915b5050505050905090565b6000610b18826129a4565b506000908152600460205260409020546001600160a01b031690565b60225460ff1615610b4857610b4882612a03565b610b528282612ab1565b5050565b600080610b62836119f1565b90508061ffff16600003610b77575090919050565b61ffff81166000908152601460209081526040808320815160c08101835281548152600182015493810193909352600281015491830182905260038101546060840152600481015460808401526005015460ff16151560a0830152909190610bdf9086614236565b905081608001518111610bf457949350505050565b8160800151818360600151610c099190614236565b610c139190614249565b95945050505050565b60128054610c29906141e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c55906141e6565b8015610ca25780601f10610c7757610100808354040283529160200191610ca2565b820191906000526020600020905b815481529060010190602001808311610c8557829003601f168201915b505050505081565b60168054610c29906141e6565b610cbf612bc1565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d30919061425c565b505050565b6000600e54600d54610d479190614236565b82118015610d645750600f54600d54610d609190614236565b8211155b15610d7157506001919050565b506000919050565b60225460ff168015610d9457506001600160a01b0383163314155b15610da257610da233612a03565b610d30838383612c1b565b600080516020614975833981519152610dc68133611a45565b610deb5760405162461bcd60e51b8152600401610de290614279565b60405180910390fd5b6011610df88385836142ee565b50505050565b610ea260405180610260016040528060608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001600015158152602001600015158152602001600081526020016060815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000151581525090565b60175460009061ffff166001600160401b03811115610ec357610ec3613e4f565b604051908082528060200260200182016040528015610f2f57816020015b610f1c6040518060c0016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b815260200190600190039081610ee15790505b50905060015b60175461ffff90811690821611610fe25761ffff8116600090815260146020908152604091829020825160c081018452815481526001808301549382019390935260028201549381019390935260038101546060840152600481015460808401526005015460ff16151560a08301528390610fb090846143ae565b61ffff1681518110610fc457610fc46143d0565b60200260200101819052508080610fda906143e6565b915050610f35565b506000610fef6020612c4c565b90506000816001600160401b0381111561100b5761100b613e4f565b604051908082528060200260200182016040528015611034578160200160208202803683370190505b50905060005b828161ffff16101561109557611055602061ffff8316612c56565b828261ffff168151811061106b5761106b6143d0565b6001600160a01b03909216602092830291909101909101528061108d816143e6565b91505061103a565b5060006110a2601e612c4c565b90506000816001600160401b038111156110be576110be613e4f565b6040519080825280602002602001820160405280156110e7578160200160208202803683370190505b50905060005b828161ffff16101561114857611108601e61ffff8316612c56565b828261ffff168151811061111e5761111e6143d0565b6001600160a01b039092166020928302919091019091015280611140816143e6565b9150506110ed565b5060405180610260016040528061115d610a7b565b815260200161116a611b77565b8152602001600b548152602001600c548152602001600d548152602001600e548152602001600f5481526020016010548152602001601180546111ac906141e6565b80601f01602080910402602001604051908101604052809291908181526020018280546111d8906141e6565b80156112255780601f106111fa57610100808354040283529160200191611225565b820191906000526020600020905b81548152906001019060200180831161120857829003601f168201915b505050505081526020016012805461123c906141e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611268906141e6565b80156112b55780601f1061128a576101008083540402835291602001916112b5565b820191906000526020600020905b81548152906001019060200180831161129857829003601f168201915b505050918352505060135460ff8082161515602084015261010090910416151560408201526060016112e660085490565b8152602001868152602001611303600a546001600160a01b031690565b6001600160a01b031681526020018481526020018281526020016113286378a4676d90565b8152601954610100900460ff1615156020909101529695505050505050565b600061135283611957565b82106113b45760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610de2565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b601954610100900460ff166114045760405162461bcd60e51b8152600401610de290614407565b61140c612c62565b6001600160a01b0316336001600160a01b0316146114785760405162461bcd60e51b8152602060048201526024808201527f546f6b656e3a2070726f63657373282920556e617574686f7269736564206361604482015263363632b960e11b6064820152608401610de2565b60008181526015602090815260408083205461ffff168084526014909252909120600581015460ff16156114ee5760405162461bcd60e51b815260206004820181905260248201527f546f6b656e3a2072657665616c20616c72656164792070726f6365737365642e6044820152606401610de2565b805483900361161e57611502600285614460565b600182018190556000036115355760038160040154620186a06115259190614474565b61152f9190614460565b60018201555b806003015481600401546115499190614249565b8160010154611558919061448b565b600282018190556000036115a557600381600101546115779190614460565b6001820155600381015460048201546115909190614249565b816001015461159f919061448b565b60028201555b60058101805460ff191660019081179091558101546002820154600383015460048401546040805161ffff881681526020810195909552840192909252606083015260808201527f959b44b0b513e15fb6ff0120336443b895d08969842e3aed3ac22eb9e933f7b39060a00160405180910390a1610df8565b60405162461bcd60e51b815260206004820152602360248201527f546f6b656e3a20496e636f7272656374207265717565737449642072656365696044820152621d995960ea1b6064820152608401610de2565b60225460ff16801561168d57506001600160a01b0383163314155b1561169b5761169b33612a03565b610d30838383612cf3565b6000601054600f54600d546116bb9190614236565b6116c59190614249565b6116d0906001614236565b905090565b60006116e060085490565b82106117435760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610de2565b60088281548110611756576117566143d0565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b031680610a755760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610de2565b7f78095cc8201dcba39b170f4873756afcc9c5fe4c54fba1731ca3be8a9544e76b6117f38133611a45565b61180f5760405162461bcd60e51b8152600401610de290614279565b601354610100900460ff16156118735760405162461bcd60e51b8152602060048201526024808201527f546f6b656e3a2043616e6e6f74206d696e74206166746572206c6173742072656044820152631d99585b60e21b6064820152608401610de2565b600f54600c546118839190614249565b83600d546118919190614236565b11156118fe5760405162461bcd60e51b815260206004820152603660248201527f546f6b656e3a205468697320776f756c642065786365656420746865206e756d604482015275626572206f6620636172647320617661696c61626c6560501b6064820152608401610de2565b6000600d54600161190f9190614236565b905060005b8481101561193957611931848361192a8161449f565b9450612d0e565b600101611914565b5083600d600082825461194c9190614236565b909155505050505050565b60006001600160a01b0382166119c15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610de2565b506001600160a01b031660009081526003602052604090205490565b6119e5612bc1565b6119ef6000612e5c565b565b600060015b60175461ffff90811690821611611a3c5761ffff81166000908152601460205260409020600401548311611a2a5792915050565b80611a34816143e6565b9150506119f6565b50600092915050565b6000611a59600a546001600160a01b031690565b6001600160a01b0316826001600160a01b03161480611a7d5750611a7d8383611a84565b9392505050565b601d54604051632474521560e21b8152600481018490526001600160a01b03838116602483015260009216906391d1485490604401602060405180830381865afa158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7d919061425c565b600080516020614975833981519152611b138133611a45565b611b2f5760405162461bcd60e51b8152600401610de290614279565b6018611b3b83826144b8565b507f74c497646a57fa0eeedc14ff6eec2da957c18c9c77881fe1aff368249b52b5c182604051611b6b9190613a65565b60405180910390a15050565b6060601c8054610a8a906141e6565b7f2f237764fc2d5c1022c2b3369211bf066f9f9b112c1a699afe91573a989d407f611bb18133611a45565b611bcd5760405162461bcd60e51b8152600401610de290614279565b601354610100900460ff1615611bf55760405162461bcd60e51b8152600401610de290614577565b600c5460175461ffff1660009081526014602052604090206004015410611c2e5760405162461bcd60e51b8152600401610de2906145bb565b6013805461ff001916610100179055601780546000916014918391908290611c599061ffff166143e6565b825461ffff9182166101009390930a8381029083021990911617909255825260208201929092526040016000908120601754909350601492611c9e91600191166143ae565b61ffff1681526020810191909152604001600020600401546003820155601954610100900460ff1615611da857600f54600d54611cdb9190614236565b600482018190556003820154600091611cf49190614249565b11611d115760405162461bcd60e51b8152600401610de2906145ff565b611d19612c62565b6001600160a01b031663c532bbac6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7c919061465d565b808255601754600091825260156020526040909120805461ffff191661ffff9092169190911790555050565b6000600d5411611dca5760405162461bcd60e51b8152600401610de2906145ff565b6000600182018190556002820181905560038201819055600c54600483018190556017546040805161ffff9092168252602082018490528101839052606081019290925260808201527f959b44b0b513e15fb6ff0120336443b895d08969842e3aed3ac22eb9e933f7b39060a001611b6b565b60225460ff1615611e5157611e5182612a03565b610b528282612eae565b6023546001600160a01b03163b15611eda57602354602254604051633e9f1edf60e11b81523060048201526001600160a01b0361010090920482166024820152911690637d3e3dbe90604401600060405180830381600087803b158015611ec157600080fd5b505af1158015611ed5573d6000803e3d6000fd5b505050505b610b528282612eb9565b611eec612bc1565b6040516323b872dd60e01b8152306004820152336024820152604481018290526001600160a01b038316906323b872dd90606401600060405180830381600087803b158015611f3a57600080fd5b505af1158015611f4e573d6000803e3d6000fd5b505050505050565b600080516020614975833981519152611f6f8133611a45565b611f8b5760405162461bcd60e51b8152600401610de290614279565b6012610df88385836142ee565b611fa0612bc1565b6022805460ff19811660ff90911615179055565b60225460ff168015611fcf57506001600160a01b0384163314155b15611fdd57611fdd33612a03565b610df884848484613134565b60118054610c29906141e6565b7f7d4398cf7d551d8cb071f228c3b0838dfaf546b384e93039ea180fba606dfac36120218133611a45565b61203d5760405162461bcd60e51b8152600401610de290614279565b6013805460ff19168315159081179091556040519081527fe3f0ec9c4af57e69d5aeff78a5912ca25733e4458710bab2b55d0985e98aeb5e90602001611b6b565b601a8054610c29906141e6565b6000818152600260205260409020546060906001600160a01b03161515806120b757506120b782610d35565b6121035760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e3a20546f6b656e20646f6573206e6f7420657869737400000000006044820152606401610de2565b601954610100900460ff16156122b757600061211e836119f1565b90508061ffff166000036121bf5760118054612139906141e6565b80601f0160208091040260200160405190810160405280929190818152602001828054612165906141e6565b80156121b25780601f10612187576101008083540402835291602001916121b2565b820191906000526020600020905b81548152906001019060200180831161219557829003601f168201915b5050505050915050919050565b61ffff81166000908152601460209081526040808320815160c08101835281548152600182015493810184905260028201549281019290925260038101546060830152600481015460808301526005015460ff16151560a082015291036122b4576011805461222d906141e6565b80601f0160208091040260200160405190810160405280929190818152602001828054612259906141e6565b80156122a65780601f1061227b576101008083540402835291602001916122a6565b820191906000526020600020905b81548152906001019060200180831161228957829003601f168201915b505050505092505050919050565b50505b60006122c283610b56565b905060006122d96122d460648461448b565b613166565b905060006122e683613166565b90506000604051806040016040528060018152602001602f60f81b81525090506012601a82858486604051602001612323969594939291906146e9565b604051602081830303815290604052945050505050919050565b7fdbd612d55a9aa50e9cdaf6dcccb9ec8386fea10c2783e3ba35c8652cd4932d7c6123688133611a45565b6123845760405162461bcd60e51b8152600401610de290614279565b601354610100900460ff166123ab5760405162461bcd60e51b8152600401610de290614754565b601054600f546123bb9190614249565b600e54146124195760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a204d757374206d696e7420726573657276656420636172647320604482015264199a5c9cdd60da1b6064820152608401610de2565b60006124236116a6565b9050808410158015612440575060105461243d9082614236565b84105b61248c5760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e3a2043617264206964206e6f7420696e2072616e676500000000006044820152606401610de2565b610df88385612d0e565b61249e612bc1565b60405133904780156108fc02916000818181858888f193505050501580156124ca573d6000803e3d6000fd5b50565b6124f160405180606001604052806000815260200160008152602001600081525090565b6040518060600160405280600b548152602001600c548152602001600f54815250905090565b60188054610c29906141e6565b60008051602061497583398151915261253d8133611a45565b6125595760405162461bcd60e51b8152600401610de290614279565b601354610100900460ff166125805760405162461bcd60e51b8152600401610de290614754565b601054600f546125909190614249565b83600e5461259e9190614236565b11156126125760405162461bcd60e51b815260206004820152603f60248201527f546f6b656e3a205468697320776f756c642065786365656420746865206e756d60448201527f626572206f6620726573657276656420636172647320617661696c61626c65006064820152608401610de2565b6000600e54600d546126249190614236565b61262f906001614236565b905060005b848110156126525761264a848361192a8161449f565b600101612634565b5083600e600082825461194c9190614236565b7f2f237764fc2d5c1022c2b3369211bf066f9f9b112c1a699afe91573a989d407f6126908133611a45565b6126ac5760405162461bcd60e51b8152600401610de290614279565b601954610100900460ff166126d35760405162461bcd60e51b8152600401610de290614407565b601354610100900460ff16156126fb5760405162461bcd60e51b8152600401610de290614577565b600d5460175461ffff16600090815260146020526040902060040154106127345760405162461bcd60e51b8152600401610de2906145bb565b6017805460009160149183919082906127509061ffff166143e6565b825461ffff9182166101009390930a838102908302199091161790925582526020820192909252604001600090812060175490935060149261279591600191166143ae565b61ffff1681526020810191909152604001600090812060049081015460038401819055600d549184018290556127ca91614249565b116127e75760405162461bcd60e51b8152600401610de2906145ff565b600c54600f54600d546127fa9190614236565b106128475760405162461bcd60e51b815260206004820181905260248201527f546f6b656e3a20506c656173652072657175657374204c61737452657665616c6044820152606401610de2565b61284f612c62565b6001600160a01b031663c532bbac6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561288e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b2919061465d565b90819055601754600091825260156020526040909120805461ffff191661ffff90921691909117905550565b6128e6612bc1565b6001600160a01b03811661294b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610de2565b6124ca81612e5c565b60006001600160e01b031982166380ac58cd60e01b148061298557506001600160e01b03198216635b5e139f60e01b145b80610a7557506301ffc9a760e01b6001600160e01b0319831614610a75565b6000818152600260205260409020546001600160a01b03166124ca5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610de2565b6023546001600160a01b03163b156124ca57602354604051633185c44d60e21b81523060048201526001600160a01b0383811660248301529091169063c617113490604401602060405180830381865afa158015612a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a89919061425c565b6124ca57604051633b79c77360e21b81526001600160a01b0382166004820152602401610de2565b6000612abc82611768565b9050806001600160a01b0316836001600160a01b031603612b295760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610de2565b336001600160a01b0382161480612b455750612b458133610974565b612bb75760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610de2565b610d30838361326e565b600a546001600160a01b031633146119ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610de2565b612c2533826132dc565b612c415760405162461bcd60e51b8152600401610de29061479e565b610d3083838361335a565b6000610a75825490565b6000611a7d8383613501565b6000601d54604080518082018252600b81526a555345525f52414e444f4d60a81b60208201529051631d2e660b60e21b81526001600160a01b03909216916374b9982c91612cb291600401613a65565b602060405180830381865afa158015612ccf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d091906147ec565b610d3083838360405180602001604052806000815250611fb4565b6001600160a01b038216612d645760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610de2565b6000818152600260205260409020546001600160a01b031615612dc95760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610de2565b612dd56000838361352b565b6001600160a01b0382166000908152600360205260408120805460019290612dfe908490614236565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b52338383613598565b60195460ff1615612f185760405162461bcd60e51b815260206004820152602360248201527f546f6b656e3a20436f6e747261637420616c726561647920696e697469616c696044820152621e995960ea1b6064820152608401610de2565b6040820151601b90612f2a90826144b8565b506060820151601c90612f3d90826144b8565b508151600b556080820151601190612f5590826144b8565b5060a0820151601290612f6890826144b8565b50602082810151600c5560c08301516013805460ff191691151591909117905560e0830151600f55610100830151601055604051631d2e660b60e21b81526004810191909152600e60248201526d10d3d353555392551657d31254d560921b60448201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906374b9982c90606401602060405180830381865afa158015613020573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304491906147ec565b600b5460405163d0f4a53760e01b815263ffffffff90911660048201529091506000906001600160a01b0383169063d0f4a53790602401600060405180830381865afa158015613098573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130c09190810190614809565b50601d80546001600160a01b0319166001600160a01b0383161790556101208601516019805461ff00191661010092151592909202919091179055915046905061310981613166565b601a9061311690826144b8565b5061312084612e5c565b50506019805460ff19166001179055505050565b61313e33836132dc565b61315a5760405162461bcd60e51b8152600401610de29061479e565b610df884848484613666565b60608160000361318d5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156131b757806131a18161449f565b91506131b09050600a83614460565b9150613191565b6000816001600160401b038111156131d1576131d1613e4f565b6040519080825280601f01601f1916602001820160405280156131fb576020820181803683370190505b5090505b841561326657613210600183614249565b915061321d600a8661448b565b613228906030614236565b60f81b81838151811061323d5761323d6143d0565b60200101906001600160f81b031916908160001a90535061325f600a86614460565b94506131ff565b949350505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906132a382611768565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806132e883611768565b9050806001600160a01b0316846001600160a01b0316148061332f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806132665750836001600160a01b031661334884610b0d565b6001600160a01b031614949350505050565b826001600160a01b031661336d82611768565b6001600160a01b0316146133d15760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610de2565b6001600160a01b0382166134335760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610de2565b61343e83838361352b565b61344960008261326e565b6001600160a01b0383166000908152600360205260408120805460019290613472908490614249565b90915550506001600160a01b03821660009081526003602052604081208054600192906134a0908490614236565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000826000018281548110613518576135186143d0565b9060005260206000200154905092915050565b6001600160a01b0383161561358d5760135460ff161561358d5760405162461bcd60e51b815260206004820181905260248201527f546f6b656e3a205472616e736665727320617265206e6f7420656e61626c65646044820152606401610de2565b610d30838383613699565b816001600160a01b0316836001600160a01b0316036135f95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610de2565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61367184848461335a565b61367d84848484613751565b610df85760405162461bcd60e51b8152600401610de2906148b2565b6001600160a01b0383166136f4576136ef81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b613717565b816001600160a01b0316836001600160a01b031614613717576137178382613852565b6001600160a01b03821661372e57610d30816138ef565b826001600160a01b0316826001600160a01b031614610d3057610d30828261399e565b60006001600160a01b0384163b1561384757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613795903390899088908890600401614904565b6020604051808303816000875af19250505080156137d0575060408051601f3d908101601f191682019092526137cd91810190614941565b60015b61382d573d8080156137fe576040519150601f19603f3d011682016040523d82523d6000602084013e613803565b606091505b5080516000036138255760405162461bcd60e51b8152600401610de2906148b2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050613266565b506001949350505050565b6000600161385f84611957565b6138699190614249565b6000838152600760205260409020549091508082146138bc576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061390190600190614249565b60008381526009602052604081205460088054939450909284908110613929576139296143d0565b90600052602060002001549050806008838154811061394a5761394a6143d0565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806139825761398261495e565b6001900381819060005260206000200160009055905550505050565b60006139a983611957565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b0319811681146124ca57600080fd5b600060208284031215613a0a57600080fd5b8135611a7d816139e2565b60005b83811015613a30578181015183820152602001613a18565b50506000910152565b60008151808452613a51816020860160208601613a15565b601f01601f19169290920160200192915050565b602081526000611a7d6020830184613a39565b600060208284031215613a8a57600080fd5b5035919050565b6001600160a01b03811681146124ca57600080fd5b8035613ab181613a91565b919050565b60008060408385031215613ac957600080fd5b8235613ad481613a91565b946020939093013593505050565b600080600060608486031215613af757600080fd5b8335613b0281613a91565b92506020840135613b1281613a91565b929592945050506040919091013590565b60008060208385031215613b3657600080fd5b82356001600160401b0380821115613b4d57600080fd5b818501915085601f830112613b6157600080fd5b813581811115613b7057600080fd5b866020828501011115613b8257600080fd5b60209290920196919550909350505050565b60008151808452602080850194506020840160005b83811015613bfb57815180518852838101518489015260408082015190890152606080820151908901526080808201519089015260a09081015115159088015260c09096019590820190600101613ba9565b509495945050505050565b60008151808452602080850194506020840160005b83811015613bfb5781516001600160a01b031687529582019590820190600101613c1b565b6020815260008251610260806020850152613c5f610280850183613a39565b91506020850151601f1980868503016040870152613c7d8483613a39565b93506040870151606087015260608701516080870152608087015160a087015260a087015160c087015260c087015160e087015260e08701519150610100828188015280880151925050610120818786030181880152613cdd8584613a39565b945080880151925050610140818786030181880152613cfc8584613a39565b945080880151925050610160613d158188018415159052565b8701519150610180613d2a8782018415159052565b808801519250506101a08281880152808801519250506101c0818786030181880152613d568584613b94565b9450808801519250506101e0613d76818801846001600160a01b03169052565b80880151925050610200818786030181880152613d938584613c06565b945080880151925050610220818786030181880152613db28584613c06565b9088015161024088810191909152880151801515858901529094509150613dd69050565b5090949350505050565b60008060408385031215613df357600080fd5b50508035926020909101359150565b60008060408385031215613e1557600080fd5b823591506020830135613e2781613a91565b809150509250929050565b600060208284031215613e4457600080fd5b8135611a7d81613a91565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613e8857613e88613e4f565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613eb657613eb6613e4f565b604052919050565b60006001600160401b03821115613ed757613ed7613e4f565b50601f01601f191660200190565b6000613ef8613ef384613ebe565b613e8e565b9050828152838383011115613f0c57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613f3457600080fd5b611a7d83833560208501613ee5565b600060208284031215613f5557600080fd5b81356001600160401b03811115613f6b57600080fd5b61326684828501613f23565b600060208284031215613f8957600080fd5b813561ffff81168114611a7d57600080fd5b80151581146124ca57600080fd5b8035613ab181613f9b565b60008060408385031215613fc757600080fd5b8235613fd281613a91565b91506020830135613e2781613f9b565b60008060408385031215613ff557600080fd5b82356001600160401b038082111561400c57600080fd5b90840190610140828703121561402157600080fd5b614029613e65565b823581526020830135602082015260408301358281111561404957600080fd5b61405588828601613f23565b60408301525060608301358281111561406d57600080fd5b61407988828601613f23565b60608301525060808301358281111561409157600080fd5b61409d88828601613f23565b60808301525060a0830135828111156140b557600080fd5b6140c188828601613f23565b60a0830152506140d360c08401613fa9565b60c082015260e08381013590820152610100808401359082015261012091506140fd828401613fa9565b8282015280945050505061411360208401613aa6565b90509250929050565b6000806000806080858703121561413257600080fd5b843561413d81613a91565b9350602085013561414d81613a91565b92506040850135915060608501356001600160401b0381111561416f57600080fd5b8501601f8101871361418057600080fd5b61418f87823560208401613ee5565b91505092959194509250565b6000602082840312156141ad57600080fd5b8135611a7d81613f9b565b600080604083850312156141cb57600080fd5b82356141d681613a91565b91506020830135613e2781613a91565b600181811c908216806141fa57607f821691505b60208210810361421a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a7557610a75614220565b81810381811115610a7557610a75614220565b60006020828403121561426e57600080fd5b8151611a7d81613f9b565b602080825260139082015272151bdad95b8e88155b985d5d1a1bdc9a5cd959606a1b604082015260600190565b601f821115610d30576000816000526020600020601f850160051c810160208610156142cf5750805b601f850160051c820191505b81811015611f4e578281556001016142db565b6001600160401b0383111561430557614305613e4f565b6143198361431383546141e6565b836142a6565b6000601f84116001811461434d57600085156143355750838201355b600019600387901b1c1916600186901b1783556143a7565b600083815260209020601f19861690835b8281101561437e578685013582556020948501946001909201910161435e565b508682101561439b5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b61ffff8281168282160390808211156143c9576143c9614220565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168181036143fd576143fd614220565b6001019392505050565b60208082526023908201527f546f6b656e3a20565246205368696674696e67206d75737420626520656e61626040820152621b195960ea1b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261446f5761446f61444a565b500490565b8082028115828204841417610a7557610a75614220565b60008261449a5761449a61444a565b500690565b6000600182016144b1576144b1614220565b5060010190565b81516001600160401b038111156144d1576144d1613e4f565b6144e5816144df84546141e6565b846142a6565b602080601f83116001811461451a57600084156145025750858301515b600019600386901b1c1916600185901b178555611f4e565b600085815260208120601f198616915b828110156145495788860151825594840194600190910190840161452a565b50858210156145675787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526024908201527f546f6b656e3a204c6173742072657665616c20616c72656164792072657175656040820152631cdd195960e21b606082015260800190565b60208082526024908201527f546f6b656e3a2052657665616c207265717565737420616c72656164792065786040820152636973747360e01b606082015260800190565b602080825260409082018190527f546f6b656e3a207265717569726573206d696e74656420746f6b656e7320666f908201527f722063757272656e742072616e676520746f206265206174206c656173742031606082015260800190565b60006020828403121561466f57600080fd5b5051919050565b60008154614683816141e6565b6001828116801561469b57600181146146b0576146df565b60ff19841687528215158302870194506146df565b8560005260208060002060005b858110156146d65781548a8201529084019082016146bd565b50505082870194505b5050505092915050565b60006146fe6146f8838a614676565b88614676565b865161470e818360208b01613a15565b8651910190614721818360208a01613a15565b8551910190614734818360208901613a15565b8451910190614747818360208801613a15565b0198975050505050505050565b6020808252602a908201527f546f6b656e3a204c6173742072657665616c206d7573742062652072657175656040820152691cdd195908199a5c9cdd60b21b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6000602082840312156147fe57600080fd5b8151611a7d81613a91565b60008060006060848603121561481e57600080fd5b83516001600160401b0381111561483457600080fd5b8401601f8101861361484557600080fd5b8051614853613ef382613ebe565b81815287602083850101111561486857600080fd5b614879826020830160208601613a15565b809550505050602084015161488d81613a91565b604085015190925063ffffffff811681146148a757600080fd5b809150509250925092565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061493790830184613a39565b9695505050505050565b60006020828403121561495357600080fd5b8151611a7d816139e2565b634e487b7160e01b600052603160045260246000fdfe0c7112aae6457f5c6a25de7d80f58f2fb755235d06d4473246b07240659a270fa2646970667358221220fcee4d981faca584466dc45b833329f2bfed98bcf260e62d3a181037c4c41a0d64736f6c63430008190033000000000000000000000000ca94d8f6ecf6d6321863ad0ca95e248d0bd7263d