[ { "inputs": [ { "internalType": "address", "name": "_endpoint", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InsufficientGas", "type": "error" }, { "inputs": [], "name": "NotTokenOwner", "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": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "_reason", "type": "bytes" } ], "name": "MessageFailed", "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": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "counter", "type": "uint256" } ], "name": "ReceivedNFT", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "_payloadHash", "type": "bytes32" } ], "name": "RetryMessageSuccess", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "_type", "type": "uint16" }, { "indexed": false, "internalType": "uint256", "name": "_minDstGas", "type": "uint256" } ], "name": "SetMinDstGas", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "precrime", "type": "address" } ], "name": "SetPrecrime", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "SetTrustedRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "SetTrustedRemoteAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_PAYLOAD_SIZE_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "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": "counter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "crossChain", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "estimateFees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "failedMessages", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "forceResumeReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" } ], "name": "getConfig", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" } ], "name": "getTrustedRemoteAddress", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "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": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "isTrustedRemote", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lzEndpoint", "outputs": [ { "internalType": "contract ILayerZeroEndpoint", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "lzReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "minDstGasLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mintcost", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "nonblockingLzReceive", "outputs": [], "stateMutability": "nonpayable", "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": "uint16", "name": "", "type": "uint16" } ], "name": "payloadSizeLimitLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "precrime", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "retryMessage", "outputs": [], "stateMutability": "payable", "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": [], "name": "safeWithdraw", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" }, { "internalType": "bytes", "name": "_config", "type": "bytes" } ], "name": "setConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint16", "name": "_packetType", "type": "uint16" }, { "internalType": "uint256", "name": "_minGas", "type": "uint256" } ], "name": "setMinDstGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_mintcost", "type": "uint256" } ], "name": "setMintCost", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_size", "type": "uint256" } ], "name": "setPayloadSizeLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_precrime", "type": "address" } ], "name": "setPrecrime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setReceiveVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setSendVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "setTrustedRemote", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "setTrustedRemoteAddress", "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "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": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "trustedRemoteLookup", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" } ]
60a0604052660110d9316ec000600d553480156200001c57600080fd5b5060405162003b4e38038062003b4e8339810160408190526200003f9162000123565b8080604051806040016040528060098152602001680537461724c616220360bc1b8152506040518060400160405280600481526020016329aa20a960e11b8152506200009a62000094620000cf60201b60201c565b620000d3565b6001620000a88382620001fa565b506002620000b78282620001fa565b5050506001600160a01b031660805250620002c69050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200013657600080fd5b81516001600160a01b03811681146200014e57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018057607f821691505b602082108103620001a157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f557600081815260208120601f850160051c81016020861015620001d05750805b601f850160051c820191505b81811015620001f157828155600101620001dc565b5050505b505050565b81516001600160401b0381111562000216576200021662000155565b6200022e816200022784546200016b565b84620001a7565b602080601f8311600181146200026657600084156200024d5750858301515b600019600386901b1c1916600185901b178555620001f1565b600085815260208120601f198616915b82811015620002975788860151825594840194600190910190840162000276565b5085821015620002b65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805161382d62000321600039600081816106d20152818161086901528181610b9c01528181610d8001528181610f160152818161105d015281816111f50152818161181c01528181611c5b01526121c6015261382d6000f3fe6080604052600436106102715760003560e01c80637533d7881161014f578063b353aaa7116100c1578063d1deba1f1161007a578063d1deba1f1461078a578063df2a5b3b1461079d578063e985e9c5146107bd578063eb8d72b714610806578063f2fde38b14610826578063f5ecbdbc1461084657600080fd5b8063b353aaa7146106c0578063b88d4fde146106f4578063baf3292d14610714578063c446183414610734578063c87b56dd1461074a578063cbed8b9c1461076a57600080fd5b806394c3cbf41161011357806394c3cbf414610615578063950c8a741461062b57806395d89b411461064b5780639f38369a14610660578063a22cb46514610680578063a6c3d165146106a057600080fd5b80637533d788146105775780637fd42617146105975780638545f4ea1461059f5780638cfd8f5c146105bf5780638da5cb5b146105f757600080fd5b8063362790f6116101e85780635b8c41e6116101ac5780635b8c41e61461049d57806361bc221a146104ec5780636352211e1461050257806366ad5c8a1461052257806370a0823114610542578063715018a61461056257600080fd5b8063362790f6146103e25780633d8b38f6146104105780633f1f4fa41461043057806342842e0e1461045d57806342d65a8d1461047d57600080fd5b8063095ea7b31161023a578063095ea7b3146103475780630df374831461036757806310ddb137146103875780631249c58b146103a75780631e128296146103af57806323b872dd146103c257600080fd5b80621d35671461027657806301ffc9a71461029857806306fdde03146102cd57806307e0db17146102ef578063081812fc1461030f575b600080fd5b34801561028257600080fd5b50610296610291366004612b83565b610866565b005b3480156102a457600080fd5b506102b86102b3366004612c2c565b610a97565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610ae9565b6040516102c49190612c99565b3480156102fb57600080fd5b5061029661030a366004612cac565b610b7b565b34801561031b57600080fd5b5061032f61032a366004612cc7565b610c04565b6040516001600160a01b0390911681526020016102c4565b34801561035357600080fd5b50610296610362366004612cf5565b610c2b565b34801561037357600080fd5b50610296610382366004612d21565b610d40565b34801561039357600080fd5b506102966103a2366004612cac565b610d5f565b610296610db7565b6102966103bd366004612d21565b610e6d565b3480156103ce57600080fd5b506102966103dd366004612d3d565b610fcd565b3480156103ee57600080fd5b506104026103fd366004612d21565b610ffe565b6040519081526020016102c4565b34801561041c57600080fd5b506102b861042b366004612d7e565b6110ef565b34801561043c57600080fd5b5061040261044b366004612cac565b60096020526000908152604090205481565b34801561046957600080fd5b50610296610478366004612d3d565b6111bb565b34801561048957600080fd5b50610296610498366004612d7e565b6111d6565b3480156104a957600080fd5b506104026104b8366004612e93565b600b602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b3480156104f857600080fd5b50610402600c5481565b34801561050e57600080fd5b5061032f61051d366004612cc7565b61125c565b34801561052e57600080fd5b5061029661053d366004612b83565b6112bc565b34801561054e57600080fd5b5061040261055d366004612ef0565b611398565b34801561056e57600080fd5b5061029661141e565b34801561058357600080fd5b506102e2610592366004612cac565b611432565b6102966114cc565b3480156105ab57600080fd5b506102966105ba366004612cc7565b61152c565b3480156105cb57600080fd5b506104026105da366004612f0d565b600860209081526000928352604080842090915290825290205481565b34801561060357600080fd5b506000546001600160a01b031661032f565b34801561062157600080fd5b50610402600d5481565b34801561063757600080fd5b50600a5461032f906001600160a01b031681565b34801561065757600080fd5b506102e2611539565b34801561066c57600080fd5b506102e261067b366004612cac565b611548565b34801561068c57600080fd5b5061029661069b366004612f40565b61165e565b3480156106ac57600080fd5b506102966106bb366004612d7e565b61166d565b3480156106cc57600080fd5b5061032f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561070057600080fd5b5061029661070f366004612f7e565b6116f6565b34801561072057600080fd5b5061029661072f366004612ef0565b61172e565b34801561074057600080fd5b5061040261271081565b34801561075657600080fd5b506102e2610765366004612cc7565b61178a565b34801561077657600080fd5b50610296610785366004612fe9565b6117fd565b610296610798366004612b83565b611892565b3480156107a957600080fd5b506102966107b8366004613057565b611aa8565b3480156107c957600080fd5b506102b86107d8366004613093565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561081257600080fd5b50610296610821366004612d7e565b611b5a565b34801561083257600080fd5b50610296610841366004612ef0565b611bb4565b34801561085257600080fd5b506102e26108613660046130c1565b611c2a565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146108e35760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff8616600090815260076020526040812080546109019061310e565b80601f016020809104026020016040519081016040528092919081815260200182805461092d9061310e565b801561097a5780601f1061094f5761010080835404028352916020019161097a565b820191906000526020600020905b81548152906001019060200180831161095d57829003601f168201915b50505050509050805186869050148015610995575060008151115b80156109bd5750805160208201206040516109b39088908890613148565b6040518091039020145b610a185760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6044820152651b9d1c9858dd60d21b60648201526084016108da565b610a8e8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250611cdd92505050565b50505050505050565b60006001600160e01b031982166380ac58cd60e01b1480610ac857506001600160e01b03198216635b5e139f60e01b145b80610ae357506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060018054610af89061310e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b249061310e565b8015610b715780601f10610b4657610100808354040283529160200191610b71565b820191906000526020600020905b815481529060010190602001808311610b5457829003601f168201915b5050505050905090565b610b83611d56565b6040516307e0db1760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307e0db17906024015b600060405180830381600087803b158015610be957600080fd5b505af1158015610bfd573d6000803e3d6000fd5b5050505050565b6000610c0f82611db0565b506000908152600560205260409020546001600160a01b031690565b6000610c368261125c565b9050806001600160a01b0316836001600160a01b031603610ca35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108da565b336001600160a01b0382161480610cbf5750610cbf81336107d8565b610d315760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108da565b610d3b8383611e0f565b505050565b610d48611d56565b61ffff909116600090815260096020526040902055565b610d67611d56565b6040516310ddb13760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906310ddb13790602401610bcf565b600d54341015610e095760405162461bcd60e51b815260206004820152601f60248201527f537461726c6162203a204e6f7420656e6f7567682065746865722073656e740060448201526064016108da565b610e623362989680600c5442604051602001610e2f929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c610e529190613158565b610e5d906001613190565b611e7d565b600c80546001019055565b610e768161125c565b6001600160a01b0316336001600160a01b031614610ea7576040516359dc379f60e01b815260040160405180910390fd5b600c8054600019019055610eba81612008565b60408051336020820152808201839052815180820383018152606082018352600160f01b60808301526205573060828084018290528451808503909101815260a284019485905263040a7bb160e41b90945290926001926000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340a7bb1090610f5b908a9030908a908790899060a6016131a3565b6040805180830381865afa158015610f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b91906131f7565b509050803411610fbe576040516307099c5360e21b815260040160405180910390fd5b610a8e8786336000863461209d565b610fd73382612242565b610ff35760405162461bcd60e51b81526004016108da9061321b565b610d3b8383836122c0565b60408051336020820152808201839052815180820383018152606082018352600160f01b60808301526205573060828084018290528451808503909101815260a284019485905263040a7bb160e41b90945260009391926001929085907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340a7bb10906110a2908b9030908a908790899060a6016131a3565b6040805180830381865afa1580156110be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e291906131f7565b5098975050505050505050565b61ffff8316600090815260076020526040812080548291906111109061310e565b80601f016020809104026020016040519081016040528092919081815260200182805461113c9061310e565b80156111895780601f1061115e57610100808354040283529160200191611189565b820191906000526020600020905b81548152906001019060200180831161116c57829003601f168201915b5050505050905083836040516111a0929190613148565b60405180910390208180519060200120149150509392505050565b610d3b838383604051806020016040528060008152506116f6565b6111de611d56565b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d9061122e90869086908690600401613291565b600060405180830381600087803b15801561124857600080fd5b505af1158015610a8e573d6000803e3d6000fd5b6000818152600360205260408120546001600160a01b031680610ae35760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108da565b33301461131a5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b60648201526084016108da565b6113908686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061242492505050565b505050505050565b60006001600160a01b0382166114025760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108da565b506001600160a01b031660009081526004602052604090205490565b611426611d56565b61143060006124af565b565b6007602052600090815260409020805461144b9061310e565b80601f01602080910402602001604051908101604052809291908181526020018280546114779061310e565b80156114c45780601f10611499576101008083540402835291602001916114c4565b820191906000526020600020905b8154815290600101906020018083116114a757829003601f168201915b505050505081565b6114d4611d56565b604051600090339047908381818185875af1925050503d8060008114611516576040519150601f19603f3d011682016040523d82523d6000602084013e61151b565b606091505b505090508061152957600080fd5b50565b611534611d56565b600d55565b606060028054610af89061310e565b61ffff811660009081526007602052604081208054606092919061156b9061310e565b80601f01602080910402602001604051908101604052809291908181526020018280546115979061310e565b80156115e45780601f106115b9576101008083540402835291602001916115e4565b820191906000526020600020905b8154815290600101906020018083116115c757829003601f168201915b50505050509050805160000361163c5760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f726400000060448201526064016108da565b61165760006014835161164f91906132af565b8391906124ff565b9392505050565b61166933838361260c565b5050565b611675611d56565b81813060405160200161168a939291906132c2565b60408051601f1981840301815291815261ffff85166000908152600760205220906116b5908261332e565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce8383836040516116e993929190613291565b60405180910390a1505050565b6117003383612242565b61171c5760405162461bcd60e51b81526004016108da9061321b565b611728848484846126da565b50505050565b611736611d56565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b9060200160405180910390a150565b606061179582611db0565b60006117ac60408051602081019091526000815290565b905060008151116117cc5760405180602001604052806000815250611657565b806117d68461270d565b6040516020016117e79291906133ed565b6040516020818303038152906040529392505050565b611805611d56565b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c90611859908890889088908890889060040161341c565b600060405180830381600087803b15801561187357600080fd5b505af1158015611887573d6000803e3d6000fd5b505050505050505050565b61ffff86166000908152600b602052604080822090516118b59088908890613148565b90815260408051602092819003830190206001600160401b038716600090815292529020549050806119355760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b60648201526084016108da565b808383604051611946929190613148565b6040518091039020146119a55760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b60648201526084016108da565b61ffff87166000908152600b602052604080822090516119c89089908990613148565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252611a60918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061242492505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051611a97959493929190613455565b60405180910390a150505050505050565b611ab0611d56565b60008111611af85760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b60448201526064016108da565b61ffff83811660008181526008602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac0906060016116e9565b611b62611d56565b61ffff83166000908152600760205260409020611b80828483613490565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab8383836040516116e993929190613291565b611bbc611d56565b6001600160a01b038116611c215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108da565b611529816124af565b604051633d7b2f6f60e21b815261ffff808616600483015284166024820152306044820152606481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f5ecbdbc90608401600060405180830381865afa158015611caa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cd2919081019061354f565b90505b949350505050565b600080611d405a60966366ad5c8a60e01b89898989604051602401611d0594939291906135c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091523092919061279f565b9150915081611390576113908686868685612829565b6000546001600160a01b031633146114305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6000818152600360205260409020546001600160a01b03166115295760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108da565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e448261125c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b038216611ed35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108da565b6000818152600360205260409020546001600160a01b031615611f385760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108da565b6000818152600360205260409020546001600160a01b031615611f9d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108da565b6001600160a01b038216600081815260046020908152604080832080546001019055848352600390915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006120138261125c565b905061201e8261125c565b600083815260056020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526004845282852080546000190190558785526003909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b61ffff8616600090815260076020526040812080546120bb9061310e565b80601f01602080910402602001604051908101604052809291908181526020018280546120e79061310e565b80156121345780601f1061210957610100808354040283529160200191612134565b820191906000526020600020905b81548152906001019060200180831161211757829003601f168201915b5050505050905080516000036121a55760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b60648201526084016108da565b6121b08787516128c6565b60405162c5803160e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5803100908490612207908b9086908c908c908c908c90600401613603565b6000604051808303818588803b15801561222057600080fd5b505af1158015612234573d6000803e3d6000fd5b505050505050505050505050565b60008061224e8361125c565b9050806001600160a01b0316846001600160a01b0316148061229557506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b80611cd55750836001600160a01b03166122ae84610c04565b6001600160a01b031614949350505050565b826001600160a01b03166122d38261125c565b6001600160a01b0316146122f95760405162461bcd60e51b81526004016108da9061366a565b6001600160a01b03821661235b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108da565b826001600160a01b031661236e8261125c565b6001600160a01b0316146123945760405162461bcd60e51b81526004016108da9061366a565b600081815260056020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260048552838620805460001901905590871680865283862080546001019055868652600390945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000601484015190506000808380602001905181019061244491906136af565b915091506124528282611e7d565b600c8054600101908190556040805161ffff8a1681526001600160a01b038616602082015290810183905260608101919091527f31ae2bb20187b24b2039def7711f43f56311ec96de17b7ef01d1b1da40eb2eee90608001611a97565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608161250d81601f613190565b101561254c5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016108da565b6125568284613190565b8451101561259a5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016108da565b6060821580156125b95760405191506000825260208201604052612603565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156125f25780518352602092830192016125da565b5050858452601f01601f1916604052505b50949350505050565b816001600160a01b0316836001600160a01b03160361266d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108da565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6126e58484846122c0565b6126f184848484612937565b6117285760405162461bcd60e51b81526004016108da906136dd565b6060600061271a83612a35565b60010190506000816001600160401b0381111561273957612739612dd0565b6040519080825280601f01601f191660200182016040528015612763576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461276d57509392505050565b6000606060008060008661ffff166001600160401b038111156127c4576127c4612dd0565b6040519080825280601f01601f1916602001820160405280156127ee576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115612810578692505b828152826000602083013e909890975095505050505050565b8180519060200120600b60008761ffff1661ffff1681526020019081526020016000208560405161285a919061372f565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c906128b7908790879087908790879061374b565b60405180910390a15050505050565b61ffff8216600090815260096020526040812054908190036128e757506127105b80821115610d3b5760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c6172676560448201526064016108da565b60006001600160a01b0384163b15612a2d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061297b90339089908890889060040161379d565b6020604051808303816000875af19250505080156129b6575060408051601f3d908101601f191682019092526129b3918101906137da565b60015b612a13573d8080156129e4576040519150601f19603f3d011682016040523d82523d6000602084013e6129e9565b606091505b508051600003612a0b5760405162461bcd60e51b81526004016108da906136dd565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611cd5565b506001611cd5565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612a745772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612aa0576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612abe57662386f26fc10000830492506010015b6305f5e1008310612ad6576305f5e100830492506008015b6127108310612aea57612710830492506004015b60648310612afc576064830492506002015b600a8310610ae35760010192915050565b803561ffff81168114612b1f57600080fd5b919050565b60008083601f840112612b3657600080fd5b5081356001600160401b03811115612b4d57600080fd5b602083019150836020828501011115612b6557600080fd5b9250929050565b80356001600160401b0381168114612b1f57600080fd5b60008060008060008060808789031215612b9c57600080fd5b612ba587612b0d565b955060208701356001600160401b0380821115612bc157600080fd5b612bcd8a838b01612b24565b9097509550859150612be160408a01612b6c565b94506060890135915080821115612bf757600080fd5b50612c0489828a01612b24565b979a9699509497509295939492505050565b6001600160e01b03198116811461152957600080fd5b600060208284031215612c3e57600080fd5b813561165781612c16565b60005b83811015612c64578181015183820152602001612c4c565b50506000910152565b60008151808452612c85816020860160208601612c49565b601f01601f19169290920160200192915050565b6020815260006116576020830184612c6d565b600060208284031215612cbe57600080fd5b61165782612b0d565b600060208284031215612cd957600080fd5b5035919050565b6001600160a01b038116811461152957600080fd5b60008060408385031215612d0857600080fd5b8235612d1381612ce0565b946020939093013593505050565b60008060408385031215612d3457600080fd5b612d1383612b0d565b600080600060608486031215612d5257600080fd5b8335612d5d81612ce0565b92506020840135612d6d81612ce0565b929592945050506040919091013590565b600080600060408486031215612d9357600080fd5b612d9c84612b0d565b925060208401356001600160401b03811115612db757600080fd5b612dc386828701612b24565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612e0e57612e0e612dd0565b604052919050565b60006001600160401b03821115612e2f57612e2f612dd0565b50601f01601f191660200190565b600082601f830112612e4e57600080fd5b8135612e61612e5c82612e16565b612de6565b818152846020838601011115612e7657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215612ea857600080fd5b612eb184612b0d565b925060208401356001600160401b03811115612ecc57600080fd5b612ed886828701612e3d565b925050612ee760408501612b6c565b90509250925092565b600060208284031215612f0257600080fd5b813561165781612ce0565b60008060408385031215612f2057600080fd5b612f2983612b0d565b9150612f3760208401612b0d565b90509250929050565b60008060408385031215612f5357600080fd5b8235612f5e81612ce0565b915060208301358015158114612f7357600080fd5b809150509250929050565b60008060008060808587031215612f9457600080fd5b8435612f9f81612ce0565b93506020850135612faf81612ce0565b92506040850135915060608501356001600160401b03811115612fd157600080fd5b612fdd87828801612e3d565b91505092959194509250565b60008060008060006080868803121561300157600080fd5b61300a86612b0d565b945061301860208701612b0d565b93506040860135925060608601356001600160401b0381111561303a57600080fd5b61304688828901612b24565b969995985093965092949392505050565b60008060006060848603121561306c57600080fd5b61307584612b0d565b925061308360208501612b0d565b9150604084013590509250925092565b600080604083850312156130a657600080fd5b82356130b181612ce0565b91506020830135612f7381612ce0565b600080600080608085870312156130d757600080fd5b6130e085612b0d565b93506130ee60208601612b0d565b925060408501356130fe81612ce0565b9396929550929360600135925050565b600181811c9082168061312257607f821691505b60208210810361314257634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b60008261317557634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ae357610ae361317a565b61ffff861681526001600160a01b038516602082015260a0604082018190526000906131d190830186612c6d565b841515606084015282810360808401526131eb8185612c6d565b98975050505050505050565b6000806040838503121561320a57600080fd5b505080516020909101519092909150565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff84168152604060208201526000611cd2604083018486613268565b81810381811115610ae357610ae361317a565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b601f821115610d3b57600081815260208120601f850160051c8101602086101561330f5750805b601f850160051c820191505b818110156113905782815560010161331b565b81516001600160401b0381111561334757613347612dd0565b61335b81613355845461310e565b846132e8565b602080601f83116001811461339057600084156133785750858301515b600019600386901b1c1916600185901b178555611390565b600085815260208120601f198616915b828110156133bf578886015182559484019460019091019084016133a0565b50858210156133dd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600083516133ff818460208801612c49565b835190830190613413818360208801612c49565b01949350505050565b600061ffff80881683528087166020840152508460408301526080606083015261344a608083018486613268565b979650505050505050565b61ffff86168152608060208201526000613473608083018688613268565b6001600160401b0394909416604083015250606001529392505050565b6001600160401b038311156134a7576134a7612dd0565b6134bb836134b5835461310e565b836132e8565b6000601f8411600181146134ef57600085156134d75750838201355b600019600387901b1c1916600186901b178355610bfd565b600083815260209020601f19861690835b828110156135205786850135825560209485019460019092019101613500565b508682101561353d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60006020828403121561356157600080fd5b81516001600160401b0381111561357757600080fd5b8201601f8101841361358857600080fd5b8051613596612e5c82612e16565b8181528560208385010111156135ab57600080fd5b6135bc826020830160208601612c49565b95945050505050565b61ffff851681526080602082015260006135e26080830186612c6d565b6001600160401b0385166040840152828103606084015261344a8185612c6d565b61ffff8716815260c06020820152600061362060c0830188612c6d565b82810360408401526136328188612c6d565b6001600160a01b0387811660608601528616608085015283810360a0850152905061365d8185612c6d565b9998505050505050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b600080604083850312156136c257600080fd5b82516136cd81612ce0565b6020939093015192949293505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008251613741818460208701612c49565b9190910192915050565b61ffff8616815260a06020820152600061376860a0830187612c6d565b6001600160401b038616604084015282810360608401526137898186612c6d565b905082810360808401526131eb8185612c6d565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906137d090830184612c6d565b9695505050505050565b6000602082840312156137ec57600080fd5b815161165781612c1656fea2646970667358221220d8be3509c882b60efa6428ae8fa6da194c38f3f05bc181c62b82481db7e62c2b64736f6c634300081200330000000000000000000000003c2269811836af69497e5f486a85d7316753cf62