[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "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": "address", "name": "_factory", "type": "address" } ], "name": "FactoryAddressSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "userAddress", "type": "address" }, { "indexed": false, "internalType": "address payable", "name": "relayerAddress", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "functionSignature", "type": "bytes" } ], "name": "MetaTransactionExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "_tokenURI", "type": "string" } ], "name": "NFTMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_trust", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_poolID", "type": "uint256" } ], "name": "PoolNftLocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "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": [ { "internalType": "address", "name": "userAddress", "type": "address" }, { "internalType": "bytes", "name": "functionSignature", "type": "bytes" }, { "internalType": "bytes32", "name": "sigR", "type": "bytes32" }, { "internalType": "bytes32", "name": "sigS", "type": "bytes32" }, { "internalType": "uint8", "name": "sigV", "type": "uint8" } ], "name": "executeMetaTransaction", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "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": "getChainID", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getNonce", "outputs": [ { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_factoryContract", "type": "address" }, { "internalType": "address", "name": "_lockPoolNft", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": "uint256", "name": "_poolID", "type": "uint256" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "lockNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lockPoolNFT", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "string", "name": "_tokenURI", "type": "string" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "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": "address", "name": "_factory", "type": "address" } ], "name": "setFactory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_lockPoolContract", "type": "address" } ], "name": "setLockPoolNFTContract", "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": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transfer", "outputs": [], "stateMutability": "nonpayable", "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": "owner", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "chainID", "type": "uint256" }, { "internalType": "bytes", "name": "functionSignature", "type": "bytes" }, { "internalType": "bytes32", "name": "sigR", "type": "bytes32" }, { "internalType": "bytes32", "name": "sigS", "type": "bytes32" }, { "internalType": "uint8", "name": "sigV", "type": "uint8" } ], "name": "verify", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
608080604052346100c2576000549060ff8260081c16610070575060ff80821610610035575b604051612d499081620000c88239f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a138610025565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe60806040526004361015610013575b600080fd5b60003560e01c806301ffc9a71461029357806306fdde031461028a578063081812fc14610281578063095ea7b3146102785780630c53c51c1461026f578063150b7a0214610266578063150ea6ab1461025d57806323b872dd14610254578063248a9ca31461024b5780632d0335ab146102425780632f2ff15d1461023957806336568abe1461023057806342842e0e14610227578063564b81ef1461021e5780635bb47808146102155780636281133d1461020c5780636352211e1461020357806370a08231146101fa57806391d14854146101f157806395d89b41146101e85780639ff12efd146101df578063a217fddf146101d6578063a22cb465146101cd578063a9059cbb146101c4578063b88d4fde146101bb578063c0c53b8b146101b2578063c45a0155146101a9578063c87b56dd146101a0578063d3fc986414610197578063d547741f1461018e578063e2c1aa99146101855763e985e9c51461017d57600080fd5b61000e611581565b5061000e61153d565b5061000e6114fd565b5061000e611295565b5061000e611261565b5061000e611236565b5061000e611137565b5061000e61111c565b5061000e6110f3565b5061000e610fef565b5061000e610fc8565b5061000e610e01565b5061000e610d59565b5061000e610d06565b5061000e610c64565b5061000e610c45565b5061000e610bd8565b5061000e610b6a565b5061000e610b4e565b5061000e610b25565b5061000e610a88565b5061000e6109b5565b5061000e610979565b5061000e610949565b5061000e610918565b5061000e6108b8565b5061000e610894565b5061000e610704565b5061000e6104f7565b5061000e610484565b5061000e61039e565b5061000e6102ae565b6001600160e01b031981160361000e57565b503461000e57602036600319011261000e5760206004356102ce8161029c565b63ffffffff60e01b16637965db0b60e01b81149081156102f4575b506040519015158152f35b6380ac58cd60e01b811491508115610326575b8115610315575b50386102e9565b6301ffc9a760e01b1490503861030e565b635b5e139f60e01b81149150610307565b600091031261000e57565b60005b8381106103555750506000910152565b8181015183820152602001610345565b9060209161037e81518092818552858086019101610342565b601f01601f1916010190565b90602061039b928181520190610365565b90565b503461000e576000806003193601126104815760405190806065546103c2816119da565b8085529160019180831690811561045757506001146103fc575b6103f8856103ec81870382610657565b6040519182918261038a565b0390f35b9250606583527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c75b82841061043f5750505081016020016103ec826103f86103dc565b80546020858701810191909152909301928101610424565b8695506103f8969350602092506103ec94915060ff191682840152151560051b82010192936103dc565b80fd5b503461000e57602036600319011261000e5760206104a3600435611a86565b6040516001600160a01b039091168152f35b600435906001600160a01b038216820361000e57565b602435906001600160a01b038216820361000e57565b604435906001600160a01b038216820361000e57565b503461000e57604036600319011261000e576105116104b5565b60243561051d816119b7565b6001600160a01b038082169391818316851461059b576105589461055392610543612ccd565b161490811561055a575b50611a14565b611e6d565b005b6105959150610567612ccd565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b3861054d565b60405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b50634e487b7160e01b600052604160045260246000fd5b6001600160401b03811161061457604052565b61061c6105ea565b604052565b602081019081106001600160401b0382111761061457604052565b604081019081106001600160401b0382111761061457604052565b90601f801991011681019081106001600160401b0382111761061457604052565b6020906001600160401b038111610695575b601f01601f19160190565b61069d6105ea565b61068a565b9291926106ae82610678565b916106bc6040519384610657565b82948184528183011161000e578281602093846000960137010152565b9080601f8301121561000e5781602061039b933591016106a2565b6084359060ff8216820361000e57565b503461000e5760a036600319011261000e5761071e6104b5565b602435906001600160401b03821161000e577f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b6107626103f89336906004016106d9565b6107a161079c6107706106f4565b6001600160a01b038616600090815261012d60205260409020546064359060443590869046908a6124d5565b612399565b6001600160a01b038316600090815261012d602052604090208054906107c6826121e8565b90556001600160a01b038416600090815261012d6020526040902055600080604051602081019061080a816107fc8988866123ef565b03601f198101835282610657565b519082305af19261082261081c611f4f565b94612420565b61083360405192839233908461246c565b0390a16040519182918261038a565b90608060031983011261000e576001600160a01b0391600435838116810361000e5792602435908116810361000e579160443591606435906001600160401b03821161000e5761039b916004016106d9565b503461000e576108a336610842565b505050506020604051630a85bd0160e11b8152f35b503461000e57600036600319011261000e57610161546040516001600160a01b039091168152602090f35b606090600319011261000e576001600160a01b0390600435828116810361000e5791602435908116810361000e579060443590565b503461000e5761055861092a366108e3565b9161094461093f8461093a612ccd565b611bf6565b611ac4565b611d02565b503461000e57602036600319011261000e5760043560005260c96020526020600160406000200154604051908152f35b503461000e57602036600319011261000e576001600160a01b0361099b6104b5565b1660005261012d6020526020604060002054604051908152f35b503461000e57604036600319011261000e576004356109d26104cb565b60009180835260c96020526109ed6001604085200154611749565b80835260c9602090815260408085206001600160a01b0385166000908152925290205460ff1615610a1c578280f35b80835260c9602090815260408085206001600160a01b038516600090815292529020805460ff191660011790556001600160a01b0380610a5a612ccd565b169216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8480a438808280f35b503461000e57604036600319011261000e57610aa26104cb565b6001600160a01b0380610ab3612ccd565b1690821603610ac857610558906004356118d0565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b503461000e57610558610b37366108e3565b9060405192610b4584610621565b60008452611b58565b503461000e57600036600319011261000e576020604051468152f35b503461000e57602036600319011261000e577f9d910c9fad7f6caea97ddebdae1c9588dcbeee40ac58fbea43811e3554b6d7276020610ba76104b5565b610baf6115d3565b61016080546001600160a01b0319166001600160a01b03929092169182179055604051908152a1005b503461000e5760e036600319011261000e57610bf26104b5565b6064356001600160401b03811161000e57610c119036906004016106d9565b9060c43560ff8116810361000e57602092610c3b9260a435916084359160443590602435906124d5565b6040519015158152f35b503461000e57602036600319011261000e5760206104a36004356119b7565b503461000e57602036600319011261000e576001600160a01b03610c866104b5565b168015610caf5760005260686020526103f8604060002054604051918291829190602083019252565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b503461000e57604036600319011261000e57602060ff610d4d610d276104cb565b60043560005260c9845260406000209060018060a01b0316600052602052604060002090565b54166040519015158152f35b503461000e57600080600319360112610481576040519080606654610d7d816119da565b808552916001918083169081156104575750600114610da6576103f8856103ec81870382610657565b9250606683527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943545b828410610de95750505081016020016103ec826103f86103dc565b80546020858701810191909152909301928101610dce565b503461000e57604036600319011261000e57610161805460243590610e3c90610e30906001600160a01b031681565b6001600160a01b031690565b610e9a610e7e602084610e4d612ccd565b6040516362d137ed60e11b81526001600160a01b039091166004820152602481019190915291829081906044820190565b0381865afa908115610fbb575b600091610f8d575b5015612abc565b610ea2612ccd565b90803b1561000e5760405163755b7d7d60e01b81526001600160a01b03929092166004830152602482018390527f3c84a6b2fd4e97d5a8115c3251981ae6e55e48c47e99cd4217adf16b219bc88993610f319284926000908290604490829084905af18015610f80575b610f67575b50610f2b610f1d612ccd565b91546001600160a01b031690565b90611d02565b610f39612ccd565b604080516001600160a01b03909216825260208201929092526004359181019190915280606081015b0390a1005b80610f74610f7a92610601565b80610337565b38610f11565b610f88611f42565b610f0c565b610fae915060203d8111610fb4575b610fa68183610657565b810190612aa7565b38610e93565b503d610f9c565b610fc3611f42565b610e8b565b503461000e57600036600319011261000e57602060405160008152f35b8015150361000e57565b503461000e57604036600319011261000e576110096104b5565b6024359061101682610fe5565b61101e612ccd565b6001600160a01b03828116939116918284146110ae57816110977f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31936110866110a99487600052606a60205260406000209060018060a01b0316600052602052604060002090565b9060ff801983541691151516179055565b60405190151581529081906020820190565b0390a3005b60405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606490fd5b503461000e57604036600319011261000e576105586111106104b5565b60243590610944612ccd565b503461000e5761055861112e36610842565b92919091611b58565b503461000e57606036600319011261000e576111516104b5565b6111a661115c6104cb565b6111646104e1565b906000549361118a60ff8660081c161580968197611228575b8115611208575b506125f2565b8461119d600160ff196000541617600055565b6111ef57612655565b6111ac57005b6111bc61ff001960005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498908060208101610f62565b61120361010061ff00196000541617600055565b612655565b303b1591508161121a575b5038611184565b6001915060ff161438611213565b600160ff821610915061117d565b503461000e57600036600319011261000e57610160546040516001600160a01b039091168152602090f35b503461000e57602036600319011261000e576103f861128160043561208d565b604051918291602083526020830190610365565b503461000e57606036600319011261000e576112af6104b5565b6024356044356001600160401b03811161000e573660238201121561000e576112e29036906024816004013591016106a2565b906112eb612ccd565b610160546001600160a01b039491908516908516036114bf576000828152606760205260409020546001600160a01b0316611483576040519261132d84610621565b600094858552821690811561143f5761142361141e7fd35bb95e09c04b219e35047ce7b7b300e3384264ef84a40456943dbc0fc17c1496866114399561139761139261138e84600052606760205260018060a01b0360406000205416151590565b1590565b612b1e565b6001600160a01b03881660009081526068602052604090206113b98154611cf4565b90556113f2886113d3846000526067602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b8a7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a48686611f7f565b611bd6565b61142d8185612b6a565b60405193849384612afa565b0390a180f35b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b60405162461bcd60e51b8152602060048201526014602482015273746f6b656e20616c72656164792065786973747360601b6044820152606490fd5b60405162461bcd60e51b815260206004820152601660248201527502637b0b727232a1d1037b7363c903330b1ba37b93c960551b6044820152606490fd5b503461000e57604036600319011261000e5761055860043561151d6104cb565b908060005260c9602052611538600160406000200154611749565b6118d0565b503461000e57602036600319011261000e576115576104b5565b61155f6115d3565b61016180546001600160a01b0319166001600160a01b03909216919091179055005b503461000e57604036600319011261000e57602060ff610d4d6115a26104b5565b6115aa6104cb565b6001600160a01b039182166000908152606a865260408082209290931681526020919091522090565b6115db612ccd565b6001600160a01b03811660009081527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be756602052604090205460ff161561161e5750565b611630906001600160a01b03166122fc565b600061163a612200565b90603061164683612250565b53607861165283612266565b5360415b600181116116fa576116f660376116de866107fc8761167588156122b1565b6116d86040519586947f416363657373436f6e74726f6c3a206163636f756e742000000000000000000060208701526116b7815180926020858a019101610342565b8501016011907001034b99036b4b9b9b4b733903937b6329607d1b81520190565b9061180d565b60405162461bcd60e51b81529182916004830161038a565b0390fd5b9080600f6117379216601081101561173c575b6f181899199a1a9b1b9c1cb0b131b232b360811b901a61172d8486612277565b5360041c91612296565b611656565b611744612239565b61170d565b611751612ccd565b600082815260c9602090815260408083206001600160a01b038516845290915290205460ff1615611780575050565b611792906001600160a01b03166122fc565b9061179b612200565b9060306117a783612250565b5360786117b383612266565b5360415b600181116117d6576116f660376116de866107fc8761167588156122b1565b9080600f6118089216601081101561173c576f181899199a1a9b1b9c1cb0b131b232b360811b901a61172d8486612277565b6117b7565b9061182060209282815194859201610342565b0190565b6001600160a01b03811660009081527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be756602052604081205460ff1615611868575050565b80805260c9602090815260408083206001600160a01b038516600090815292529020805460ff191660011790556001600160a01b03806118a6612ccd565b169216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4565b60009080825260c960205260ff6118fc84604085209060018060a01b0316600052602052604060002090565b541661190757505050565b80825260c9602090815260408084206001600160a01b038616600090815292529020805460ff191690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b6001600160a01b0380611963612ccd565b1694169280a4565b1561197257565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152606760205260409020546001600160a01b031661039b81151561196b565b90600182811c92168015611a0a575b60208310146119f457565b634e487b7160e01b600052602260045260246000fd5b91607f16916119e9565b15611a1b57565b60405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608490fd5b600081815260676020526040902054611aa9906001600160a01b0316151561196b565b6000908152606960205260409020546001600160a01b031690565b15611acb57565b60405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526d1c881b9bdc88185c1c1c9bdd995960921b6064820152608490fd5b60405190602082018281106001600160401b03821117611b4b575b60405260008252565b611b536105ea565b611b42565b91611b81939161141e93611b7161093f8461093a612ccd565b611b7c838383611d02565b612048565b565b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b15611bdd57565b60405162461bcd60e51b8152806116f660048201611b83565b6001600160a01b0380611c08846119b7565b169281831692848414948515611c3e575b50508315611c28575b50505090565b611c3491929350611a86565b1614388080611c22565b6000908152606a602090815260408083206001600160a01b03949094168352929052205460ff1693503880611c19565b15611c7557565b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b50634e487b7160e01b600052601160045260246000fd5b600019810191908211611cec57565b611b81611cc6565b9060018201809211611cec57565b90611d0c836119b7565b6001600160a01b038381169290918216839003611dc657611d5b611d9f92821694611d38861515611c6e565b611d4187611e19565b6001600160a01b0316600090815260686020526040902090565b611d658154611cdd565b90556001600160a01b0381166000908152606860205260409020611d898154611cf4565b90556113d3856000526067602052604060002090565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b600081815260696020526040812080546001600160a01b03191690556001600160a01b03611e46836119b7565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258280a4565b600082815260696020526040902080546001600160a01b0319166001600160a01b0383161790556001600160a01b0380611ea6846119b7565b169116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4565b9081602091031261000e575161039b8161029c565b61039b939260809260018060a01b031682526000602083015260408201528160608201520190610365565b6001600160a01b03918216815291166020820152604081019190915260806060820181905261039b92910190610365565b506040513d6000823e3d90fd5b3d15611f7a573d90611f6082610678565b91611f6e6040519384610657565b82523d6000602084013e565b606090565b909190803b1561204057611fb991602091611f98612ccd565b946000604051809681958294630a85bd0160e11b9a8b855260048501611ee6565b03926001600160a01b03165af160009181612010575b5061200257611fdc611f4f565b80519081611ffd5760405162461bcd60e51b8152806116f660048201611b83565b602001fd5b6001600160e01b0319161490565b61203291925060203d8111612039575b61202a8183610657565b810190611ed1565b9038611fcf565b503d612020565b505050600190565b92909190823b1561208457611fb9926020926000612064612ccd565b9660405196879586948593630a85bd0160e11b9b8c865260048601611f11565b50505050600190565b6000818152606760205260409020546120b0906001600160a01b0316151561196b565b60009080825260206097815260408320604051848195908354906120d3826119da565b9485855260019287848216918260001461217f575050600114612143575b50505061210092500384610657565b612108611b27565b9283511561213c57805161212257505061039b91506121a3565b61039b92506107fc906116d860405195869485019061180d565b9250505090565b869350819291528282205b85831061216757505061210093508201013880806120f1565b8054838a01850152889450869390920191810161214e565b93509450505061210094915060ff191682840152151560051b8201013880806120f1565b6000908152606760205260409020546121c6906001600160a01b0316151561196b565b60006040516121d481610621565b526040516121e181610621565b6000815290565b60019060001981146121f8570190565b611820611cc6565b60405190608082018281106001600160401b0382111761222c575b604052604282526060366020840137565b6122346105ea565b61221b565b50634e487b7160e01b600052603260045260246000fd5b60209080511561225e570190565b611820612239565b60219080516001101561225e570190565b90602091805182101561228957010190565b612291612239565b010190565b80156122a4575b6000190190565b6122ac611cc6565b61229d565b156122b857565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b60405190606082018281106001600160401b0382111761238c575b604052602a82526040366020840137603061233183612250565b53607861233d83612266565b536029905b600182116123555761039b9150156122b1565b80600f6123869216601081101561173c576f181899199a1a9b1b9c1cb0b131b232b360811b901a61172d8486612277565b90612342565b6123946105ea565b612317565b156123a057565b60405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b6064820152608490fd5b6020906124056014949382815194859201610342565b01906bffffffffffffffffffffffff199060601b1681520190565b1561242757565b60405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c000000006044820152606490fd5b6001600160a01b0391821681529116602082015260606040820181905261039b92910190610365565b1561249c57565b60405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606490fd5b95929461252f612556926020976125276074600099976040519384918d83019687523060601b60408401526054830152612517815180928f8686019101610342565b8101036054810184520182610657565b519020612591565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15612584575b6000516001600160a01b039081169161257f831515612495565b161490565b61258c611f42565b612565565b60405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c8152606081018181106001600160401b038211176125e5575b60405251902090565b6125ed6105ea565b6125dc565b156125f957565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b92919060018060a01b036bffffffffffffffffffffffff60a01b9181610160911683825416179055610161921690825416179055604051916126968361063c565b60078352602066141bdbdb13919560ca1b81850152604051906126b88261063c565b6007825266141bdbd313919560ca1b818301526126e560ff60005460081c166126e081612809565b612809565b8451906001600160401b0382116127fc575b61270b826127066065546119da565b612869565b80601f8311600114612766575090806127469392611b81969760009261275b575b50508160011b916000199060031b1c19161760655561299f565b61274e612a96565b612756612a96565b611824565b01519050388061272c565b90601f1983169661279960656000527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c790565b926000905b8982106127e45750509183916001936127469695611b81999a106127cb575b505050811b0160655561299f565b015160001960f88460031b161c191690553880806127bd565b8060018596829496860151815501950193019061279e565b6128046105ea565b6126f7565b1561281057565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b601f8111612875575050565b600090606582527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c7906020601f850160051c830194106128d0575b601f0160051c01915b8281106128c557505050565b8181556001016128b9565b90925082906128b0565b601f81116128e6575050565b600090606682527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354906020601f850160051c83019410612941575b601f0160051c01915b82811061293657505050565b81815560010161292a565b9092508290612921565b90601f811161295957505050565b600091825260208220906020601f850160051c83019410612995575b601f0160051c01915b82811061298a57505050565b81815560010161297e565b9092508290612975565b9081516001600160401b038111612a89575b6129c5816129c06066546119da565b6128da565b602080601f8311600114612a0157508192936000926129f6575b50508160011b916000199060031b1c191617606655565b0151905038806129df565b90601f19831694612a3460666000527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e9435490565b926000905b878210612a71575050836001959610612a58575b505050811b01606655565b015160001960f88460031b161c19169055388080612a4d565b80600185968294968601518155019501930190612a39565b612a916105ea565b6129b1565b611b8160ff60005460081c16612809565b9081602091031261000e575161039b81610fe5565b15612ac357565b60405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081d1bdad95b9251608a1b6044820152606490fd5b61039b939260609260018060a01b0316825260208201528160408201520190610365565b15612b2557565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b6000818152606760205260409020549192916001600160a01b031615612c71576000526020609781526040600020908351906001600160401b038211612c64575b612bbf82612bb985546119da565b8561294b565b80601f8311600114612bf9575081929394600092612bee575b50508160011b916000199060031b1c1916179055565b015190503880612bd8565b90601f19831695612c0f85600052602060002090565b926000905b888210612c4c57505083600195969710612c33575b505050811b019055565b015160001960f88460031b161c19169055388080612c29565b80600185968294968601518155019501930190612c14565b612c6c6105ea565b612bab565b60405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608490fd5b333003612d0f57612cdd36610678565b612cea6040519182610657565b368152366000602083013760006020369290920191820152516001600160a01b031690565b339056fea2646970667358221220a2c0f71ba965ef8aa13dca89f98faaab585ff221284b341f26e1ddc58bc31e8964736f6c63430008110033