[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "labelhash", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "coinType", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "value", "type": "bytes" } ], "name": "AddrChanged", "type": "event" }, { "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": true, "internalType": "bytes32", "name": "labelhash", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "value", "type": "bytes" } ], "name": "ContenthashChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "label", "type": "string" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" } ], "name": "Registered", "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": "bytes32", "name": "labelhash", "type": "bytes32" }, { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "string", "name": "value", "type": "string" } ], "name": "TextChanged", "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": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REGISTRAR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "registrar", "type": "address" } ], "name": "addRegistrar", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" } ], "name": "addr", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" }, { "internalType": "uint256", "name": "cointype", "type": "uint256" } ], "name": "addr", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "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": "baseUri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" } ], "name": "contenthash", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "string", "name": "tokenName", "type": "string" }, { "internalType": "string", "name": "tokenSymbol", "type": "string" }, { "internalType": "string", "name": "_baseUri", "type": "string" } ], "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": "bytes32", "name": "labelhash", "type": "bytes32" } ], "name": "labelFor", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "string", "name": "label", "type": "string" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "register", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "registrar", "type": "address" } ], "name": "removeRegistrar", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "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": "bytes32", "name": "labelhash", "type": "bytes32" }, { "internalType": "uint256", "name": "coinType", "type": "uint256" }, { "internalType": "bytes", "name": "value", "type": "bytes" } ], "name": "setAddr", "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": "_baseUri", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" }, { "internalType": "bytes", "name": "value", "type": "bytes" } ], "name": "setContenthash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" }, { "components": [ { "internalType": "string", "name": "key", "type": "string" }, { "internalType": "string", "name": "value", "type": "string" } ], "internalType": "struct L2Registry.Text[]", "name": "texts", "type": "tuple[]" }, { "components": [ { "internalType": "uint256", "name": "coinType", "type": "uint256" }, { "internalType": "bytes", "name": "value", "type": "bytes" } ], "internalType": "struct L2Registry.Addr[]", "name": "addrs", "type": "tuple[]" }, { "internalType": "bytes", "name": "chash", "type": "bytes" } ], "name": "setRecords", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" }, { "internalType": "string", "name": "key", "type": "string" }, { "internalType": "string", "name": "value", "type": "string" } ], "name": "setText", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "x", "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": "bytes32", "name": "labelhash", "type": "bytes32" }, { "internalType": "string", "name": "key", "type": "string" } ], "name": "text", "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" } ]
60806040523480156200001157600080fd5b5060408051602080820183526000808352835191820190935282815290916200003b8382620000f8565b5060016200004a8282620000f8565b505050620001c4565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200007e57607f821691505b6020821081036200009f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000f357600081815260208120601f850160051c81016020861015620000ce5750805b601f850160051c820191505b81811015620000ef57828155600101620000da565b5050505b505050565b81516001600160401b0381111562000114576200011462000053565b6200012c8162000125845462000069565b84620000a5565b602080601f8311600181146200016457600084156200014b5750858301515b600019600386901b1c1916600185901b178555620000ef565b600085815260208120601f198616915b82811015620001955788860151825594840194600190910190840162000174565b5085821015620001b45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61257d80620001d46000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806370a0823111610130578063af92a693116100b8578063d547741f1161007c578063d547741f146104b2578063df5faece146104c5578063e985e9c5146104d8578063f1cb7e06146104eb578063f68e9553146104fe57600080fd5b8063af92a69314610453578063b88d4fde14610466578063ba904eed14610479578063bc1c58d11461048c578063c87b56dd1461049f57600080fd5b806395d89b41116100ff57806395d89b41146104155780639abc83201461041d578063a217fddf14610425578063a22cb4651461042d578063a6487c531461044057600080fd5b806370a08231146103c757806375b238fc146103da5780638b95dd71146103ef57806391d148541461040257600080fd5b8063248a9ca3116101b35780633b3b57de116101825780633b3b57de1461036857806342842e0e1461037b57806355f804b31461038e57806359d1d43c146103a15780636352211e146103b457600080fd5b8063248a9ca31461030c5780632f2ff15d1461032f578063304e6ade1461034257806336568abe1461035557600080fd5b8063095ea7b3116101fa578063095ea7b3146102a957806310f13a8c146102bc57806318160ddd146102cf5780631e59c529146102e657806323b872dd146102f957600080fd5b806301ffc9a71461022c57806302646a1a1461025457806306fdde0314610269578063081812fc1461027e575b600080fd5b61023f61023a366004611abe565b610513565b60405190151581526020015b60405180910390f35b610267610262366004611b67565b610524565b005b61027161078a565b60405161024b9190611c5a565b61029161028c366004611c6d565b61081c565b6040516001600160a01b03909116815260200161024b565b6102676102b7366004611ca2565b610845565b6102676102ca366004611d6e565b610854565b6102d860075481565b60405190815260200161024b565b6102676102f4366004611dda565b6108d5565b610267610307366004611e2d565b610999565b6102d861031a366004611c6d565b60009081526006602052604090206001015490565b61026761033d366004611e69565b610a29565b610267610350366004611e95565b610a4e565b610267610363366004611e69565b610ac7565b610291610376366004611c6d565b610aff565b610267610389366004611e2d565b610b1e565b61026761039c366004611edb565b610b39565b6102716103af366004611f0f565b610b5d565b6102916103c2366004611c6d565b610c22565b6102d86103d5366004611f5a565b610c2d565b6102d860008051602061252883398151915281565b6102676103fd366004611f75565b610c75565b61023f610410366004611e69565b610cef565b610271610d1a565b610271610d29565b6102d8600081565b61026761043b366004611fba565b610db7565b61026761044e366004611ff6565b610dc2565b610267610461366004611f5a565b610e3d565b610267610474366004612044565b610e6d565b610267610487366004611f5a565b610e85565b61027161049a366004611c6d565b610eb5565b6102716104ad366004611c6d565b610f57565b6102676104c0366004611e69565b610fbf565b6102716104d3366004611c6d565b610fe4565b61023f6104e63660046120ab565b611001565b6102716104f93660046120d5565b61102f565b6102d860008051602061250883398151915281565b600061051e826110dd565b92915050565b60008781526002602052604090205487906001600160a01b031633811480159061055557506105538133611001565b155b8015610576575061057460008051602061250883398151915233610cef565b155b15610593576040516282b42960e81b815260040160405180910390fd5b60005b87811015610685576106738a8a8a848181106105b4576105b46120f7565b90506020028101906105c6919061210d565b6105d0908061212d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e92508d9150869050818110610619576106196120f7565b905060200281019061062b919061210d565b61063990602081019061212d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061110292505050565b8061067d81612173565b915050610596565b5060005b85811015610738576107268a8888848181106106a7576106a76120f7565b90506020028101906106b9919061210d565b358989858181106106cc576106cc6120f7565b90506020028101906106de919061210d565b6106ec90602081019061212d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061117e92505050565b8061073081612173565b915050610689565b831561077e5761077e8a86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111d492505050565b50505050505050505050565b6060600a80546107999061219a565b80601f01602080910402602001604051908101604052809291908181526020018280546107c59061219a565b80156108125780601f106107e757610100808354040283529160200191610812565b820191906000526020600020905b8154815290600101906020018083116107f557829003601f168201915b5050505050905090565b600061082782611229565b506000828152600460205260409020546001600160a01b031661051e565b610850828233611262565b5050565b60008381526002602052604090205483906001600160a01b031633811480159061088557506108838133611001565b155b80156108a657506108a460008051602061250883398151915233610cef565b155b156108c3576040516282b42960e81b815260040160405180910390fd5b6108ce858585611102565b5050505050565b6000805160206125088339815191526108ed8161126f565b600084846040516020016109029291906121d4565b60408051601f198184030181529190528051602090910120905080610927848261127c565b6000828152600f6020526040902061094086888361222a565b506007805490600061095183612173565b91905055507f50f74ca45caac8020b8d891bd13ea5a2d79564986ee6a839f0d914896388322d868686604051610989939291906122e9565b60405180910390a1505050505050565b6001600160a01b0382166109c857604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006109d5838333611296565b9050836001600160a01b0316816001600160a01b031614610a23576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016109bf565b50505050565b600082815260066020526040902060010154610a448161126f565b610a23838361138f565b60008281526002602052604090205482906001600160a01b0316338114801590610a7f5750610a7d8133611001565b155b8015610aa05750610a9e60008051602061250883398151915233610cef565b155b15610abd576040516282b42960e81b815260040160405180910390fd5b610a2384846111d4565b6001600160a01b0381163314610af05760405163334bd91960e11b815260040160405180910390fd5b610afa8282611423565b505050565b6000610b0c82603c61102f565b610b159061232a565b60601c92915050565b610afa83838360405180602001604052806000815250610e6d565b600080516020612528833981519152610b518161126f565b6009610afa8382612366565b6060600c60008581526020019081526020016000208383604051610b829291906121d4565b90815260200160405180910390208054610b9b9061219a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc79061219a565b8015610c145780601f10610be957610100808354040283529160200191610c14565b820191906000526020600020905b815481529060010190602001808311610bf757829003601f168201915b505050505090509392505050565b600061051e82611229565b60006001600160a01b038216610c59576040516322718ad960e21b8152600060048201526024016109bf565b506001600160a01b031660009081526003602052604090205490565b60008381526002602052604090205483906001600160a01b0316338114801590610ca65750610ca48133611001565b155b8015610cc75750610cc560008051602061250883398151915233610cef565b155b15610ce4576040516282b42960e81b815260040160405180910390fd5b6108ce85858561117e565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600b80546107999061219a565b60098054610d369061219a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d629061219a565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b505050505081565b610850338383611490565b60085460ff1615610de55760405162dc149f60e41b815260040160405180910390fd5b6008805460ff19166001179055600a610dfe8482612366565b50600b610e0b8382612366565b506009610e188282612366565b50610e2460003361138f565b50610a236000805160206125288339815191523361138f565b600080516020612528833981519152610e558161126f565b610afa6000805160206125088339815191528361138f565b610e78848484610999565b610a23338585858561152f565b600080516020612528833981519152610e9d8161126f565b610afa60008051602061250883398151915283611423565b6000818152600e60205260409020805460609190610ed29061219a565b80601f0160208091040260200160405190810160405280929190818152602001828054610efe9061219a565b8015610f4b5780601f10610f2057610100808354040283529160200191610f4b565b820191906000526020600020905b815481529060010190602001808311610f2e57829003601f168201915b50505050509050919050565b6060610f6282611229565b506000610f6d611659565b90506000815111610f8d5760405180602001604052806000815250610fb8565b80610f9784611668565b604051602001610fa8929190612425565b6040516020818303038152906040525b9392505050565b600082815260066020526040902060010154610fda8161126f565b610a238383611423565b6000818152600f60205260409020805460609190610ed29061219a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000828152600d6020908152604080832084845290915290208054606091906110579061219a565b80601f01602080910402602001604051908101604052809291908181526020018280546110839061219a565b80156110d05780601f106110a5576101008083540402835291602001916110d0565b820191906000526020600020905b8154815290600101906020018083116110b357829003601f168201915b5050505050905092915050565b60006001600160e01b03198216637965db0b60e01b148061051e575061051e826116fa565b80600c6000858152602001908152602001600020836040516111249190612454565b9081526020016040518091039020908161113e9190612366565b50827fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508383604051611171929190612466565b60405180910390a2505050565b6000838152600d6020908152604080832085845290915290206111a18282612366565b50827ffb6b36b568d5689ec98617abfd8ff0eccaade0ed49cef564581c257947852f328383604051611171929190612494565b6000828152600e602052604090206111ec8282612366565b50817fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788260405161121d9190611c5a565b60405180910390a25050565b6000818152600260205260408120546001600160a01b03168061051e57604051637e27328960e01b8152600481018490526024016109bf565b610afa838383600161174a565b6112798133611850565b50565b610850828260405180602001604052806000815250611889565b6000828152600260205260408120546001600160a01b03908116908316156112c3576112c38184866118a1565b6001600160a01b03811615611301576112e060008560008061174a565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611330576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600061139b8383610cef565b61141b5760008381526006602090815260408083206001600160a01b03861684529091529020805460ff191660011790556113d33390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161051e565b50600061051e565b600061142f8383610cef565b1561141b5760008381526006602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161051e565b6001600160a01b0382166114c257604051630b61174360e31b81526001600160a01b03831660048201526024016109bf565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156108ce57604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906115719088908890879087906004016124ad565b6020604051808303816000875af19250505080156115ac575060408051601f3d908101601f191682019092526115a9918101906124ea565b60015b611615573d8080156115da576040519150601f19603f3d011682016040523d82523d6000602084013e6115df565b606091505b50805160000361160d57604051633250574960e11b81526001600160a01b03851660048201526024016109bf565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461165157604051633250574960e11b81526001600160a01b03851660048201526024016109bf565b505050505050565b6060600980546107999061219a565b6060600061167583611905565b60010190506000816001600160401b0381111561169457611694611ccc565b6040519080825280601f01601f1916602001820160405280156116be576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846116c857509392505050565b60006001600160e01b031982166380ac58cd60e01b148061172b57506001600160e01b03198216635b5e139f60e01b145b8061051e57506301ffc9a760e01b6001600160e01b031983161461051e565b808061175e57506001600160a01b03821615155b1561182057600061176e84611229565b90506001600160a01b0383161580159061179a5750826001600160a01b0316816001600160a01b031614155b80156117ad57506117ab8184611001565b155b156117d65760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016109bf565b811561181e5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61185a8282610cef565b6108505760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016109bf565b61189383836119dd565b610afa33600085858561152f565b6118ac838383611a42565b610afa576001600160a01b0383166118da57604051637e27328960e01b8152600481018290526024016109bf565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016109bf565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106119445772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611970576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061198e57662386f26fc10000830492506010015b6305f5e10083106119a6576305f5e100830492506008015b61271083106119ba57612710830492506004015b606483106119cc576064830492506002015b600a831061051e5760010192915050565b6001600160a01b038216611a0757604051633250574960e11b8152600060048201526024016109bf565b6000611a1583836000611296565b90506001600160a01b03811615610afa576040516339e3563760e11b8152600060048201526024016109bf565b60006001600160a01b03831615801590611aa05750826001600160a01b0316846001600160a01b03161480611a7c5750611a7c8484611001565b80611aa057506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160e01b03198116811461127957600080fd5b600060208284031215611ad057600080fd5b8135610fb881611aa8565b60008083601f840112611aed57600080fd5b5081356001600160401b03811115611b0457600080fd5b6020830191508360208260051b8501011115611b1f57600080fd5b9250929050565b60008083601f840112611b3857600080fd5b5081356001600160401b03811115611b4f57600080fd5b602083019150836020828501011115611b1f57600080fd5b60008060008060008060006080888a031215611b8257600080fd5b8735965060208801356001600160401b0380821115611ba057600080fd5b611bac8b838c01611adb565b909850965060408a0135915080821115611bc557600080fd5b611bd18b838c01611adb565b909650945060608a0135915080821115611bea57600080fd5b50611bf78a828b01611b26565b989b979a50959850939692959293505050565b60005b83811015611c25578181015183820152602001611c0d565b50506000910152565b60008151808452611c46816020860160208601611c0a565b601f01601f19169290920160200192915050565b602081526000610fb86020830184611c2e565b600060208284031215611c7f57600080fd5b5035919050565b80356001600160a01b0381168114611c9d57600080fd5b919050565b60008060408385031215611cb557600080fd5b611cbe83611c86565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611cf357600080fd5b81356001600160401b0380821115611d0d57611d0d611ccc565b604051601f8301601f19908116603f01168101908282118183101715611d3557611d35611ccc565b81604052838152866020858801011115611d4e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215611d8357600080fd5b8335925060208401356001600160401b0380821115611da157600080fd5b611dad87838801611ce2565b93506040860135915080821115611dc357600080fd5b50611dd086828701611ce2565b9150509250925092565b600080600060408486031215611def57600080fd5b83356001600160401b03811115611e0557600080fd5b611e1186828701611b26565b9094509250611e24905060208501611c86565b90509250925092565b600080600060608486031215611e4257600080fd5b611e4b84611c86565b9250611e5960208501611c86565b9150604084013590509250925092565b60008060408385031215611e7c57600080fd5b82359150611e8c60208401611c86565b90509250929050565b60008060408385031215611ea857600080fd5b8235915060208301356001600160401b03811115611ec557600080fd5b611ed185828601611ce2565b9150509250929050565b600060208284031215611eed57600080fd5b81356001600160401b03811115611f0357600080fd5b611aa084828501611ce2565b600080600060408486031215611f2457600080fd5b8335925060208401356001600160401b03811115611f4157600080fd5b611f4d86828701611b26565b9497909650939450505050565b600060208284031215611f6c57600080fd5b610fb882611c86565b600080600060608486031215611f8a57600080fd5b833592506020840135915060408401356001600160401b03811115611fae57600080fd5b611dd086828701611ce2565b60008060408385031215611fcd57600080fd5b611fd683611c86565b915060208301358015158114611feb57600080fd5b809150509250929050565b60008060006060848603121561200b57600080fd5b83356001600160401b038082111561202257600080fd5b61202e87838801611ce2565b94506020860135915080821115611da157600080fd5b6000806000806080858703121561205a57600080fd5b61206385611c86565b935061207160208601611c86565b92506040850135915060608501356001600160401b0381111561209357600080fd5b61209f87828801611ce2565b91505092959194509250565b600080604083850312156120be57600080fd5b6120c783611c86565b9150611e8c60208401611c86565b600080604083850312156120e857600080fd5b50508035926020909101359150565b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261212357600080fd5b9190910192915050565b6000808335601e1984360301811261214457600080fd5b8301803591506001600160401b0382111561215e57600080fd5b602001915036819003821315611b1f57600080fd5b60006001820161219357634e487b7160e01b600052601160045260246000fd5b5060010190565b600181811c908216806121ae57607f821691505b6020821081036121ce57634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b601f821115610afa57600081815260208120601f850160051c8101602086101561220b5750805b601f850160051c820191505b8181101561165157828155600101612217565b6001600160401b0383111561224157612241611ccc565b6122558361224f835461219a565b836121e4565b6000601f84116001811461228957600085156122715750838201355b600019600387901b1c1916600186901b1783556108ce565b600083815260209020601f19861690835b828110156122ba578685013582556020948501946001909201910161229a565b50868210156122d75760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040815282604082015282846060830137600060608483018101919091526001600160a01b03929092166020820152601f909201601f191690910101919050565b805160208201516bffffffffffffffffffffffff19808216929190601483101561235e5780818460140360031b1b83161693505b505050919050565b81516001600160401b0381111561237f5761237f611ccc565b6123938161238d845461219a565b846121e4565b602080601f8311600181146123c857600084156123b05750858301515b600019600386901b1c1916600185901b178555611651565b600085815260208120601f198616915b828110156123f7578886015182559484019460019091019084016123d8565b50858210156124155787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008351612437818460208801611c0a565b83519083019061244b818360208801611c0a565b01949350505050565b60008251612123818460208701611c0a565b6040815260006124796040830185611c2e565b828103602084015261248b8185611c2e565b95945050505050565b828152604060208201526000611aa06040830184611c2e565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124e090830184611c2e565b9695505050505050565b6000602082840312156124fc57600080fd5b8151610fb881611aa856feedcc084d3dcd65a1f7f23c65c46722faca6953d28e43150a467cf43e5c309238a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212205abf08829e0e6e43c7c35e9fe974e49abab5aff56a05aa7941aa9c81c9e22f4964736f6c63430008140033