diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fc4dac..edff706 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1 +1 @@ -VERSION=v0.3.5 - SHA: f1f54b02ad8dbef3ef9eae7b3ea0aa753d136df5 +VERSION=v0.3.5 - SHA: a2bcb414c1279064b8ec14230dc2b64f7a7de271 diff --git a/broadcast/20240704_UpgradeControllerAndDeployRNSCommissionMainnet.sol/2020/run-1720085014.json b/broadcast/20240704_UpgradeControllerAndDeployRNSCommissionMainnet.sol/2020/run-1720085014.json new file mode 100644 index 0000000..7ed8dfb --- /dev/null +++ b/broadcast/20240704_UpgradeControllerAndDeployRNSCommissionMainnet.sol/2020/run-1720085014.json @@ -0,0 +1,249 @@ +{ + "transactions": [ + { + "hash": "0x9f9f771939bb8dead3af08a54cdd9cadb3d73f4ff262b7b45f78892aa23ecbd3", + "transactionType": "CREATE", + "contractName": "RONRegistrarController", + "contractAddress": "0xaae506b2232eaea59238ffe501a9e6cfc8f9b843", + "function": null, + "arguments": null, + "transaction": { + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "gas": "0x539db6", + "value": "0x0", + "input": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612fbc80620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a6102453660046120d0565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120fa565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d610358366004612128565b610745565b005b34801561036b57600080fd5b5061035d61037a366004612128565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b8366004612128565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612158565b610815565b61035d61043b36600461218a565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d61047336600461220c565b6109d8565b34801561048457600080fd5b5061035d610493366004612313565b610b80565b3480156104a457600080fd5b5061035d610cb9565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d93660046124a3565b610cd9565b3480156104ea57600080fd5b506102a26104f936600461255e565b610e3a565b34801561050a57600080fd5b5061024a610519366004612128565b610e59565b34801561052a57600080fd5b5061024a610539366004612580565b610e84565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e366004612580565b610f12565b34801561057f57600080fd5b5061027361058e3660046125bc565b610f9d565b34801561059f57600080fd5b5061035d6105ae3660046120fa565b61104d565b3480156105bf57600080fd5b506103086105ce3660046120fa565b611061565b61035d6105e1366004612602565b611078565b3480156105f257600080fd5b5061035d610601366004612128565b611184565b34801561061257600080fd5b50610308610621366004612602565b6111a9565b34801561063257600080fd5b5061035d61064136600461255e565b611235565b34801561065257600080fd5b50610308600080516020612f6783398151915281565b34801561067457600080fd5b5061035d610683366004612158565b61124a565b34801561069457600080fd5b5061035d6106a33660046120fa565b61125e565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f7366004612580565b6112b7565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f826112f4565b92915050565b60008281526002602052604090206001015461076081611329565b61076a8383611333565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611355565b5050565b600080516020612f6783398151915261080a81611329565b610812611377565b50565b600061082081611329565b6107ee826113c9565b610831611420565b610839611468565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610f9d915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac82346126dc565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112b792505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097391906126ef565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab9493929190612735565b60405180910390a282156109c3576109c333846114c1565b6109cb611526565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f678339815191528b61153c565b610aca60008c61153c565b610ad3836113c9565b610adc86611546565b610ae6878961157d565b610aef89611607565b603a80546001600160a01b038088166001600160a01b031992831617909255603b8054878416908316179055603d8054928516929091169190911790558015610b73576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610baa81611329565b84801580610bb85750808414155b15610bd657604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c665783603f60008a8a85818110610bf857610bf8612769565b9050602002013581526020019081526020016000206000888885818110610c2157610c21612769565b9050602002016020810190610c369190612158565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bd9565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610ca895949392919061277f565b60405180910390a250505050505050565b600080516020612f67833981519152610cd181611329565b610812611678565b610ce1611420565b610ce9611468565b86610cf3816116b5565b610cfc88610f12565b610d1b57876040516308eee0fd60e31b81526004016107db9190612869565b6000610d26896112b7565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d9d9190810190612936565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dda575080155b15610e00578a8a8383604051631fc5717160e01b81526004016107db9493929190612a18565b600080610e0d8d8c6116dd565b91509150610e228d8d8d8d8d8d8d8989611735565b505050505050610e3160018055565b50505050505050565b6000828152600360205260408120610e52908361185f565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e918361186b565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610eca908590600401612869565b602060405180830381865afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b9190612a52565b1592915050565b6000610f1d82610e84565b801561073f5750603a546001600160a01b03166396e494e8610f3e846112b7565b6040518263ffffffff1660e01b8152600401610f5c91815260200190565b602060405180830381865afa158015610f79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f9190612a52565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fd89089908990600401612a6f565b608060405180830381865afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110199190612aca565b8051825192945090925061102c91612aff565b9350806020015182602001516110429190612aff565b925050509250929050565b600061105881611329565b6107ee82611546565b600081815260036020526040812061073f90611959565b611080611420565b611088611468565b6000611093896112b7565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111059190810190612936565b60200151606001511561112d57886040516331597a5760e21b81526004016107db9190612869565b600061113f8a8a8a8a8a8a8a8a6111a9565b905061114b8882611963565b6000806111588c8b6116dd565b9150915061116d8c8c8c8b8b8b8b8989611735565b5050505061117a60018055565b5050505050505050565b60008281526002602052604090206001015461119f81611329565b61076a8383611355565b6000886111b5816116b5565b83158015906111cb57506001600160a01b038616155b156111e9576040516334fd817160e21b815260040160405180910390fd5b6111f28a6112b7565b89898989898989604051602001611210989796959493929190612ba3565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124081611329565b61076a838361157d565b600061125581611329565b6107ee82611607565b611266611420565b6037546000828152603e6020526040902054429161128391612aff565b106112a457604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b6108128133611a14565b61133d8282611a47565b600082815260036020526040902061076a9082611acd565b61135f8282611ae2565b600082815260036020526040902061076a9082611b49565b61137f611b5e565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114665760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114ba5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114cd8383611ba7565b90508061076a576114e6836001600160a01b0316611c1d565b6114ef83611c33565b604051602001611500929190612c03565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612869565b603954611466906001600160a01b0316476114c1565b6107ee8282611333565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611415565b4281111561159e57604051630b4319e560e21b815260040160405180910390fd5b8181116115be576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b6001600160a01b03811661162e5760405163e99d5ac560e01b815260040160405180910390fd5b603980546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b611680611420565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ac3390565b6116be81610f12565b61081257806040516308eee0fd60e31b81526004016107db9190612869565b6000806116ea8484610f9d565b9092509050348111156117105760405163044044a560e21b815260040160405180910390fd5b348181039082146117255761172533826114c1565b5061172e611526565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b81526004016117a1959493929190612c81565b60408051808303816000875af11580156117bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e39190612ccc565b909250905085156117fa576117fa88828989611c4a565b841561180a5761180a8b8b611cc8565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d86888760405161184a9493929190612cfa565b60405180910390a35050505050505050505050565b6000610e528383611d5f565b600080600080845190505b8083101561195157600085848151811061189257611892612769565b01602001516001600160f81b0319169050600160ff1b8110156118ba57600184019350611945565b600760fd1b6001600160f81b0319821610156118db57600284019350611945565b600f60fc1b6001600160f81b0319821610156118fc57600384019350611945565b601f60fb1b6001600160f81b03198216101561191d57600484019350611945565b603f60fa1b6001600160f81b03198216101561193e57600584019350611945565b6006840193505b50600190910190611876565b509392505050565b600061073f825490565b603854826001600160401b0316101561199a576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119b390426126dc565b90506036548110156119db57604051635320bcf960e01b8152600481018390526024016107db565b806037541015611a015760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b611a1e8282610e59565b6107ee57611a2b81611c1d565b611a36836020611d89565b604051602001611500929190612d32565b611a518282610e59565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a893390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e52836001600160a01b038416611f24565b611aec8282610e59565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e52836001600160a01b038416611f73565b60005460ff166114665760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611bd19190612da7565b60006040518083038185875af1925050503d8060008114611c0e576040519150601f19603f3d011682016040523d82523d6000602084013e611c13565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d89565b606061073f82611c4284612066565b600101611d89565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c7a90869086908690600401612dc3565b6000604051808303816000875af1158015611c99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cc19190810190612de6565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611cf0908690602001612ebd565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611d1c929190612ee5565b6020604051808303816000875af1158015611d3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612f09565b6000826000018281548110611d7657611d76612769565b9060005260206000200154905092915050565b60606000611d98836002612f22565b611da3906002612aff565b6001600160401b03811115611dba57611dba612396565b6040519080825280601f01601f191660200182016040528015611de4576020820181803683370190505b509050600360fc1b81600081518110611dff57611dff612769565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611e2e57611e2e612769565b60200101906001600160f81b031916908160001a9053506000611e52846002612f22565b611e5d906001612aff565b90505b6001811115611ed5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e9157611e91612769565b1a60f81b828281518110611ea757611ea7612769565b60200101906001600160f81b031916908160001a90535060049490941c93611ece81612f39565b9050611e60565b508315610e525760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f6b5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b6000818152600183016020526040812054801561205c576000611f976001836126dc565b8554909150600090611fab906001906126dc565b9050818114612010576000866000018281548110611fcb57611fcb612769565b9060005260206000200154905080876000018481548110611fee57611fee612769565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061202157612021612f50565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561207e5760809290921c916010015b604083901c156120935760409290921c916008015b602083901c156120a85760209290921c916004015b601083901c156120bd5760109290921c916002015b600883901c1561073f5760010192915050565b6000602082840312156120e257600080fd5b81356001600160e01b031981168114610e5257600080fd5b60006020828403121561210c57600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b6000806040838503121561213b57600080fd5b82359150602083013561214d81612113565b809150509250929050565b60006020828403121561216a57600080fd5b8135610e5281612113565b6001600160401b038116811461081257600080fd5b60008060006040848603121561219f57600080fd5b83356001600160401b03808211156121b657600080fd5b818601915086601f8301126121ca57600080fd5b8135818111156121d957600080fd5b8760208285010111156121eb57600080fd5b6020928301955093505084013561220181612175565b809150509250925092565b6000806000806000806000806000806101408b8d03121561222c57600080fd5b8a3561223781612113565b995060208b013561224781612113565b985060408b013561225781612113565b975060608b0135965060808b0135955060a08b0135945060c08b013561227c81612113565b935060e08b013561228c81612113565b92506101008b013561229d81612113565b91506101208b01356122ae81612113565b809150509295989b9194979a5092959850565b60008083601f8401126122d357600080fd5b5081356001600160401b038111156122ea57600080fd5b6020830191508360208260051b850101111561172e57600080fd5b801515811461081257600080fd5b60008060008060006060868803121561232b57600080fd5b85356001600160401b038082111561234257600080fd5b61234e89838a016122c1565b9097509550602088013591508082111561236757600080fd5b50612374888289016122c1565b909450925050604086013561238881612305565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156123ce576123ce612396565b60405290565b604051606081016001600160401b03811182821017156123ce576123ce612396565b604051601f8201601f191681016001600160401b038111828210171561241e5761241e612396565b604052919050565b60006001600160401b0382111561243f5761243f612396565b50601f01601f191660200190565b600082601f83011261245e57600080fd5b813561247161246c82612426565b6123f6565b81815284602083860101111561248657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a0312156124be57600080fd5b87356001600160401b03808211156124d557600080fd5b6124e18b838c0161244d565b985060208a013591506124f382612113565b90965060408901359061250582612175565b90955060608901359061251782612113565b9094506080890135908082111561252d57600080fd5b5061253a8a828b016122c1565b90945092505060a088013561254e81612305565b8091505092959891949750929550565b6000806040838503121561257157600080fd5b50508035926020909101359150565b60006020828403121561259257600080fd5b81356001600160401b038111156125a857600080fd5b6125b48482850161244d565b949350505050565b600080604083850312156125cf57600080fd5b82356001600160401b038111156125e557600080fd5b6125f18582860161244d565b925050602083013561214d81612175565b60008060008060008060008060e0898b03121561261e57600080fd5b88356001600160401b038082111561263557600080fd5b6126418c838d0161244d565b995060208b0135915061265382612113565b90975060408a01359061266582612175565b90965060608a0135955060808a01359061267e82612113565b90945060a08a0135908082111561269457600080fd5b506126a18b828c016122c1565b90945092505060c08901356126b581612305565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f6126c6565b60006020828403121561270157600080fd5b8151610e5281612175565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061274960608301868861270c565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561279f57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127fc5783356127df81612113565b6001600160a01b03168152928101926001929092019181016127cc565b8615156040870152935061280f92505050565b9695505050505050565b60005b8381101561283457818101518382015260200161281c565b50506000910152565b60008151808452612855816020860160208601612819565b601f01601f19169290920160200192915050565b602081526000610e52602083018461283d565b600061288a61246c84612426565b905082815283838301111561289e57600080fd5b610e52836020830184612819565b6000608082840312156128be57600080fd5b604051608081018181106001600160401b03821117156128e0576128e0612396565b806040525080915082516128f381612113565b8152602083015161290381612113565b6020820152604083015161291681612175565b6040820152606083015161292981612305565b6060919091015292915050565b6000602080838503121561294957600080fd5b82516001600160401b038082111561296057600080fd5b9084019060a0828703121561297457600080fd5b61297c6123ac565b82518281111561298b57600080fd5b83016060818903121561299d57600080fd5b6129a56123d4565b815160ff811681146129b657600080fd5b815281860151868201526040820151848111156129d257600080fd5b82019350601f840189136129e557600080fd5b6129f389855188870161287c565b6040820152825250612a07878486016128ac565b848201528094505050505092915050565b608081526000612a2b608083018761283d565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a6457600080fd5b8151610e5281612305565b604081526000612a82604083018561283d565b90506001600160401b03831660208301529392505050565b600060408284031215612aac57600080fd5b612ab46123ac565b9050815181526020820151602082015292915050565b60008060808385031215612add57600080fd5b612ae78484612a9a565b9150612af68460408501612a9a565b90509250929050565b8082018082111561073f5761073f6126c6565b81835260006020808501808196508560051b810191508460005b87811015612b965782840389528135601e19883603018112612b4d57600080fd5b870185810190356001600160401b03811115612b6857600080fd5b803603821315612b7757600080fd5b612b8286828461270c565b9a87019a9550505090840190600101612b2c565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612bec9083018587612b12565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612c4e81602a850160208801612819565b660103b30b63ab2960cd1b602a918401918201528351612c75816031840160208801612819565b01603101949350505050565b85815260a060208201526000612c9a60a083018761283d565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612cdf57600080fd5b8251612cea81612175565b6020939093015192949293505050565b608081526000612d0d608083018761283d565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d6a816017850160208801612819565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d9b816028840160208801612819565b01602801949350505050565b60008251612db9818460208701612819565b9190910192915050565b838152604060208201526000612ddd604083018486612b12565b95945050505050565b60006020808385031215612df957600080fd5b82516001600160401b0380821115612e1057600080fd5b818501915085601f830112612e2457600080fd5b815181811115612e3657612e36612396565b8060051b612e458582016123f6565b9182528381018501918581019089841115612e5f57600080fd5b86860192505b83831015612eb057825185811115612e7d5760008081fd5b8601603f81018b13612e8f5760008081fd5b612ea08b898301516040840161287c565b8352509186019190860190612e65565b9998505050505050505050565b60008251612ecf818460208701612819565b63173937b760e11b920191825250600401919050565b6001600160a01b03831681526040602082018190526000906125b49083018461283d565b600060208284031215612f1b57600080fd5b5051919050565b808202811582820484141761073f5761073f6126c6565b600081612f4857612f486126c6565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212203a109c3a44f7a0139823c421a40975bf8029ef66d689d4458e4d45cf8a5dbf8264736f6c63430008150033", + "nonce": "0xc3", + "chainId": "0x7e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe2c4410ccfba32563c6cb57a157abc41ecfd9cb8e314a4655c774b3e59013bca", + "transactionType": "CREATE", + "contractName": "RNSCommission", + "contractAddress": "0x70d1a6f75161e8d5de10e4aaa82aa1b423b4362a", + "function": null, + "arguments": null, + "transaction": { + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "gas": "0x321ebc", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5061001961001e565b6100dd565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100db576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611c46806100ec6000396000f3fe6080604052600436106100ec5760003560e01c806391cbc73f1161008a578063c42ef38c11610059578063c42ef38c14610297578063ca15c873146102cb578063d547741f146102eb578063e92108b51461030b57600080fd5b806391cbc73f1461022257806391d14854146102425780639fd50e5814610262578063a217fddf1461028257600080fd5b806336568abe116100c657806336568abe146101945780634c255c97146101b45780635dc30fe5146101ca5780639010d07c146101ea57600080fd5b806301ffc9a714610100578063248a9ca3146101355780632f2ff15d1461017457600080fd5b366100fb576100f961032d565b005b600080fd5b34801561010c57600080fd5b5061012061011b366004611324565b610367565b60405190151581526020015b60405180910390f35b34801561014157600080fd5b5061016661015036600461134e565b6000908152600160208190526040909120015490565b60405190815260200161012c565b34801561018057600080fd5b506100f961018f36600461137c565b610392565b3480156101a057600080fd5b506100f96101af36600461137c565b6103bd565b3480156101c057600080fd5b5061016661271081565b3480156101d657600080fd5b506100f96101e53660046113f8565b610440565b3480156101f657600080fd5b5061020a61020536600461143a565b610455565b6040516001600160a01b03909116815260200161012c565b34801561022e57600080fd5b506100f961023d36600461145c565b610474565b34801561024e57600080fd5b5061012061025d36600461137c565b610605565b34801561026e57600080fd5b506100f961027d3660046114df565b610630565b34801561028e57600080fd5b50610166600081565b3480156102a357600080fd5b506101667f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf281565b3480156102d757600080fd5b506101666102e636600461134e565b61074e565b3480156102f757600080fd5b506100f961030636600461137c565b610765565b34801561031757600080fd5b5061032061078b565b60405161012c91906115b8565b6103577f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf233610605565b15610365576103653461089c565b565b60006001600160e01b03198216635a05180f60e01b148061038c575061038c82610a9d565b92915050565b600082815260016020819052604090912001546103ae81610ad2565b6103b88383610adf565b505050565b6001600160a01b03811633146104325760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61043c8282610b01565b5050565b600061044b81610ad2565b6103b88383610b23565b600082815260026020526040812061046d9083610ca6565b9392505050565b600054610100900460ff16158080156104945750600054600160ff909116105b806104ae5750303b1580156104ae575060005460ff166001145b6105115760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610429565b6000805460ff191660011790558015610534576000805461ff0019166101001790555b61053f600087610cb2565b8160005b818110156105ab5761059b7f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf286868481811061058157610581611640565b90506020020160208101906105969190611656565b610cb2565b6105a481611689565b9050610543565b506105b68686610b23565b5080156105fd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061063b81610ad2565b603554851061065d57604051634ec4810560e11b815260040160405180910390fd5b6001600160a01b0384166106845760405163e99d5ac560e01b815260040160405180910390fd5b836035868154811061069857610698611640565b906000526020600020906003020160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508282603587815481106106e2576106e2611640565b90600052602060002090600302016002019182610700929190611738565b5084336001600160a01b03167faa3076bb2e00a425a96ce6aa8762a984fe8ed14922e3fba98cfa90683cb05ff886868660405161073f93929190611822565b60405180910390a35050505050565b600081815260026020526040812061038c90610cbc565b6000828152600160208190526040909120015461078181610ad2565b6103b88383610b01565b60606035805480602002602001604051908101604052809291908181526020016000905b82821015610893576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191610802906116b8565b80601f016020809104026020016040519081016040528092919081815260200182805461082e906116b8565b801561087b5780601f106108505761010080835404028352916020019161087b565b820191906000526020600020905b81548152906001019060200180831161085e57829003601f168201915b505050505081525050815260200190600101906107af565b50505050905090565b806000036108bd576040516370bf851360e11b815260040160405180910390fd5b60355460008190036108e257604051634ec4810560e11b815260040160405180910390fd5b60006108ef600183611850565b90506000805b828110156109e457600061092d866035848154811061091657610916611640565b906000526020600020906003020160010154610cc6565b90506109398184611863565b92506109716035838154811061095157610951611640565b60009182526020909120600390910201546001600160a01b031682610cdf565b6035828154811061098457610984611640565b6000918252602091829020600390910201546040518381526001600160a01b03909116917fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af910160405180910390a2506109dd81611689565b90506108f5565b5083811015610a9757610a2c60358381548110610a0357610a03611640565b60009182526020909120600390910201546001600160a01b0316610a278387611850565b610cdf565b60358281548110610a3f57610a3f611640565b60009182526020909120600390910201546001600160a01b03167fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af610a848387611850565b6040519081526020015b60405180910390a25b50505050565b60006001600160e01b03198216637965db0b60e01b148061038c57506301ffc9a760e01b6001600160e01b031983161461038c565b610adc8133610d44565b50565b610ae98282610d77565b60008281526002602052604090206103b89082610de2565b610b0b8282610df7565b60008281526002602052604090206103b89082610e5e565b806000819003610b4657604051634ec4810560e11b815260040160405180910390fd5b610b5260356000611284565b6000805b82811015610c48576000858583818110610b7257610b72611640565b9050602002810190610b849190611876565b610b92906020810190611656565b6001600160a01b031603610bb95760405163e99d5ac560e01b815260040160405180910390fd5b848482818110610bcb57610bcb611640565b9050602002810190610bdd9190611876565b610beb906020013583611863565b91506035858583818110610c0157610c01611640565b9050602002810190610c139190611876565b815460018101835560009283526020909220909160030201610c358282611896565b505080610c4190611689565b9050610b56565b506127108114610c6b5760405163648564d360e01b815260040160405180910390fd5b336001600160a01b03167f28d7f0d68cf2a192abb8ce94479d236f99759d18e31ee7cbfb0a473764374c008585604051610a8e9291906119c0565b600061046d8383610e73565b61043c8282610adf565b600061038c825490565b6000612710610cd58385611a92565b61046d9190611aa9565b6000610ceb8383610e9d565b9050806103b857610d04836001600160a01b0316610f13565b610d0d83610f29565b604051602001610d1e929190611acb565b60408051601f198184030181529082905262461bcd60e51b825261042991600401611b49565b610d4e8282610605565b61043c57610d5b81610f13565b610d66836020610f3c565b604051602001610d1e929190611b5c565b610d818282610605565b61043c5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600061046d836001600160a01b0384166110d8565b610e018282610605565b1561043c5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061046d836001600160a01b038416611127565b6000826000018281548110610e8a57610e8a611640565b9060005260206000200154905092915050565b604080516000808252602082019092526001600160a01b038416908390604051610ec79190611bd1565b60006040518083038185875af1925050503d8060008114610f04576040519150601f19603f3d011682016040523d82523d6000602084013e610f09565b606091505b5090949350505050565b606061038c6001600160a01b0383166014610f3c565b606061038c82610f388461121a565b6001015b60606000610f4b836002611a92565b610f56906002611863565b67ffffffffffffffff811115610f6e57610f6e6116a2565b6040519080825280601f01601f191660200182016040528015610f98576020820181803683370190505b509050600360fc1b81600081518110610fb357610fb3611640565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610fe257610fe2611640565b60200101906001600160f81b031916908160001a9053506000611006846002611a92565b611011906001611863565b90505b6001811115611089576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061104557611045611640565b1a60f81b82828151811061105b5761105b611640565b60200101906001600160f81b031916908160001a90535060049490941c9361108281611be3565b9050611014565b50831561046d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610429565b600081815260018301602052604081205461111f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561038c565b50600061038c565b6000818152600183016020526040812054801561121057600061114b600183611850565b855490915060009061115f90600190611850565b90508181146111c457600086600001828154811061117f5761117f611640565b90600052602060002001549050808760000184815481106111a2576111a2611640565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806111d5576111d5611bfa565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061038c565b600091505061038c565b600080608083901c156112325760809290921c916010015b604083901c156112475760409290921c916008015b602083901c1561125c5760209290921c916004015b601083901c156112715760109290921c916002015b600883901c1561038c5760010192915050565b5080546000825560030290600052602060002090810190610adc91905b808211156112d65780546001600160a01b03191681556000600182018190556112cd60028301826112da565b506003016112a1565b5090565b5080546112e6906116b8565b6000825580601f106112f6575050565b601f016020900490600052602060002090810190610adc91905b808211156112d65760008155600101611310565b60006020828403121561133657600080fd5b81356001600160e01b03198116811461046d57600080fd5b60006020828403121561136057600080fd5b5035919050565b6001600160a01b0381168114610adc57600080fd5b6000806040838503121561138f57600080fd5b8235915060208301356113a181611367565b809150509250929050565b60008083601f8401126113be57600080fd5b50813567ffffffffffffffff8111156113d657600080fd5b6020830191508360208260051b85010111156113f157600080fd5b9250929050565b6000806020838503121561140b57600080fd5b823567ffffffffffffffff81111561142257600080fd5b61142e858286016113ac565b90969095509350505050565b6000806040838503121561144d57600080fd5b50508035926020909101359150565b60008060008060006060868803121561147457600080fd5b853561147f81611367565b9450602086013567ffffffffffffffff8082111561149c57600080fd5b6114a889838a016113ac565b909650945060408801359150808211156114c157600080fd5b506114ce888289016113ac565b969995985093965092949392505050565b600080600080606085870312156114f557600080fd5b84359350602085013561150781611367565b9250604085013567ffffffffffffffff8082111561152457600080fd5b818701915087601f83011261153857600080fd5b81358181111561154757600080fd5b88602082850101111561155957600080fd5b95989497505060200194505050565b60005b8381101561158357818101518382015260200161156b565b50506000910152565b600081518084526115a4816020860160208601611568565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561163257888303603f19018552815180516001600160a01b031684528781015188850152860151606087850181905261161e8186018361158c565b9689019694505050908601906001016115df565b509098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561166857600080fd5b813561046d81611367565b634e487b7160e01b600052601160045260246000fd5b60006001820161169b5761169b611673565b5060010190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806116cc57607f821691505b6020821081036116ec57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156103b857600081815260208120601f850160051c810160208610156117195750805b601f850160051c820191505b818110156105fd57828155600101611725565b67ffffffffffffffff831115611750576117506116a2565b6117648361175e83546116b8565b836116f2565b6000601f84116001811461179857600085156117805750838201355b600019600387901b1c1916600186901b1783556117f2565b600083815260209020601f19861690835b828110156117c957868501358255602094850194600190920191016117a9565b50868210156117e65760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038416815260406020820181905260009061184790830184866117f9565b95945050505050565b8181038181111561038c5761038c611673565b8082018082111561038c5761038c611673565b60008235605e1983360301811261188c57600080fd5b9190910192915050565b81356118a181611367565b81546001600160a01b0319166001600160a01b03919091161781556020828101356001838101919091559060028301604085013536869003601e190181126118e857600080fd5b8501803567ffffffffffffffff81111561190157600080fd5b803603848301131561191257600080fd5b6119268161192085546116b8565b856116f2565b6000601f82116001811461195c576000831561194457508382018601355b600019600385901b1c1916600184901b1785556119b5565b600085815260209020601f19841690835b8281101561198c5786850189013582559388019390890190880161196d565b50848210156119ab5760001960f88660031b161c198885880101351681555b50508683881b0185555b505050505050505050565b60208082528181018390526000906040808401600586901b8501820187855b8881101561163257878303603f190184528135368b9003605e19018112611a0557600080fd5b8a0160608135611a1481611367565b6001600160a01b0316855281880135888601528682013536839003601e19018112611a3e57600080fd5b90910187810191903567ffffffffffffffff811115611a5c57600080fd5b803603831315611a6b57600080fd5b8188870152611a7d82870182856117f9565b968901969550505091860191506001016119df565b808202811582820484141761038c5761038c611673565b600082611ac657634e487b7160e01b600052601260045260246000fd5b500490565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351611b1681602a850160208801611568565b660103b30b63ab2960cd1b602a918401918201528351611b3d816031840160208801611568565b01603101949350505050565b60208152600061046d602083018461158c565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611b94816017850160208801611568565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611bc5816028840160208801611568565b01602801949350505050565b6000825161188c818460208701611568565b600081611bf257611bf2611673565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212208d51978c729b6a9c0e0ecd5b61562f366dfd09974e656890ad9d58de84f6745264736f6c63430008150033", + "nonce": "0xc4", + "chainId": "0x7e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionType": "CREATE", + "contractName": "TransparentProxyOZv4_9_5", + "contractAddress": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "function": null, + "arguments": [ + "0x70D1A6f75161e8D5De10E4AAa82AA1B423B4362a", + "0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03", + "0x91cbc73f0000000000000000000000009d05d1f5b0424f8fde534bc196ffb6dd211d902a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ff43f5ef28ecb7c1f219751fc793deb40ef07a530000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000009536b79204d61766973000000000000000000000000000000000000000000000000000000000000000000000022cefc91e9b7c0f3890ebf9527ea89053490694e0000000000000000000000000000000000000000000000000000000000000bb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005526f6e696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d55e6d80aea1ff4650bc952c1653ab3cf1b940a9000000000000000000000000662852853614cbbb5d04bf2e29955b97e3c50b69" + ], + "transaction": { + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "gas": "0x1f7438", + "value": "0x0", + "input": "0x608060405260405162000e4038038062000e4083398101604081905262000026916200042a565b8282828281620000398282600062000053565b506200004790508262000085565b5050505050506200055d565b6200005e83620000f7565b6000825111806200006c5750805b1562000080576200007e838362000139565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c760008051602062000df9833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000f48162000168565b50565b620001028162000206565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606062000161838360405180606001604052806027815260200162000e19602791396200029d565b9392505050565b6001600160a01b038116620001d35760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df98339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b620002755760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001ca565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001e5565b6060600080856001600160a01b031685604051620002bc91906200050a565b600060405180830381855af49150503d8060008114620002f9576040519150601f19603f3d011682016040523d82523d6000602084013e620002fe565b606091505b50909250905062000312868383876200031c565b9695505050505050565b606083156200039057825160000362000388576001600160a01b0385163b620003885760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001ca565b50816200039c565b6200039c8383620003a4565b949350505050565b815115620003b55781518083602001fd5b8060405162461bcd60e51b8152600401620001ca919062000528565b80516001600160a01b0381168114620003e957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200042157818101518382015260200162000407565b50506000910152565b6000806000606084860312156200044057600080fd5b6200044b84620003d1565b92506200045b60208501620003d1565b60408501519092506001600160401b03808211156200047957600080fd5b818601915086601f8301126200048e57600080fd5b815181811115620004a357620004a3620003ee565b604051601f8201601f19908116603f01168101908382118183101715620004ce57620004ce620003ee565b81604052828152896020848701011115620004e857600080fd5b620004fb83602083016020880162000404565b80955050505050509250925092565b600082516200051e81846020870162000404565b9190910192915050565b60208152600082518060208401526200054981604085016020870162000404565b601f01601f19169190910160400192915050565b61088c806200056d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a207c78ed3af0a4f57ce2b6c2fd644d6f8debc43e54eebfade2164eaf01f76a464736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656400000000000000000000000070d1a6f75161e8d5de10e4aaa82aa1b423b4362a000000000000000000000000a3e7d085e65cb0b916f6717da876b7be5cc92f030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000026491cbc73f0000000000000000000000009d05d1f5b0424f8fde534bc196ffb6dd211d902a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ff43f5ef28ecb7c1f219751fc793deb40ef07a530000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000009536b79204d61766973000000000000000000000000000000000000000000000000000000000000000000000022cefc91e9b7c0f3890ebf9527ea89053490694e0000000000000000000000000000000000000000000000000000000000000bb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005526f6e696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d55e6d80aea1ff4650bc952c1653ab3cf1b940a9000000000000000000000000662852853614cbbb5d04bf2e29955b97e3c50b6900000000000000000000000000000000000000000000000000000000", + "nonce": "0xc5", + "chainId": "0x7e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x3db9a8", + "logs": [ + { + "address": "0xaae506b2232eaea59238ffe501a9e6cfc8f9b843", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0x9f9f771939bb8dead3af08a54cdd9cadb3d73f4ff262b7b45f78892aa23ecbd3", + "transactionIndex": "0xd", + "logIndex": "0x18", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000001000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000080000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x9f9f771939bb8dead3af08a54cdd9cadb3d73f4ff262b7b45f78892aa23ecbd3", + "transactionIndex": "0xd", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "gasUsed": "0x29d133", + "effectiveGasPrice": "0x4a817c800", + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "to": null, + "contractAddress": "0xaae506b2232eaea59238ffe501a9e6cfc8f9b843" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x57cb44", + "logs": [ + { + "address": "0x70d1a6f75161e8d5de10e4aaa82aa1b423b4362a", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xe2c4410ccfba32563c6cb57a157abc41ecfd9cb8e314a4655c774b3e59013bca", + "transactionIndex": "0xf", + "logIndex": "0x1b", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xe2c4410ccfba32563c6cb57a157abc41ecfd9cb8e314a4655c774b3e59013bca", + "transactionIndex": "0xf", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "gasUsed": "0x190efa", + "effectiveGasPrice": "0x4a817c800", + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "to": null, + "contractAddress": "0x70d1a6f75161e8d5de10e4aaa82aa1b423b4362a" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x67ce6c", + "logs": [ + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000070d1a6f75161e8d5de10e4aaa82aa1b423b4362a" + ], + "data": "0x", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x1c", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009d05d1f5b0424f8fde534bc196ffb6dd211d902a", + "0x0000000000000000000000004d58ea7231c394d5804e8b06b1365915f906e27f" + ], + "data": "0x", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x1d", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf2", + "0x000000000000000000000000d55e6d80aea1ff4650bc952c1653ab3cf1b940a9", + "0x0000000000000000000000004d58ea7231c394d5804e8b06b1365915f906e27f" + ], + "data": "0x", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x1e", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf2", + "0x000000000000000000000000662852853614cbbb5d04bf2e29955b97e3c50b69", + "0x0000000000000000000000004d58ea7231c394d5804e8b06b1365915f906e27f" + ], + "data": "0x", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x1f", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x28d7f0d68cf2a192abb8ce94479d236f99759d18e31ee7cbfb0a473764374c00", + "0x0000000000000000000000004d58ea7231c394d5804e8b06b1365915f906e27f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ff43f5ef28ecb7c1f219751fc793deb40ef07a530000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000009536b79204d61766973000000000000000000000000000000000000000000000000000000000000000000000022cefc91e9b7c0f3890ebf9527ea89053490694e0000000000000000000000000000000000000000000000000000000000000bb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005526f6e696e000000000000000000000000000000000000000000000000000000", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x20", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x21", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3e7d085e65cb0b916f6717da876b7be5cc92f03", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x22", + "removed": false + } + ], + "logsBloom": "0x0000000400000000000084000000000040000000000000000000000000000000000000000000000000020000000002000000000000000000000000000000000c001200000000000000000000000002000000000000000000000000000002008000000000020000000000000000000800000000800000040000000000008080000000000000000000000000800000400000000000800080000000000000c00000000000000000000000004000000400000000000000000000001000000000000000000120000000000000000000040000000000080401000100000000000020000000000000000010000001000000000400000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "gasUsed": "0x100328", + "effectiveGasPrice": "0x4a817c800", + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "to": null, + "contractAddress": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1720085014, + "chain": 2020, + "commit": "f9ce5ef" +} \ No newline at end of file diff --git a/broadcast/20240704_UpgradeControllerAndDeployRNSCommissionMainnet.sol/2020/run-latest.json b/broadcast/20240704_UpgradeControllerAndDeployRNSCommissionMainnet.sol/2020/run-latest.json new file mode 100644 index 0000000..7ed8dfb --- /dev/null +++ b/broadcast/20240704_UpgradeControllerAndDeployRNSCommissionMainnet.sol/2020/run-latest.json @@ -0,0 +1,249 @@ +{ + "transactions": [ + { + "hash": "0x9f9f771939bb8dead3af08a54cdd9cadb3d73f4ff262b7b45f78892aa23ecbd3", + "transactionType": "CREATE", + "contractName": "RONRegistrarController", + "contractAddress": "0xaae506b2232eaea59238ffe501a9e6cfc8f9b843", + "function": null, + "arguments": null, + "transaction": { + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "gas": "0x539db6", + "value": "0x0", + "input": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612fbc80620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a6102453660046120d0565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120fa565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d610358366004612128565b610745565b005b34801561036b57600080fd5b5061035d61037a366004612128565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b8366004612128565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612158565b610815565b61035d61043b36600461218a565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d61047336600461220c565b6109d8565b34801561048457600080fd5b5061035d610493366004612313565b610b80565b3480156104a457600080fd5b5061035d610cb9565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d93660046124a3565b610cd9565b3480156104ea57600080fd5b506102a26104f936600461255e565b610e3a565b34801561050a57600080fd5b5061024a610519366004612128565b610e59565b34801561052a57600080fd5b5061024a610539366004612580565b610e84565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e366004612580565b610f12565b34801561057f57600080fd5b5061027361058e3660046125bc565b610f9d565b34801561059f57600080fd5b5061035d6105ae3660046120fa565b61104d565b3480156105bf57600080fd5b506103086105ce3660046120fa565b611061565b61035d6105e1366004612602565b611078565b3480156105f257600080fd5b5061035d610601366004612128565b611184565b34801561061257600080fd5b50610308610621366004612602565b6111a9565b34801561063257600080fd5b5061035d61064136600461255e565b611235565b34801561065257600080fd5b50610308600080516020612f6783398151915281565b34801561067457600080fd5b5061035d610683366004612158565b61124a565b34801561069457600080fd5b5061035d6106a33660046120fa565b61125e565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f7366004612580565b6112b7565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f826112f4565b92915050565b60008281526002602052604090206001015461076081611329565b61076a8383611333565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611355565b5050565b600080516020612f6783398151915261080a81611329565b610812611377565b50565b600061082081611329565b6107ee826113c9565b610831611420565b610839611468565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610f9d915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac82346126dc565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112b792505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097391906126ef565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab9493929190612735565b60405180910390a282156109c3576109c333846114c1565b6109cb611526565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f678339815191528b61153c565b610aca60008c61153c565b610ad3836113c9565b610adc86611546565b610ae6878961157d565b610aef89611607565b603a80546001600160a01b038088166001600160a01b031992831617909255603b8054878416908316179055603d8054928516929091169190911790558015610b73576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610baa81611329565b84801580610bb85750808414155b15610bd657604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c665783603f60008a8a85818110610bf857610bf8612769565b9050602002013581526020019081526020016000206000888885818110610c2157610c21612769565b9050602002016020810190610c369190612158565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bd9565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610ca895949392919061277f565b60405180910390a250505050505050565b600080516020612f67833981519152610cd181611329565b610812611678565b610ce1611420565b610ce9611468565b86610cf3816116b5565b610cfc88610f12565b610d1b57876040516308eee0fd60e31b81526004016107db9190612869565b6000610d26896112b7565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d9d9190810190612936565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dda575080155b15610e00578a8a8383604051631fc5717160e01b81526004016107db9493929190612a18565b600080610e0d8d8c6116dd565b91509150610e228d8d8d8d8d8d8d8989611735565b505050505050610e3160018055565b50505050505050565b6000828152600360205260408120610e52908361185f565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e918361186b565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610eca908590600401612869565b602060405180830381865afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b9190612a52565b1592915050565b6000610f1d82610e84565b801561073f5750603a546001600160a01b03166396e494e8610f3e846112b7565b6040518263ffffffff1660e01b8152600401610f5c91815260200190565b602060405180830381865afa158015610f79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f9190612a52565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fd89089908990600401612a6f565b608060405180830381865afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110199190612aca565b8051825192945090925061102c91612aff565b9350806020015182602001516110429190612aff565b925050509250929050565b600061105881611329565b6107ee82611546565b600081815260036020526040812061073f90611959565b611080611420565b611088611468565b6000611093896112b7565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111059190810190612936565b60200151606001511561112d57886040516331597a5760e21b81526004016107db9190612869565b600061113f8a8a8a8a8a8a8a8a6111a9565b905061114b8882611963565b6000806111588c8b6116dd565b9150915061116d8c8c8c8b8b8b8b8989611735565b5050505061117a60018055565b5050505050505050565b60008281526002602052604090206001015461119f81611329565b61076a8383611355565b6000886111b5816116b5565b83158015906111cb57506001600160a01b038616155b156111e9576040516334fd817160e21b815260040160405180910390fd5b6111f28a6112b7565b89898989898989604051602001611210989796959493929190612ba3565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124081611329565b61076a838361157d565b600061125581611329565b6107ee82611607565b611266611420565b6037546000828152603e6020526040902054429161128391612aff565b106112a457604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b6108128133611a14565b61133d8282611a47565b600082815260036020526040902061076a9082611acd565b61135f8282611ae2565b600082815260036020526040902061076a9082611b49565b61137f611b5e565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114665760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114ba5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114cd8383611ba7565b90508061076a576114e6836001600160a01b0316611c1d565b6114ef83611c33565b604051602001611500929190612c03565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612869565b603954611466906001600160a01b0316476114c1565b6107ee8282611333565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611415565b4281111561159e57604051630b4319e560e21b815260040160405180910390fd5b8181116115be576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b6001600160a01b03811661162e5760405163e99d5ac560e01b815260040160405180910390fd5b603980546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b611680611420565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ac3390565b6116be81610f12565b61081257806040516308eee0fd60e31b81526004016107db9190612869565b6000806116ea8484610f9d565b9092509050348111156117105760405163044044a560e21b815260040160405180910390fd5b348181039082146117255761172533826114c1565b5061172e611526565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b81526004016117a1959493929190612c81565b60408051808303816000875af11580156117bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e39190612ccc565b909250905085156117fa576117fa88828989611c4a565b841561180a5761180a8b8b611cc8565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d86888760405161184a9493929190612cfa565b60405180910390a35050505050505050505050565b6000610e528383611d5f565b600080600080845190505b8083101561195157600085848151811061189257611892612769565b01602001516001600160f81b0319169050600160ff1b8110156118ba57600184019350611945565b600760fd1b6001600160f81b0319821610156118db57600284019350611945565b600f60fc1b6001600160f81b0319821610156118fc57600384019350611945565b601f60fb1b6001600160f81b03198216101561191d57600484019350611945565b603f60fa1b6001600160f81b03198216101561193e57600584019350611945565b6006840193505b50600190910190611876565b509392505050565b600061073f825490565b603854826001600160401b0316101561199a576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119b390426126dc565b90506036548110156119db57604051635320bcf960e01b8152600481018390526024016107db565b806037541015611a015760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b611a1e8282610e59565b6107ee57611a2b81611c1d565b611a36836020611d89565b604051602001611500929190612d32565b611a518282610e59565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a893390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e52836001600160a01b038416611f24565b611aec8282610e59565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e52836001600160a01b038416611f73565b60005460ff166114665760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611bd19190612da7565b60006040518083038185875af1925050503d8060008114611c0e576040519150601f19603f3d011682016040523d82523d6000602084013e611c13565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d89565b606061073f82611c4284612066565b600101611d89565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c7a90869086908690600401612dc3565b6000604051808303816000875af1158015611c99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cc19190810190612de6565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611cf0908690602001612ebd565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611d1c929190612ee5565b6020604051808303816000875af1158015611d3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612f09565b6000826000018281548110611d7657611d76612769565b9060005260206000200154905092915050565b60606000611d98836002612f22565b611da3906002612aff565b6001600160401b03811115611dba57611dba612396565b6040519080825280601f01601f191660200182016040528015611de4576020820181803683370190505b509050600360fc1b81600081518110611dff57611dff612769565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611e2e57611e2e612769565b60200101906001600160f81b031916908160001a9053506000611e52846002612f22565b611e5d906001612aff565b90505b6001811115611ed5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e9157611e91612769565b1a60f81b828281518110611ea757611ea7612769565b60200101906001600160f81b031916908160001a90535060049490941c93611ece81612f39565b9050611e60565b508315610e525760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f6b5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b6000818152600183016020526040812054801561205c576000611f976001836126dc565b8554909150600090611fab906001906126dc565b9050818114612010576000866000018281548110611fcb57611fcb612769565b9060005260206000200154905080876000018481548110611fee57611fee612769565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061202157612021612f50565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561207e5760809290921c916010015b604083901c156120935760409290921c916008015b602083901c156120a85760209290921c916004015b601083901c156120bd5760109290921c916002015b600883901c1561073f5760010192915050565b6000602082840312156120e257600080fd5b81356001600160e01b031981168114610e5257600080fd5b60006020828403121561210c57600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b6000806040838503121561213b57600080fd5b82359150602083013561214d81612113565b809150509250929050565b60006020828403121561216a57600080fd5b8135610e5281612113565b6001600160401b038116811461081257600080fd5b60008060006040848603121561219f57600080fd5b83356001600160401b03808211156121b657600080fd5b818601915086601f8301126121ca57600080fd5b8135818111156121d957600080fd5b8760208285010111156121eb57600080fd5b6020928301955093505084013561220181612175565b809150509250925092565b6000806000806000806000806000806101408b8d03121561222c57600080fd5b8a3561223781612113565b995060208b013561224781612113565b985060408b013561225781612113565b975060608b0135965060808b0135955060a08b0135945060c08b013561227c81612113565b935060e08b013561228c81612113565b92506101008b013561229d81612113565b91506101208b01356122ae81612113565b809150509295989b9194979a5092959850565b60008083601f8401126122d357600080fd5b5081356001600160401b038111156122ea57600080fd5b6020830191508360208260051b850101111561172e57600080fd5b801515811461081257600080fd5b60008060008060006060868803121561232b57600080fd5b85356001600160401b038082111561234257600080fd5b61234e89838a016122c1565b9097509550602088013591508082111561236757600080fd5b50612374888289016122c1565b909450925050604086013561238881612305565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156123ce576123ce612396565b60405290565b604051606081016001600160401b03811182821017156123ce576123ce612396565b604051601f8201601f191681016001600160401b038111828210171561241e5761241e612396565b604052919050565b60006001600160401b0382111561243f5761243f612396565b50601f01601f191660200190565b600082601f83011261245e57600080fd5b813561247161246c82612426565b6123f6565b81815284602083860101111561248657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a0312156124be57600080fd5b87356001600160401b03808211156124d557600080fd5b6124e18b838c0161244d565b985060208a013591506124f382612113565b90965060408901359061250582612175565b90955060608901359061251782612113565b9094506080890135908082111561252d57600080fd5b5061253a8a828b016122c1565b90945092505060a088013561254e81612305565b8091505092959891949750929550565b6000806040838503121561257157600080fd5b50508035926020909101359150565b60006020828403121561259257600080fd5b81356001600160401b038111156125a857600080fd5b6125b48482850161244d565b949350505050565b600080604083850312156125cf57600080fd5b82356001600160401b038111156125e557600080fd5b6125f18582860161244d565b925050602083013561214d81612175565b60008060008060008060008060e0898b03121561261e57600080fd5b88356001600160401b038082111561263557600080fd5b6126418c838d0161244d565b995060208b0135915061265382612113565b90975060408a01359061266582612175565b90965060608a0135955060808a01359061267e82612113565b90945060a08a0135908082111561269457600080fd5b506126a18b828c016122c1565b90945092505060c08901356126b581612305565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f6126c6565b60006020828403121561270157600080fd5b8151610e5281612175565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061274960608301868861270c565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561279f57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127fc5783356127df81612113565b6001600160a01b03168152928101926001929092019181016127cc565b8615156040870152935061280f92505050565b9695505050505050565b60005b8381101561283457818101518382015260200161281c565b50506000910152565b60008151808452612855816020860160208601612819565b601f01601f19169290920160200192915050565b602081526000610e52602083018461283d565b600061288a61246c84612426565b905082815283838301111561289e57600080fd5b610e52836020830184612819565b6000608082840312156128be57600080fd5b604051608081018181106001600160401b03821117156128e0576128e0612396565b806040525080915082516128f381612113565b8152602083015161290381612113565b6020820152604083015161291681612175565b6040820152606083015161292981612305565b6060919091015292915050565b6000602080838503121561294957600080fd5b82516001600160401b038082111561296057600080fd5b9084019060a0828703121561297457600080fd5b61297c6123ac565b82518281111561298b57600080fd5b83016060818903121561299d57600080fd5b6129a56123d4565b815160ff811681146129b657600080fd5b815281860151868201526040820151848111156129d257600080fd5b82019350601f840189136129e557600080fd5b6129f389855188870161287c565b6040820152825250612a07878486016128ac565b848201528094505050505092915050565b608081526000612a2b608083018761283d565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a6457600080fd5b8151610e5281612305565b604081526000612a82604083018561283d565b90506001600160401b03831660208301529392505050565b600060408284031215612aac57600080fd5b612ab46123ac565b9050815181526020820151602082015292915050565b60008060808385031215612add57600080fd5b612ae78484612a9a565b9150612af68460408501612a9a565b90509250929050565b8082018082111561073f5761073f6126c6565b81835260006020808501808196508560051b810191508460005b87811015612b965782840389528135601e19883603018112612b4d57600080fd5b870185810190356001600160401b03811115612b6857600080fd5b803603821315612b7757600080fd5b612b8286828461270c565b9a87019a9550505090840190600101612b2c565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612bec9083018587612b12565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612c4e81602a850160208801612819565b660103b30b63ab2960cd1b602a918401918201528351612c75816031840160208801612819565b01603101949350505050565b85815260a060208201526000612c9a60a083018761283d565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612cdf57600080fd5b8251612cea81612175565b6020939093015192949293505050565b608081526000612d0d608083018761283d565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d6a816017850160208801612819565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d9b816028840160208801612819565b01602801949350505050565b60008251612db9818460208701612819565b9190910192915050565b838152604060208201526000612ddd604083018486612b12565b95945050505050565b60006020808385031215612df957600080fd5b82516001600160401b0380821115612e1057600080fd5b818501915085601f830112612e2457600080fd5b815181811115612e3657612e36612396565b8060051b612e458582016123f6565b9182528381018501918581019089841115612e5f57600080fd5b86860192505b83831015612eb057825185811115612e7d5760008081fd5b8601603f81018b13612e8f5760008081fd5b612ea08b898301516040840161287c565b8352509186019190860190612e65565b9998505050505050505050565b60008251612ecf818460208701612819565b63173937b760e11b920191825250600401919050565b6001600160a01b03831681526040602082018190526000906125b49083018461283d565b600060208284031215612f1b57600080fd5b5051919050565b808202811582820484141761073f5761073f6126c6565b600081612f4857612f486126c6565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212203a109c3a44f7a0139823c421a40975bf8029ef66d689d4458e4d45cf8a5dbf8264736f6c63430008150033", + "nonce": "0xc3", + "chainId": "0x7e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe2c4410ccfba32563c6cb57a157abc41ecfd9cb8e314a4655c774b3e59013bca", + "transactionType": "CREATE", + "contractName": "RNSCommission", + "contractAddress": "0x70d1a6f75161e8d5de10e4aaa82aa1b423b4362a", + "function": null, + "arguments": null, + "transaction": { + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "gas": "0x321ebc", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5061001961001e565b6100dd565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100db576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611c46806100ec6000396000f3fe6080604052600436106100ec5760003560e01c806391cbc73f1161008a578063c42ef38c11610059578063c42ef38c14610297578063ca15c873146102cb578063d547741f146102eb578063e92108b51461030b57600080fd5b806391cbc73f1461022257806391d14854146102425780639fd50e5814610262578063a217fddf1461028257600080fd5b806336568abe116100c657806336568abe146101945780634c255c97146101b45780635dc30fe5146101ca5780639010d07c146101ea57600080fd5b806301ffc9a714610100578063248a9ca3146101355780632f2ff15d1461017457600080fd5b366100fb576100f961032d565b005b600080fd5b34801561010c57600080fd5b5061012061011b366004611324565b610367565b60405190151581526020015b60405180910390f35b34801561014157600080fd5b5061016661015036600461134e565b6000908152600160208190526040909120015490565b60405190815260200161012c565b34801561018057600080fd5b506100f961018f36600461137c565b610392565b3480156101a057600080fd5b506100f96101af36600461137c565b6103bd565b3480156101c057600080fd5b5061016661271081565b3480156101d657600080fd5b506100f96101e53660046113f8565b610440565b3480156101f657600080fd5b5061020a61020536600461143a565b610455565b6040516001600160a01b03909116815260200161012c565b34801561022e57600080fd5b506100f961023d36600461145c565b610474565b34801561024e57600080fd5b5061012061025d36600461137c565b610605565b34801561026e57600080fd5b506100f961027d3660046114df565b610630565b34801561028e57600080fd5b50610166600081565b3480156102a357600080fd5b506101667f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf281565b3480156102d757600080fd5b506101666102e636600461134e565b61074e565b3480156102f757600080fd5b506100f961030636600461137c565b610765565b34801561031757600080fd5b5061032061078b565b60405161012c91906115b8565b6103577f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf233610605565b15610365576103653461089c565b565b60006001600160e01b03198216635a05180f60e01b148061038c575061038c82610a9d565b92915050565b600082815260016020819052604090912001546103ae81610ad2565b6103b88383610adf565b505050565b6001600160a01b03811633146104325760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61043c8282610b01565b5050565b600061044b81610ad2565b6103b88383610b23565b600082815260026020526040812061046d9083610ca6565b9392505050565b600054610100900460ff16158080156104945750600054600160ff909116105b806104ae5750303b1580156104ae575060005460ff166001145b6105115760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610429565b6000805460ff191660011790558015610534576000805461ff0019166101001790555b61053f600087610cb2565b8160005b818110156105ab5761059b7f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf286868481811061058157610581611640565b90506020020160208101906105969190611656565b610cb2565b6105a481611689565b9050610543565b506105b68686610b23565b5080156105fd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061063b81610ad2565b603554851061065d57604051634ec4810560e11b815260040160405180910390fd5b6001600160a01b0384166106845760405163e99d5ac560e01b815260040160405180910390fd5b836035868154811061069857610698611640565b906000526020600020906003020160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508282603587815481106106e2576106e2611640565b90600052602060002090600302016002019182610700929190611738565b5084336001600160a01b03167faa3076bb2e00a425a96ce6aa8762a984fe8ed14922e3fba98cfa90683cb05ff886868660405161073f93929190611822565b60405180910390a35050505050565b600081815260026020526040812061038c90610cbc565b6000828152600160208190526040909120015461078181610ad2565b6103b88383610b01565b60606035805480602002602001604051908101604052809291908181526020016000905b82821015610893576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191610802906116b8565b80601f016020809104026020016040519081016040528092919081815260200182805461082e906116b8565b801561087b5780601f106108505761010080835404028352916020019161087b565b820191906000526020600020905b81548152906001019060200180831161085e57829003601f168201915b505050505081525050815260200190600101906107af565b50505050905090565b806000036108bd576040516370bf851360e11b815260040160405180910390fd5b60355460008190036108e257604051634ec4810560e11b815260040160405180910390fd5b60006108ef600183611850565b90506000805b828110156109e457600061092d866035848154811061091657610916611640565b906000526020600020906003020160010154610cc6565b90506109398184611863565b92506109716035838154811061095157610951611640565b60009182526020909120600390910201546001600160a01b031682610cdf565b6035828154811061098457610984611640565b6000918252602091829020600390910201546040518381526001600160a01b03909116917fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af910160405180910390a2506109dd81611689565b90506108f5565b5083811015610a9757610a2c60358381548110610a0357610a03611640565b60009182526020909120600390910201546001600160a01b0316610a278387611850565b610cdf565b60358281548110610a3f57610a3f611640565b60009182526020909120600390910201546001600160a01b03167fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af610a848387611850565b6040519081526020015b60405180910390a25b50505050565b60006001600160e01b03198216637965db0b60e01b148061038c57506301ffc9a760e01b6001600160e01b031983161461038c565b610adc8133610d44565b50565b610ae98282610d77565b60008281526002602052604090206103b89082610de2565b610b0b8282610df7565b60008281526002602052604090206103b89082610e5e565b806000819003610b4657604051634ec4810560e11b815260040160405180910390fd5b610b5260356000611284565b6000805b82811015610c48576000858583818110610b7257610b72611640565b9050602002810190610b849190611876565b610b92906020810190611656565b6001600160a01b031603610bb95760405163e99d5ac560e01b815260040160405180910390fd5b848482818110610bcb57610bcb611640565b9050602002810190610bdd9190611876565b610beb906020013583611863565b91506035858583818110610c0157610c01611640565b9050602002810190610c139190611876565b815460018101835560009283526020909220909160030201610c358282611896565b505080610c4190611689565b9050610b56565b506127108114610c6b5760405163648564d360e01b815260040160405180910390fd5b336001600160a01b03167f28d7f0d68cf2a192abb8ce94479d236f99759d18e31ee7cbfb0a473764374c008585604051610a8e9291906119c0565b600061046d8383610e73565b61043c8282610adf565b600061038c825490565b6000612710610cd58385611a92565b61046d9190611aa9565b6000610ceb8383610e9d565b9050806103b857610d04836001600160a01b0316610f13565b610d0d83610f29565b604051602001610d1e929190611acb565b60408051601f198184030181529082905262461bcd60e51b825261042991600401611b49565b610d4e8282610605565b61043c57610d5b81610f13565b610d66836020610f3c565b604051602001610d1e929190611b5c565b610d818282610605565b61043c5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600061046d836001600160a01b0384166110d8565b610e018282610605565b1561043c5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061046d836001600160a01b038416611127565b6000826000018281548110610e8a57610e8a611640565b9060005260206000200154905092915050565b604080516000808252602082019092526001600160a01b038416908390604051610ec79190611bd1565b60006040518083038185875af1925050503d8060008114610f04576040519150601f19603f3d011682016040523d82523d6000602084013e610f09565b606091505b5090949350505050565b606061038c6001600160a01b0383166014610f3c565b606061038c82610f388461121a565b6001015b60606000610f4b836002611a92565b610f56906002611863565b67ffffffffffffffff811115610f6e57610f6e6116a2565b6040519080825280601f01601f191660200182016040528015610f98576020820181803683370190505b509050600360fc1b81600081518110610fb357610fb3611640565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610fe257610fe2611640565b60200101906001600160f81b031916908160001a9053506000611006846002611a92565b611011906001611863565b90505b6001811115611089576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061104557611045611640565b1a60f81b82828151811061105b5761105b611640565b60200101906001600160f81b031916908160001a90535060049490941c9361108281611be3565b9050611014565b50831561046d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610429565b600081815260018301602052604081205461111f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561038c565b50600061038c565b6000818152600183016020526040812054801561121057600061114b600183611850565b855490915060009061115f90600190611850565b90508181146111c457600086600001828154811061117f5761117f611640565b90600052602060002001549050808760000184815481106111a2576111a2611640565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806111d5576111d5611bfa565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061038c565b600091505061038c565b600080608083901c156112325760809290921c916010015b604083901c156112475760409290921c916008015b602083901c1561125c5760209290921c916004015b601083901c156112715760109290921c916002015b600883901c1561038c5760010192915050565b5080546000825560030290600052602060002090810190610adc91905b808211156112d65780546001600160a01b03191681556000600182018190556112cd60028301826112da565b506003016112a1565b5090565b5080546112e6906116b8565b6000825580601f106112f6575050565b601f016020900490600052602060002090810190610adc91905b808211156112d65760008155600101611310565b60006020828403121561133657600080fd5b81356001600160e01b03198116811461046d57600080fd5b60006020828403121561136057600080fd5b5035919050565b6001600160a01b0381168114610adc57600080fd5b6000806040838503121561138f57600080fd5b8235915060208301356113a181611367565b809150509250929050565b60008083601f8401126113be57600080fd5b50813567ffffffffffffffff8111156113d657600080fd5b6020830191508360208260051b85010111156113f157600080fd5b9250929050565b6000806020838503121561140b57600080fd5b823567ffffffffffffffff81111561142257600080fd5b61142e858286016113ac565b90969095509350505050565b6000806040838503121561144d57600080fd5b50508035926020909101359150565b60008060008060006060868803121561147457600080fd5b853561147f81611367565b9450602086013567ffffffffffffffff8082111561149c57600080fd5b6114a889838a016113ac565b909650945060408801359150808211156114c157600080fd5b506114ce888289016113ac565b969995985093965092949392505050565b600080600080606085870312156114f557600080fd5b84359350602085013561150781611367565b9250604085013567ffffffffffffffff8082111561152457600080fd5b818701915087601f83011261153857600080fd5b81358181111561154757600080fd5b88602082850101111561155957600080fd5b95989497505060200194505050565b60005b8381101561158357818101518382015260200161156b565b50506000910152565b600081518084526115a4816020860160208601611568565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561163257888303603f19018552815180516001600160a01b031684528781015188850152860151606087850181905261161e8186018361158c565b9689019694505050908601906001016115df565b509098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561166857600080fd5b813561046d81611367565b634e487b7160e01b600052601160045260246000fd5b60006001820161169b5761169b611673565b5060010190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806116cc57607f821691505b6020821081036116ec57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156103b857600081815260208120601f850160051c810160208610156117195750805b601f850160051c820191505b818110156105fd57828155600101611725565b67ffffffffffffffff831115611750576117506116a2565b6117648361175e83546116b8565b836116f2565b6000601f84116001811461179857600085156117805750838201355b600019600387901b1c1916600186901b1783556117f2565b600083815260209020601f19861690835b828110156117c957868501358255602094850194600190920191016117a9565b50868210156117e65760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038416815260406020820181905260009061184790830184866117f9565b95945050505050565b8181038181111561038c5761038c611673565b8082018082111561038c5761038c611673565b60008235605e1983360301811261188c57600080fd5b9190910192915050565b81356118a181611367565b81546001600160a01b0319166001600160a01b03919091161781556020828101356001838101919091559060028301604085013536869003601e190181126118e857600080fd5b8501803567ffffffffffffffff81111561190157600080fd5b803603848301131561191257600080fd5b6119268161192085546116b8565b856116f2565b6000601f82116001811461195c576000831561194457508382018601355b600019600385901b1c1916600184901b1785556119b5565b600085815260209020601f19841690835b8281101561198c5786850189013582559388019390890190880161196d565b50848210156119ab5760001960f88660031b161c198885880101351681555b50508683881b0185555b505050505050505050565b60208082528181018390526000906040808401600586901b8501820187855b8881101561163257878303603f190184528135368b9003605e19018112611a0557600080fd5b8a0160608135611a1481611367565b6001600160a01b0316855281880135888601528682013536839003601e19018112611a3e57600080fd5b90910187810191903567ffffffffffffffff811115611a5c57600080fd5b803603831315611a6b57600080fd5b8188870152611a7d82870182856117f9565b968901969550505091860191506001016119df565b808202811582820484141761038c5761038c611673565b600082611ac657634e487b7160e01b600052601260045260246000fd5b500490565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351611b1681602a850160208801611568565b660103b30b63ab2960cd1b602a918401918201528351611b3d816031840160208801611568565b01603101949350505050565b60208152600061046d602083018461158c565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611b94816017850160208801611568565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611bc5816028840160208801611568565b01602801949350505050565b6000825161188c818460208701611568565b600081611bf257611bf2611673565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212208d51978c729b6a9c0e0ecd5b61562f366dfd09974e656890ad9d58de84f6745264736f6c63430008150033", + "nonce": "0xc4", + "chainId": "0x7e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionType": "CREATE", + "contractName": "TransparentProxyOZv4_9_5", + "contractAddress": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "function": null, + "arguments": [ + "0x70D1A6f75161e8D5De10E4AAa82AA1B423B4362a", + "0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03", + "0x91cbc73f0000000000000000000000009d05d1f5b0424f8fde534bc196ffb6dd211d902a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ff43f5ef28ecb7c1f219751fc793deb40ef07a530000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000009536b79204d61766973000000000000000000000000000000000000000000000000000000000000000000000022cefc91e9b7c0f3890ebf9527ea89053490694e0000000000000000000000000000000000000000000000000000000000000bb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005526f6e696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d55e6d80aea1ff4650bc952c1653ab3cf1b940a9000000000000000000000000662852853614cbbb5d04bf2e29955b97e3c50b69" + ], + "transaction": { + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "gas": "0x1f7438", + "value": "0x0", + "input": "0x608060405260405162000e4038038062000e4083398101604081905262000026916200042a565b8282828281620000398282600062000053565b506200004790508262000085565b5050505050506200055d565b6200005e83620000f7565b6000825111806200006c5750805b1562000080576200007e838362000139565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c760008051602062000df9833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000f48162000168565b50565b620001028162000206565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606062000161838360405180606001604052806027815260200162000e19602791396200029d565b9392505050565b6001600160a01b038116620001d35760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df98339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b620002755760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001ca565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001e5565b6060600080856001600160a01b031685604051620002bc91906200050a565b600060405180830381855af49150503d8060008114620002f9576040519150601f19603f3d011682016040523d82523d6000602084013e620002fe565b606091505b50909250905062000312868383876200031c565b9695505050505050565b606083156200039057825160000362000388576001600160a01b0385163b620003885760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001ca565b50816200039c565b6200039c8383620003a4565b949350505050565b815115620003b55781518083602001fd5b8060405162461bcd60e51b8152600401620001ca919062000528565b80516001600160a01b0381168114620003e957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200042157818101518382015260200162000407565b50506000910152565b6000806000606084860312156200044057600080fd5b6200044b84620003d1565b92506200045b60208501620003d1565b60408501519092506001600160401b03808211156200047957600080fd5b818601915086601f8301126200048e57600080fd5b815181811115620004a357620004a3620003ee565b604051601f8201601f19908116603f01168101908382118183101715620004ce57620004ce620003ee565b81604052828152896020848701011115620004e857600080fd5b620004fb83602083016020880162000404565b80955050505050509250925092565b600082516200051e81846020870162000404565b9190910192915050565b60208152600082518060208401526200054981604085016020870162000404565b601f01601f19169190910160400192915050565b61088c806200056d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a207c78ed3af0a4f57ce2b6c2fd644d6f8debc43e54eebfade2164eaf01f76a464736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656400000000000000000000000070d1a6f75161e8d5de10e4aaa82aa1b423b4362a000000000000000000000000a3e7d085e65cb0b916f6717da876b7be5cc92f030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000026491cbc73f0000000000000000000000009d05d1f5b0424f8fde534bc196ffb6dd211d902a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ff43f5ef28ecb7c1f219751fc793deb40ef07a530000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000009536b79204d61766973000000000000000000000000000000000000000000000000000000000000000000000022cefc91e9b7c0f3890ebf9527ea89053490694e0000000000000000000000000000000000000000000000000000000000000bb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005526f6e696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d55e6d80aea1ff4650bc952c1653ab3cf1b940a9000000000000000000000000662852853614cbbb5d04bf2e29955b97e3c50b6900000000000000000000000000000000000000000000000000000000", + "nonce": "0xc5", + "chainId": "0x7e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x3db9a8", + "logs": [ + { + "address": "0xaae506b2232eaea59238ffe501a9e6cfc8f9b843", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0x9f9f771939bb8dead3af08a54cdd9cadb3d73f4ff262b7b45f78892aa23ecbd3", + "transactionIndex": "0xd", + "logIndex": "0x18", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000001000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000080000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x9f9f771939bb8dead3af08a54cdd9cadb3d73f4ff262b7b45f78892aa23ecbd3", + "transactionIndex": "0xd", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "gasUsed": "0x29d133", + "effectiveGasPrice": "0x4a817c800", + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "to": null, + "contractAddress": "0xaae506b2232eaea59238ffe501a9e6cfc8f9b843" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x57cb44", + "logs": [ + { + "address": "0x70d1a6f75161e8d5de10e4aaa82aa1b423b4362a", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xe2c4410ccfba32563c6cb57a157abc41ecfd9cb8e314a4655c774b3e59013bca", + "transactionIndex": "0xf", + "logIndex": "0x1b", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xe2c4410ccfba32563c6cb57a157abc41ecfd9cb8e314a4655c774b3e59013bca", + "transactionIndex": "0xf", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "gasUsed": "0x190efa", + "effectiveGasPrice": "0x4a817c800", + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "to": null, + "contractAddress": "0x70d1a6f75161e8d5de10e4aaa82aa1b423b4362a" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x67ce6c", + "logs": [ + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000070d1a6f75161e8d5de10e4aaa82aa1b423b4362a" + ], + "data": "0x", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x1c", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009d05d1f5b0424f8fde534bc196ffb6dd211d902a", + "0x0000000000000000000000004d58ea7231c394d5804e8b06b1365915f906e27f" + ], + "data": "0x", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x1d", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf2", + "0x000000000000000000000000d55e6d80aea1ff4650bc952c1653ab3cf1b940a9", + "0x0000000000000000000000004d58ea7231c394d5804e8b06b1365915f906e27f" + ], + "data": "0x", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x1e", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf2", + "0x000000000000000000000000662852853614cbbb5d04bf2e29955b97e3c50b69", + "0x0000000000000000000000004d58ea7231c394d5804e8b06b1365915f906e27f" + ], + "data": "0x", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x1f", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x28d7f0d68cf2a192abb8ce94479d236f99759d18e31ee7cbfb0a473764374c00", + "0x0000000000000000000000004d58ea7231c394d5804e8b06b1365915f906e27f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ff43f5ef28ecb7c1f219751fc793deb40ef07a530000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000009536b79204d61766973000000000000000000000000000000000000000000000000000000000000000000000022cefc91e9b7c0f3890ebf9527ea89053490694e0000000000000000000000000000000000000000000000000000000000000bb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005526f6e696e000000000000000000000000000000000000000000000000000000", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x20", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x21", + "removed": false + }, + { + "address": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3e7d085e65cb0b916f6717da876b7be5cc92f03", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "logIndex": "0x22", + "removed": false + } + ], + "logsBloom": "0x0000000400000000000084000000000040000000000000000000000000000000000000000000000000020000000002000000000000000000000000000000000c001200000000000000000000000002000000000000000000000000000002008000000000020000000000000000000800000000800000040000000000008080000000000000000000000000800000400000000000800080000000000000c00000000000000000000000004000000400000000000000000000001000000000000000000120000000000000000000040000000000080401000100000000000020000000000000000010000001000000000400000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xdb1386ccc58cd4475bd7a92c12b447095c7730249e47994983d92b205972be58", + "transactionIndex": "0x10", + "blockHash": "0x07023c4124c015a4d9d05b0f77b352b69ff032cee820c0a0cdf22bed08a487b3", + "blockNumber": "0x2269843", + "gasUsed": "0x100328", + "effectiveGasPrice": "0x4a817c800", + "from": "0x4d58ea7231c394d5804e8b06b1365915f906e27f", + "to": null, + "contractAddress": "0x1bece3a948c14eefbaace67fe6f51cd21b79aa21" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1720085014, + "chain": 2020, + "commit": "f9ce5ef" +} \ No newline at end of file diff --git a/deployments/ronin-mainnet/RNSCommissionLogic.json b/deployments/ronin-mainnet/RNSCommissionLogic.json new file mode 100644 index 0000000..e943fc0 --- /dev/null +++ b/deployments/ronin-mainnet/RNSCommissionLogic.json @@ -0,0 +1,858 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_PERCENTAGE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SENDER_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCommissions", + "inputs": [], + "outputs": [ + { + "name": "commissionInfos", + "type": "tuple[]", + "internalType": "struct INSCommission.Commission[]", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address payable" + }, + { + "name": "ratio", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRoleAdmin", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRoleMember", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRoleMemberCount", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "grantRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "hasRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "admin", + "type": "address", + "internalType": "address" + }, + { + "name": "commissionInfos", + "type": "tuple[]", + "internalType": "struct INSCommission.Commission[]", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address payable" + }, + { + "name": "ratio", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + } + ] + }, + { + "name": "allowedSenders", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setCommissionInfo", + "inputs": [ + { + "name": "commissionIdx", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "newRecipient", + "type": "address", + "internalType": "address payable" + }, + { + "name": "newName", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setCommissions", + "inputs": [ + { + "name": "commissionInfos", + "type": "tuple[]", + "internalType": "struct INSCommission.Commission[]", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address payable" + }, + { + "name": "ratio", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "CommissionInfoUpdated", + "inputs": [ + { + "name": "updatedBy", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "commissionIdx", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "newRecipient", + "type": "address", + "indexed": false, + "internalType": "address payable" + }, + { + "name": "newName", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CommissionsUpdated", + "inputs": [ + { + "name": "updatedBy", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "commissionInfos", + "type": "tuple[]", + "indexed": false, + "internalType": "struct INSCommission.Commission[]", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address payable" + }, + { + "name": "ratio", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Distributed", + "inputs": [ + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "commissionAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "newAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "InvalidAmountOfRON", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidArrayLength", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidRatio", + "inputs": [] + }, + { + "type": "error", + "name": "NullAddress", + "inputs": [] + } + ], + "absolutePath": "RNSCommission.sol", + "address": "0x70D1A6f75161e8D5De10E4AAa82AA1B423B4362a", + "ast": "", + "blockNumber": 36083767, + "bytecode": "0x608060405234801561001057600080fd5b5061001961001e565b6100dd565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100db576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611c46806100ec6000396000f3fe6080604052600436106100ec5760003560e01c806391cbc73f1161008a578063c42ef38c11610059578063c42ef38c14610297578063ca15c873146102cb578063d547741f146102eb578063e92108b51461030b57600080fd5b806391cbc73f1461022257806391d14854146102425780639fd50e5814610262578063a217fddf1461028257600080fd5b806336568abe116100c657806336568abe146101945780634c255c97146101b45780635dc30fe5146101ca5780639010d07c146101ea57600080fd5b806301ffc9a714610100578063248a9ca3146101355780632f2ff15d1461017457600080fd5b366100fb576100f961032d565b005b600080fd5b34801561010c57600080fd5b5061012061011b366004611324565b610367565b60405190151581526020015b60405180910390f35b34801561014157600080fd5b5061016661015036600461134e565b6000908152600160208190526040909120015490565b60405190815260200161012c565b34801561018057600080fd5b506100f961018f36600461137c565b610392565b3480156101a057600080fd5b506100f96101af36600461137c565b6103bd565b3480156101c057600080fd5b5061016661271081565b3480156101d657600080fd5b506100f96101e53660046113f8565b610440565b3480156101f657600080fd5b5061020a61020536600461143a565b610455565b6040516001600160a01b03909116815260200161012c565b34801561022e57600080fd5b506100f961023d36600461145c565b610474565b34801561024e57600080fd5b5061012061025d36600461137c565b610605565b34801561026e57600080fd5b506100f961027d3660046114df565b610630565b34801561028e57600080fd5b50610166600081565b3480156102a357600080fd5b506101667f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf281565b3480156102d757600080fd5b506101666102e636600461134e565b61074e565b3480156102f757600080fd5b506100f961030636600461137c565b610765565b34801561031757600080fd5b5061032061078b565b60405161012c91906115b8565b6103577f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf233610605565b15610365576103653461089c565b565b60006001600160e01b03198216635a05180f60e01b148061038c575061038c82610a9d565b92915050565b600082815260016020819052604090912001546103ae81610ad2565b6103b88383610adf565b505050565b6001600160a01b03811633146104325760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61043c8282610b01565b5050565b600061044b81610ad2565b6103b88383610b23565b600082815260026020526040812061046d9083610ca6565b9392505050565b600054610100900460ff16158080156104945750600054600160ff909116105b806104ae5750303b1580156104ae575060005460ff166001145b6105115760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610429565b6000805460ff191660011790558015610534576000805461ff0019166101001790555b61053f600087610cb2565b8160005b818110156105ab5761059b7f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf286868481811061058157610581611640565b90506020020160208101906105969190611656565b610cb2565b6105a481611689565b9050610543565b506105b68686610b23565b5080156105fd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061063b81610ad2565b603554851061065d57604051634ec4810560e11b815260040160405180910390fd5b6001600160a01b0384166106845760405163e99d5ac560e01b815260040160405180910390fd5b836035868154811061069857610698611640565b906000526020600020906003020160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508282603587815481106106e2576106e2611640565b90600052602060002090600302016002019182610700929190611738565b5084336001600160a01b03167faa3076bb2e00a425a96ce6aa8762a984fe8ed14922e3fba98cfa90683cb05ff886868660405161073f93929190611822565b60405180910390a35050505050565b600081815260026020526040812061038c90610cbc565b6000828152600160208190526040909120015461078181610ad2565b6103b88383610b01565b60606035805480602002602001604051908101604052809291908181526020016000905b82821015610893576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191610802906116b8565b80601f016020809104026020016040519081016040528092919081815260200182805461082e906116b8565b801561087b5780601f106108505761010080835404028352916020019161087b565b820191906000526020600020905b81548152906001019060200180831161085e57829003601f168201915b505050505081525050815260200190600101906107af565b50505050905090565b806000036108bd576040516370bf851360e11b815260040160405180910390fd5b60355460008190036108e257604051634ec4810560e11b815260040160405180910390fd5b60006108ef600183611850565b90506000805b828110156109e457600061092d866035848154811061091657610916611640565b906000526020600020906003020160010154610cc6565b90506109398184611863565b92506109716035838154811061095157610951611640565b60009182526020909120600390910201546001600160a01b031682610cdf565b6035828154811061098457610984611640565b6000918252602091829020600390910201546040518381526001600160a01b03909116917fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af910160405180910390a2506109dd81611689565b90506108f5565b5083811015610a9757610a2c60358381548110610a0357610a03611640565b60009182526020909120600390910201546001600160a01b0316610a278387611850565b610cdf565b60358281548110610a3f57610a3f611640565b60009182526020909120600390910201546001600160a01b03167fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af610a848387611850565b6040519081526020015b60405180910390a25b50505050565b60006001600160e01b03198216637965db0b60e01b148061038c57506301ffc9a760e01b6001600160e01b031983161461038c565b610adc8133610d44565b50565b610ae98282610d77565b60008281526002602052604090206103b89082610de2565b610b0b8282610df7565b60008281526002602052604090206103b89082610e5e565b806000819003610b4657604051634ec4810560e11b815260040160405180910390fd5b610b5260356000611284565b6000805b82811015610c48576000858583818110610b7257610b72611640565b9050602002810190610b849190611876565b610b92906020810190611656565b6001600160a01b031603610bb95760405163e99d5ac560e01b815260040160405180910390fd5b848482818110610bcb57610bcb611640565b9050602002810190610bdd9190611876565b610beb906020013583611863565b91506035858583818110610c0157610c01611640565b9050602002810190610c139190611876565b815460018101835560009283526020909220909160030201610c358282611896565b505080610c4190611689565b9050610b56565b506127108114610c6b5760405163648564d360e01b815260040160405180910390fd5b336001600160a01b03167f28d7f0d68cf2a192abb8ce94479d236f99759d18e31ee7cbfb0a473764374c008585604051610a8e9291906119c0565b600061046d8383610e73565b61043c8282610adf565b600061038c825490565b6000612710610cd58385611a92565b61046d9190611aa9565b6000610ceb8383610e9d565b9050806103b857610d04836001600160a01b0316610f13565b610d0d83610f29565b604051602001610d1e929190611acb565b60408051601f198184030181529082905262461bcd60e51b825261042991600401611b49565b610d4e8282610605565b61043c57610d5b81610f13565b610d66836020610f3c565b604051602001610d1e929190611b5c565b610d818282610605565b61043c5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600061046d836001600160a01b0384166110d8565b610e018282610605565b1561043c5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061046d836001600160a01b038416611127565b6000826000018281548110610e8a57610e8a611640565b9060005260206000200154905092915050565b604080516000808252602082019092526001600160a01b038416908390604051610ec79190611bd1565b60006040518083038185875af1925050503d8060008114610f04576040519150601f19603f3d011682016040523d82523d6000602084013e610f09565b606091505b5090949350505050565b606061038c6001600160a01b0383166014610f3c565b606061038c82610f388461121a565b6001015b60606000610f4b836002611a92565b610f56906002611863565b67ffffffffffffffff811115610f6e57610f6e6116a2565b6040519080825280601f01601f191660200182016040528015610f98576020820181803683370190505b509050600360fc1b81600081518110610fb357610fb3611640565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610fe257610fe2611640565b60200101906001600160f81b031916908160001a9053506000611006846002611a92565b611011906001611863565b90505b6001811115611089576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061104557611045611640565b1a60f81b82828151811061105b5761105b611640565b60200101906001600160f81b031916908160001a90535060049490941c9361108281611be3565b9050611014565b50831561046d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610429565b600081815260018301602052604081205461111f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561038c565b50600061038c565b6000818152600183016020526040812054801561121057600061114b600183611850565b855490915060009061115f90600190611850565b90508181146111c457600086600001828154811061117f5761117f611640565b90600052602060002001549050808760000184815481106111a2576111a2611640565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806111d5576111d5611bfa565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061038c565b600091505061038c565b600080608083901c156112325760809290921c916010015b604083901c156112475760409290921c916008015b602083901c1561125c5760209290921c916004015b601083901c156112715760109290921c916002015b600883901c1561038c5760010192915050565b5080546000825560030290600052602060002090810190610adc91905b808211156112d65780546001600160a01b03191681556000600182018190556112cd60028301826112da565b506003016112a1565b5090565b5080546112e6906116b8565b6000825580601f106112f6575050565b601f016020900490600052602060002090810190610adc91905b808211156112d65760008155600101611310565b60006020828403121561133657600080fd5b81356001600160e01b03198116811461046d57600080fd5b60006020828403121561136057600080fd5b5035919050565b6001600160a01b0381168114610adc57600080fd5b6000806040838503121561138f57600080fd5b8235915060208301356113a181611367565b809150509250929050565b60008083601f8401126113be57600080fd5b50813567ffffffffffffffff8111156113d657600080fd5b6020830191508360208260051b85010111156113f157600080fd5b9250929050565b6000806020838503121561140b57600080fd5b823567ffffffffffffffff81111561142257600080fd5b61142e858286016113ac565b90969095509350505050565b6000806040838503121561144d57600080fd5b50508035926020909101359150565b60008060008060006060868803121561147457600080fd5b853561147f81611367565b9450602086013567ffffffffffffffff8082111561149c57600080fd5b6114a889838a016113ac565b909650945060408801359150808211156114c157600080fd5b506114ce888289016113ac565b969995985093965092949392505050565b600080600080606085870312156114f557600080fd5b84359350602085013561150781611367565b9250604085013567ffffffffffffffff8082111561152457600080fd5b818701915087601f83011261153857600080fd5b81358181111561154757600080fd5b88602082850101111561155957600080fd5b95989497505060200194505050565b60005b8381101561158357818101518382015260200161156b565b50506000910152565b600081518084526115a4816020860160208601611568565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561163257888303603f19018552815180516001600160a01b031684528781015188850152860151606087850181905261161e8186018361158c565b9689019694505050908601906001016115df565b509098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561166857600080fd5b813561046d81611367565b634e487b7160e01b600052601160045260246000fd5b60006001820161169b5761169b611673565b5060010190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806116cc57607f821691505b6020821081036116ec57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156103b857600081815260208120601f850160051c810160208610156117195750805b601f850160051c820191505b818110156105fd57828155600101611725565b67ffffffffffffffff831115611750576117506116a2565b6117648361175e83546116b8565b836116f2565b6000601f84116001811461179857600085156117805750838201355b600019600387901b1c1916600186901b1783556117f2565b600083815260209020601f19861690835b828110156117c957868501358255602094850194600190920191016117a9565b50868210156117e65760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038416815260406020820181905260009061184790830184866117f9565b95945050505050565b8181038181111561038c5761038c611673565b8082018082111561038c5761038c611673565b60008235605e1983360301811261188c57600080fd5b9190910192915050565b81356118a181611367565b81546001600160a01b0319166001600160a01b03919091161781556020828101356001838101919091559060028301604085013536869003601e190181126118e857600080fd5b8501803567ffffffffffffffff81111561190157600080fd5b803603848301131561191257600080fd5b6119268161192085546116b8565b856116f2565b6000601f82116001811461195c576000831561194457508382018601355b600019600385901b1c1916600184901b1785556119b5565b600085815260209020601f19841690835b8281101561198c5786850189013582559388019390890190880161196d565b50848210156119ab5760001960f88660031b161c198885880101351681555b50508683881b0185555b505050505050505050565b60208082528181018390526000906040808401600586901b8501820187855b8881101561163257878303603f190184528135368b9003605e19018112611a0557600080fd5b8a0160608135611a1481611367565b6001600160a01b0316855281880135888601528682013536839003601e19018112611a3e57600080fd5b90910187810191903567ffffffffffffffff811115611a5c57600080fd5b803603831315611a6b57600080fd5b8188870152611a7d82870182856117f9565b968901969550505091860191506001016119df565b808202811582820484141761038c5761038c611673565b600082611ac657634e487b7160e01b600052601260045260246000fd5b500490565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351611b1681602a850160208801611568565b660103b30b63ab2960cd1b602a918401918201528351611b3d816031840160208801611568565b01603101949350505050565b60208152600061046d602083018461158c565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611b94816017850160208801611568565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611bc5816028840160208801611568565b01602801949350505050565b6000825161188c818460208701611568565b600081611bf257611bf2611673565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212208d51978c729b6a9c0e0ecd5b61562f366dfd09974e656890ad9d58de84f6745264736f6c63430008150033", + "callValue": 0, + "chainId": 2020, + "constructorArgs": "0x", + "contractName": "RNSCommission", + "deployedBytecode": "0x6080604052600436106100ec5760003560e01c806391cbc73f1161008a578063c42ef38c11610059578063c42ef38c14610297578063ca15c873146102cb578063d547741f146102eb578063e92108b51461030b57600080fd5b806391cbc73f1461022257806391d14854146102425780639fd50e5814610262578063a217fddf1461028257600080fd5b806336568abe116100c657806336568abe146101945780634c255c97146101b45780635dc30fe5146101ca5780639010d07c146101ea57600080fd5b806301ffc9a714610100578063248a9ca3146101355780632f2ff15d1461017457600080fd5b366100fb576100f961032d565b005b600080fd5b34801561010c57600080fd5b5061012061011b366004611324565b610367565b60405190151581526020015b60405180910390f35b34801561014157600080fd5b5061016661015036600461134e565b6000908152600160208190526040909120015490565b60405190815260200161012c565b34801561018057600080fd5b506100f961018f36600461137c565b610392565b3480156101a057600080fd5b506100f96101af36600461137c565b6103bd565b3480156101c057600080fd5b5061016661271081565b3480156101d657600080fd5b506100f96101e53660046113f8565b610440565b3480156101f657600080fd5b5061020a61020536600461143a565b610455565b6040516001600160a01b03909116815260200161012c565b34801561022e57600080fd5b506100f961023d36600461145c565b610474565b34801561024e57600080fd5b5061012061025d36600461137c565b610605565b34801561026e57600080fd5b506100f961027d3660046114df565b610630565b34801561028e57600080fd5b50610166600081565b3480156102a357600080fd5b506101667f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf281565b3480156102d757600080fd5b506101666102e636600461134e565b61074e565b3480156102f757600080fd5b506100f961030636600461137c565b610765565b34801561031757600080fd5b5061032061078b565b60405161012c91906115b8565b6103577f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf233610605565b15610365576103653461089c565b565b60006001600160e01b03198216635a05180f60e01b148061038c575061038c82610a9d565b92915050565b600082815260016020819052604090912001546103ae81610ad2565b6103b88383610adf565b505050565b6001600160a01b03811633146104325760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61043c8282610b01565b5050565b600061044b81610ad2565b6103b88383610b23565b600082815260026020526040812061046d9083610ca6565b9392505050565b600054610100900460ff16158080156104945750600054600160ff909116105b806104ae5750303b1580156104ae575060005460ff166001145b6105115760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610429565b6000805460ff191660011790558015610534576000805461ff0019166101001790555b61053f600087610cb2565b8160005b818110156105ab5761059b7f76d12de99ad2ca162840505be9b657c2e7a650cc3ee0284048f3f9def3c1adf286868481811061058157610581611640565b90506020020160208101906105969190611656565b610cb2565b6105a481611689565b9050610543565b506105b68686610b23565b5080156105fd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061063b81610ad2565b603554851061065d57604051634ec4810560e11b815260040160405180910390fd5b6001600160a01b0384166106845760405163e99d5ac560e01b815260040160405180910390fd5b836035868154811061069857610698611640565b906000526020600020906003020160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508282603587815481106106e2576106e2611640565b90600052602060002090600302016002019182610700929190611738565b5084336001600160a01b03167faa3076bb2e00a425a96ce6aa8762a984fe8ed14922e3fba98cfa90683cb05ff886868660405161073f93929190611822565b60405180910390a35050505050565b600081815260026020526040812061038c90610cbc565b6000828152600160208190526040909120015461078181610ad2565b6103b88383610b01565b60606035805480602002602001604051908101604052809291908181526020016000905b82821015610893576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191610802906116b8565b80601f016020809104026020016040519081016040528092919081815260200182805461082e906116b8565b801561087b5780601f106108505761010080835404028352916020019161087b565b820191906000526020600020905b81548152906001019060200180831161085e57829003601f168201915b505050505081525050815260200190600101906107af565b50505050905090565b806000036108bd576040516370bf851360e11b815260040160405180910390fd5b60355460008190036108e257604051634ec4810560e11b815260040160405180910390fd5b60006108ef600183611850565b90506000805b828110156109e457600061092d866035848154811061091657610916611640565b906000526020600020906003020160010154610cc6565b90506109398184611863565b92506109716035838154811061095157610951611640565b60009182526020909120600390910201546001600160a01b031682610cdf565b6035828154811061098457610984611640565b6000918252602091829020600390910201546040518381526001600160a01b03909116917fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af910160405180910390a2506109dd81611689565b90506108f5565b5083811015610a9757610a2c60358381548110610a0357610a03611640565b60009182526020909120600390910201546001600160a01b0316610a278387611850565b610cdf565b60358281548110610a3f57610a3f611640565b60009182526020909120600390910201546001600160a01b03167fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af610a848387611850565b6040519081526020015b60405180910390a25b50505050565b60006001600160e01b03198216637965db0b60e01b148061038c57506301ffc9a760e01b6001600160e01b031983161461038c565b610adc8133610d44565b50565b610ae98282610d77565b60008281526002602052604090206103b89082610de2565b610b0b8282610df7565b60008281526002602052604090206103b89082610e5e565b806000819003610b4657604051634ec4810560e11b815260040160405180910390fd5b610b5260356000611284565b6000805b82811015610c48576000858583818110610b7257610b72611640565b9050602002810190610b849190611876565b610b92906020810190611656565b6001600160a01b031603610bb95760405163e99d5ac560e01b815260040160405180910390fd5b848482818110610bcb57610bcb611640565b9050602002810190610bdd9190611876565b610beb906020013583611863565b91506035858583818110610c0157610c01611640565b9050602002810190610c139190611876565b815460018101835560009283526020909220909160030201610c358282611896565b505080610c4190611689565b9050610b56565b506127108114610c6b5760405163648564d360e01b815260040160405180910390fd5b336001600160a01b03167f28d7f0d68cf2a192abb8ce94479d236f99759d18e31ee7cbfb0a473764374c008585604051610a8e9291906119c0565b600061046d8383610e73565b61043c8282610adf565b600061038c825490565b6000612710610cd58385611a92565b61046d9190611aa9565b6000610ceb8383610e9d565b9050806103b857610d04836001600160a01b0316610f13565b610d0d83610f29565b604051602001610d1e929190611acb565b60408051601f198184030181529082905262461bcd60e51b825261042991600401611b49565b610d4e8282610605565b61043c57610d5b81610f13565b610d66836020610f3c565b604051602001610d1e929190611b5c565b610d818282610605565b61043c5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600061046d836001600160a01b0384166110d8565b610e018282610605565b1561043c5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061046d836001600160a01b038416611127565b6000826000018281548110610e8a57610e8a611640565b9060005260206000200154905092915050565b604080516000808252602082019092526001600160a01b038416908390604051610ec79190611bd1565b60006040518083038185875af1925050503d8060008114610f04576040519150601f19603f3d011682016040523d82523d6000602084013e610f09565b606091505b5090949350505050565b606061038c6001600160a01b0383166014610f3c565b606061038c82610f388461121a565b6001015b60606000610f4b836002611a92565b610f56906002611863565b67ffffffffffffffff811115610f6e57610f6e6116a2565b6040519080825280601f01601f191660200182016040528015610f98576020820181803683370190505b509050600360fc1b81600081518110610fb357610fb3611640565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610fe257610fe2611640565b60200101906001600160f81b031916908160001a9053506000611006846002611a92565b611011906001611863565b90505b6001811115611089576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061104557611045611640565b1a60f81b82828151811061105b5761105b611640565b60200101906001600160f81b031916908160001a90535060049490941c9361108281611be3565b9050611014565b50831561046d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610429565b600081815260018301602052604081205461111f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561038c565b50600061038c565b6000818152600183016020526040812054801561121057600061114b600183611850565b855490915060009061115f90600190611850565b90508181146111c457600086600001828154811061117f5761117f611640565b90600052602060002001549050808760000184815481106111a2576111a2611640565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806111d5576111d5611bfa565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061038c565b600091505061038c565b600080608083901c156112325760809290921c916010015b604083901c156112475760409290921c916008015b602083901c1561125c5760209290921c916004015b601083901c156112715760109290921c916002015b600883901c1561038c5760010192915050565b5080546000825560030290600052602060002090810190610adc91905b808211156112d65780546001600160a01b03191681556000600182018190556112cd60028301826112da565b506003016112a1565b5090565b5080546112e6906116b8565b6000825580601f106112f6575050565b601f016020900490600052602060002090810190610adc91905b808211156112d65760008155600101611310565b60006020828403121561133657600080fd5b81356001600160e01b03198116811461046d57600080fd5b60006020828403121561136057600080fd5b5035919050565b6001600160a01b0381168114610adc57600080fd5b6000806040838503121561138f57600080fd5b8235915060208301356113a181611367565b809150509250929050565b60008083601f8401126113be57600080fd5b50813567ffffffffffffffff8111156113d657600080fd5b6020830191508360208260051b85010111156113f157600080fd5b9250929050565b6000806020838503121561140b57600080fd5b823567ffffffffffffffff81111561142257600080fd5b61142e858286016113ac565b90969095509350505050565b6000806040838503121561144d57600080fd5b50508035926020909101359150565b60008060008060006060868803121561147457600080fd5b853561147f81611367565b9450602086013567ffffffffffffffff8082111561149c57600080fd5b6114a889838a016113ac565b909650945060408801359150808211156114c157600080fd5b506114ce888289016113ac565b969995985093965092949392505050565b600080600080606085870312156114f557600080fd5b84359350602085013561150781611367565b9250604085013567ffffffffffffffff8082111561152457600080fd5b818701915087601f83011261153857600080fd5b81358181111561154757600080fd5b88602082850101111561155957600080fd5b95989497505060200194505050565b60005b8381101561158357818101518382015260200161156b565b50506000910152565b600081518084526115a4816020860160208601611568565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561163257888303603f19018552815180516001600160a01b031684528781015188850152860151606087850181905261161e8186018361158c565b9689019694505050908601906001016115df565b509098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561166857600080fd5b813561046d81611367565b634e487b7160e01b600052601160045260246000fd5b60006001820161169b5761169b611673565b5060010190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806116cc57607f821691505b6020821081036116ec57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156103b857600081815260208120601f850160051c810160208610156117195750805b601f850160051c820191505b818110156105fd57828155600101611725565b67ffffffffffffffff831115611750576117506116a2565b6117648361175e83546116b8565b836116f2565b6000601f84116001811461179857600085156117805750838201355b600019600387901b1c1916600186901b1783556117f2565b600083815260209020601f19861690835b828110156117c957868501358255602094850194600190920191016117a9565b50868210156117e65760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038416815260406020820181905260009061184790830184866117f9565b95945050505050565b8181038181111561038c5761038c611673565b8082018082111561038c5761038c611673565b60008235605e1983360301811261188c57600080fd5b9190910192915050565b81356118a181611367565b81546001600160a01b0319166001600160a01b03919091161781556020828101356001838101919091559060028301604085013536869003601e190181126118e857600080fd5b8501803567ffffffffffffffff81111561190157600080fd5b803603848301131561191257600080fd5b6119268161192085546116b8565b856116f2565b6000601f82116001811461195c576000831561194457508382018601355b600019600385901b1c1916600184901b1785556119b5565b600085815260209020601f19841690835b8281101561198c5786850189013582559388019390890190880161196d565b50848210156119ab5760001960f88660031b161c198885880101351681555b50508683881b0185555b505050505050505050565b60208082528181018390526000906040808401600586901b8501820187855b8881101561163257878303603f190184528135368b9003605e19018112611a0557600080fd5b8a0160608135611a1481611367565b6001600160a01b0316855281880135888601528682013536839003601e19018112611a3e57600080fd5b90910187810191903567ffffffffffffffff811115611a5c57600080fd5b803603831315611a6b57600080fd5b8188870152611a7d82870182856117f9565b968901969550505091860191506001016119df565b808202811582820484141761038c5761038c611673565b600082611ac657634e487b7160e01b600052601260045260246000fd5b500490565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351611b1681602a850160208801611568565b660103b30b63ab2960cd1b602a918401918201528351611b3d816031840160208801611568565b01603101949350505050565b60208152600061046d602083018461158c565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611b94816017850160208801611568565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611bc5816028840160208801611568565b01602801949350505050565b6000825161188c818460208701611568565b600081611bf257611bf2611673565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212208d51978c729b6a9c0e0ecd5b61562f366dfd09974e656890ad9d58de84f6745264736f6c63430008150033", + "deployer": "0x4d58Ea7231c394d5804e8B06B1365915f906E27F", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "getCommissions()": { + "details": "Returns commissions information." + }, + "getRoleAdmin(bytes32)": { + "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + }, + "getRoleMember(bytes32,uint256)": { + "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information." + }, + "getRoleMemberCount(bytes32)": { + "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role." + }, + "grantRole(bytes32,address)": { + "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + }, + "hasRole(bytes32,address)": { + "details": "Returns `true` if `account` has been granted `role`." + }, + "renounceRole(bytes32,address)": { + "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + }, + "revokeRole(bytes32,address)": { + "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + }, + "setCommissionInfo(uint256,address,string)": { + "details": "Sets for specific commission information based on the `commissionIdx`. Requirements: - The method caller is setter role. Emits the event `CommissionInfoUpdated`." + }, + "setCommissions((address,uint256,string)[])": { + "details": "Sets all commission information Requirements: - The method caller is setter role. - The total ratio must be equal to 100%. Emits the event `CommissionsUpdated`." + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + } + }, + "events": { + "CommissionInfoUpdated(address,uint256,address,string)": { + "details": "Emitted when specific commission info is updated." + }, + "CommissionsUpdated(address,(address,uint256,string)[])": { + "details": "Emitted when all the commission info is updated." + }, + "Distributed(address,uint256)": { + "details": "Emitted when transfer RON to commission's recipient." + }, + "Initialized(uint8)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "RoleAdminChanged(bytes32,bytes32,bytes32)": { + "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + }, + "RoleGranted(bytes32,address,address)": { + "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + }, + "RoleRevoked(bytes32,address,address)": { + "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + } + }, + "errors": { + "InvalidAmountOfRON()": [ + { + "details": "Revert when amount of RON is invalid" + } + ], + "InvalidArrayLength()": [ + { + "details": "Revert when index is out of range" + } + ], + "InvalidRatio()": [ + { + "details": "Revert when ratio is invalid" + } + ], + "NullAddress()": [ + { + "details": "Revert when recipient address is null" + } + ] + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidAmountOfRON\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NullAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"updatedBy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"commissionIdx\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"newRecipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newName\",\"type\":\"string\"}],\"name\":\"CommissionInfoUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"updatedBy\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"indexed\":false,\"internalType\":\"struct INSCommission.Commission[]\",\"name\":\"commissionInfos\",\"type\":\"tuple[]\"}],\"name\":\"CommissionsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"commissionAmount\",\"type\":\"uint256\"}],\"name\":\"Distributed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SENDER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommissions\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"struct INSCommission.Commission[]\",\"name\":\"commissionInfos\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"admin\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"struct INSCommission.Commission[]\",\"name\":\"commissionInfos\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"allowedSenders\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"uint256\",\"name\":\"commissionIdx\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"newRecipient\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"newName\",\"type\":\"string\"}],\"name\":\"setCommissionInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"struct INSCommission.Commission[]\",\"name\":\"commissionInfos\",\"type\":\"tuple[]\"}],\"name\":\"setCommissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"InvalidAmountOfRON()\":[{\"details\":\"Revert when amount of RON is invalid\"}],\"InvalidArrayLength()\":[{\"details\":\"Revert when index is out of range\"}],\"InvalidRatio()\":[{\"details\":\"Revert when ratio is invalid\"}],\"NullAddress()\":[{\"details\":\"Revert when recipient address is null\"}]},\"events\":{\"CommissionInfoUpdated(address,uint256,address,string)\":{\"details\":\"Emitted when specific commission info is updated.\"},\"CommissionsUpdated(address,(address,uint256,string)[])\":{\"details\":\"Emitted when all the commission info is updated.\"},\"Distributed(address,uint256)\":{\"details\":\"Emitted when transfer RON to commission's recipient.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"getCommissions()\":{\"details\":\"Returns commissions information.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setCommissionInfo(uint256,address,string)\":{\"details\":\"Sets for specific commission information based on the `commissionIdx`. Requirements: - The method caller is setter role. Emits the event `CommissionInfoUpdated`.\"},\"setCommissions((address,uint256,string)[])\":{\"details\":\"Sets all commission information Requirements: - The method caller is setter role. - The total ratio must be equal to 100%. Emits the event `CommissionsUpdated`.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"stateVariables\":{\"MAX_PERCENTAGE\":{\"details\":\"Constant representing the maximum percentage value (100%).\"},\"SENDER_ROLE\":{\"details\":\"Role for accounts that can send RON for this contract.\"},\"____gap\":{\"details\":\"Gap for upgradeability.\"},\"_commissionInfos\":{\"details\":\"Array of `Commission` structs that store commissions information.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/RNSCommission.sol\":\"RNSCommission\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@fdk-0.3.0-beta/=dependencies/@fdk-0.3.0-beta/\",\":@fdk/=dependencies/@fdk-0.3.0-beta/script/\",\":@openzeppelin-contracts-4.9.3/=dependencies/@openzeppelin-contracts-4.9.3/\",\":@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-4.9.3/\",\":@pythnetwork-pyth-sdk-solidity-2.2.0/=dependencies/@pythnetwork-pyth-sdk-solidity-2.2.0/\",\":@pythnetwork/=dependencies/@pythnetwork-pyth-sdk-solidity-2.2.0/\",\":@rns-contracts/=src/\",\":@solady/=dependencies/@fdk-0.3.0-beta/dependencies/solady-0.0.206/src/\",\":buffer/=lib/buffer/contracts/\",\":contract-libs/=lib/contract-libs/src/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=dependencies/@fdk-0.3.0-beta/dependencies/forge-std-1.8.2/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-4.9.3/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```solidity\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```solidity\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\\n * to enforce additional security measures for this role.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0dd6e52cb394d7f5abe5dca2d4908a6be40417914720932de757de34a99ab87f\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/access/AccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControlEnumerable.sol\\\";\\nimport \\\"./AccessControl.sol\\\";\\nimport \\\"../utils/structs/EnumerableSet.sol\\\";\\n\\n/**\\n * @dev Extension of {AccessControl} that allows enumerating the members of each role.\\n */\\nabstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {\\n using EnumerableSet for EnumerableSet.AddressSet;\\n\\n mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) public view virtual override returns (address) {\\n return _roleMembers[role].at(index);\\n }\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) public view virtual override returns (uint256) {\\n return _roleMembers[role].length();\\n }\\n\\n /**\\n * @dev Overload {_grantRole} to track enumerable memberships\\n */\\n function _grantRole(bytes32 role, address account) internal virtual override {\\n super._grantRole(role, account);\\n _roleMembers[role].add(account);\\n }\\n\\n /**\\n * @dev Overload {_revokeRole} to track enumerable memberships\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual override {\\n super._revokeRole(role, account);\\n _roleMembers[role].remove(account);\\n }\\n}\\n\",\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toString(int256 value) internal pure returns (string memory) {\\n return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)\\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```solidity\\n * contract Example {\\n * // Add the library methods\\n * using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n * // Declare a set state variable\\n * EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n *\\n * [WARNING]\\n * ====\\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\\n * unusable.\\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\\n *\\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\\n * array of EnumerableSet.\\n * ====\\n */\\nlibrary EnumerableSet {\\n // To implement this library for multiple types with as little code\\n // repetition as possible, we write it in terms of a generic Set type with\\n // bytes32 values.\\n // The Set implementation uses private functions, and user-facing\\n // implementations (such as AddressSet) are just wrappers around the\\n // underlying Set.\\n // This means that we can only create new EnumerableSets for types that fit\\n // in bytes32.\\n\\n struct Set {\\n // Storage of set values\\n bytes32[] _values;\\n // Position of the value in the `values` array, plus 1 because index 0\\n // means a value is not in the set.\\n mapping(bytes32 => uint256) _indexes;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function _add(Set storage set, bytes32 value) private returns (bool) {\\n if (!_contains(set, value)) {\\n set._values.push(value);\\n // The value is stored at length-1, but we add 1 to all indexes\\n // and use 0 as a sentinel value\\n set._indexes[value] = set._values.length;\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function _remove(Set storage set, bytes32 value) private returns (bool) {\\n // We read and store the value's index to prevent multiple reads from the same storage slot\\n uint256 valueIndex = set._indexes[value];\\n\\n if (valueIndex != 0) {\\n // Equivalent to contains(set, value)\\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n // the array, and then remove the last element (sometimes called as 'swap and pop').\\n // This modifies the order of the array, as noted in {at}.\\n\\n uint256 toDeleteIndex = valueIndex - 1;\\n uint256 lastIndex = set._values.length - 1;\\n\\n if (lastIndex != toDeleteIndex) {\\n bytes32 lastValue = set._values[lastIndex];\\n\\n // Move the last value to the index where the value to delete is\\n set._values[toDeleteIndex] = lastValue;\\n // Update the index for the moved value\\n set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex\\n }\\n\\n // Delete the slot where the moved value was stored\\n set._values.pop();\\n\\n // Delete the index for the deleted slot\\n delete set._indexes[value];\\n\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n return set._indexes[value] != 0;\\n }\\n\\n /**\\n * @dev Returns the number of values on the set. O(1).\\n */\\n function _length(Set storage set) private view returns (uint256) {\\n return set._values.length;\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n return set._values[index];\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function _values(Set storage set) private view returns (bytes32[] memory) {\\n return set._values;\\n }\\n\\n // Bytes32Set\\n\\n struct Bytes32Set {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _add(set._inner, value);\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _remove(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n return _contains(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(Bytes32Set storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n return _at(set._inner, index);\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n bytes32[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // AddressSet\\n\\n struct AddressSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(AddressSet storage set, address value) internal returns (bool) {\\n return _add(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(AddressSet storage set, address value) internal returns (bool) {\\n return _remove(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(AddressSet storage set, address value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(AddressSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n return address(uint160(uint256(_at(set._inner, index))));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(AddressSet storage set) internal view returns (address[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n address[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // UintSet\\n\\n struct UintSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(UintSet storage set, uint256 value) internal returns (bool) {\\n return _add(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n return _remove(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(UintSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n return uint256(_at(set._inner, index));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(UintSet storage set) internal view returns (uint256[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n uint256[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\"},\"src/RNSCommission.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Initializable } from \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport { AccessControlEnumerable } from \\\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\\\";\\nimport { INSCommission } from \\\"./interfaces/INSCommission.sol\\\";\\nimport { RONTransferHelper } from \\\"./libraries/transfers/RONTransferHelper.sol\\\";\\n\\ncontract RNSCommission is Initializable, AccessControlEnumerable, INSCommission {\\n /// @dev Constant representing the maximum percentage value (100%).\\n uint256 public constant MAX_PERCENTAGE = 100_00;\\n /// @dev Role for accounts that can send RON for this contract.\\n bytes32 public constant SENDER_ROLE = keccak256(\\\"SENDER_ROLE\\\");\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n /// @dev Array of `Commission` structs that store commissions information.\\n Commission[] internal _commissionInfos;\\n\\n constructor() {\\n _disableInitializers();\\n }\\n\\n receive() external payable {\\n _fallback();\\n }\\n\\n function initialize(address admin, Commission[] calldata commissionInfos, address[] calldata allowedSenders)\\n external\\n initializer\\n {\\n _setupRole(DEFAULT_ADMIN_ROLE, admin);\\n\\n uint256 length = allowedSenders.length;\\n for (uint256 i; i < length; ++i) {\\n _setupRole(SENDER_ROLE, allowedSenders[i]);\\n }\\n\\n _setCommissions(commissionInfos);\\n }\\n\\n /// @inheritdoc INSCommission\\n function getCommissions() external view returns (Commission[] memory commissionInfos) {\\n return _commissionInfos;\\n }\\n\\n /// @inheritdoc INSCommission\\n function setCommissions(Commission[] calldata commissionInfos) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setCommissions(commissionInfos);\\n }\\n\\n /// @inheritdoc INSCommission\\n function setCommissionInfo(uint256 commissionIdx, address payable newRecipient, string calldata newName)\\n external\\n onlyRole(DEFAULT_ADMIN_ROLE)\\n {\\n if (commissionIdx >= _commissionInfos.length) revert InvalidArrayLength();\\n // TODO: should fix to not duplicate logic in set commision info\\n if (newRecipient == address(0)) revert NullAddress();\\n\\n _commissionInfos[commissionIdx].recipient = newRecipient;\\n _commissionInfos[commissionIdx].name = newName;\\n emit CommissionInfoUpdated(msg.sender, commissionIdx, newRecipient, newName);\\n }\\n\\n /**\\n * @dev Helper method to allocate commission and take fee into recipient address.\\n */\\n function _allocateCommissionAndTransferToRecipient(uint256 ronAmount) internal {\\n if (ronAmount == 0) revert InvalidAmountOfRON();\\n\\n uint256 length = _commissionInfos.length;\\n if (length == 0) revert InvalidArrayLength();\\n\\n uint256 lastIdx = length - 1;\\n uint256 sumValue;\\n\\n for (uint256 i; i < lastIdx; ++i) {\\n uint256 commissionAmount = _computePercentage(ronAmount, _commissionInfos[i].ratio);\\n sumValue += commissionAmount;\\n\\n RONTransferHelper.safeTransfer(_commissionInfos[i].recipient, commissionAmount);\\n emit Distributed(_commissionInfos[i].recipient, commissionAmount);\\n }\\n\\n // This code send the remaining RON to the last recipient.\\n if (sumValue < ronAmount) {\\n RONTransferHelper.safeTransfer(_commissionInfos[lastIdx].recipient, ronAmount - sumValue);\\n emit Distributed(_commissionInfos[lastIdx].recipient, ronAmount - sumValue);\\n }\\n }\\n\\n function _setCommissions(Commission[] calldata commissionInfos) internal {\\n uint256 length = commissionInfos.length;\\n // commissionInfos[] can not be empty\\n if (length == 0) revert InvalidArrayLength();\\n\\n delete _commissionInfos;\\n\\n uint256 sum;\\n\\n for (uint256 i; i < length; ++i) {\\n if (commissionInfos[i].recipient == address(0)) revert NullAddress();\\n\\n sum += commissionInfos[i].ratio;\\n _commissionInfos.push(commissionInfos[i]);\\n }\\n\\n if (sum != MAX_PERCENTAGE) revert InvalidRatio();\\n\\n emit CommissionsUpdated(msg.sender, commissionInfos);\\n }\\n\\n // Calculate amount of money based on commission's ratio\\n function _computePercentage(uint256 value, uint256 percentage) internal pure virtual returns (uint256) {\\n return (value * percentage) / MAX_PERCENTAGE;\\n }\\n\\n function _fallback() internal {\\n if (hasRole(SENDER_ROLE, msg.sender)) {\\n _allocateCommissionAndTransferToRecipient(msg.value);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xef2dc31d9a58007dc0a12cb027d4981bf57b5d0a0c465fbb511afe64cb64640c\",\"license\":\"MIT\"},\"src/interfaces/INSCommission.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ninterface INSCommission {\\n struct Commission {\\n address payable recipient;\\n uint256 ratio; // Values [0; 100_00] reflexes [0; 100%]\\n string name; // Commission's name\\n }\\n\\n /// @dev Emitted when all the commission info is updated.\\n event CommissionsUpdated(address indexed updatedBy, Commission[] commissionInfos);\\n /// @dev Emitted when specific commission info is updated.\\n event CommissionInfoUpdated(\\n address indexed updatedBy, uint256 indexed commissionIdx, address payable newRecipient, string newName\\n );\\n /// @dev Emitted when transfer RON to commission's recipient.\\n event Distributed(address indexed recipient, uint256 commissionAmount);\\n\\n /// @dev Revert when index is out of range\\n error InvalidArrayLength();\\n /// @dev Revert when ratio is invalid\\n error InvalidRatio();\\n /// @dev Revert when amount of RON is invalid\\n error InvalidAmountOfRON();\\n /// @dev Revert when recipient address is null\\n error NullAddress();\\n\\n /**\\n * @dev Maximum commission percentage.\\n */\\n function MAX_PERCENTAGE() external pure returns (uint256);\\n\\n /**\\n * @dev Returns the sender role.\\n */\\n function SENDER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns commissions information.\\n */\\n function getCommissions() external view returns (Commission[] memory commissionInfos);\\n\\n /**\\n * @dev Sets all commission information\\n *\\n * Requirements:\\n * - The method caller is setter role.\\n * - The total ratio must be equal to 100%.\\n * Emits the event `CommissionsUpdated`.\\n */\\n function setCommissions(Commission[] calldata commissionInfos) external;\\n\\n /**\\n * @dev Sets for specific commission information based on the `commissionIdx`.\\n *\\n * Requirements:\\n * - The method caller is setter role.\\n * Emits the event `CommissionInfoUpdated`.\\n */\\n function setCommissionInfo(uint256 commissionIdx, address payable newAddr, string calldata name) external;\\n}\\n\",\"keccak256\":\"0xb2c57076aabd1b2a189be0f936d9945fdce20e86f9698688af07e0abafd712f2\",\"license\":\"MIT\"},\"src/libraries/transfers/RONTransferHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Strings } from \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\n\\n/**\\n * @title RONTransferHelper\\n */\\nlibrary RONTransferHelper {\\n using Strings for *;\\n\\n /**\\n * @dev Transfers RON and wraps result for the method caller to a recipient.\\n */\\n function safeTransfer(address payable _to, uint256 _value) internal {\\n bool _success = send(_to, _value);\\n if (!_success) {\\n revert(\\n string.concat(\\\"TransferHelper: could not transfer RON to \\\", _to.toHexString(), \\\" value \\\", _value.toHexString())\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns whether the call was success.\\n * Note: this function should use with the `ReentrancyGuard`.\\n */\\n function send(address payable _to, uint256 _value) internal returns (bool _success) {\\n (_success,) = _to.call{ value: _value }(new bytes(0));\\n }\\n}\\n\",\"keccak256\":\"0x733e60374ee0a33d0da2ee24976b893ca6b6d9764243b175e1ac8025240394da\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 196, + "storageLayout": { + "storage": [ + { + "astId": 60342, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 60345, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 58815, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "_roles", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_struct(RoleData)58810_storage)" + }, + { + "astId": 59125, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "_roleMembers", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)64694_storage)" + }, + { + "astId": 79107, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "____gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 79112, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "_commissionInfos", + "offset": 0, + "slot": "53", + "type": "t_array(t_struct(Commission)84580_storage)dyn_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32", + "base": "t_bytes32" + }, + "t_array(t_struct(Commission)84580_storage)dyn_storage": { + "encoding": "dynamic_array", + "label": "struct INSCommission.Commission[]", + "numberOfBytes": "32", + "base": "t_struct(Commission)84580_storage" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)64694_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct EnumerableSet.AddressSet)", + "numberOfBytes": "32", + "value": "t_struct(AddressSet)64694_storage" + }, + "t_mapping(t_bytes32,t_struct(RoleData)58810_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct AccessControl.RoleData)", + "numberOfBytes": "32", + "value": "t_struct(RoleData)58810_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)64694_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.AddressSet", + "numberOfBytes": "64", + "members": [ + { + "astId": 64693, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "_inner", + "offset": 0, + "slot": "0", + "type": "t_struct(Set)64379_storage" + } + ] + }, + "t_struct(Commission)84580_storage": { + "encoding": "inplace", + "label": "struct INSCommission.Commission", + "numberOfBytes": "96", + "members": [ + { + "astId": 84575, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "recipient", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 84577, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "ratio", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 84579, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "name", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ] + }, + "t_struct(RoleData)58810_storage": { + "encoding": "inplace", + "label": "struct AccessControl.RoleData", + "numberOfBytes": "64", + "members": [ + { + "astId": 58807, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "members", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 58809, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "adminRole", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ] + }, + "t_struct(Set)64379_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.Set", + "numberOfBytes": "64", + "members": [ + { + "astId": 64374, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "_values", + "offset": 0, + "slot": "0", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "astId": 64378, + "contract": "src/RNSCommission.sol:RNSCommission", + "label": "_indexes", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "timestamp": 1720084974, + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/ronin-mainnet/RNSCommissionProxy.json b/deployments/ronin-mainnet/RNSCommissionProxy.json new file mode 100644 index 0000000..4209f1d --- /dev/null +++ b/deployments/ronin-mainnet/RNSCommissionProxy.json @@ -0,0 +1,128 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "logic", + "type": "address", + "internalType": "address" + }, + { + "name": "admin", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "AdminChanged", + "inputs": [ + { + "name": "previousAdmin", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newAdmin", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BeaconUpgraded", + "inputs": [ + { + "name": "beacon", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "absolutePath": "TransparentProxyOZv4_9_5.sol:TransparentProxyOZv4_9_5", + "address": "0x1Bece3A948c14EeFBAACE67Fe6f51Cd21b79aA21", + "ast": "", + "blockNumber": 36083767, + "bytecode": "0x608060405260405162000e4038038062000e4083398101604081905262000026916200042a565b8282828281620000398282600062000053565b506200004790508262000085565b5050505050506200055d565b6200005e83620000f7565b6000825111806200006c5750805b1562000080576200007e838362000139565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c760008051602062000df9833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000f48162000168565b50565b620001028162000206565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606062000161838360405180606001604052806027815260200162000e19602791396200029d565b9392505050565b6001600160a01b038116620001d35760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df98339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b620002755760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001ca565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001e5565b6060600080856001600160a01b031685604051620002bc91906200050a565b600060405180830381855af49150503d8060008114620002f9576040519150601f19603f3d011682016040523d82523d6000602084013e620002fe565b606091505b50909250905062000312868383876200031c565b9695505050505050565b606083156200039057825160000362000388576001600160a01b0385163b620003885760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001ca565b50816200039c565b6200039c8383620003a4565b949350505050565b815115620003b55781518083602001fd5b8060405162461bcd60e51b8152600401620001ca919062000528565b80516001600160a01b0381168114620003e957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200042157818101518382015260200162000407565b50506000910152565b6000806000606084860312156200044057600080fd5b6200044b84620003d1565b92506200045b60208501620003d1565b60408501519092506001600160401b03808211156200047957600080fd5b818601915086601f8301126200048e57600080fd5b815181811115620004a357620004a3620003ee565b604051601f8201601f19908116603f01168101908382118183101715620004ce57620004ce620003ee565b81604052828152896020848701011115620004e857600080fd5b620004fb83602083016020880162000404565b80955050505050509250925092565b600082516200051e81846020870162000404565b9190910192915050565b60208152600082518060208401526200054981604085016020870162000404565b601f01601f19169190910160400192915050565b61088c806200056d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a207c78ed3af0a4f57ce2b6c2fd644d6f8debc43e54eebfade2164eaf01f76a464736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "callValue": 0, + "chainId": 2020, + "constructorArgs": "0x00000000000000000000000070d1a6f75161e8d5de10e4aaa82aa1b423b4362a000000000000000000000000a3e7d085e65cb0b916f6717da876b7be5cc92f030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000026491cbc73f0000000000000000000000009d05d1f5b0424f8fde534bc196ffb6dd211d902a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ff43f5ef28ecb7c1f219751fc793deb40ef07a530000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000009536b79204d61766973000000000000000000000000000000000000000000000000000000000000000000000022cefc91e9b7c0f3890ebf9527ea89053490694e0000000000000000000000000000000000000000000000000000000000000bb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005526f6e696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d55e6d80aea1ff4650bc952c1653ab3cf1b940a9000000000000000000000000662852853614cbbb5d04bf2e29955b97e3c50b6900000000000000000000000000000000000000000000000000000000", + "contractName": "TransparentProxyOZv4_9_5", + "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a207c78ed3af0a4f57ce2b6c2fd644d6f8debc43e54eebfade2164eaf01f76a464736f6c63430008150033", + "deployer": "0x4d58Ea7231c394d5804e8B06B1365915f906E27F", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "A contract that acts as a proxy for transparent upgrades.", + "methods": { + "constructor": { + "details": "Initializes the Proxy contract.", + "params": { + "admin": "The address of the admin contract.", + "data": "The initialization data.", + "logic": "The address of the logic contract." + } + } + }, + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is changed." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "title": "TransparentProxyOZv4_9_5" + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"A contract that acts as a proxy for transparent upgrades.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the Proxy contract.\",\"params\":{\"admin\":\"The address of the admin contract.\",\"data\":\"The initialization data.\",\"logic\":\"The address of the logic contract.\"}}},\"title\":\"TransparentProxyOZv4_9_5\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"dependencies/@fdk-0.3.0-beta/src/TransparentProxyOZv4_9_5.sol\":\"TransparentProxyOZv4_9_5\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@fdk-0.3.0-beta/=dependencies/@fdk-0.3.0-beta/\",\":@fdk/=dependencies/@fdk-0.3.0-beta/script/\",\":@openzeppelin-contracts-4.9.3/=dependencies/@openzeppelin-contracts-4.9.3/\",\":@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-4.9.3/\",\":@pythnetwork-pyth-sdk-solidity-2.2.0/=dependencies/@pythnetwork-pyth-sdk-solidity-2.2.0/\",\":@pythnetwork/=dependencies/@pythnetwork-pyth-sdk-solidity-2.2.0/\",\":@rns-contracts/=src/\",\":@solady/=dependencies/@fdk-0.3.0-beta/dependencies/solady-0.0.206/src/\",\":buffer/=lib/buffer/contracts/\",\":contract-libs/=lib/contract-libs/src/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=dependencies/@fdk-0.3.0-beta/dependencies/forge-std-1.8.2/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/\"]},\"sources\":{\"dependencies/@fdk-0.3.0-beta/dependencies/@openzeppelin-contracts-4.9.3/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Emitted when the beacon is changed.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"dependencies/@fdk-0.3.0-beta/dependencies/@openzeppelin-contracts-4.9.3/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"dependencies/@fdk-0.3.0-beta/dependencies/@openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"dependencies/@fdk-0.3.0-beta/dependencies/@openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"dependencies/@fdk-0.3.0-beta/dependencies/@openzeppelin-contracts-4.9.3/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"dependencies/@fdk-0.3.0-beta/dependencies/@openzeppelin-contracts-4.9.3/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"dependencies/@fdk-0.3.0-beta/dependencies/@openzeppelin-contracts-4.9.3/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\\n * does not implement this interface directly, and some of its functions are implemented by an internal dispatch\\n * mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\\n * include them in the ABI so this interface must be used to interact with it.\\n */\\ninterface ITransparentUpgradeableProxy is IERC1967 {\\n function admin() external view returns (address);\\n\\n function implementation() external view returns (address);\\n\\n function changeAdmin(address) external;\\n\\n function upgradeTo(address) external;\\n\\n function upgradeToAndCall(address, bytes memory) external payable;\\n}\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n *\\n * NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\\n * inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch\\n * mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\\n * fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\\n * implementation.\\n *\\n * WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler\\n * will not check that there are no selector conflicts, due to the note above. A selector clash between any new function\\n * and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could\\n * render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n *\\n * CAUTION: This modifier is deprecated, as it could cause issues if the modified function has arguments, and the\\n * implementation provides a function with the same selector.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior\\n */\\n function _fallback() internal virtual override {\\n if (msg.sender == _getAdmin()) {\\n bytes memory ret;\\n bytes4 selector = msg.sig;\\n if (selector == ITransparentUpgradeableProxy.upgradeTo.selector) {\\n ret = _dispatchUpgradeTo();\\n } else if (selector == ITransparentUpgradeableProxy.upgradeToAndCall.selector) {\\n ret = _dispatchUpgradeToAndCall();\\n } else if (selector == ITransparentUpgradeableProxy.changeAdmin.selector) {\\n ret = _dispatchChangeAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.admin.selector) {\\n ret = _dispatchAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.implementation.selector) {\\n ret = _dispatchImplementation();\\n } else {\\n revert(\\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n }\\n assembly {\\n return(add(ret, 0x20), mload(ret))\\n }\\n } else {\\n super._fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function _dispatchAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address admin = _getAdmin();\\n return abi.encode(admin);\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function _dispatchImplementation() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address implementation = _implementation();\\n return abi.encode(implementation);\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _dispatchChangeAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newAdmin = abi.decode(msg.data[4:], (address));\\n _changeAdmin(newAdmin);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n */\\n function _dispatchUpgradeTo() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newImplementation = abi.decode(msg.data[4:], (address));\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n */\\n function _dispatchUpgradeToAndCall() private returns (bytes memory) {\\n (address newImplementation, bytes memory data) = abi.decode(msg.data[4:], (address, bytes));\\n _upgradeToAndCall(newImplementation, data, true);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * CAUTION: This function is deprecated. Use {ERC1967Upgrade-_getAdmin} instead.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev To keep this contract fully transparent, all `ifAdmin` functions must be payable. This helper is here to\\n * emulate some proxy functions being non-payable while still allowing value to pass through.\\n */\\n function _requireZeroValue() private {\\n require(msg.value == 0);\\n }\\n}\\n\",\"keccak256\":\"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689\",\"license\":\"MIT\"},\"dependencies/@fdk-0.3.0-beta/dependencies/@openzeppelin-contracts-4.9.3/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"dependencies/@fdk-0.3.0-beta/dependencies/@openzeppelin-contracts-4.9.3/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n struct StringSlot {\\n string value;\\n }\\n\\n struct BytesSlot {\\n bytes value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n */\\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n */\\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n */\\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n */\\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"},\"dependencies/@fdk-0.3.0-beta/src/TransparentProxyOZv4_9_5.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport {\\n ITransparentUpgradeableProxy,\\n TransparentUpgradeableProxy\\n} from \\\"../dependencies/@openzeppelin-contracts-4.9.3//proxy/transparent/TransparentUpgradeableProxy.sol\\\";\\n\\n/**\\n * @title TransparentProxyOZv4_9_5\\n * @dev A contract that acts as a proxy for transparent upgrades.\\n */\\ncontract TransparentProxyOZv4_9_5 is TransparentUpgradeableProxy {\\n /**\\n * @dev Initializes the Proxy contract.\\n * @param logic The address of the logic contract.\\n * @param admin The address of the admin contract.\\n * @param data The initialization data.\\n */\\n constructor(address logic, address admin, bytes memory data) payable TransparentUpgradeableProxy(logic, admin, data) { }\\n}\\n\",\"keccak256\":\"0x680e3c2fc0044a6c4f3771e851124702a668be855b4b8731a38a93efda94dec2\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 197, + "storageLayout": { + "storage": [], + "types": {} + }, + "timestamp": 1720084974, + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/ronin-mainnet/RONRegistrarControllerLogic.json b/deployments/ronin-mainnet/RONRegistrarControllerLogic.json index 6a87139..ffb8e35 100644 --- a/deployments/ronin-mainnet/RONRegistrarControllerLogic.json +++ b/deployments/ronin-mainnet/RONRegistrarControllerLogic.json @@ -1,15738 +1,1193 @@ { "abi": [ { + "type": "constructor", "inputs": [], - "stateMutability": "payable", - "type": "constructor" + "stateMutability": "payable" }, { - "inputs": [ - { - "internalType": "bytes32", - "name": "commitment", - "type": "bytes32" - } - ], - "name": "CommitmentTooNew", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "commitment", - "type": "bytes32" - } - ], - "name": "CommitmentTooOld", - "type": "error" - }, - { - "inputs": [ + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "inputs": [], + "outputs": [ { - "internalType": "uint64", - "name": "duration", - "type": "uint64" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "DurationTooShort", - "type": "error" + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "address", - "name": "requestOwner", - "type": "address" - }, - { - "internalType": "bool", - "name": "nameProtected", - "type": "bool" - }, + "type": "function", + "name": "MIN_DOMAIN_LENGTH", + "inputs": [], + "outputs": [ { - "internalType": "bool", - "name": "ownerWhitelisted", - "type": "bool" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "ErrInvalidRegisterProtectedName", - "type": "error" + "stateMutability": "view" }, { - "inputs": [ + "type": "function", + "name": "OPERATOR_ROLE", + "inputs": [], + "outputs": [ { - "internalType": "string", - "name": "name", - "type": "string" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "ErrRequestedForProtectedName", - "type": "error" - }, - { - "inputs": [], - "name": "InsufficientValue", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidArrayLength", - "type": "error" - }, - { - "inputs": [], - "name": "MaxCommitmentAgeTooHigh", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "PAUSER_ROLE", "inputs": [], - "name": "MaxCommitmentAgeTooLow", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "string", - "name": "name", - "type": "string" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "NameNotAvailable", - "type": "error" - }, - { - "inputs": [], - "name": "ResolverRequiredWhenDataSupplied", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "available", "inputs": [ { - "internalType": "bytes32", - "name": "node", - "type": "bytes32" + "name": "name", + "type": "string", + "internalType": "string" } ], - "name": "Unauthorized", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "bytes32", - "name": "commitment", - "type": "bytes32" + "name": "", + "type": "bool", + "internalType": "bool" } ], - "name": "UnexpiredCommitmentExists", - "type": "error" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "bulkWhitelistProtectedNames", "inputs": [ { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" + "name": "ids", + "type": "uint256[]", + "internalType": "uint256[]" }, { - "indexed": false, - "internalType": "uint256", - "name": "minCommitmentAge", - "type": "uint256" + "name": "owners", + "type": "address[]", + "internalType": "address[]" }, { - "indexed": false, - "internalType": "uint256", - "name": "maxCommitmentAge", - "type": "uint256" + "name": "status", + "type": "bool", + "internalType": "bool" } ], - "name": "CommitmentAgeUpdated", - "type": "event" + "outputs": [], + "stateMutability": "nonpayable" }, { - "anonymous": false, + "type": "function", + "name": "commit", "inputs": [ { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "contract INSDomainPrice", - "name": "newDomainPrice", - "type": "address" + "name": "commitment", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "DomainPriceUpdated", - "type": "event" + "outputs": [], + "stateMutability": "nonpayable" }, { - "anonymous": false, + "type": "function", + "name": "computeCommitment", "inputs": [ { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ + "name": "name", + "type": "string", + "internalType": "string" + }, { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" + "name": "owner", + "type": "address", + "internalType": "address" }, { - "indexed": false, - "internalType": "uint256", "name": "duration", - "type": "uint256" - } - ], - "name": "MinRegistrationDurationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" + "type": "uint64", + "internalType": "uint64" }, { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" + "name": "secret", + "type": "bytes32", + "internalType": "bytes32" }, { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" + "name": "resolver", + "type": "address", + "internalType": "address" }, { - "indexed": false, - "internalType": "uint256", - "name": "ronPrice", - "type": "uint256" + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" }, { - "indexed": false, - "internalType": "uint256", - "name": "usdPrice", - "type": "uint256" - }, + "name": "reverseRecord", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ { - "indexed": false, - "internalType": "uint64", - "name": "expires", - "type": "uint64" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "NameRegistered", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "computeId", "inputs": [ { - "indexed": false, - "internalType": "string", "name": "name", - "type": "string" - }, + "type": "string", + "internalType": "string" + } + ], + "outputs": [ { - "indexed": true, - "internalType": "uint256", "name": "id", - "type": "uint256" - }, + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "getCommitmentAgeRange", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "cost", - "type": "uint256" + "name": "minCommitmentAge", + "type": "uint256", + "internalType": "uint256" }, { - "indexed": false, - "internalType": "uint64", - "name": "expires", - "type": "uint64" + "name": "maxCommitmentAge", + "type": "uint256", + "internalType": "uint256" } ], - "name": "NameRenewed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "getMinRegistrationDuration", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "Paused", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "owners", - "type": "address[]" - }, + "type": "function", + "name": "getNameChecker", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bool", - "name": "status", - "type": "bool" + "name": "", + "type": "address", + "internalType": "contract INameChecker" } ], - "name": "ProtectedNamesWhitelisted", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "getPriceOracle", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, + "name": "", + "type": "address", + "internalType": "contract INSDomainPrice" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRNSUnified", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, + "name": "", + "type": "address", + "internalType": "contract INSUnified" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getReverseRegistrar", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" + "name": "", + "type": "address", + "internalType": "contract INSReverseRegistrar" } ], - "name": "RoleAdminChanged", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "getRoleAdmin", "inputs": [ { - "indexed": true, - "internalType": "bytes32", "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "RoleGranted", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "getRoleMember", "inputs": [ { - "indexed": true, - "internalType": "bytes32", "name": "role", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "RoleRevoked", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "getRoleMemberCount", "inputs": [ { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" + "name": "role", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTreasury", "inputs": [], - "name": "MIN_DOMAIN_LENGTH", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "OPERATOR_ROLE", + "type": "function", + "name": "getWhitelistProtectedNameStatus", + "inputs": [ + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], "outputs": [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + "name": "status", + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "PAUSER_ROLE", - "outputs": [ + "type": "function", + "name": "grantRole", + "inputs": [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "hasRole", "inputs": [ { - "internalType": "string", - "name": "name", - "type": "string" + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" } ], - "name": "available", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "initialize", "inputs": [ { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" + "name": "admin", + "type": "address", + "internalType": "address" }, { - "internalType": "address[]", - "name": "owners", - "type": "address[]" + "name": "pauser", + "type": "address", + "internalType": "address" }, { - "internalType": "bool", - "name": "status", - "type": "bool" + "name": "treasury", + "type": "address", + "internalType": "address payable" + }, + { + "name": "maxCommitmentAge", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minCommitmentAge", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minRegistrationDuration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rnsUnified", + "type": "address", + "internalType": "contract INSUnified" + }, + { + "name": "nameChecker", + "type": "address", + "internalType": "contract INameChecker" + }, + { + "name": "priceOracle", + "type": "address", + "internalType": "contract INSDomainPrice" + }, + { + "name": "reverseRegistrar", + "type": "address", + "internalType": "contract INSReverseRegistrar" } ], - "name": "bulkWhitelistProtectedNames", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [ + "type": "function", + "name": "pause", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "paused", + "inputs": [], + "outputs": [ { - "internalType": "bytes32", - "name": "commitment", - "type": "bytes32" + "name": "", + "type": "bool", + "internalType": "bool" } ], - "name": "commit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "register", "inputs": [ { - "internalType": "string", "name": "name", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "address", "name": "owner", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint64", "name": "duration", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" }, { - "internalType": "bytes32", "name": "secret", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "resolver", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes[]", "name": "data", - "type": "bytes[]" + "type": "bytes[]", + "internalType": "bytes[]" }, { - "internalType": "bool", "name": "reverseRecord", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "name": "computeCommitment", - "outputs": [ + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "registerProtectedName", + "inputs": [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "duration", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "resolver", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "reverseRecord", + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "payable" }, { + "type": "function", + "name": "renew", "inputs": [ { - "internalType": "string", "name": "name", - "type": "string" - } - ], - "name": "computeId", - "outputs": [ + "type": "string", + "internalType": "string" + }, { - "internalType": "uint256", - "name": "id", - "type": "uint256" + "name": "duration", + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "pure", - "type": "function" + "outputs": [], + "stateMutability": "payable" }, { - "inputs": [], - "name": "getCommitmentAgeRange", - "outputs": [ + "type": "function", + "name": "renounceRole", + "inputs": [ { - "internalType": "uint256", - "name": "minCommitmentAge", - "type": "uint256" + "name": "role", + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", - "name": "maxCommitmentAge", - "type": "uint256" + "name": "account", + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "getMinRegistrationDuration", - "outputs": [ + "type": "function", + "name": "rentPrice", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "duration", + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNameChecker", "outputs": [ { - "internalType": "contract INameChecker", - "name": "", - "type": "address" + "name": "usdPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "ronPrice", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "getPriceOracle", - "outputs": [ + "type": "function", + "name": "revokeRole", + "inputs": [ { - "internalType": "contract INSDomainPrice", - "name": "", - "type": "address" + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "getRNSUnified", - "outputs": [ + "type": "function", + "name": "setCommitmentAge", + "inputs": [ { - "internalType": "contract INSUnified", - "name": "", - "type": "address" + "name": "minCommitmentAge", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxCommitmentAge", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "getReverseRegistrar", - "outputs": [ + "type": "function", + "name": "setMinRegistrationDuration", + "inputs": [ { - "internalType": "contract INSReverseRegistrar", - "name": "", - "type": "address" + "name": "duration", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "setPriceOracle", "inputs": [ { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" + "name": "priceOracle", + "type": "address", + "internalType": "contract INSDomainPrice" } ], - "name": "getRoleAdmin", - "outputs": [ + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTreasury", + "inputs": [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + "name": "addr", + "type": "address", + "internalType": "address payable" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "supportsInterface", "inputs": [ { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getRoleMember", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" + }, + { + "type": "function", + "name": "unpause", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "valid", "inputs": [ { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" + "name": "name", + "type": "string", + "internalType": "string" } ], - "name": "getRoleMemberCount", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "getTreasury", - "outputs": [ + "type": "event", + "name": "CommitmentAgeUpdated", + "inputs": [ { - "internalType": "address", - "name": "", - "type": "address" + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "minCommitmentAge", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "maxCommitmentAge", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "DomainPriceUpdated", "inputs": [ { - "internalType": "uint256", - "name": "id", - "type": "uint256" + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getWhitelistProtectedNameStatus", - "outputs": [ - { - "internalType": "bool", - "name": "status", - "type": "bool" + "name": "newDomainPrice", + "type": "address", + "indexed": false, + "internalType": "contract INSDomainPrice" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "Initialized", "inputs": [ { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" } ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "MinRegistrationDurationUpdated", "inputs": [ { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" + "name": "duration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "NameRegistered", "inputs": [ { - "internalType": "address", - "name": "admin", - "type": "address" + "name": "name", + "type": "string", + "indexed": false, + "internalType": "string" }, { - "internalType": "address", - "name": "pauser", - "type": "address" + "name": "id", + "type": "uint256", + "indexed": true, + "internalType": "uint256" }, { - "internalType": "address payable", - "name": "treasury", - "type": "address" + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint256", - "name": "maxCommitmentAge", - "type": "uint256" + "name": "ronPrice", + "type": "uint256", + "indexed": false, + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "minCommitmentAge", - "type": "uint256" + "name": "usdPrice", + "type": "uint256", + "indexed": false, + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "minRegistrationDuration", - "type": "uint256" - }, + "name": "expires", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NameRenewed", + "inputs": [ { - "internalType": "contract INSUnified", - "name": "rnsUnified", - "type": "address" + "name": "name", + "type": "string", + "indexed": false, + "internalType": "string" }, { - "internalType": "contract INameChecker", - "name": "nameChecker", - "type": "address" + "name": "id", + "type": "uint256", + "indexed": true, + "internalType": "uint256" }, { - "internalType": "contract INSDomainPrice", - "name": "priceOracle", - "type": "address" + "name": "cost", + "type": "uint256", + "indexed": false, + "internalType": "uint256" }, { - "internalType": "contract INSReverseRegistrar", - "name": "reverseRegistrar", - "type": "address" + "name": "expires", + "type": "uint64", + "indexed": false, + "internalType": "uint64" } ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { - "inputs": [], - "name": "paused", - "outputs": [ + "type": "event", + "name": "Paused", + "inputs": [ { - "internalType": "bool", - "name": "", - "type": "bool" + "name": "account", + "type": "address", + "indexed": false, + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "ProtectedNamesWhitelisted", "inputs": [ { - "internalType": "string", - "name": "name", - "type": "string" + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "owner", - "type": "address" + "name": "ids", + "type": "uint256[]", + "indexed": false, + "internalType": "uint256[]" }, { - "internalType": "uint64", - "name": "duration", - "type": "uint64" + "name": "owners", + "type": "address[]", + "indexed": false, + "internalType": "address[]" }, { - "internalType": "bytes32", - "name": "secret", - "type": "bytes32" - }, + "name": "status", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ { - "internalType": "address", - "name": "resolver", - "type": "address" + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - "internalType": "bool", - "name": "reverseRecord", - "type": "bool" + "name": "newAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" } ], - "name": "register", - "outputs": [], - "stateMutability": "payable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "RoleGranted", "inputs": [ { - "internalType": "string", - "name": "name", - "type": "string" + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - "internalType": "address", - "name": "owner", - "type": "address" + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint64", - "name": "duration", - "type": "uint64" - }, + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ { - "internalType": "address", - "name": "resolver", - "type": "address" + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "bool", - "name": "reverseRecord", - "type": "bool" + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" } ], - "name": "registerProtectedName", - "outputs": [], - "stateMutability": "payable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "TreasuryUpdated", "inputs": [ { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "uint64", - "name": "duration", - "type": "uint64" + "name": "addr", + "type": "address", + "indexed": true, + "internalType": "address" } ], - "name": "renew", - "outputs": [], - "stateMutability": "payable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "Unpaused", "inputs": [ { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", "name": "account", - "type": "address" + "type": "address", + "indexed": false, + "internalType": "address" } ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "error", + "name": "CommitmentTooNew", "inputs": [ { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "uint64", - "name": "duration", - "type": "uint64" + "name": "commitment", + "type": "bytes32", + "internalType": "bytes32" } - ], - "name": "rentPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "usdPrice", - "type": "uint256" - }, + ] + }, + { + "type": "error", + "name": "CommitmentTooOld", + "inputs": [ { - "internalType": "uint256", - "name": "ronPrice", - "type": "uint256" + "name": "commitment", + "type": "bytes32", + "internalType": "bytes32" } - ], - "stateMutability": "view", - "type": "function" + ] }, { + "type": "error", + "name": "DurationTooShort", "inputs": [ { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" + "name": "duration", + "type": "uint64", + "internalType": "uint64" } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ErrInvalidRegisterProtectedName", "inputs": [ { - "internalType": "uint256", - "name": "minCommitmentAge", - "type": "uint256" + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "requestOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "nameProtected", + "type": "bool", + "internalType": "bool" }, { - "internalType": "uint256", - "name": "maxCommitmentAge", - "type": "uint256" + "name": "ownerWhitelisted", + "type": "bool", + "internalType": "bool" } - ], - "name": "setCommitmentAge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ErrRequestedForProtectedName", "inputs": [ { - "internalType": "uint256", - "name": "duration", - "type": "uint256" + "name": "name", + "type": "string", + "internalType": "string" } - ], - "name": "setMinRegistrationDuration", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { - "inputs": [ - { - "internalType": "contract INSDomainPrice", - "name": "priceOracle", - "type": "address" - } - ], - "name": "setPriceOracle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "error", + "name": "InsufficientValue", + "inputs": [] }, { - "inputs": [ - { - "internalType": "address payable", - "name": "addr", - "type": "address" - } - ], - "name": "setTreasury", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "error", + "name": "InvalidArrayLength", + "inputs": [] + }, + { + "type": "error", + "name": "MaxCommitmentAgeTooHigh", + "inputs": [] + }, + { + "type": "error", + "name": "MaxCommitmentAgeTooLow", + "inputs": [] }, { + "type": "error", + "name": "NameNotAvailable", "inputs": [ { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" + "name": "name", + "type": "string", + "internalType": "string" } - ], - "stateMutability": "view", - "type": "function" + ] }, { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "error", + "name": "NullAddress", + "inputs": [] + }, + { + "type": "error", + "name": "ResolverRequiredWhenDataSupplied", + "inputs": [] }, { + "type": "error", + "name": "Unauthorized", "inputs": [ { - "internalType": "string", - "name": "name", - "type": "string" + "name": "node", + "type": "bytes32", + "internalType": "bytes32" } - ], - "name": "valid", - "outputs": [ + ] + }, + { + "type": "error", + "name": "UnexpiredCommitmentExists", + "inputs": [ { - "internalType": "bool", - "name": "", - "type": "bool" + "name": "commitment", + "type": "bytes32", + "internalType": "bytes32" } - ], - "stateMutability": "view", - "type": "function" + ] } ], - "address": "0x7DF2732B400ed050C0cFDe58A0DBD870c0502792", - "args": "0x", - "ast": { - "absolutePath": "src/RONRegistrarController.sol", - "id": 65992, - "exportedSymbols": { - "AccessControlEnumerable": [ - 48975 - ], - "INSDomainPrice": [ - 66670 - ], - "INSReverseRegistrar": [ - 66789 - ], - "INSUnified": [ - 67046 - ], - "INameChecker": [ - 67165 - ], - "IPublicResolver": [ - 67887 - ], - "IRONRegistrarController": [ - 67531 - ], - "Initializable": [ - 50248 - ], - "LibRNSDomain": [ - 68113 - ], - "LibString": [ - 68395 - ], - "Pausable": [ - 50356 - ], - "RONRegistrarController": [ - 65991 - ], - "RONTransferHelper": [ - 69515 - ], - "ReentrancyGuard": [ - 50421 - ] - }, - "nodeType": "SourceUnit", - "src": "32:14706:99", - "nodes": [ - { - "id": 64827, - "nodeType": "PragmaDirective", - "src": "32:24:99", - "nodes": [], - "literals": [ - "solidity", - "^", - "0.8", - ".19" - ] - }, - { - "id": 64829, - "nodeType": "ImportDirective", - "src": "58:73:99", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts/contracts/security/Pausable.sol", - "file": "@openzeppelin/contracts/security/Pausable.sol", - "nameLocation": "-1:-1:-1", - "scope": 65992, - "sourceUnit": 50357, - "symbolAliases": [ - { - "foreign": { - "id": 64828, - "name": "Pausable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 50356, - "src": "67:8:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 64831, - "nodeType": "ImportDirective", - "src": "132:86:99", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol", - "file": "@openzeppelin/contracts/proxy/utils/Initializable.sol", - "nameLocation": "-1:-1:-1", - "scope": 65992, - "sourceUnit": 50249, - "symbolAliases": [ - { - "foreign": { - "id": 64830, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 50248, - "src": "141:13:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 64833, - "nodeType": "ImportDirective", - "src": "219:87:99", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol", - "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol", - "nameLocation": "-1:-1:-1", - "scope": 65992, - "sourceUnit": 50422, - "symbolAliases": [ - { - "foreign": { - "id": 64832, - "name": "ReentrancyGuard", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 50421, - "src": "228:15:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 64835, - "nodeType": "ImportDirective", - "src": "307:101:99", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol", - "file": "@openzeppelin/contracts/access/AccessControlEnumerable.sol", - "nameLocation": "-1:-1:-1", - "scope": 65992, - "sourceUnit": 48976, - "symbolAliases": [ - { - "foreign": { - "id": 64834, - "name": "AccessControlEnumerable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48975, - "src": "316:23:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 64837, - "nodeType": "ImportDirective", - "src": "409:77:99", - "nodes": [], - "absolutePath": "src/interfaces/resolvers/IPublicResolver.sol", - "file": "./interfaces/resolvers/IPublicResolver.sol", - "nameLocation": "-1:-1:-1", - "scope": 65992, - "sourceUnit": 67888, - "symbolAliases": [ - { - "foreign": { - "id": 64836, - "name": "IPublicResolver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67887, - "src": "418:15:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 64843, - "nodeType": "ImportDirective", - "src": "487:156:99", - "nodes": [], - "absolutePath": "src/interfaces/IRONRegistrarController.sol", - "file": "./interfaces/IRONRegistrarController.sol", - "nameLocation": "-1:-1:-1", - "scope": 65992, - "sourceUnit": 67532, - "symbolAliases": [ - { - "foreign": { - "id": 64838, - "name": "INSUnified", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67046, - "src": "498:10:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 64839, - "name": "INameChecker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67165, - "src": "512:12:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 64840, - "name": "INSDomainPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66670, - "src": "528:14:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 64841, - "name": "INSReverseRegistrar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66789, - "src": "546:19:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 64842, - "name": "IRONRegistrarController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67531, - "src": "569:23:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 64845, - "nodeType": "ImportDirective", - "src": "644:54:99", - "nodes": [], - "absolutePath": "src/libraries/LibString.sol", - "file": "./libraries/LibString.sol", - "nameLocation": "-1:-1:-1", - "scope": 65992, - "sourceUnit": 68396, - "symbolAliases": [ - { - "foreign": { - "id": 64844, - "name": "LibString", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68395, - "src": "653:9:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 64847, - "nodeType": "ImportDirective", - "src": "699:60:99", - "nodes": [], - "absolutePath": "src/libraries/LibRNSDomain.sol", - "file": "./libraries/LibRNSDomain.sol", - "nameLocation": "-1:-1:-1", - "scope": 65992, - "sourceUnit": 68114, - "symbolAliases": [ - { - "foreign": { - "id": 64846, - "name": "LibRNSDomain", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68113, - "src": "708:12:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 64849, - "nodeType": "ImportDirective", - "src": "760:80:99", - "nodes": [], - "absolutePath": "src/libraries/transfers/RONTransferHelper.sol", - "file": "./libraries/transfers/RONTransferHelper.sol", - "nameLocation": "-1:-1:-1", - "scope": 65992, - "sourceUnit": 69516, - "symbolAliases": [ - { - "foreign": { - "id": 64848, - "name": "RONTransferHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69515, - "src": "769:17:99", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 65991, - "nodeType": "ContractDefinition", - "src": "1161:13576:99", - "nodes": [ - { - "id": 64863, - "nodeType": "UsingForDirective", - "src": "1301:27:99", - "nodes": [], - "global": false, - "libraryName": { - "id": 64861, - "name": "LibString", - "nameLocations": [ - "1307:9:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 68395, - "src": "1307:9:99" - }, - "typeName": { - "id": 64862, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1321:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - } - }, - { - "id": 64866, - "nodeType": "UsingForDirective", - "src": "1331:30:99", - "nodes": [], - "global": false, - "libraryName": { - "id": 64864, - "name": "LibRNSDomain", - "nameLocations": [ - "1337:12:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 68113, - "src": "1337:12:99" - }, - "typeName": { - "id": 64865, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1354:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - } - }, - { - "id": 64870, - "nodeType": "VariableDeclaration", - "src": "1409:43:99", - "nodes": [], - "baseFunctions": [ - 67488 - ], - "constant": true, - "documentation": { - "id": 64867, - "nodeType": "StructuredDocumentation", - "src": "1365:41:99", - "text": "@dev The minimum domain name's length" - }, - "functionSelector": "29aa4f51", - "mutability": "constant", - "name": "MIN_DOMAIN_LENGTH", - "nameLocation": "1431:17:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 64868, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1409:5:99", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "33", - "id": 64869, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1451:1:99", - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "visibility": "public" - }, - { - "id": 64876, - "nodeType": "VariableDeclaration", - "src": "1498:62:99", - "nodes": [], - "baseFunctions": [ - 67476 - ], - "constant": true, - "documentation": { - "id": 64871, - "nodeType": "StructuredDocumentation", - "src": "1456:39:99", - "text": "@inheritdoc IRONRegistrarController" - }, - "functionSelector": "e63ab1e9", - "mutability": "constant", - "name": "PAUSER_ROLE", - "nameLocation": "1522:11:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 64872, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1498:7:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "5041555345525f524f4c45", - "id": 64874, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1546:13:99", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a", - "typeString": "literal_string \"PAUSER_ROLE\"" - }, - "value": "PAUSER_ROLE" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a", - "typeString": "literal_string \"PAUSER_ROLE\"" - } - ], - "id": 64873, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "1536:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 64875, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1536:24:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "public" - }, - { - "id": 64882, - "nodeType": "VariableDeclaration", - "src": "1606:66:99", - "nodes": [], - "baseFunctions": [ - 67482 - ], - "constant": true, - "documentation": { - "id": 64877, - "nodeType": "StructuredDocumentation", - "src": "1564:39:99", - "text": "@inheritdoc IRONRegistrarController" - }, - "functionSelector": "f5b541a6", - "mutability": "constant", - "name": "OPERATOR_ROLE", - "nameLocation": "1630:13:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 64878, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1606:7:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "4f50455241544f525f524f4c45", - "id": 64880, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1656:15:99", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", - "typeString": "literal_string \"OPERATOR_ROLE\"" - }, - "value": "OPERATOR_ROLE" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", - "typeString": "literal_string \"OPERATOR_ROLE\"" - } - ], - "id": 64879, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "1646:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 64881, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1646:26:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "public" - }, - { - "id": 64887, - "nodeType": "VariableDeclaration", - "src": "1712:27:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64883, - "nodeType": "StructuredDocumentation", - "src": "1677:32:99", - "text": "@dev Gap for upgradeability." - }, - "mutability": "mutable", - "name": "____gap", - "nameLocation": "1732:7:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage", - "typeString": "uint256[50]" - }, - "typeName": { - "baseType": { - "id": 64884, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1712:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 64886, - "length": { - "hexValue": "3530", - "id": 64885, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1720:2:99", - "typeDescriptions": { - "typeIdentifier": "t_rational_50_by_1", - "typeString": "int_const 50" - }, - "value": "50" - }, - "nodeType": "ArrayTypeName", - "src": "1712:11:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", - "typeString": "uint256[50]" - } - }, - "visibility": "private" - }, - { - "id": 64890, - "nodeType": "VariableDeclaration", - "src": "1822:34:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64888, - "nodeType": "StructuredDocumentation", - "src": "1744:75:99", - "text": "@dev Minimum duration between commitment and registration in second(s)." - }, - "mutability": "mutable", - "name": "_minCommitmentAge", - "nameLocation": "1839:17:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 64889, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1822:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "id": 64893, - "nodeType": "VariableDeclaration", - "src": "1938:34:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64891, - "nodeType": "StructuredDocumentation", - "src": "1860:75:99", - "text": "@dev Maximum duration between commitment and registration in second(s)." - }, - "mutability": "mutable", - "name": "_maxCommitmentAge", - "nameLocation": "1955:17:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 64892, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1938:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "id": 64896, - "nodeType": "VariableDeclaration", - "src": "2013:41:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64894, - "nodeType": "StructuredDocumentation", - "src": "1976:34:99", - "text": "@dev Min registration duration" - }, - "mutability": "mutable", - "name": "_minRegistrationDuration", - "nameLocation": "2030:24:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 64895, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2013:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "id": 64899, - "nodeType": "VariableDeclaration", - "src": "2092:34:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64897, - "nodeType": "StructuredDocumentation", - "src": "2059:30:99", - "text": "@dev The treasury address." - }, - "mutability": "mutable", - "name": "_treasury", - "nameLocation": "2117:9:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 64898, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2092:15:99", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "visibility": "internal" - }, - { - "id": 64903, - "nodeType": "VariableDeclaration", - "src": "2167:31:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64900, - "nodeType": "StructuredDocumentation", - "src": "2130:34:99", - "text": "@dev The rns unified contract." - }, - "mutability": "mutable", - "name": "_rnsUnified", - "nameLocation": "2187:11:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - }, - "typeName": { - "id": 64902, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 64901, - "name": "INSUnified", - "nameLocations": [ - "2167:10:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 67046, - "src": "2167:10:99" - }, - "referencedDeclaration": 67046, - "src": "2167:10:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "visibility": "internal" - }, - { - "id": 64907, - "nodeType": "VariableDeclaration", - "src": "2239:34:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64904, - "nodeType": "StructuredDocumentation", - "src": "2202:34:99", - "text": "@dev The namechecker contract." - }, - "mutability": "mutable", - "name": "_nameChecker", - "nameLocation": "2261:12:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - }, - "typeName": { - "id": 64906, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 64905, - "name": "INameChecker", - "nameLocations": [ - "2239:12:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 67165, - "src": "2239:12:99" - }, - "referencedDeclaration": 67165, - "src": "2239:12:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - } - }, - "visibility": "internal" - }, - { - "id": 64911, - "nodeType": "VariableDeclaration", - "src": "2306:36:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64908, - "nodeType": "StructuredDocumentation", - "src": "2277:26:99", - "text": "@dev The price oracle." - }, - "mutability": "mutable", - "name": "_priceOracle", - "nameLocation": "2330:12:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - }, - "typeName": { - "id": 64910, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 64909, - "name": "INSDomainPrice", - "nameLocations": [ - "2306:14:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 66670, - "src": "2306:14:99" - }, - "referencedDeclaration": 66670, - "src": "2306:14:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - }, - "visibility": "internal" - }, - { - "id": 64915, - "nodeType": "VariableDeclaration", - "src": "2389:46:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64912, - "nodeType": "StructuredDocumentation", - "src": "2346:40:99", - "text": "@dev The reverse registrar contract." - }, - "mutability": "mutable", - "name": "_reverseRegistrar", - "nameLocation": "2418:17:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - }, - "typeName": { - "id": 64914, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 64913, - "name": "INSReverseRegistrar", - "nameLocations": [ - "2389:19:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 66789, - "src": "2389:19:99" - }, - "referencedDeclaration": 66789, - "src": "2389:19:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - } - }, - "visibility": "internal" - }, - { - "id": 64920, - "nodeType": "VariableDeclaration", - "src": "2515:70:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64916, - "nodeType": "StructuredDocumentation", - "src": "2440:72:99", - "text": "@dev Mapping from commitment hash => timestamp that commitment made." - }, - "mutability": "mutable", - "name": "_committedAt", - "nameLocation": "2573:12:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - }, - "typeName": { - "id": 64919, - "keyName": "commitment", - "keyNameLocation": "2531:10:99", - "keyType": { - "id": 64917, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2523:7:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "2515:48:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - }, - "valueName": "timestamp", - "valueNameLocation": "2553:9:99", - "valueType": { - "id": 64918, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2545:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "internal" - }, - { - "id": 64927, - "nodeType": "VariableDeclaration", - "src": "2694:89:99", - "nodes": [], - "constant": false, - "documentation": { - "id": 64921, - "nodeType": "StructuredDocumentation", - "src": "2589:102:99", - "text": "@dev Mapping id => owner => flag indicating whether the owner is whitelisted to buy protected name" - }, - "mutability": "mutable", - "name": "_protectedNamesWhitelisted", - "nameLocation": "2757:26:99", - "scope": 65991, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$", - "typeString": "mapping(uint256 => mapping(address => bool))" - }, - "typeName": { - "id": 64926, - "keyName": "id", - "keyNameLocation": "2710:2:99", - "keyType": { - "id": 64922, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2702:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Mapping", - "src": "2694:53:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$", - "typeString": "mapping(uint256 => mapping(address => bool))" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 64925, - "keyName": "owner", - "keyNameLocation": "2732:5:99", - "keyType": { - "id": 64923, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2724:7:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "2716:30:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 64924, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2741:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - } - }, - "visibility": "internal" - }, - { - "id": 64937, - "nodeType": "ModifierDefinition", - "src": "2788:84:99", - "nodes": [], - "body": { - "id": 64936, - "nodeType": "Block", - "src": "2831:41:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 64932, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64929, - "src": "2855:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 64931, - "name": "_requireAvailable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65990, - "src": "2837:17:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory) view" - } - }, - "id": 64933, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2837:23:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 64934, - "nodeType": "ExpressionStatement", - "src": "2837:23:99" - }, - { - "id": 64935, - "nodeType": "PlaceholderStatement", - "src": "2866:1:99" - } - ] - }, - "name": "onlyAvailable", - "nameLocation": "2797:13:99", - "parameters": { - "id": 64930, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 64929, - "mutability": "mutable", - "name": "name", - "nameLocation": "2825:4:99", - "nodeType": "VariableDeclaration", - "scope": 64937, - "src": "2811:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 64928, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2811:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "2810:20:99" - }, - "virtual": false, - "visibility": "internal" - }, - { - "id": 64944, - "nodeType": "FunctionDefinition", - "src": "2876:55:99", - "nodes": [], - "body": { - "id": 64943, - "nodeType": "Block", - "src": "2898:33:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 64940, - "name": "_disableInitializers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 50229, - "src": "2904:20:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 64941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2904:22:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 64942, - "nodeType": "ExpressionStatement", - "src": "2904:22:99" - } - ] - }, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "parameters": { - "id": 64938, - "nodeType": "ParameterList", - "parameters": [], - "src": "2887:2:99" - }, - "returnParameters": { - "id": 64939, - "nodeType": "ParameterList", - "parameters": [], - "src": "2898:0:99" - }, - "scope": 65991, - "stateMutability": "payable", - "virtual": false, - "visibility": "public" - }, - { - "id": 65013, - "nodeType": "FunctionDefinition", - "src": "2935:710:99", - "nodes": [], - "body": { - "id": 65012, - "nodeType": "Block", - "src": "3277:368:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 64974, - "name": "PAUSER_ROLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64876, - "src": "3294:11:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 64975, - "name": "pauser", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64948, - "src": "3307:6:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 64973, - "name": "_setupRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48758, - "src": "3283:10:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 64976, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3283:31:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 64977, - "nodeType": "ExpressionStatement", - "src": "3283:31:99" - }, - { - "expression": { - "arguments": [ - { - "id": 64979, - "name": "DEFAULT_ADMIN_ROLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48562, - "src": "3331:18:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 64980, - "name": "admin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64946, - "src": "3351:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 64978, - "name": "_setupRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48758, - "src": "3320:10:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 64981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3320:37:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 64982, - "nodeType": "ExpressionStatement", - "src": "3320:37:99" - }, - { - "expression": { - "arguments": [ - { - "id": 64984, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64965, - "src": "3380:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - ], - "id": 64983, - "name": "_setPriceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65974, - "src": "3364:15:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_INSDomainPrice_$66670_$returns$__$", - "typeString": "function (contract INSDomainPrice)" - } - }, - "id": 64985, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3364:28:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 64986, - "nodeType": "ExpressionStatement", - "src": "3364:28:99" - }, - { - "expression": { - "arguments": [ - { - "id": 64988, - "name": "minRegistrationDuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64956, - "src": "3426:23:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 64987, - "name": "_setMinRegistrationDuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65777, - "src": "3398:27:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 64989, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3398:52:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 64990, - "nodeType": "ExpressionStatement", - "src": "3398:52:99" - }, - { - "expression": { - "arguments": [ - { - "id": 64992, - "name": "minCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64954, - "src": "3474:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 64993, - "name": "maxCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64952, - "src": "3492:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 64991, - "name": "_setCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65636, - "src": "3456:17:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 64994, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3456:53:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 64995, - "nodeType": "ExpressionStatement", - "src": "3456:53:99" - }, - { - "expression": { - "id": 64998, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 64996, - "name": "_treasury", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64899, - "src": "3516:9:99", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 64997, - "name": "treasury", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64950, - "src": "3528:8:99", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "3516:20:99", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 64999, - "nodeType": "ExpressionStatement", - "src": "3516:20:99" - }, - { - "expression": { - "id": 65002, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 65000, - "name": "_rnsUnified", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64903, - "src": "3542:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 65001, - "name": "rnsUnified", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64959, - "src": "3556:10:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "src": "3542:24:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "id": 65003, - "nodeType": "ExpressionStatement", - "src": "3542:24:99" - }, - { - "expression": { - "id": 65006, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 65004, - "name": "_nameChecker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64907, - "src": "3572:12:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 65005, - "name": "nameChecker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64962, - "src": "3587:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - } - }, - "src": "3572:26:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - } - }, - "id": 65007, - "nodeType": "ExpressionStatement", - "src": "3572:26:99" - }, - { - "expression": { - "id": 65010, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 65008, - "name": "_reverseRegistrar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64915, - "src": "3604:17:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 65009, - "name": "reverseRegistrar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64968, - "src": "3624:16:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - } - }, - "src": "3604:36:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - } - }, - "id": 65011, - "nodeType": "ExpressionStatement", - "src": "3604:36:99" - } - ] - }, - "functionSelector": "64c65705", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 64971, - "kind": "modifierInvocation", - "modifierName": { - "id": 64970, - "name": "initializer", - "nameLocations": [ - "3265:11:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50150, - "src": "3265:11:99" - }, - "nodeType": "ModifierInvocation", - "src": "3265:11:99" - } - ], - "name": "initialize", - "nameLocation": "2944:10:99", - "parameters": { - "id": 64969, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 64946, - "mutability": "mutable", - "name": "admin", - "nameLocation": "2968:5:99", - "nodeType": "VariableDeclaration", - "scope": 65013, - "src": "2960:13:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 64945, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2960:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 64948, - "mutability": "mutable", - "name": "pauser", - "nameLocation": "2987:6:99", - "nodeType": "VariableDeclaration", - "scope": 65013, - "src": "2979:14:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 64947, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2979:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 64950, - "mutability": "mutable", - "name": "treasury", - "nameLocation": "3015:8:99", - "nodeType": "VariableDeclaration", - "scope": 65013, - "src": "2999:24:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 64949, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2999:15:99", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 64952, - "mutability": "mutable", - "name": "maxCommitmentAge", - "nameLocation": "3037:16:99", - "nodeType": "VariableDeclaration", - "scope": 65013, - "src": "3029:24:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 64951, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3029:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 64954, - "mutability": "mutable", - "name": "minCommitmentAge", - "nameLocation": "3067:16:99", - "nodeType": "VariableDeclaration", - "scope": 65013, - "src": "3059:24:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 64953, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3059:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 64956, - "mutability": "mutable", - "name": "minRegistrationDuration", - "nameLocation": "3097:23:99", - "nodeType": "VariableDeclaration", - "scope": 65013, - "src": "3089:31:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 64955, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3089:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 64959, - "mutability": "mutable", - "name": "rnsUnified", - "nameLocation": "3137:10:99", - "nodeType": "VariableDeclaration", - "scope": 65013, - "src": "3126:21:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - }, - "typeName": { - "id": 64958, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 64957, - "name": "INSUnified", - "nameLocations": [ - "3126:10:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 67046, - "src": "3126:10:99" - }, - "referencedDeclaration": 67046, - "src": "3126:10:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 64962, - "mutability": "mutable", - "name": "nameChecker", - "nameLocation": "3166:11:99", - "nodeType": "VariableDeclaration", - "scope": 65013, - "src": "3153:24:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - }, - "typeName": { - "id": 64961, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 64960, - "name": "INameChecker", - "nameLocations": [ - "3153:12:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 67165, - "src": "3153:12:99" - }, - "referencedDeclaration": 67165, - "src": "3153:12:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 64965, - "mutability": "mutable", - "name": "priceOracle", - "nameLocation": "3198:11:99", - "nodeType": "VariableDeclaration", - "scope": 65013, - "src": "3183:26:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - }, - "typeName": { - "id": 64964, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 64963, - "name": "INSDomainPrice", - "nameLocations": [ - "3183:14:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 66670, - "src": "3183:14:99" - }, - "referencedDeclaration": 66670, - "src": "3183:14:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 64968, - "mutability": "mutable", - "name": "reverseRegistrar", - "nameLocation": "3235:16:99", - "nodeType": "VariableDeclaration", - "scope": 65013, - "src": "3215:36:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - }, - "typeName": { - "id": 64967, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 64966, - "name": "INSReverseRegistrar", - "nameLocations": [ - "3215:19:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 66789, - "src": "3215:19:99" - }, - "referencedDeclaration": 66789, - "src": "3215:19:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - } - }, - "visibility": "internal" - } - ], - "src": "2954:301:99" - }, - "returnParameters": { - "id": 64972, - "nodeType": "ParameterList", - "parameters": [], - "src": "3277:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65024, - "nodeType": "FunctionDefinition", - "src": "3702:67:99", - "nodes": [], - "body": { - "id": 65023, - "nodeType": "Block", - "src": "3750:19:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65020, - "name": "_pause", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 50339, - "src": "3756:6:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 65021, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3756:8:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65022, - "nodeType": "ExpressionStatement", - "src": "3756:8:99" - } - ] - }, - "baseFunctions": [ - 67466 - ], - "documentation": { - "id": 65014, - "nodeType": "StructuredDocumentation", - "src": "3649:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "8456cb59", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 65017, - "name": "PAUSER_ROLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64876, - "src": "3737:11:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 65018, - "kind": "modifierInvocation", - "modifierName": { - "id": 65016, - "name": "onlyRole", - "nameLocations": [ - "3728:8:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48573, - "src": "3728:8:99" - }, - "nodeType": "ModifierInvocation", - "src": "3728:21:99" - } - ], - "name": "pause", - "nameLocation": "3711:5:99", - "parameters": { - "id": 65015, - "nodeType": "ParameterList", - "parameters": [], - "src": "3716:2:99" - }, - "returnParameters": { - "id": 65019, - "nodeType": "ParameterList", - "parameters": [], - "src": "3750:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65035, - "nodeType": "FunctionDefinition", - "src": "3826:71:99", - "nodes": [], - "body": { - "id": 65034, - "nodeType": "Block", - "src": "3876:21:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65031, - "name": "_unpause", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 50355, - "src": "3882:8:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 65032, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3882:10:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65033, - "nodeType": "ExpressionStatement", - "src": "3882:10:99" - } - ] - }, - "baseFunctions": [ - 67470 - ], - "documentation": { - "id": 65025, - "nodeType": "StructuredDocumentation", - "src": "3773:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "3f4ba83a", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 65028, - "name": "PAUSER_ROLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64876, - "src": "3863:11:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 65029, - "kind": "modifierInvocation", - "modifierName": { - "id": 65027, - "name": "onlyRole", - "nameLocations": [ - "3854:8:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48573, - "src": "3854:8:99" - }, - "nodeType": "ModifierInvocation", - "src": "3854:21:99" - } - ], - "name": "unpause", - "nameLocation": "3835:7:99", - "parameters": { - "id": 65026, - "nodeType": "ParameterList", - "parameters": [], - "src": "3842:2:99" - }, - "returnParameters": { - "id": 65030, - "nodeType": "ParameterList", - "parameters": [], - "src": "3876:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65044, - "nodeType": "FunctionDefinition", - "src": "3954:110:99", - "nodes": [], - "body": { - "id": 65043, - "nodeType": "Block", - "src": "4022:42:99", - "nodes": [], - "statements": [ - { - "expression": { - "id": 65041, - "name": "_minRegistrationDuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64896, - "src": "4035:24:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 65040, - "id": 65042, - "nodeType": "Return", - "src": "4028:31:99" - } - ] - }, - "baseFunctions": [ - 67494 - ], - "documentation": { - "id": 65036, - "nodeType": "StructuredDocumentation", - "src": "3901:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "42c20288", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getMinRegistrationDuration", - "nameLocation": "3963:26:99", - "parameters": { - "id": 65037, - "nodeType": "ParameterList", - "parameters": [], - "src": "3989:2:99" - }, - "returnParameters": { - "id": 65040, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65039, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 65044, - "src": "4013:7:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65038, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4013:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4012:9:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "id": 65087, - "nodeType": "FunctionDefinition", - "src": "4121:335:99", - "nodes": [], - "body": { - "id": 65086, - "nodeType": "Block", - "src": "4234:222:99", - "nodes": [], - "statements": [ - { - "assignments": [ - 65060, - 65063 - ], - "declarations": [ - { - "constant": false, - "id": 65060, - "mutability": "mutable", - "name": "basePrice", - "nameLocation": "4273:9:99", - "nodeType": "VariableDeclaration", - "scope": 65086, - "src": "4241:41:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UnitPrice_$66422_memory_ptr", - "typeString": "struct INSDomainPrice.UnitPrice" - }, - "typeName": { - "id": 65059, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 65058, - "name": "INSDomainPrice.UnitPrice", - "nameLocations": [ - "4241:14:99", - "4256:9:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 66422, - "src": "4241:24:99" - }, - "referencedDeclaration": 66422, - "src": "4241:24:99", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UnitPrice_$66422_storage_ptr", - "typeString": "struct INSDomainPrice.UnitPrice" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65063, - "mutability": "mutable", - "name": "tax", - "nameLocation": "4316:3:99", - "nodeType": "VariableDeclaration", - "scope": 65086, - "src": "4284:35:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UnitPrice_$66422_memory_ptr", - "typeString": "struct INSDomainPrice.UnitPrice" - }, - "typeName": { - "id": 65062, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 65061, - "name": "INSDomainPrice.UnitPrice", - "nameLocations": [ - "4284:14:99", - "4299:9:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 66422, - "src": "4284:24:99" - }, - "referencedDeclaration": 66422, - "src": "4284:24:99", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UnitPrice_$66422_storage_ptr", - "typeString": "struct INSDomainPrice.UnitPrice" - } - }, - "visibility": "internal" - } - ], - "id": 65069, - "initialValue": { - "arguments": [ - { - "id": 65066, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65047, - "src": "4356:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65067, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65049, - "src": "4362:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "expression": { - "id": 65064, - "name": "_priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64911, - "src": "4329:12:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - }, - "id": 65065, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4342:13:99", - "memberName": "getRenewalFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 66576, - "src": "4329:26:99", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$_t_uint256_$returns$_t_struct$_UnitPrice_$66422_memory_ptr_$_t_struct$_UnitPrice_$66422_memory_ptr_$", - "typeString": "function (string memory,uint256) view external returns (struct INSDomainPrice.UnitPrice memory,struct INSDomainPrice.UnitPrice memory)" - } - }, - "id": 65068, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4329:42:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_struct$_UnitPrice_$66422_memory_ptr_$_t_struct$_UnitPrice_$66422_memory_ptr_$", - "typeString": "tuple(struct INSDomainPrice.UnitPrice memory,struct INSDomainPrice.UnitPrice memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4240:131:99" - }, - { - "expression": { - "id": 65076, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 65070, - "name": "usdPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65052, - "src": "4377:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65075, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 65071, - "name": "basePrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65060, - "src": "4388:9:99", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UnitPrice_$66422_memory_ptr", - "typeString": "struct INSDomainPrice.UnitPrice memory" - } - }, - "id": 65072, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4398:3:99", - "memberName": "usd", - "nodeType": "MemberAccess", - "referencedDeclaration": 66419, - "src": "4388:13:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "expression": { - "id": 65073, - "name": "tax", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65063, - "src": "4404:3:99", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UnitPrice_$66422_memory_ptr", - "typeString": "struct INSDomainPrice.UnitPrice memory" - } - }, - "id": 65074, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4408:3:99", - "memberName": "usd", - "nodeType": "MemberAccess", - "referencedDeclaration": 66419, - "src": "4404:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4388:23:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4377:34:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 65077, - "nodeType": "ExpressionStatement", - "src": "4377:34:99" - }, - { - "expression": { - "id": 65084, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 65078, - "name": "ronPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65054, - "src": "4417:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65083, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 65079, - "name": "basePrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65060, - "src": "4428:9:99", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UnitPrice_$66422_memory_ptr", - "typeString": "struct INSDomainPrice.UnitPrice memory" - } - }, - "id": 65080, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4438:3:99", - "memberName": "ron", - "nodeType": "MemberAccess", - "referencedDeclaration": 66421, - "src": "4428:13:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "expression": { - "id": 65081, - "name": "tax", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65063, - "src": "4444:3:99", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UnitPrice_$66422_memory_ptr", - "typeString": "struct INSDomainPrice.UnitPrice memory" - } - }, - "id": 65082, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4448:3:99", - "memberName": "ron", - "nodeType": "MemberAccess", - "referencedDeclaration": 66421, - "src": "4444:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4428:23:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4417:34:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 65085, - "nodeType": "ExpressionStatement", - "src": "4417:34:99" - } - ] - }, - "baseFunctions": [ - 67312 - ], - "documentation": { - "id": 65045, - "nodeType": "StructuredDocumentation", - "src": "4068:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "b24b17b0", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "rentPrice", - "nameLocation": "4130:9:99", - "parameters": { - "id": 65050, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65047, - "mutability": "mutable", - "name": "name", - "nameLocation": "4154:4:99", - "nodeType": "VariableDeclaration", - "scope": 65087, - "src": "4140:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65046, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "4140:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65049, - "mutability": "mutable", - "name": "duration", - "nameLocation": "4167:8:99", - "nodeType": "VariableDeclaration", - "scope": 65087, - "src": "4160:15:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 65048, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "4160:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "4139:37:99" - }, - "returnParameters": { - "id": 65055, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65052, - "mutability": "mutable", - "name": "usdPrice", - "nameLocation": "4206:8:99", - "nodeType": "VariableDeclaration", - "scope": 65087, - "src": "4198:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65051, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4198:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65054, - "mutability": "mutable", - "name": "ronPrice", - "nameLocation": "4224:8:99", - "nodeType": "VariableDeclaration", - "scope": 65087, - "src": "4216:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65053, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4216:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4197:36:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "id": 65108, - "nodeType": "FunctionDefinition", - "src": "4513:147:99", - "nodes": [], - "body": { - "id": 65107, - "nodeType": "Block", - "src": "4575:85:99", - "nodes": [], - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 65105, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65099, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 65095, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65090, - "src": "4588:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "id": 65096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4593:6:99", - "memberName": "strlen", - "nodeType": "MemberAccess", - "referencedDeclaration": 68220, - "src": "4588:11:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$attached_to$_t_string_memory_ptr_$", - "typeString": "function (string memory) pure returns (uint256)" - } - }, - "id": 65097, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4588:13:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 65098, - "name": "MIN_DOMAIN_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64870, - "src": "4605:17:99", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "4588:34:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "id": 65104, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "4626:29:99", - "subExpression": { - "arguments": [ - { - "id": 65102, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65090, - "src": "4650:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "id": 65100, - "name": "_nameChecker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64907, - "src": "4627:12:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - } - }, - "id": 65101, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4640:9:99", - "memberName": "forbidden", - "nodeType": "MemberAccess", - "referencedDeclaration": 67130, - "src": "4627:22:99", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$returns$_t_bool_$", - "typeString": "function (string memory) view external returns (bool)" - } - }, - "id": 65103, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4627:28:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "4588:67:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 65094, - "id": 65106, - "nodeType": "Return", - "src": "4581:74:99" - } - ] - }, - "baseFunctions": [ - 67328 - ], - "documentation": { - "id": 65088, - "nodeType": "StructuredDocumentation", - "src": "4460:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "9791c097", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "valid", - "nameLocation": "4522:5:99", - "parameters": { - "id": 65091, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65090, - "mutability": "mutable", - "name": "name", - "nameLocation": "4542:4:99", - "nodeType": "VariableDeclaration", - "scope": 65108, - "src": "4528:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65089, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "4528:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "4527:20:99" - }, - "returnParameters": { - "id": 65094, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65093, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 65108, - "src": "4569:4:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 65092, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4569:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4568:6:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "id": 65128, - "nodeType": "FunctionDefinition", - "src": "4717:137:99", - "nodes": [], - "body": { - "id": 65127, - "nodeType": "Block", - "src": "4783:71:99", - "nodes": [], - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 65125, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 65117, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65111, - "src": "4802:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 65116, - "name": "valid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65108, - "src": "4796:5:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$", - "typeString": "function (string memory) view returns (bool)" - } - }, - "id": 65118, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4796:11:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "arguments": [ - { - "arguments": [ - { - "id": 65122, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65111, - "src": "4843:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 65121, - "name": "computeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65199, - "src": "4833:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (string memory) pure returns (uint256)" - } - }, - "id": 65123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4833:15:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 65119, - "name": "_rnsUnified", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64903, - "src": "4811:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "id": 65120, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4823:9:99", - "memberName": "available", - "nodeType": "MemberAccess", - "referencedDeclaration": 66924, - "src": "4811:21:99", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) view external returns (bool)" - } - }, - "id": 65124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4811:38:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "4796:53:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 65115, - "id": 65126, - "nodeType": "Return", - "src": "4789:60:99" - } - ] - }, - "baseFunctions": [ - 67336 - ], - "documentation": { - "id": 65109, - "nodeType": "StructuredDocumentation", - "src": "4664:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "aeb8ce9b", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "available", - "nameLocation": "4726:9:99", - "parameters": { - "id": 65112, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65111, - "mutability": "mutable", - "name": "name", - "nameLocation": "4750:4:99", - "nodeType": "VariableDeclaration", - "scope": 65128, - "src": "4736:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65110, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "4736:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "4735:20:99" - }, - "returnParameters": { - "id": 65115, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65114, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 65128, - "src": "4777:4:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 65113, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4777:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4776:6:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "id": 65183, - "nodeType": "FunctionDefinition", - "src": "4911:445:99", - "nodes": [], - "body": { - "id": 65182, - "nodeType": "Block", - "src": "5149:207:99", - "nodes": [], - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 65162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 65152, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65142, - "src": "5159:4:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - "id": 65153, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5164:6:99", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "5159:11:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 65154, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5174:1:99", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5159:16:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 65161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65156, - "name": "resolver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65139, - "src": "5179:8:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 65159, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5199:1:99", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 65158, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5191:7:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 65157, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5191:7:99", - "typeDescriptions": {} - } - }, - "id": 65160, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5191:10:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5179:22:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "5159:42:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65166, - "nodeType": "IfStatement", - "src": "5155:89:99", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65163, - "name": "ResolverRequiredWhenDataSupplied", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67199, - "src": "5210:32:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 65164, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5210:34:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65165, - "nodeType": "RevertStatement", - "src": "5203:41:99" - } - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 65171, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65131, - "src": "5288:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 65170, - "name": "computeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65199, - "src": "5278:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (string memory) pure returns (uint256)" - } - }, - "id": 65172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5278:15:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65173, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65133, - "src": "5295:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65174, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65135, - "src": "5302:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 65175, - "name": "secret", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65137, - "src": "5312:6:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 65176, - "name": "resolver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65139, - "src": "5320:8:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65177, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65142, - "src": "5330:4:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - { - "id": 65178, - "name": "reverseRecord", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65144, - "src": "5336:13:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "expression": { - "id": 65168, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "5267:3:99", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 65169, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5271:6:99", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "5267:10:99", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 65179, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5267:83:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 65167, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "5257:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 65180, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5257:94:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 65151, - "id": 65181, - "nodeType": "Return", - "src": "5250:101:99" - } - ] - }, - "baseFunctions": [ - 67357 - ], - "documentation": { - "id": 65129, - "nodeType": "StructuredDocumentation", - "src": "4858:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "db9bf5ed", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 65147, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65131, - "src": "5125:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "id": 65148, - "kind": "modifierInvocation", - "modifierName": { - "id": 65146, - "name": "onlyAvailable", - "nameLocations": [ - "5111:13:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 64937, - "src": "5111:13:99" - }, - "nodeType": "ModifierInvocation", - "src": "5111:19:99" - } - ], - "name": "computeCommitment", - "nameLocation": "4920:17:99", - "parameters": { - "id": 65145, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65131, - "mutability": "mutable", - "name": "name", - "nameLocation": "4957:4:99", - "nodeType": "VariableDeclaration", - "scope": 65183, - "src": "4943:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65130, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "4943:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65133, - "mutability": "mutable", - "name": "owner", - "nameLocation": "4975:5:99", - "nodeType": "VariableDeclaration", - "scope": 65183, - "src": "4967:13:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65132, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4967:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65135, - "mutability": "mutable", - "name": "duration", - "nameLocation": "4993:8:99", - "nodeType": "VariableDeclaration", - "scope": 65183, - "src": "4986:15:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 65134, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "4986:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65137, - "mutability": "mutable", - "name": "secret", - "nameLocation": "5015:6:99", - "nodeType": "VariableDeclaration", - "scope": 65183, - "src": "5007:14:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 65136, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5007:7:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65139, - "mutability": "mutable", - "name": "resolver", - "nameLocation": "5035:8:99", - "nodeType": "VariableDeclaration", - "scope": 65183, - "src": "5027:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65138, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5027:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65142, - "mutability": "mutable", - "name": "data", - "nameLocation": "5066:4:99", - "nodeType": "VariableDeclaration", - "scope": 65183, - "src": "5049:21:99", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 65140, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5049:5:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 65141, - "nodeType": "ArrayTypeName", - "src": "5049:7:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65144, - "mutability": "mutable", - "name": "reverseRecord", - "nameLocation": "5081:13:99", - "nodeType": "VariableDeclaration", - "scope": 65183, - "src": "5076:18:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 65143, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5076:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4937:161:99" - }, - "returnParameters": { - "id": 65151, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65150, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 65183, - "src": "5140:7:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 65149, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5140:7:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5139:9:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "id": 65199, - "nodeType": "FunctionDefinition", - "src": "5413:134:99", - "nodes": [], - "body": { - "id": 65198, - "nodeType": "Block", - "src": "5485:62:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 65193, - "name": "LibRNSDomain", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68113, - "src": "5516:12:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$68113_$", - "typeString": "type(library LibRNSDomain)" - } - }, - "id": 65194, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5529:6:99", - "memberName": "RON_ID", - "nodeType": "MemberAccess", - "referencedDeclaration": 68076, - "src": "5516:19:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65195, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65186, - "src": "5537:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "id": 65191, - "name": "LibRNSDomain", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68113, - "src": "5498:12:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$68113_$", - "typeString": "type(library LibRNSDomain)" - } - }, - "id": 65192, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5511:4:99", - "memberName": "toId", - "nodeType": "MemberAccess", - "referencedDeclaration": 68092, - "src": "5498:17:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (uint256,string memory) pure returns (uint256)" - } - }, - "id": 65196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5498:44:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 65190, - "id": 65197, - "nodeType": "Return", - "src": "5491:51:99" - } - ] - }, - "baseFunctions": [ - 67320 - ], - "documentation": { - "id": 65184, - "nodeType": "StructuredDocumentation", - "src": "5360:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "fb021939", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "computeId", - "nameLocation": "5422:9:99", - "parameters": { - "id": 65187, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65186, - "mutability": "mutable", - "name": "name", - "nameLocation": "5446:4:99", - "nodeType": "VariableDeclaration", - "scope": 65199, - "src": "5432:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65185, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "5432:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "5431:20:99" - }, - "returnParameters": { - "id": 65190, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65189, - "mutability": "mutable", - "name": "id", - "nameLocation": "5481:2:99", - "nodeType": "VariableDeclaration", - "scope": 65199, - "src": "5473:10:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65188, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5473:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5472:12:99" - }, - "scope": 65991, - "stateMutability": "pure", - "virtual": false, - "visibility": "public" - }, - { - "id": 65228, - "nodeType": "FunctionDefinition", - "src": "5604:231:99", - "nodes": [], - "body": { - "id": 65227, - "nodeType": "Block", - "src": "5663:172:99", - "nodes": [], - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65214, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65211, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 65207, - "name": "_committedAt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64920, - "src": "5673:12:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 65209, - "indexExpression": { - "id": 65208, - "name": "commitment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65202, - "src": "5686:10:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5673:24:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 65210, - "name": "_maxCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64893, - "src": "5700:17:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5673:44:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "expression": { - "id": 65212, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "5721:5:99", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 65213, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5727:9:99", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "5721:15:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5673:63:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65219, - "nodeType": "IfStatement", - "src": "5669:113:99", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 65216, - "name": "commitment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65202, - "src": "5771:10:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 65215, - "name": "UnexpiredCommitmentExists", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67204, - "src": "5745:25:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$__$", - "typeString": "function (bytes32) pure" - } - }, - "id": 65217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5745:37:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65218, - "nodeType": "RevertStatement", - "src": "5738:44:99" - } - }, - { - "expression": { - "id": 65225, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 65220, - "name": "_committedAt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64920, - "src": "5788:12:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 65222, - "indexExpression": { - "id": 65221, - "name": "commitment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65202, - "src": "5801:10:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5788:24:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 65223, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "5815:5:99", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 65224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5821:9:99", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "5815:15:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5788:42:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 65226, - "nodeType": "ExpressionStatement", - "src": "5788:42:99" - } - ] - }, - "baseFunctions": [ - 67363 - ], - "documentation": { - "id": 65200, - "nodeType": "StructuredDocumentation", - "src": "5551:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "f14fcbc8", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 65205, - "kind": "modifierInvocation", - "modifierName": { - "id": 65204, - "name": "whenNotPaused", - "nameLocations": [ - "5649:13:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50283, - "src": "5649:13:99" - }, - "nodeType": "ModifierInvocation", - "src": "5649:13:99" - } - ], - "name": "commit", - "nameLocation": "5613:6:99", - "parameters": { - "id": 65203, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65202, - "mutability": "mutable", - "name": "commitment", - "nameLocation": "5628:10:99", - "nodeType": "VariableDeclaration", - "scope": 65228, - "src": "5620:18:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 65201, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5620:7:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5619:20:99" - }, - "returnParameters": { - "id": 65206, - "nodeType": "ParameterList", - "parameters": [], - "src": "5663:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65242, - "nodeType": "FunctionDefinition", - "src": "5892:140:99", - "nodes": [], - "body": { - "id": 65241, - "nodeType": "Block", - "src": "5984:48:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 65238, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65231, - "src": "6018:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 65237, - "name": "_setMinRegistrationDuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65777, - "src": "5990:27:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 65239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5990:37:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65240, - "nodeType": "ExpressionStatement", - "src": "5990:37:99" - } - ] - }, - "baseFunctions": [ - 67413 - ], - "documentation": { - "id": 65229, - "nodeType": "StructuredDocumentation", - "src": "5839:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "c078f16a", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 65234, - "name": "DEFAULT_ADMIN_ROLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48562, - "src": "5964:18:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 65235, - "kind": "modifierInvocation", - "modifierName": { - "id": 65233, - "name": "onlyRole", - "nameLocations": [ - "5955:8:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48573, - "src": "5955:8:99" - }, - "nodeType": "ModifierInvocation", - "src": "5955:28:99" - } - ], - "name": "setMinRegistrationDuration", - "nameLocation": "5901:26:99", - "parameters": { - "id": 65232, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65231, - "mutability": "mutable", - "name": "duration", - "nameLocation": "5936:8:99", - "nodeType": "VariableDeclaration", - "scope": 65242, - "src": "5928:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65230, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5928:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5927:18:99" - }, - "returnParameters": { - "id": 65236, - "nodeType": "ParameterList", - "parameters": [], - "src": "5984:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65320, - "nodeType": "FunctionDefinition", - "src": "6089:783:99", - "nodes": [], - "body": { - "id": 65319, - "nodeType": "Block", - "src": "6312:560:99", - "nodes": [], - "statements": [ - { - "assignments": [ - 65266 - ], - "declarations": [ - { - "constant": false, - "id": 65266, - "mutability": "mutable", - "name": "id", - "nameLocation": "6326:2:99", - "nodeType": "VariableDeclaration", - "scope": 65319, - "src": "6318:10:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65265, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6318:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65270, - "initialValue": { - "arguments": [ - { - "id": 65268, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65245, - "src": "6341:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 65267, - "name": "computeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65199, - "src": "6331:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (string memory) pure returns (uint256)" - } - }, - "id": 65269, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6331:15:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6318:28:99" - }, - { - "condition": { - "expression": { - "expression": { - "arguments": [ - { - "id": 65273, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65266, - "src": "6378:2:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 65271, - "name": "_rnsUnified", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64903, - "src": "6356:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "id": 65272, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6368:9:99", - "memberName": "getRecord", - "nodeType": "MemberAccess", - "referencedDeclaration": 66975, - "src": "6356:21:99", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_Record_$66859_memory_ptr_$", - "typeString": "function (uint256) view external returns (struct INSUnified.Record memory)" - } - }, - "id": 65274, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6356:25:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Record_$66859_memory_ptr", - "typeString": "struct INSUnified.Record memory" - } - }, - "id": 65275, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6382:3:99", - "memberName": "mut", - "nodeType": "MemberAccess", - "referencedDeclaration": 66858, - "src": "6356:29:99", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MutableRecord_$66852_memory_ptr", - "typeString": "struct INSUnified.MutableRecord memory" - } - }, - "id": 65276, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6386:9:99", - "memberName": "protected", - "nodeType": "MemberAccess", - "referencedDeclaration": 66851, - "src": "6356:39:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65281, - "nodeType": "IfStatement", - "src": "6352:86:99", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 65278, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65245, - "src": "6433:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 65277, - "name": "ErrRequestedForProtectedName", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67223, - "src": "6404:28:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory) pure" - } - }, - "id": 65279, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6404:34:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65280, - "nodeType": "RevertStatement", - "src": "6397:41:99" - } - }, - { - "assignments": [ - 65283 - ], - "declarations": [ - { - "constant": false, - "id": 65283, - "mutability": "mutable", - "name": "commitHash", - "nameLocation": "6453:10:99", - "nodeType": "VariableDeclaration", - "scope": 65319, - "src": "6445:18:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 65282, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6445:7:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 65293, - "initialValue": { - "arguments": [ - { - "id": 65285, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65245, - "src": "6498:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65286, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65247, - "src": "6517:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65287, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65249, - "src": "6540:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 65288, - "name": "secret", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65251, - "src": "6564:6:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 65289, - "name": "resolver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65253, - "src": "6588:8:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65290, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65256, - "src": "6610:4:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - { - "id": 65291, - "name": "reverseRecord", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65258, - "src": "6637:13:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 65284, - "name": "computeCommitment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65183, - "src": "6466:17:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$_t_uint64_$_t_bytes32_$_t_address_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_bool_$returns$_t_bytes32_$", - "typeString": "function (string memory,address,uint64,bytes32,address,bytes calldata[] calldata,bool) view returns (bytes32)" - } - }, - "id": 65292, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [ - "6492:4:99", - "6510:5:99", - "6530:8:99", - "6556:6:99", - "6578:8:99", - "6604:4:99", - "6622:13:99" - ], - "names": [ - "name", - "owner", - "duration", - "secret", - "resolver", - "data", - "reverseRecord" - ], - "nodeType": "FunctionCall", - "src": "6466:191:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6445:212:99" - }, - { - "expression": { - "arguments": [ - { - "id": 65295, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65249, - "src": "6683:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 65296, - "name": "commitHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65283, - "src": "6693:10:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 65294, - "name": "_validateCommitment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65760, - "src": "6663:19:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$_t_bytes32_$returns$__$", - "typeString": "function (uint64,bytes32)" - } - }, - "id": 65297, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6663:41:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65298, - "nodeType": "ExpressionStatement", - "src": "6663:41:99" - }, - { - "assignments": [ - 65300, - 65302 - ], - "declarations": [ - { - "constant": false, - "id": 65300, - "mutability": "mutable", - "name": "usdPrice", - "nameLocation": "6720:8:99", - "nodeType": "VariableDeclaration", - "scope": 65319, - "src": "6712:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65299, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6712:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65302, - "mutability": "mutable", - "name": "ronPrice", - "nameLocation": "6738:8:99", - "nodeType": "VariableDeclaration", - "scope": 65319, - "src": "6730:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65301, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6730:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65307, - "initialValue": { - "arguments": [ - { - "id": 65304, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65245, - "src": "6763:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65305, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65249, - "src": "6769:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 65303, - "name": "_handlePrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65893, - "src": "6750:12:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_uint64_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (string memory,uint64) returns (uint256,uint256)" - } - }, - "id": 65306, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6750:28:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6711:67:99" - }, - { - "expression": { - "arguments": [ - { - "id": 65309, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65245, - "src": "6794:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65310, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65247, - "src": "6800:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65311, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65249, - "src": "6807:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 65312, - "name": "resolver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65253, - "src": "6817:8:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65313, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65256, - "src": "6827:4:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - { - "id": 65314, - "name": "reverseRecord", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65258, - "src": "6833:13:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 65315, - "name": "usdPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65300, - "src": "6848:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65316, - "name": "ronPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65302, - "src": "6858:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 65308, - "name": "_register", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65956, - "src": "6784:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_address_$_t_uint64_$_t_address_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (string memory,address,uint64,address,bytes calldata[] calldata,bool,uint256,uint256)" - } - }, - "id": 65317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6784:83:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65318, - "nodeType": "ExpressionStatement", - "src": "6784:83:99" - } - ] - }, - "baseFunctions": [ - 67382 - ], - "documentation": { - "id": 65243, - "nodeType": "StructuredDocumentation", - "src": "6036:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "cb80fe2f", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 65261, - "kind": "modifierInvocation", - "modifierName": { - "id": 65260, - "name": "whenNotPaused", - "nameLocations": [ - "6285:13:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50283, - "src": "6285:13:99" - }, - "nodeType": "ModifierInvocation", - "src": "6285:13:99" - }, - { - "id": 65263, - "kind": "modifierInvocation", - "modifierName": { - "id": 65262, - "name": "nonReentrant", - "nameLocations": [ - "6299:12:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50386, - "src": "6299:12:99" - }, - "nodeType": "ModifierInvocation", - "src": "6299:12:99" - } - ], - "name": "register", - "nameLocation": "6098:8:99", - "parameters": { - "id": 65259, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65245, - "mutability": "mutable", - "name": "name", - "nameLocation": "6126:4:99", - "nodeType": "VariableDeclaration", - "scope": 65320, - "src": "6112:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65244, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6112:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65247, - "mutability": "mutable", - "name": "owner", - "nameLocation": "6144:5:99", - "nodeType": "VariableDeclaration", - "scope": 65320, - "src": "6136:13:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65246, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6136:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65249, - "mutability": "mutable", - "name": "duration", - "nameLocation": "6162:8:99", - "nodeType": "VariableDeclaration", - "scope": 65320, - "src": "6155:15:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 65248, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "6155:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65251, - "mutability": "mutable", - "name": "secret", - "nameLocation": "6184:6:99", - "nodeType": "VariableDeclaration", - "scope": 65320, - "src": "6176:14:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 65250, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6176:7:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65253, - "mutability": "mutable", - "name": "resolver", - "nameLocation": "6204:8:99", - "nodeType": "VariableDeclaration", - "scope": 65320, - "src": "6196:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65252, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6196:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65256, - "mutability": "mutable", - "name": "data", - "nameLocation": "6235:4:99", - "nodeType": "VariableDeclaration", - "scope": 65320, - "src": "6218:21:99", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 65254, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6218:5:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 65255, - "nodeType": "ArrayTypeName", - "src": "6218:7:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65258, - "mutability": "mutable", - "name": "reverseRecord", - "nameLocation": "6250:13:99", - "nodeType": "VariableDeclaration", - "scope": 65320, - "src": "6245:18:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 65257, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6245:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6106:161:99" - }, - "returnParameters": { - "id": 65264, - "nodeType": "ParameterList", - "parameters": [], - "src": "6312:0:99" - }, - "scope": 65991, - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65394, - "nodeType": "FunctionDefinition", - "src": "6929:537:99", - "nodes": [], - "body": { - "id": 65393, - "nodeType": "Block", - "src": "7027:439:99", - "nodes": [], - "statements": [ - { - "assignments": [ - null, - 65333 - ], - "declarations": [ - null, - { - "constant": false, - "id": 65333, - "mutability": "mutable", - "name": "ronPrice", - "nameLocation": "7044:8:99", - "nodeType": "VariableDeclaration", - "scope": 65393, - "src": "7036:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65332, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7036:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65338, - "initialValue": { - "arguments": [ - { - "id": 65335, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65323, - "src": "7066:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string calldata" - } - }, - { - "id": 65336, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65325, - "src": "7072:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string calldata" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 65334, - "name": "rentPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65087, - "src": "7056:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint64_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (string memory,uint64) view returns (uint256,uint256)" - } - }, - "id": 65337, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7056:25:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7033:48:99" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 65339, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "7091:3:99", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 65340, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7095:5:99", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "7091:9:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 65341, - "name": "ronPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65333, - "src": "7103:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7091:20:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65346, - "nodeType": "IfStatement", - "src": "7087:52:99", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65343, - "name": "InsufficientValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67207, - "src": "7120:17:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 65344, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7120:19:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65345, - "nodeType": "RevertStatement", - "src": "7113:26:99" - } - }, - { - "assignments": [ - 65348 - ], - "declarations": [ - { - "constant": false, - "id": 65348, - "mutability": "mutable", - "name": "remainAmount", - "nameLocation": "7153:12:99", - "nodeType": "VariableDeclaration", - "scope": 65393, - "src": "7145:20:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65347, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7145:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65353, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65352, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 65349, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "7168:3:99", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 65350, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7172:5:99", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "7168:9:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 65351, - "name": "ronPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65333, - "src": "7180:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7168:20:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7145:43:99" - }, - { - "assignments": [ - 65355 - ], - "declarations": [ - { - "constant": false, - "id": 65355, - "mutability": "mutable", - "name": "id", - "nameLocation": "7203:2:99", - "nodeType": "VariableDeclaration", - "scope": 65393, - "src": "7195:10:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65354, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7195:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65359, - "initialValue": { - "arguments": [ - { - "id": 65357, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65323, - "src": "7218:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string calldata" - } - ], - "id": 65356, - "name": "computeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65199, - "src": "7208:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (string memory) pure returns (uint256)" - } - }, - "id": 65358, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7208:15:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7195:28:99" - }, - { - "assignments": [ - 65361 - ], - "declarations": [ - { - "constant": false, - "id": 65361, - "mutability": "mutable", - "name": "expiryTime", - "nameLocation": "7236:10:99", - "nodeType": "VariableDeclaration", - "scope": 65393, - "src": "7229:17:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 65360, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "7229:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "id": 65367, - "initialValue": { - "arguments": [ - { - "id": 65364, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65355, - "src": "7267:2:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65365, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65325, - "src": "7271:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "expression": { - "id": 65362, - "name": "_rnsUnified", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64903, - "src": "7249:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "id": 65363, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7261:5:99", - "memberName": "renew", - "nodeType": "MemberAccess", - "referencedDeclaration": 67028, - "src": "7249:17:99", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint64_$returns$_t_uint64_$", - "typeString": "function (uint256,uint64) external returns (uint64)" - } - }, - "id": 65366, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7249:31:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7229:51:99" - }, - { - "eventCall": { - "arguments": [ - { - "id": 65369, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65323, - "src": "7303:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string calldata" - } - }, - { - "id": 65370, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65355, - "src": "7309:2:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65371, - "name": "ronPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65333, - "src": "7313:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65372, - "name": "expiryTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65361, - "src": "7323:10:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string calldata" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 65368, - "name": "NameRenewed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67287, - "src": "7291:11:99", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint64_$returns$__$", - "typeString": "function (string memory,uint256,uint256,uint64)" - } - }, - "id": 65373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7291:43:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65374, - "nodeType": "EmitStatement", - "src": "7286:48:99" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65375, - "name": "remainAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65348, - "src": "7345:12:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 65376, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7361:1:99", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "7345:17:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65389, - "nodeType": "IfStatement", - "src": "7341:90:99", - "trueBody": { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65383, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 52306, - "src": "7403:10:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 65384, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7403:12:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 65382, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7395:8:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_payable_$", - "typeString": "type(address payable)" - }, - "typeName": { - "id": 65381, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7395:8:99", - "stateMutability": "payable", - "typeDescriptions": {} - } - }, - "id": 65385, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7395:21:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "id": 65386, - "name": "remainAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65348, - "src": "7418:12:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 65378, - "name": "RONTransferHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69515, - "src": "7364:17:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_RONTransferHelper_$69515_$", - "typeString": "type(library RONTransferHelper)" - } - }, - "id": 65380, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7382:12:99", - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 69490, - "src": "7364:30:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$", - "typeString": "function (address payable,uint256)" - } - }, - "id": 65387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7364:67:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65388, - "nodeType": "ExpressionStatement", - "src": "7364:67:99" - } - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65390, - "name": "_transferRONToTreasury", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65837, - "src": "7437:22:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 65391, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7437:24:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65392, - "nodeType": "ExpressionStatement", - "src": "7437:24:99" - } - ] - }, - "baseFunctions": [ - 67390 - ], - "documentation": { - "id": 65321, - "nodeType": "StructuredDocumentation", - "src": "6876:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "5a705169", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 65328, - "kind": "modifierInvocation", - "modifierName": { - "id": 65327, - "name": "whenNotPaused", - "nameLocations": [ - "7000:13:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50283, - "src": "7000:13:99" - }, - "nodeType": "ModifierInvocation", - "src": "7000:13:99" - }, - { - "id": 65330, - "kind": "modifierInvocation", - "modifierName": { - "id": 65329, - "name": "nonReentrant", - "nameLocations": [ - "7014:12:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50386, - "src": "7014:12:99" - }, - "nodeType": "ModifierInvocation", - "src": "7014:12:99" - } - ], - "name": "renew", - "nameLocation": "6938:5:99", - "parameters": { - "id": 65326, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65323, - "mutability": "mutable", - "name": "name", - "nameLocation": "6960:4:99", - "nodeType": "VariableDeclaration", - "scope": 65394, - "src": "6944:20:99", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65322, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6944:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65325, - "mutability": "mutable", - "name": "duration", - "nameLocation": "6973:8:99", - "nodeType": "VariableDeclaration", - "scope": 65394, - "src": "6966:15:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 65324, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "6966:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "6943:39:99" - }, - "returnParameters": { - "id": 65331, - "nodeType": "ParameterList", - "parameters": [], - "src": "7027:0:99" - }, - "scope": 65991, - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65484, - "nodeType": "FunctionDefinition", - "src": "7523:732:99", - "nodes": [], - "body": { - "id": 65483, - "nodeType": "Block", - "src": "7759:496:99", - "nodes": [], - "statements": [ - { - "condition": { - "id": 65421, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "7769:16:99", - "subExpression": { - "arguments": [ - { - "id": 65419, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65397, - "src": "7780:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 65418, - "name": "available", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65128, - "src": "7770:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$", - "typeString": "function (string memory) view returns (bool)" - } - }, - "id": 65420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7770:15:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65426, - "nodeType": "IfStatement", - "src": "7765:51:99", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 65423, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65397, - "src": "7811:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 65422, - "name": "NameNotAvailable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67191, - "src": "7794:16:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory) pure" - } - }, - "id": 65424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7794:22:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65425, - "nodeType": "RevertStatement", - "src": "7787:29:99" - } - }, - { - "assignments": [ - 65428 - ], - "declarations": [ - { - "constant": false, - "id": 65428, - "mutability": "mutable", - "name": "id", - "nameLocation": "7830:2:99", - "nodeType": "VariableDeclaration", - "scope": 65483, - "src": "7822:10:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65427, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7822:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65432, - "initialValue": { - "arguments": [ - { - "id": 65430, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65397, - "src": "7845:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 65429, - "name": "computeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65199, - "src": "7835:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (string memory) pure returns (uint256)" - } - }, - "id": 65431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7835:15:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7822:28:99" - }, - { - "assignments": [ - 65434 - ], - "declarations": [ - { - "constant": false, - "id": 65434, - "mutability": "mutable", - "name": "protected", - "nameLocation": "7861:9:99", - "nodeType": "VariableDeclaration", - "scope": 65483, - "src": "7856:14:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 65433, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7856:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 65441, - "initialValue": { - "expression": { - "expression": { - "arguments": [ - { - "id": 65437, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65428, - "src": "7895:2:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 65435, - "name": "_rnsUnified", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64903, - "src": "7873:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "id": 65436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7885:9:99", - "memberName": "getRecord", - "nodeType": "MemberAccess", - "referencedDeclaration": 66975, - "src": "7873:21:99", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_Record_$66859_memory_ptr_$", - "typeString": "function (uint256) view external returns (struct INSUnified.Record memory)" - } - }, - "id": 65438, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7873:25:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Record_$66859_memory_ptr", - "typeString": "struct INSUnified.Record memory" - } - }, - "id": 65439, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7899:3:99", - "memberName": "mut", - "nodeType": "MemberAccess", - "referencedDeclaration": 66858, - "src": "7873:29:99", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MutableRecord_$66852_memory_ptr", - "typeString": "struct INSUnified.MutableRecord memory" - } - }, - "id": 65440, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7903:9:99", - "memberName": "protected", - "nodeType": "MemberAccess", - "referencedDeclaration": 66851, - "src": "7873:39:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7856:56:99" - }, - { - "assignments": [ - 65443 - ], - "declarations": [ - { - "constant": false, - "id": 65443, - "mutability": "mutable", - "name": "whitelisted", - "nameLocation": "7923:11:99", - "nodeType": "VariableDeclaration", - "scope": 65483, - "src": "7918:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 65442, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7918:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 65449, - "initialValue": { - "baseExpression": { - "baseExpression": { - "id": 65444, - "name": "_protectedNamesWhitelisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64927, - "src": "7937:26:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$", - "typeString": "mapping(uint256 => mapping(address => bool))" - } - }, - "id": 65446, - "indexExpression": { - "id": 65445, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65428, - "src": "7964:2:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7937:30:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 65448, - "indexExpression": { - "id": 65447, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65399, - "src": "7968:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7937:37:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7918:56:99" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 65454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65451, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "7984:10:99", - "subExpression": { - "id": 65450, - "name": "protected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65434, - "src": "7985:9:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "id": 65453, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "7998:12:99", - "subExpression": { - "id": 65452, - "name": "whitelisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65443, - "src": "7999:11:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "7984:26:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65462, - "nodeType": "IfStatement", - "src": "7980:107:99", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 65456, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65397, - "src": "8051:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65457, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65399, - "src": "8057:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65458, - "name": "protected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65434, - "src": "8064:9:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 65459, - "name": "whitelisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65443, - "src": "8075:11:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 65455, - "name": "ErrInvalidRegisterProtectedName", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67234, - "src": "8019:31:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_string_memory_ptr_$_t_address_$_t_bool_$_t_bool_$returns$__$", - "typeString": "function (string memory,address,bool,bool) pure" - } - }, - "id": 65460, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8019:68:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65461, - "nodeType": "RevertStatement", - "src": "8012:75:99" - } - }, - { - "assignments": [ - 65464, - 65466 - ], - "declarations": [ - { - "constant": false, - "id": 65464, - "mutability": "mutable", - "name": "usdPrice", - "nameLocation": "8103:8:99", - "nodeType": "VariableDeclaration", - "scope": 65483, - "src": "8095:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65463, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8095:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65466, - "mutability": "mutable", - "name": "ronPrice", - "nameLocation": "8121:8:99", - "nodeType": "VariableDeclaration", - "scope": 65483, - "src": "8113:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65465, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8113:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65471, - "initialValue": { - "arguments": [ - { - "id": 65468, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65397, - "src": "8146:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65469, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65401, - "src": "8152:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 65467, - "name": "_handlePrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65893, - "src": "8133:12:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_uint64_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (string memory,uint64) returns (uint256,uint256)" - } - }, - "id": 65470, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8133:28:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8094:67:99" - }, - { - "expression": { - "arguments": [ - { - "id": 65473, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65397, - "src": "8177:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65474, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65399, - "src": "8183:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65475, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65401, - "src": "8190:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 65476, - "name": "resolver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65403, - "src": "8200:8:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65477, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65406, - "src": "8210:4:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - { - "id": 65478, - "name": "reverseRecord", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65408, - "src": "8216:13:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 65479, - "name": "usdPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65464, - "src": "8231:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65480, - "name": "ronPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65466, - "src": "8241:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 65472, - "name": "_register", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65956, - "src": "8167:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_address_$_t_uint64_$_t_address_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (string memory,address,uint64,address,bytes calldata[] calldata,bool,uint256,uint256)" - } - }, - "id": 65481, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8167:83:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65482, - "nodeType": "ExpressionStatement", - "src": "8167:83:99" - } - ] - }, - "baseFunctions": [ - 67407 - ], - "documentation": { - "id": 65395, - "nodeType": "StructuredDocumentation", - "src": "7470:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "8ca3d183", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 65411, - "kind": "modifierInvocation", - "modifierName": { - "id": 65410, - "name": "whenNotPaused", - "nameLocations": [ - "7712:13:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50283, - "src": "7712:13:99" - }, - "nodeType": "ModifierInvocation", - "src": "7712:13:99" - }, - { - "id": 65413, - "kind": "modifierInvocation", - "modifierName": { - "id": 65412, - "name": "nonReentrant", - "nameLocations": [ - "7726:12:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50386, - "src": "7726:12:99" - }, - "nodeType": "ModifierInvocation", - "src": "7726:12:99" - }, - { - "arguments": [ - { - "id": 65415, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65397, - "src": "7753:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "id": 65416, - "kind": "modifierInvocation", - "modifierName": { - "id": 65414, - "name": "onlyAvailable", - "nameLocations": [ - "7739:13:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 64937, - "src": "7739:13:99" - }, - "nodeType": "ModifierInvocation", - "src": "7739:19:99" - } - ], - "name": "registerProtectedName", - "nameLocation": "7532:21:99", - "parameters": { - "id": 65409, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65397, - "mutability": "mutable", - "name": "name", - "nameLocation": "7573:4:99", - "nodeType": "VariableDeclaration", - "scope": 65484, - "src": "7559:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65396, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "7559:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65399, - "mutability": "mutable", - "name": "owner", - "nameLocation": "7591:5:99", - "nodeType": "VariableDeclaration", - "scope": 65484, - "src": "7583:13:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65398, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7583:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65401, - "mutability": "mutable", - "name": "duration", - "nameLocation": "7609:8:99", - "nodeType": "VariableDeclaration", - "scope": 65484, - "src": "7602:15:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 65400, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "7602:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65403, - "mutability": "mutable", - "name": "resolver", - "nameLocation": "7631:8:99", - "nodeType": "VariableDeclaration", - "scope": 65484, - "src": "7623:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65402, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7623:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65406, - "mutability": "mutable", - "name": "data", - "nameLocation": "7662:4:99", - "nodeType": "VariableDeclaration", - "scope": 65484, - "src": "7645:21:99", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 65404, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7645:5:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 65405, - "nodeType": "ArrayTypeName", - "src": "7645:7:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65408, - "mutability": "mutable", - "name": "reverseRecord", - "nameLocation": "7677:13:99", - "nodeType": "VariableDeclaration", - "scope": 65484, - "src": "7672:18:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 65407, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7672:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "7553:141:99" - }, - "returnParameters": { - "id": 65417, - "nodeType": "ParameterList", - "parameters": [], - "src": "7759:0:99" - }, - "scope": 65991, - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65549, - "nodeType": "FunctionDefinition", - "src": "8312:475:99", - "nodes": [], - "body": { - "id": 65548, - "nodeType": "Block", - "src": "8456:331:99", - "nodes": [], - "statements": [ - { - "assignments": [ - 65500 - ], - "declarations": [ - { - "constant": false, - "id": 65500, - "mutability": "mutable", - "name": "length", - "nameLocation": "8470:6:99", - "nodeType": "VariableDeclaration", - "scope": 65548, - "src": "8462:14:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65499, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8462:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65503, - "initialValue": { - "expression": { - "id": 65501, - "name": "ids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65488, - "src": "8479:3:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - }, - "id": 65502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8483:6:99", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "8479:10:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8462:27:99" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 65511, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65506, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65504, - "name": "length", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65500, - "src": "8499:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 65505, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8509:1:99", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8499:11:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65507, - "name": "length", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65500, - "src": "8514:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "id": 65508, - "name": "owners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65491, - "src": "8524:6:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", - "typeString": "address[] calldata" - } - }, - "id": 65509, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8531:6:99", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "8524:13:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8514:23:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "8499:38:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65515, - "nodeType": "IfStatement", - "src": "8495:71:99", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65512, - "name": "InvalidArrayLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67237, - "src": "8546:18:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 65513, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8546:20:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65514, - "nodeType": "RevertStatement", - "src": "8539:27:99" - } - }, - { - "body": { - "id": 65538, - "nodeType": "Block", - "src": "8602:109:99", - "statements": [ - { - "expression": { - "id": 65532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 65522, - "name": "_protectedNamesWhitelisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64927, - "src": "8610:26:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$", - "typeString": "mapping(uint256 => mapping(address => bool))" - } - }, - "id": 65529, - "indexExpression": { - "baseExpression": { - "id": 65523, - "name": "ids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65488, - "src": "8637:3:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - }, - "id": 65525, - "indexExpression": { - "id": 65524, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65517, - "src": "8641:1:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "8637:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "8610:34:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 65530, - "indexExpression": { - "baseExpression": { - "id": 65526, - "name": "owners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65491, - "src": "8645:6:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", - "typeString": "address[] calldata" - } - }, - "id": 65528, - "indexExpression": { - "id": 65527, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65517, - "src": "8652:1:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "8645:9:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "8610:45:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 65531, - "name": "status", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65493, - "src": "8658:6:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "8610:54:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65533, - "nodeType": "ExpressionStatement", - "src": "8610:54:99" - }, - { - "id": 65537, - "nodeType": "UncheckedBlock", - "src": "8673:32:99", - "statements": [ - { - "expression": { - "id": 65535, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "8693:3:99", - "subExpression": { - "id": 65534, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65517, - "src": "8695:1:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 65536, - "nodeType": "ExpressionStatement", - "src": "8693:3:99" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65521, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65519, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65517, - "src": "8589:1:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 65520, - "name": "length", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65500, - "src": "8593:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8589:10:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65539, - "initializationExpression": { - "assignments": [ - 65517 - ], - "declarations": [ - { - "constant": false, - "id": 65517, - "mutability": "mutable", - "name": "i", - "nameLocation": "8586:1:99", - "nodeType": "VariableDeclaration", - "scope": 65539, - "src": "8578:9:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65516, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8578:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65518, - "nodeType": "VariableDeclarationStatement", - "src": "8578:9:99" - }, - "nodeType": "ForStatement", - "src": "8573:138:99" - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65541, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 52306, - "src": "8748:10:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 65542, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8748:12:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65543, - "name": "ids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65488, - "src": "8762:3:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - }, - { - "id": 65544, - "name": "owners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65491, - "src": "8767:6:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", - "typeString": "address[] calldata" - } - }, - { - "id": 65545, - "name": "status", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65493, - "src": "8775:6:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - }, - { - "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", - "typeString": "address[] calldata" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 65540, - "name": "ProtectedNamesWhitelisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67300, - "src": "8722:25:99", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_bool_$returns$__$", - "typeString": "function (address,uint256[] memory,address[] memory,bool)" - } - }, - "id": 65546, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8722:60:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65547, - "nodeType": "EmitStatement", - "src": "8717:65:99" - } - ] - }, - "baseFunctions": [ - 67433 - ], - "documentation": { - "id": 65485, - "nodeType": "StructuredDocumentation", - "src": "8259:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "6df99353", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 65496, - "name": "OPERATOR_ROLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64882, - "src": "8439:13:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 65497, - "kind": "modifierInvocation", - "modifierName": { - "id": 65495, - "name": "onlyRole", - "nameLocations": [ - "8430:8:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48573, - "src": "8430:8:99" - }, - "nodeType": "ModifierInvocation", - "src": "8430:23:99" - } - ], - "name": "bulkWhitelistProtectedNames", - "nameLocation": "8321:27:99", - "parameters": { - "id": 65494, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65488, - "mutability": "mutable", - "name": "ids", - "nameLocation": "8368:3:99", - "nodeType": "VariableDeclaration", - "scope": 65549, - "src": "8349:22:99", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 65486, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8349:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 65487, - "nodeType": "ArrayTypeName", - "src": "8349:9:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65491, - "mutability": "mutable", - "name": "owners", - "nameLocation": "8392:6:99", - "nodeType": "VariableDeclaration", - "scope": 65549, - "src": "8373:25:99", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 65489, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8373:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 65490, - "nodeType": "ArrayTypeName", - "src": "8373:9:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65493, - "mutability": "mutable", - "name": "status", - "nameLocation": "8405:6:99", - "nodeType": "VariableDeclaration", - "scope": 65549, - "src": "8400:11:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 65492, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8400:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "8348:64:99" - }, - "returnParameters": { - "id": 65498, - "nodeType": "ParameterList", - "parameters": [], - "src": "8456:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65566, - "nodeType": "FunctionDefinition", - "src": "8844:159:99", - "nodes": [], - "body": { - "id": 65565, - "nodeType": "Block", - "src": "8948:55:99", - "nodes": [], - "statements": [ - { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 65559, - "name": "_protectedNamesWhitelisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64927, - "src": "8961:26:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$", - "typeString": "mapping(uint256 => mapping(address => bool))" - } - }, - "id": 65561, - "indexExpression": { - "id": 65560, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65552, - "src": "8988:2:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "8961:30:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 65563, - "indexExpression": { - "id": 65562, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65554, - "src": "8992:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "8961:37:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 65558, - "id": 65564, - "nodeType": "Return", - "src": "8954:44:99" - } - ] - }, - "baseFunctions": [ - 67443 - ], - "documentation": { - "id": 65550, - "nodeType": "StructuredDocumentation", - "src": "8791:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "3b6c2ea3", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getWhitelistProtectedNameStatus", - "nameLocation": "8853:31:99", - "parameters": { - "id": 65555, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65552, - "mutability": "mutable", - "name": "id", - "nameLocation": "8893:2:99", - "nodeType": "VariableDeclaration", - "scope": 65566, - "src": "8885:10:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65551, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8885:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65554, - "mutability": "mutable", - "name": "owner", - "nameLocation": "8905:5:99", - "nodeType": "VariableDeclaration", - "scope": 65566, - "src": "8897:13:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65553, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8897:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8884:27:99" - }, - "returnParameters": { - "id": 65558, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65557, - "mutability": "mutable", - "name": "status", - "nameLocation": "8940:6:99", - "nodeType": "VariableDeclaration", - "scope": 65566, - "src": "8935:11:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 65556, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8935:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "8934:13:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 65580, - "nodeType": "FunctionDefinition", - "src": "9060:108:99", - "nodes": [], - "body": { - "id": 65579, - "nodeType": "Block", - "src": "9141:27:99", - "nodes": [], - "statements": [ - { - "expression": { - "id": 65577, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 65575, - "name": "_treasury", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64899, - "src": "9147:9:99", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 65576, - "name": "addr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65569, - "src": "9159:4:99", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "9147:16:99", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 65578, - "nodeType": "ExpressionStatement", - "src": "9147:16:99" - } - ] - }, - "baseFunctions": [ - 67449 - ], - "documentation": { - "id": 65567, - "nodeType": "StructuredDocumentation", - "src": "9007:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "f0f44260", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 65572, - "name": "DEFAULT_ADMIN_ROLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48562, - "src": "9121:18:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 65573, - "kind": "modifierInvocation", - "modifierName": { - "id": 65571, - "name": "onlyRole", - "nameLocations": [ - "9112:8:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48573, - "src": "9112:8:99" - }, - "nodeType": "ModifierInvocation", - "src": "9112:28:99" - } - ], - "name": "setTreasury", - "nameLocation": "9069:11:99", - "parameters": { - "id": 65570, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65569, - "mutability": "mutable", - "name": "addr", - "nameLocation": "9097:4:99", - "nodeType": "VariableDeclaration", - "scope": 65580, - "src": "9081:20:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 65568, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9081:15:99", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "visibility": "internal" - } - ], - "src": "9080:22:99" - }, - "returnParameters": { - "id": 65574, - "nodeType": "ParameterList", - "parameters": [], - "src": "9141:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65597, - "nodeType": "FunctionDefinition", - "src": "9225:180:99", - "nodes": [], - "body": { - "id": 65596, - "nodeType": "Block", - "src": "9341:64:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 65592, - "name": "minCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65583, - "src": "9365:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65593, - "name": "maxCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65585, - "src": "9383:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 65591, - "name": "_setCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65636, - "src": "9347:17:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 65594, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9347:53:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65595, - "nodeType": "ExpressionStatement", - "src": "9347:53:99" - } - ] - }, - "baseFunctions": [ - 67421 - ], - "documentation": { - "id": 65581, - "nodeType": "StructuredDocumentation", - "src": "9172:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "e4214b46", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 65588, - "name": "DEFAULT_ADMIN_ROLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48562, - "src": "9321:18:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 65589, - "kind": "modifierInvocation", - "modifierName": { - "id": 65587, - "name": "onlyRole", - "nameLocations": [ - "9312:8:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48573, - "src": "9312:8:99" - }, - "nodeType": "ModifierInvocation", - "src": "9312:28:99" - } - ], - "name": "setCommitmentAge", - "nameLocation": "9234:16:99", - "parameters": { - "id": 65586, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65583, - "mutability": "mutable", - "name": "minCommitmentAge", - "nameLocation": "9259:16:99", - "nodeType": "VariableDeclaration", - "scope": 65597, - "src": "9251:24:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65582, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9251:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65585, - "mutability": "mutable", - "name": "maxCommitmentAge", - "nameLocation": "9285:16:99", - "nodeType": "VariableDeclaration", - "scope": 65597, - "src": "9277:24:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65584, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9277:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9250:52:99" - }, - "returnParameters": { - "id": 65590, - "nodeType": "ParameterList", - "parameters": [], - "src": "9341:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65636, - "nodeType": "FunctionDefinition", - "src": "9897:417:99", - "nodes": [], - "body": { - "id": 65635, - "nodeType": "Block", - "src": "9985:329:99", - "nodes": [], - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65605, - "name": "maxCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65602, - "src": "9995:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "expression": { - "id": 65606, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "10014:5:99", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 65607, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10020:9:99", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "10014:15:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9995:34:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65612, - "nodeType": "IfStatement", - "src": "9991:72:99", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65609, - "name": "MaxCommitmentAgeTooHigh", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67218, - "src": "10038:23:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 65610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10038:25:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65611, - "nodeType": "RevertStatement", - "src": "10031:32:99" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65615, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65613, - "name": "maxCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65602, - "src": "10073:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 65614, - "name": "minCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65600, - "src": "10093:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10073:36:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65619, - "nodeType": "IfStatement", - "src": "10069:73:99", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65616, - "name": "MaxCommitmentAgeTooLow", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67215, - "src": "10118:22:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 65617, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10118:24:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65618, - "nodeType": "RevertStatement", - "src": "10111:31:99" - } - }, - { - "expression": { - "id": 65622, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 65620, - "name": "_minCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64890, - "src": "10149:17:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 65621, - "name": "minCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65600, - "src": "10169:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10149:36:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 65623, - "nodeType": "ExpressionStatement", - "src": "10149:36:99" - }, - { - "expression": { - "id": 65626, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 65624, - "name": "_maxCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64893, - "src": "10191:17:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 65625, - "name": "maxCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65602, - "src": "10211:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10191:36:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 65627, - "nodeType": "ExpressionStatement", - "src": "10191:36:99" - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65629, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 52306, - "src": "10260:10:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 65630, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10260:12:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65631, - "name": "minCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65600, - "src": "10274:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65632, - "name": "maxCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65602, - "src": "10292:16:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 65628, - "name": "CommitmentAgeUpdated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67261, - "src": "10239:20:99", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256)" - } - }, - "id": 65633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10239:70:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65634, - "nodeType": "EmitStatement", - "src": "10234:75:99" - } - ] - }, - "documentation": { - "id": 65598, - "nodeType": "StructuredDocumentation", - "src": "9409:485:99", - "text": " @dev Internal function to update the commitment age range.\n Requirements:\n - The `maxCommitmentAge` must be less than or equal to the current block timestamp.\n - The `maxCommitmentAge` must be greater than the `minCommitmentAge`.\n Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\n @param minCommitmentAge The minimum commitment age in seconds.\n @param maxCommitmentAge The maximum commitment age in seconds." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setCommitmentAge", - "nameLocation": "9906:17:99", - "parameters": { - "id": 65603, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65600, - "mutability": "mutable", - "name": "minCommitmentAge", - "nameLocation": "9932:16:99", - "nodeType": "VariableDeclaration", - "scope": 65636, - "src": "9924:24:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65599, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9924:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65602, - "mutability": "mutable", - "name": "maxCommitmentAge", - "nameLocation": "9958:16:99", - "nodeType": "VariableDeclaration", - "scope": 65636, - "src": "9950:24:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65601, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9950:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9923:52:99" - }, - "returnParameters": { - "id": 65604, - "nodeType": "ParameterList", - "parameters": [], - "src": "9985:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 65651, - "nodeType": "FunctionDefinition", - "src": "10371:129:99", - "nodes": [], - "body": { - "id": 65650, - "nodeType": "Block", - "src": "10461:39:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 65647, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65640, - "src": "10483:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - ], - "id": 65646, - "name": "_setPriceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65974, - "src": "10467:15:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_INSDomainPrice_$66670_$returns$__$", - "typeString": "function (contract INSDomainPrice)" - } - }, - "id": 65648, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10467:28:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65649, - "nodeType": "ExpressionStatement", - "src": "10467:28:99" - } - ] - }, - "baseFunctions": [ - 67456 - ], - "documentation": { - "id": 65637, - "nodeType": "StructuredDocumentation", - "src": "10318:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "530e784f", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 65643, - "name": "DEFAULT_ADMIN_ROLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48562, - "src": "10441:18:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 65644, - "kind": "modifierInvocation", - "modifierName": { - "id": 65642, - "name": "onlyRole", - "nameLocations": [ - "10432:8:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48573, - "src": "10432:8:99" - }, - "nodeType": "ModifierInvocation", - "src": "10432:28:99" - } - ], - "name": "setPriceOracle", - "nameLocation": "10380:14:99", - "parameters": { - "id": 65641, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65640, - "mutability": "mutable", - "name": "priceOracle", - "nameLocation": "10410:11:99", - "nodeType": "VariableDeclaration", - "scope": 65651, - "src": "10395:26:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - }, - "typeName": { - "id": 65639, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 65638, - "name": "INSDomainPrice", - "nameLocations": [ - "10395:14:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 66670, - "src": "10395:14:99" - }, - "referencedDeclaration": 66670, - "src": "10395:14:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - }, - "visibility": "internal" - } - ], - "src": "10394:28:99" - }, - "returnParameters": { - "id": 65645, - "nodeType": "ParameterList", - "parameters": [], - "src": "10461:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 65660, - "nodeType": "FunctionDefinition", - "src": "10557:82:99", - "nodes": [], - "body": { - "id": 65659, - "nodeType": "Block", - "src": "10612:27:99", - "nodes": [], - "statements": [ - { - "expression": { - "id": 65657, - "name": "_treasury", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64899, - "src": "10625:9:99", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "functionReturnParameters": 65656, - "id": 65658, - "nodeType": "Return", - "src": "10618:16:99" - } - ] - }, - "baseFunctions": [ - 67462 - ], - "documentation": { - "id": 65652, - "nodeType": "StructuredDocumentation", - "src": "10504:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "3b19e84a", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getTreasury", - "nameLocation": "10566:11:99", - "parameters": { - "id": 65653, - "nodeType": "ParameterList", - "parameters": [], - "src": "10577:2:99" - }, - "returnParameters": { - "id": 65656, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65655, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 65660, - "src": "10603:7:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65654, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10603:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "10602:9:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 65673, - "nodeType": "FunctionDefinition", - "src": "10696:164:99", - "nodes": [], - "body": { - "id": 65672, - "nodeType": "Block", - "src": "10804:56:99", - "nodes": [], - "statements": [ - { - "expression": { - "components": [ - { - "id": 65668, - "name": "_minCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64890, - "src": "10818:17:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65669, - "name": "_maxCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64893, - "src": "10837:17:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 65670, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10817:38:99", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "functionReturnParameters": 65667, - "id": 65671, - "nodeType": "Return", - "src": "10810:45:99" - } - ] - }, - "baseFunctions": [ - 67502 - ], - "documentation": { - "id": 65661, - "nodeType": "StructuredDocumentation", - "src": "10643:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "1321889f", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCommitmentAgeRange", - "nameLocation": "10705:21:99", - "parameters": { - "id": 65662, - "nodeType": "ParameterList", - "parameters": [], - "src": "10726:2:99" - }, - "returnParameters": { - "id": 65667, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65664, - "mutability": "mutable", - "name": "minCommitmentAge", - "nameLocation": "10760:16:99", - "nodeType": "VariableDeclaration", - "scope": 65673, - "src": "10752:24:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65663, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10752:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65666, - "mutability": "mutable", - "name": "maxCommitmentAge", - "nameLocation": "10786:16:99", - "nodeType": "VariableDeclaration", - "scope": 65673, - "src": "10778:24:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65665, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10778:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10751:52:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 65683, - "nodeType": "FunctionDefinition", - "src": "10917:89:99", - "nodes": [], - "body": { - "id": 65682, - "nodeType": "Block", - "src": "10977:29:99", - "nodes": [], - "statements": [ - { - "expression": { - "id": 65680, - "name": "_rnsUnified", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64903, - "src": "10990:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "functionReturnParameters": 65679, - "id": 65681, - "nodeType": "Return", - "src": "10983:18:99" - } - ] - }, - "baseFunctions": [ - 67509 - ], - "documentation": { - "id": 65674, - "nodeType": "StructuredDocumentation", - "src": "10864:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "8c843314", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getRNSUnified", - "nameLocation": "10926:13:99", - "parameters": { - "id": 65675, - "nodeType": "ParameterList", - "parameters": [], - "src": "10939:2:99" - }, - "returnParameters": { - "id": 65679, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65678, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 65683, - "src": "10965:10:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - }, - "typeName": { - "id": 65677, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 65676, - "name": "INSUnified", - "nameLocations": [ - "10965:10:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 67046, - "src": "10965:10:99" - }, - "referencedDeclaration": 67046, - "src": "10965:10:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "visibility": "internal" - } - ], - "src": "10964:12:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 65693, - "nodeType": "FunctionDefinition", - "src": "11063:95:99", - "nodes": [], - "body": { - "id": 65692, - "nodeType": "Block", - "src": "11128:30:99", - "nodes": [], - "statements": [ - { - "expression": { - "id": 65690, - "name": "_priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64911, - "src": "11141:12:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - }, - "functionReturnParameters": 65689, - "id": 65691, - "nodeType": "Return", - "src": "11134:19:99" - } - ] - }, - "baseFunctions": [ - 67516 - ], - "documentation": { - "id": 65684, - "nodeType": "StructuredDocumentation", - "src": "11010:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "fca513a8", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getPriceOracle", - "nameLocation": "11072:14:99", - "parameters": { - "id": 65685, - "nodeType": "ParameterList", - "parameters": [], - "src": "11086:2:99" - }, - "returnParameters": { - "id": 65689, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65688, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 65693, - "src": "11112:14:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - }, - "typeName": { - "id": 65687, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 65686, - "name": "INSDomainPrice", - "nameLocations": [ - "11112:14:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 66670, - "src": "11112:14:99" - }, - "referencedDeclaration": 66670, - "src": "11112:14:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - }, - "visibility": "internal" - } - ], - "src": "11111:16:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 65703, - "nodeType": "FunctionDefinition", - "src": "11215:93:99", - "nodes": [], - "body": { - "id": 65702, - "nodeType": "Block", - "src": "11278:30:99", - "nodes": [], - "statements": [ - { - "expression": { - "id": 65700, - "name": "_nameChecker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64907, - "src": "11291:12:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - } - }, - "functionReturnParameters": 65699, - "id": 65701, - "nodeType": "Return", - "src": "11284:19:99" - } - ] - }, - "baseFunctions": [ - 67523 - ], - "documentation": { - "id": 65694, - "nodeType": "StructuredDocumentation", - "src": "11162:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "224b04de", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getNameChecker", - "nameLocation": "11224:14:99", - "parameters": { - "id": 65695, - "nodeType": "ParameterList", - "parameters": [], - "src": "11238:2:99" - }, - "returnParameters": { - "id": 65699, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65698, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 65703, - "src": "11264:12:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - }, - "typeName": { - "id": 65697, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 65696, - "name": "INameChecker", - "nameLocations": [ - "11264:12:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 67165, - "src": "11264:12:99" - }, - "referencedDeclaration": 67165, - "src": "11264:12:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INameChecker_$67165", - "typeString": "contract INameChecker" - } - }, - "visibility": "internal" - } - ], - "src": "11263:14:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 65713, - "nodeType": "FunctionDefinition", - "src": "11365:110:99", - "nodes": [], - "body": { - "id": 65712, - "nodeType": "Block", - "src": "11440:35:99", - "nodes": [], - "statements": [ - { - "expression": { - "id": 65710, - "name": "_reverseRegistrar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64915, - "src": "11453:17:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - } - }, - "functionReturnParameters": 65709, - "id": 65711, - "nodeType": "Return", - "src": "11446:24:99" - } - ] - }, - "baseFunctions": [ - 67530 - ], - "documentation": { - "id": 65704, - "nodeType": "StructuredDocumentation", - "src": "11312:50:99", - "text": " @inheritdoc IRONRegistrarController" - }, - "functionSelector": "237a78fb", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getReverseRegistrar", - "nameLocation": "11374:19:99", - "parameters": { - "id": 65705, - "nodeType": "ParameterList", - "parameters": [], - "src": "11393:2:99" - }, - "returnParameters": { - "id": 65709, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65708, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 65713, - "src": "11419:19:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - }, - "typeName": { - "id": 65707, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 65706, - "name": "INSReverseRegistrar", - "nameLocations": [ - "11419:19:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 66789, - "src": "11419:19:99" - }, - "referencedDeclaration": 66789, - "src": "11419:19:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - } - }, - "visibility": "internal" - } - ], - "src": "11418:21:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 65760, - "nodeType": "FunctionDefinition", - "src": "11677:434:99", - "nodes": [], - "body": { - "id": 65759, - "nodeType": "Block", - "src": "11752:359:99", - "nodes": [], - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65723, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65721, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65716, - "src": "11762:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 65722, - "name": "_minRegistrationDuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64896, - "src": "11773:24:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11762:35:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65728, - "nodeType": "IfStatement", - "src": "11758:74:99", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 65725, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65716, - "src": "11823:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 65724, - "name": "DurationTooShort", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67196, - "src": "11806:16:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint64_$returns$__$", - "typeString": "function (uint64) pure" - } - }, - "id": 65726, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11806:26:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65727, - "nodeType": "RevertStatement", - "src": "11799:33:99" - } - }, - { - "assignments": [ - 65730 - ], - "declarations": [ - { - "constant": false, - "id": 65730, - "mutability": "mutable", - "name": "passedDuration", - "nameLocation": "11847:14:99", - "nodeType": "VariableDeclaration", - "scope": 65759, - "src": "11839:22:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65729, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11839:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65737, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65736, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 65731, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "11864:5:99", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 65732, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11870:9:99", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "11864:15:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "baseExpression": { - "id": 65733, - "name": "_committedAt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64920, - "src": "11882:12:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 65735, - "indexExpression": { - "id": 65734, - "name": "commitment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65718, - "src": "11895:10:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11882:24:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11864:42:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11839:67:99" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65740, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65738, - "name": "passedDuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65730, - "src": "11916:14:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 65739, - "name": "_minCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64890, - "src": "11933:17:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11916:34:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65745, - "nodeType": "IfStatement", - "src": "11912:75:99", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 65742, - "name": "commitment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65718, - "src": "11976:10:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 65741, - "name": "CommitmentTooNew", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67181, - "src": "11959:16:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$__$", - "typeString": "function (bytes32) pure" - } - }, - "id": 65743, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11959:28:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65744, - "nodeType": "RevertStatement", - "src": "11952:35:99" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65748, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65746, - "name": "_maxCommitmentAge", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64893, - "src": "11997:17:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 65747, - "name": "passedDuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65730, - "src": "12017:14:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11997:34:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65753, - "nodeType": "IfStatement", - "src": "11993:75:99", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 65750, - "name": "commitment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65718, - "src": "12057:10:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 65749, - "name": "CommitmentTooOld", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67186, - "src": "12040:16:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$__$", - "typeString": "function (bytes32) pure" - } - }, - "id": 65751, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12040:28:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65752, - "nodeType": "RevertStatement", - "src": "12033:35:99" - } - }, - { - "expression": { - "id": 65757, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "delete", - "prefix": true, - "src": "12075:31:99", - "subExpression": { - "baseExpression": { - "id": 65754, - "name": "_committedAt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64920, - "src": "12082:12:99", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 65756, - "indexExpression": { - "id": 65755, - "name": "commitment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65718, - "src": "12095:10:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "12082:24:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65758, - "nodeType": "ExpressionStatement", - "src": "12075:31:99" - } - ] - }, - "documentation": { - "id": 65714, - "nodeType": "StructuredDocumentation", - "src": "11479:195:99", - "text": " @dev Validates commitment.\n Requirements:\n - The duration must larger than or equal to minimum registration duration.\n - The passed duration must in a valid range." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_validateCommitment", - "nameLocation": "11686:19:99", - "parameters": { - "id": 65719, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65716, - "mutability": "mutable", - "name": "duration", - "nameLocation": "11713:8:99", - "nodeType": "VariableDeclaration", - "scope": 65760, - "src": "11706:15:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 65715, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "11706:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65718, - "mutability": "mutable", - "name": "commitment", - "nameLocation": "11731:10:99", - "nodeType": "VariableDeclaration", - "scope": 65760, - "src": "11723:18:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 65717, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "11723:7:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "11705:37:99" - }, - "returnParameters": { - "id": 65720, - "nodeType": "ParameterList", - "parameters": [], - "src": "11752:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 65777, - "nodeType": "FunctionDefinition", - "src": "12288:175:99", - "nodes": [], - "body": { - "id": 65776, - "nodeType": "Block", - "src": "12352:111:99", - "nodes": [], - "statements": [ - { - "expression": { - "id": 65768, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 65766, - "name": "_minRegistrationDuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64896, - "src": "12358:24:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 65767, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65763, - "src": "12385:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12358:35:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 65769, - "nodeType": "ExpressionStatement", - "src": "12358:35:99" - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65771, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 52306, - "src": "12435:10:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 65772, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12435:12:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65773, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65763, - "src": "12449:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 65770, - "name": "MinRegistrationDurationUpdated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67244, - "src": "12404:30:99", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 65774, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12404:54:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65775, - "nodeType": "EmitStatement", - "src": "12399:59:99" - } - ] - }, - "documentation": { - "id": 65761, - "nodeType": "StructuredDocumentation", - "src": "12115:170:99", - "text": " @dev Sets minimum registration duration.\n Emits a {MinRegistrationDurationUpdated} event indicating the successful update of the registration duration." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setMinRegistrationDuration", - "nameLocation": "12297:27:99", - "parameters": { - "id": 65764, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65763, - "mutability": "mutable", - "name": "duration", - "nameLocation": "12333:8:99", - "nodeType": "VariableDeclaration", - "scope": 65777, - "src": "12325:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65762, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12325:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12324:18:99" - }, - "returnParameters": { - "id": 65765, - "nodeType": "ParameterList", - "parameters": [], - "src": "12352:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 65800, - "nodeType": "FunctionDefinition", - "src": "12531:175:99", - "nodes": [], - "body": { - "id": 65799, - "nodeType": "Block", - "src": "12621:85:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 65794, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65782, - "src": "12691:2:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 65793, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12683:7:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 65792, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "12683:7:99", - "typeDescriptions": {} - } - }, - "id": 65795, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12683:11:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 65796, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65785, - "src": "12696:4:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - ], - "expression": { - "arguments": [ - { - "id": 65789, - "name": "resolverAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65780, - "src": "12643:15:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 65788, - "name": "IPublicResolver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67887, - "src": "12627:15:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPublicResolver_$67887_$", - "typeString": "type(contract IPublicResolver)" - } - }, - "id": 65790, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12627:32:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPublicResolver_$67887", - "typeString": "contract IPublicResolver" - } - }, - "id": 65791, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12660:22:99", - "memberName": "multicallWithNodeCheck", - "nodeType": "MemberAccess", - "referencedDeclaration": 67886, - "src": "12627:55:99", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (bytes32,bytes memory[] memory) external returns (bytes memory[] memory)" - } - }, - "id": 65797, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12627:74:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", - "typeString": "bytes memory[] memory" - } - }, - "id": 65798, - "nodeType": "ExpressionStatement", - "src": "12627:74:99" - } - ] - }, - "documentation": { - "id": 65778, - "nodeType": "StructuredDocumentation", - "src": "12467:61:99", - "text": " @dev Sets data into resolver address contract." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setRecords", - "nameLocation": "12540:11:99", - "parameters": { - "id": 65786, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65780, - "mutability": "mutable", - "name": "resolverAddress", - "nameLocation": "12560:15:99", - "nodeType": "VariableDeclaration", - "scope": 65800, - "src": "12552:23:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65779, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12552:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65782, - "mutability": "mutable", - "name": "id", - "nameLocation": "12585:2:99", - "nodeType": "VariableDeclaration", - "scope": 65800, - "src": "12577:10:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65781, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12577:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65785, - "mutability": "mutable", - "name": "data", - "nameLocation": "12606:4:99", - "nodeType": "VariableDeclaration", - "scope": 65800, - "src": "12589:21:99", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 65783, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "12589:5:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 65784, - "nodeType": "ArrayTypeName", - "src": "12589:7:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - } - ], - "src": "12551:60:99" - }, - "returnParameters": { - "id": 65787, - "nodeType": "ParameterList", - "parameters": [], - "src": "12621:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 65821, - "nodeType": "FunctionDefinition", - "src": "12766:150:99", - "nodes": [], - "body": { - "id": 65820, - "nodeType": "Block", - "src": "12837:79:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 65811, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65805, - "src": "12876:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 65815, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65803, - "src": "12897:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "hexValue": "2e726f6e", - "id": 65816, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12903:6:99", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_7d70d06a1900ccfa2446eb28021a437994c1f9fa73829ed90342a37408690f75", - "typeString": "literal_string \".ron\"" - }, - "value": ".ron" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_stringliteral_7d70d06a1900ccfa2446eb28021a437994c1f9fa73829ed90342a37408690f75", - "typeString": "literal_string \".ron\"" - } - ], - "expression": { - "id": 65813, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12883:6:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_string_storage_ptr_$", - "typeString": "type(string storage pointer)" - }, - "typeName": { - "id": 65812, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "12883:6:99", - "typeDescriptions": {} - } - }, - "id": 65814, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12890:6:99", - "memberName": "concat", - "nodeType": "MemberAccess", - "src": "12883:13:99", - "typeDescriptions": { - "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$", - "typeString": "function () pure returns (string memory)" - } - }, - "id": 65817, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12883:27:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "id": 65808, - "name": "_reverseRegistrar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64915, - "src": "12843:17:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSReverseRegistrar_$66789", - "typeString": "contract INSReverseRegistrar" - } - }, - "id": 65810, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12861:14:99", - "memberName": "setNameForAddr", - "nodeType": "MemberAccess", - "referencedDeclaration": 66772, - "src": "12843:32:99", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (address,string memory) external returns (uint256)" - } - }, - "id": 65818, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12843:68:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 65819, - "nodeType": "ExpressionStatement", - "src": "12843:68:99" - } - ] - }, - "documentation": { - "id": 65801, - "nodeType": "StructuredDocumentation", - "src": "12710:53:99", - "text": " @dev Sets data into reverse registrar." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setReverseRecord", - "nameLocation": "12775:17:99", - "parameters": { - "id": 65806, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65803, - "mutability": "mutable", - "name": "name", - "nameLocation": "12807:4:99", - "nodeType": "VariableDeclaration", - "scope": 65821, - "src": "12793:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65802, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "12793:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65805, - "mutability": "mutable", - "name": "owner", - "nameLocation": "12821:5:99", - "nodeType": "VariableDeclaration", - "scope": 65821, - "src": "12813:13:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65804, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12813:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "12792:35:99" - }, - "returnParameters": { - "id": 65807, - "nodeType": "ParameterList", - "parameters": [], - "src": "12837:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 65837, - "nodeType": "FunctionDefinition", - "src": "12991:118:99", - "nodes": [], - "body": { - "id": 65836, - "nodeType": "Block", - "src": "13034:75:99", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 65828, - "name": "_treasury", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64899, - "src": "13071:9:99", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "expression": { - "arguments": [ - { - "id": 65831, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "13090:4:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_RONRegistrarController_$65991", - "typeString": "contract RONRegistrarController" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_RONRegistrarController_$65991", - "typeString": "contract RONRegistrarController" - } - ], - "id": 65830, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13082:7:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 65829, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13082:7:99", - "typeDescriptions": {} - } - }, - "id": 65832, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13082:13:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 65833, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13096:7:99", - "memberName": "balance", - "nodeType": "MemberAccess", - "src": "13082:21:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 65825, - "name": "RONTransferHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69515, - "src": "13040:17:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_RONTransferHelper_$69515_$", - "typeString": "type(library RONTransferHelper)" - } - }, - "id": 65827, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13058:12:99", - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 69490, - "src": "13040:30:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$", - "typeString": "function (address payable,uint256)" - } - }, - "id": 65834, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13040:64:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65835, - "nodeType": "ExpressionStatement", - "src": "13040:64:99" - } - ] - }, - "documentation": { - "id": 65822, - "nodeType": "StructuredDocumentation", - "src": "12920:68:99", - "text": " @dev Helper method to take fee into treasury address." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transferRONToTreasury", - "nameLocation": "13000:22:99", - "parameters": { - "id": 65823, - "nodeType": "ParameterList", - "parameters": [], - "src": "13022:2:99" - }, - "returnParameters": { - "id": 65824, - "nodeType": "ParameterList", - "parameters": [], - "src": "13034:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 65893, - "nodeType": "FunctionDefinition", - "src": "13180:433:99", - "nodes": [], - "body": { - "id": 65892, - "nodeType": "Block", - "src": "13293:320:99", - "nodes": [], - "statements": [ - { - "expression": { - "id": 65856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "id": 65849, - "name": "usdPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65845, - "src": "13300:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65850, - "name": "ronPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65847, - "src": "13310:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 65851, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "13299:20:99", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 65853, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65840, - "src": "13332:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65854, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65842, - "src": "13338:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 65852, - "name": "rentPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65087, - "src": "13322:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint64_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (string memory,uint64) view returns (uint256,uint256)" - } - }, - "id": 65855, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13322:25:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "src": "13299:48:99", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65857, - "nodeType": "ExpressionStatement", - "src": "13299:48:99" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65861, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 65858, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "13357:3:99", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 65859, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13361:5:99", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "13357:9:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 65860, - "name": "ronPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65847, - "src": "13369:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13357:20:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65865, - "nodeType": "IfStatement", - "src": "13353:52:99", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65862, - "name": "InsufficientValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67207, - "src": "13386:17:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 65863, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13386:19:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65864, - "nodeType": "RevertStatement", - "src": "13379:26:99" - } - }, - { - "id": 65888, - "nodeType": "UncheckedBlock", - "src": "13412:166:99", - "statements": [ - { - "assignments": [ - 65867 - ], - "declarations": [ - { - "constant": false, - "id": 65867, - "mutability": "mutable", - "name": "remainAmount", - "nameLocation": "13438:12:99", - "nodeType": "VariableDeclaration", - "scope": 65888, - "src": "13430:20:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65866, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13430:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65872, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65871, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 65868, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "13453:3:99", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 65869, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13457:5:99", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "13453:9:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 65870, - "name": "ronPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65847, - "src": "13465:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13453:20:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13430:43:99" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65875, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 65873, - "name": "remainAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65867, - "src": "13485:12:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 65874, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13501:1:99", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "13485:17:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65887, - "nodeType": "IfStatement", - "src": "13481:90:99", - "trueBody": { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65881, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 52306, - "src": "13543:10:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 65882, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13543:12:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 65880, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13535:8:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_payable_$", - "typeString": "type(address payable)" - }, - "typeName": { - "id": 65879, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13535:8:99", - "stateMutability": "payable", - "typeDescriptions": {} - } - }, - "id": 65883, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13535:21:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "id": 65884, - "name": "remainAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65867, - "src": "13558:12:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 65876, - "name": "RONTransferHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69515, - "src": "13504:17:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_RONTransferHelper_$69515_$", - "typeString": "type(library RONTransferHelper)" - } - }, - "id": 65878, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13522:12:99", - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 69490, - "src": "13504:30:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$", - "typeString": "function (address payable,uint256)" - } - }, - "id": 65885, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13504:67:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65886, - "nodeType": "ExpressionStatement", - "src": "13504:67:99" - } - } - ] - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65889, - "name": "_transferRONToTreasury", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65837, - "src": "13584:22:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 65890, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13584:24:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65891, - "nodeType": "ExpressionStatement", - "src": "13584:24:99" - } - ] - }, - "documentation": { - "id": 65838, - "nodeType": "StructuredDocumentation", - "src": "13113:64:99", - "text": " @dev Helper method to take renewal fee of a name." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_handlePrice", - "nameLocation": "13189:12:99", - "parameters": { - "id": 65843, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65840, - "mutability": "mutable", - "name": "name", - "nameLocation": "13216:4:99", - "nodeType": "VariableDeclaration", - "scope": 65893, - "src": "13202:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65839, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "13202:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65842, - "mutability": "mutable", - "name": "duration", - "nameLocation": "13229:8:99", - "nodeType": "VariableDeclaration", - "scope": 65893, - "src": "13222:15:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 65841, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "13222:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "13201:37:99" - }, - "returnParameters": { - "id": 65848, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65845, - "mutability": "mutable", - "name": "usdPrice", - "nameLocation": "13265:8:99", - "nodeType": "VariableDeclaration", - "scope": 65893, - "src": "13257:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65844, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13257:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65847, - "mutability": "mutable", - "name": "ronPrice", - "nameLocation": "13283:8:99", - "nodeType": "VariableDeclaration", - "scope": 65893, - "src": "13275:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65846, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13275:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13256:36:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 65956, - "nodeType": "FunctionDefinition", - "src": "13726:516:99", - "nodes": [], - "body": { - "id": 65955, - "nodeType": "Block", - "src": "13939:303:99", - "nodes": [], - "statements": [ - { - "assignments": [ - 65915, - 65917 - ], - "declarations": [ - { - "constant": false, - "id": 65915, - "mutability": "mutable", - "name": "expiryTime", - "nameLocation": "13953:10:99", - "nodeType": "VariableDeclaration", - "scope": 65955, - "src": "13946:17:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 65914, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "13946:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65917, - "mutability": "mutable", - "name": "id", - "nameLocation": "13973:2:99", - "nodeType": "VariableDeclaration", - "scope": 65955, - "src": "13965:10:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65916, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13965:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 65927, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 65920, - "name": "LibRNSDomain", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68113, - "src": "13996:12:99", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$68113_$", - "typeString": "type(library LibRNSDomain)" - } - }, - "id": 65921, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "14009:6:99", - "memberName": "RON_ID", - "nodeType": "MemberAccess", - "referencedDeclaration": 68076, - "src": "13996:19:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65922, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65896, - "src": "14017:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65923, - "name": "resolver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65902, - "src": "14023:8:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65924, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65898, - "src": "14033:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65925, - "name": "duration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65900, - "src": "14040:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "expression": { - "id": 65918, - "name": "_rnsUnified", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64903, - "src": "13979:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$67046", - "typeString": "contract INSUnified" - } - }, - "id": 65919, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13991:4:99", - "memberName": "mint", - "nodeType": "MemberAccess", - "referencedDeclaration": 66966, - "src": "13979:16:99", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint64_$returns$_t_uint64_$_t_uint256_$", - "typeString": "function (uint256,string memory,address,address,uint64) external returns (uint64,uint256)" - } - }, - "id": 65926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13979:70:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint64_$_t_uint256_$", - "typeString": "tuple(uint64,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13945:104:99" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 65931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 65928, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65905, - "src": "14059:4:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - "id": 65929, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14064:6:99", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "14059:11:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 65930, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14074:1:99", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "14059:16:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65938, - "nodeType": "IfStatement", - "src": "14055:53:99", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 65933, - "name": "resolver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65902, - "src": "14089:8:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65934, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65917, - "src": "14099:2:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65935, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65905, - "src": "14103:4:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - ], - "id": 65932, - "name": "_setRecords", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65800, - "src": "14077:11:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$", - "typeString": "function (address,uint256,bytes calldata[] calldata)" - } - }, - "id": 65936, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14077:31:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65937, - "nodeType": "ExpressionStatement", - "src": "14077:31:99" - } - }, - { - "condition": { - "id": 65939, - "name": "reverseRecord", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65907, - "src": "14118:13:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65945, - "nodeType": "IfStatement", - "src": "14114:49:99", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 65941, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65896, - "src": "14151:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65942, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65898, - "src": "14157:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 65940, - "name": "_setReverseRecord", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65821, - "src": "14133:17:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$", - "typeString": "function (string memory,address)" - } - }, - "id": 65943, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14133:30:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65944, - "nodeType": "ExpressionStatement", - "src": "14133:30:99" - } - }, - { - "eventCall": { - "arguments": [ - { - "id": 65947, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65896, - "src": "14189:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 65948, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65917, - "src": "14195:2:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65949, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65898, - "src": "14199:5:99", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65950, - "name": "ronPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65911, - "src": "14206:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65951, - "name": "usdPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65909, - "src": "14216:8:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 65952, - "name": "expiryTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65915, - "src": "14226:10:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 65946, - "name": "NameRegistered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67276, - "src": "14174:14:99", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint64_$returns$__$", - "typeString": "function (string memory,uint256,address,uint256,uint256,uint64)" - } - }, - "id": 65953, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14174:63:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65954, - "nodeType": "EmitStatement", - "src": "14169:68:99" - } - ] - }, - "documentation": { - "id": 65894, - "nodeType": "StructuredDocumentation", - "src": "13617:106:99", - "text": " @dev Helper method to register a name for owner.\n Emits an event {NameRegistered}." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_register", - "nameLocation": "13735:9:99", - "parameters": { - "id": 65912, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65896, - "mutability": "mutable", - "name": "name", - "nameLocation": "13764:4:99", - "nodeType": "VariableDeclaration", - "scope": 65956, - "src": "13750:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65895, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "13750:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65898, - "mutability": "mutable", - "name": "owner", - "nameLocation": "13782:5:99", - "nodeType": "VariableDeclaration", - "scope": 65956, - "src": "13774:13:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65897, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13774:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65900, - "mutability": "mutable", - "name": "duration", - "nameLocation": "13800:8:99", - "nodeType": "VariableDeclaration", - "scope": 65956, - "src": "13793:15:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 65899, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "13793:6:99", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65902, - "mutability": "mutable", - "name": "resolver", - "nameLocation": "13822:8:99", - "nodeType": "VariableDeclaration", - "scope": 65956, - "src": "13814:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 65901, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13814:7:99", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65905, - "mutability": "mutable", - "name": "data", - "nameLocation": "13853:4:99", - "nodeType": "VariableDeclaration", - "scope": 65956, - "src": "13836:21:99", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 65903, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "13836:5:99", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 65904, - "nodeType": "ArrayTypeName", - "src": "13836:7:99", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65907, - "mutability": "mutable", - "name": "reverseRecord", - "nameLocation": "13868:13:99", - "nodeType": "VariableDeclaration", - "scope": 65956, - "src": "13863:18:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 65906, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "13863:4:99", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65909, - "mutability": "mutable", - "name": "usdPrice", - "nameLocation": "13895:8:99", - "nodeType": "VariableDeclaration", - "scope": 65956, - "src": "13887:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65908, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13887:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 65911, - "mutability": "mutable", - "name": "ronPrice", - "nameLocation": "13917:8:99", - "nodeType": "VariableDeclaration", - "scope": 65956, - "src": "13909:16:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65910, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13909:7:99", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13744:185:99" - }, - "returnParameters": { - "id": 65913, - "nodeType": "ParameterList", - "parameters": [], - "src": "13939:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 65974, - "nodeType": "FunctionDefinition", - "src": "14364:155:99", - "nodes": [], - "body": { - "id": 65973, - "nodeType": "Block", - "src": "14426:93:99", - "nodes": [], - "statements": [ - { - "expression": { - "id": 65965, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 65963, - "name": "_priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 64911, - "src": "14432:12:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 65964, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65960, - "src": "14447:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - }, - "src": "14432:26:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - }, - "id": 65966, - "nodeType": "ExpressionStatement", - "src": "14432:26:99" - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 65968, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 52306, - "src": "14488:10:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 65969, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14488:12:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 65970, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65960, - "src": "14502:11:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - ], - "id": 65967, - "name": "DomainPriceUpdated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67252, - "src": "14469:18:99", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_INSDomainPrice_$66670_$returns$__$", - "typeString": "function (address,contract INSDomainPrice)" - } - }, - "id": 65971, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14469:45:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65972, - "nodeType": "EmitStatement", - "src": "14464:50:99" - } - ] - }, - "documentation": { - "id": 65957, - "nodeType": "StructuredDocumentation", - "src": "14246:115:99", - "text": " @dev Helper method to update RNSDomainPrice contract.\n Emits an event {DomainPriceUpdated}." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setPriceOracle", - "nameLocation": "14373:15:99", - "parameters": { - "id": 65961, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65960, - "mutability": "mutable", - "name": "priceOracle", - "nameLocation": "14404:11:99", - "nodeType": "VariableDeclaration", - "scope": 65974, - "src": "14389:26:99", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - }, - "typeName": { - "id": 65959, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 65958, - "name": "INSDomainPrice", - "nameLocations": [ - "14389:14:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 66670, - "src": "14389:14:99" - }, - "referencedDeclaration": 66670, - "src": "14389:14:99", - "typeDescriptions": { - "typeIdentifier": "t_contract$_INSDomainPrice_$66670", - "typeString": "contract INSDomainPrice" - } - }, - "visibility": "internal" - } - ], - "src": "14388:28:99" - }, - "returnParameters": { - "id": 65962, - "nodeType": "ParameterList", - "parameters": [], - "src": "14426:0:99" - }, - "scope": 65991, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 65990, - "nodeType": "FunctionDefinition", - "src": "14612:123:99", - "nodes": [], - "body": { - "id": 65989, - "nodeType": "Block", - "src": "14673:62:99", - "nodes": [], - "statements": [ - { - "condition": { - "id": 65983, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "14683:16:99", - "subExpression": { - "arguments": [ - { - "id": 65981, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65977, - "src": "14694:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 65980, - "name": "available", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65128, - "src": "14684:9:99", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$", - "typeString": "function (string memory) view returns (bool)" - } - }, - "id": 65982, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14684:15:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 65988, - "nodeType": "IfStatement", - "src": "14679:51:99", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 65985, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 65977, - "src": "14725:4:99", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 65984, - "name": "NameNotAvailable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 67191, - "src": "14708:16:99", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory) pure" - } - }, - "id": 65986, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14708:22:99", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 65987, - "nodeType": "RevertStatement", - "src": "14701:29:99" - } - } - ] - }, - "documentation": { - "id": 65975, - "nodeType": "StructuredDocumentation", - "src": "14523:86:99", - "text": " @dev Helper method to check if a domain name is available for register." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_requireAvailable", - "nameLocation": "14621:17:99", - "parameters": { - "id": 65978, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65977, - "mutability": "mutable", - "name": "name", - "nameLocation": "14653:4:99", - "nodeType": "VariableDeclaration", - "scope": 65990, - "src": "14639:18:99", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 65976, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "14639:6:99", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "14638:20:99" - }, - "returnParameters": { - "id": 65979, - "nodeType": "ParameterList", - "parameters": [], - "src": "14673:0:99" - }, - "scope": 65991, - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 64851, - "name": "Pausable", - "nameLocations": [ - "1198:8:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50356, - "src": "1198:8:99" - }, - "id": 64852, - "nodeType": "InheritanceSpecifier", - "src": "1198:8:99" - }, - { - "baseName": { - "id": 64853, - "name": "Initializable", - "nameLocations": [ - "1210:13:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50248, - "src": "1210:13:99" - }, - "id": 64854, - "nodeType": "InheritanceSpecifier", - "src": "1210:13:99" - }, - { - "baseName": { - "id": 64855, - "name": "ReentrancyGuard", - "nameLocations": [ - "1227:15:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 50421, - "src": "1227:15:99" - }, - "id": 64856, - "nodeType": "InheritanceSpecifier", - "src": "1227:15:99" - }, - { - "baseName": { - "id": 64857, - "name": "AccessControlEnumerable", - "nameLocations": [ - "1246:23:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48975, - "src": "1246:23:99" - }, - "id": 64858, - "nodeType": "InheritanceSpecifier", - "src": "1246:23:99" - }, - { - "baseName": { - "id": 64859, - "name": "IRONRegistrarController", - "nameLocations": [ - "1273:23:99" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 67531, - "src": "1273:23:99" - }, - "id": 64860, - "nodeType": "InheritanceSpecifier", - "src": "1273:23:99" - } - ], - "canonicalName": "RONRegistrarController", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 64850, - "nodeType": "StructuredDocumentation", - "src": "842:318:99", - "text": " @title RONRegistrarController\n @notice Customized version of ETHRegistrarController: https://github.com/ensdomains/ens-contracts/blob/45455f1229556ed4f416ef7225d4caea2c1bc0b5/contracts/ethregistrar/ETHRegistrarController.sol\n @dev A registrar controller for registering and renewing names at fixed cost." - }, - "fullyImplemented": true, - "linearizedBaseContracts": [ - 65991, - 67531, - 48975, - 48850, - 52679, - 52691, - 49073, - 49048, - 50421, - 50248, - 50356, - 52316 - ], - "name": "RONRegistrarController", - "nameLocation": "1170:22:99", - "scope": 65992, - "usedErrors": [ - 67181, - 67186, - 67191, - 67196, - 67199, - 67204, - 67207, - 67212, - 67215, - 67218, - 67223, - 67234, - 67237 - ], - "usedEvents": [ - 48987, - 48996, - 49005, - 50094, - 50259, - 50264, - 67244, - 67252, - 67261, - 67276, - 67287, - 67300 - ] - } - ], - "license": "MIT" - }, - "blockNumber": 29142324, - "bytecode": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612f6980620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a61024536600461207d565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120a7565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d6103583660046120d5565b610745565b005b34801561036b57600080fd5b5061035d61037a3660046120d5565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b83660046120d5565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612105565b610815565b61035d61043b366004612137565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d6104733660046121b9565b6109d8565b34801561048457600080fd5b5061035d6104933660046122c0565b610b84565b3480156104a457600080fd5b5061035d610cbd565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d9366004612450565b610cdd565b3480156104ea57600080fd5b506102a26104f936600461250b565b610e3e565b34801561050a57600080fd5b5061024a6105193660046120d5565b610e5d565b34801561052a57600080fd5b5061024a61053936600461252d565b610e88565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e36600461252d565b610f16565b34801561057f57600080fd5b5061027361058e366004612569565b610fa1565b34801561059f57600080fd5b5061035d6105ae3660046120a7565b611051565b3480156105bf57600080fd5b506103086105ce3660046120a7565b611065565b61035d6105e13660046125af565b61107c565b3480156105f257600080fd5b5061035d6106013660046120d5565b611188565b34801561061257600080fd5b506103086106213660046125af565b6111ad565b34801561063257600080fd5b5061035d61064136600461250b565b611239565b34801561065257600080fd5b50610308600080516020612f1483398151915281565b34801561067457600080fd5b5061035d610683366004612105565b61124e565b34801561069457600080fd5b5061035d6106a33660046120a7565b61127c565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f736600461252d565b6112d5565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f82611312565b92915050565b60008281526002602052604090206001015461076081611347565b61076a8383611351565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611373565b5050565b600080516020612f1483398151915261080a81611347565b610812611395565b50565b600061082081611347565b6107ee826113e7565b61083161143e565b610839611486565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610fa1915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac8234612689565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d592505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610973919061269c565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab94939291906126e2565b60405180910390a282156109c3576109c333846114df565b6109cb611544565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f148339815191528b61155a565b610aca60008c61155a565b610ad3836113e7565b610adc86611564565b610ae6878961159b565b603980546001600160a01b03808c166001600160a01b031992831617909255603a8054888416908316179055603b8054878416908316179055603d8054928516929091169190911790558015610b77576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610bae81611347565b84801580610bbc5750808414155b15610bda57604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c6a5783603f60008a8a85818110610bfc57610bfc612716565b9050602002013581526020019081526020016000206000888885818110610c2557610c25612716565b9050602002016020810190610c3a9190612105565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bdd565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610cac95949392919061272c565b60405180910390a250505050505050565b600080516020612f14833981519152610cd581611347565b610812611625565b610ce561143e565b610ced611486565b86610cf781611662565b610d0088610f16565b610d1f57876040516308eee0fd60e31b81526004016107db9190612816565b6000610d2a896112d5565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610da191908101906128e3565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dde575080155b15610e04578a8a8383604051631fc5717160e01b81526004016107db94939291906129c5565b600080610e118d8c61168a565b91509150610e268d8d8d8d8d8d8d89896116e2565b505050505050610e3560018055565b50505050505050565b6000828152600360205260408120610e56908361180c565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e9583611818565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610ece908590600401612816565b602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906129ff565b1592915050565b6000610f2182610e88565b801561073f5750603a546001600160a01b03166396e494e8610f42846112d5565b6040518263ffffffff1660e01b8152600401610f6091815260200190565b602060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906129ff565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fdc9089908990600401612a1c565b608060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612a77565b8051825192945090925061103091612aac565b9350806020015182602001516110469190612aac565b925050509250929050565b600061105c81611347565b6107ee82611564565b600081815260036020526040812061073f90611906565b61108461143e565b61108c611486565b6000611097896112d5565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110991908101906128e3565b60200151606001511561113157886040516331597a5760e21b81526004016107db9190612816565b60006111438a8a8a8a8a8a8a8a6111ad565b905061114f8882611910565b60008061115c8c8b61168a565b915091506111718c8c8c8b8b8b8b89896116e2565b5050505061117e60018055565b5050505050505050565b6000828152600260205260409020600101546111a381611347565b61076a8383611373565b6000886111b981611662565b83158015906111cf57506001600160a01b038616155b156111ed576040516334fd817160e21b815260040160405180910390fd5b6111f68a6112d5565b89898989898989604051602001611214989796959493929190612b50565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124481611347565b61076a838361159b565b600061125981611347565b50603980546001600160a01b0319166001600160a01b0392909216919091179055565b61128461143e565b6037546000828152603e602052604090205442916112a191612aac565b106112c257604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b61081281336119c1565b61135b82826119f4565b600082815260036020526040902061076a9082611a7a565b61137d8282611a8f565b600082815260036020526040902061076a9082611af6565b61139d611b0b565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114845760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114d85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114eb8383611b54565b90508061076a57611504836001600160a01b0316611bca565b61150d83611be0565b60405160200161151e929190612bb0565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612816565b603954611484906001600160a01b0316476114df565b6107ee8282611351565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611433565b428111156115bc57604051630b4319e560e21b815260040160405180910390fd5b8181116115dc576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b61162d61143e565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ca3390565b61166b81610f16565b61081257806040516308eee0fd60e31b81526004016107db9190612816565b6000806116978484610fa1565b9092509050348111156116bd5760405163044044a560e21b815260040160405180910390fd5b348181039082146116d2576116d233826114df565b506116db611544565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b815260040161174e959493929190612c2e565b60408051808303816000875af115801561176c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117909190612c79565b909250905085156117a7576117a788828989611bf7565b84156117b7576117b78b8b611c75565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d8688876040516117f79493929190612ca7565b60405180910390a35050505050505050505050565b6000610e568383611d0c565b600080600080845190505b808310156118fe57600085848151811061183f5761183f612716565b01602001516001600160f81b0319169050600160ff1b811015611867576001840193506118f2565b600760fd1b6001600160f81b031982161015611888576002840193506118f2565b600f60fc1b6001600160f81b0319821610156118a9576003840193506118f2565b601f60fb1b6001600160f81b0319821610156118ca576004840193506118f2565b603f60fa1b6001600160f81b0319821610156118eb576005840193506118f2565b6006840193505b50600190910190611823565b509392505050565b600061073f825490565b603854826001600160401b03161015611947576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119609042612689565b905060365481101561198857604051635320bcf960e01b8152600481018390526024016107db565b8060375410156119ae5760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b6119cb8282610e5d565b6107ee576119d881611bca565b6119e3836020611d36565b60405160200161151e929190612cdf565b6119fe8282610e5d565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a363390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e56836001600160a01b038416611ed1565b611a998282610e5d565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e56836001600160a01b038416611f20565b60005460ff166114845760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611b7e9190612d54565b60006040518083038185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d36565b606061073f82611bef84612013565b600101611d36565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c2790869086908690600401612d70565b6000604051808303816000875af1158015611c46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6e9190810190612d93565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611c9d908690602001612e6a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611cc9929190612e92565b6020604051808303816000875af1158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612eb6565b6000826000018281548110611d2357611d23612716565b9060005260206000200154905092915050565b60606000611d45836002612ecf565b611d50906002612aac565b6001600160401b03811115611d6757611d67612343565b6040519080825280601f01601f191660200182016040528015611d91576020820181803683370190505b509050600360fc1b81600081518110611dac57611dac612716565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ddb57611ddb612716565b60200101906001600160f81b031916908160001a9053506000611dff846002612ecf565b611e0a906001612aac565b90505b6001811115611e82576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e3e57611e3e612716565b1a60f81b828281518110611e5457611e54612716565b60200101906001600160f81b031916908160001a90535060049490941c93611e7b81612ee6565b9050611e0d565b508315610e565760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f185750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b60008181526001830160205260408120548015612009576000611f44600183612689565b8554909150600090611f5890600190612689565b9050818114611fbd576000866000018281548110611f7857611f78612716565b9060005260206000200154905080876000018481548110611f9b57611f9b612716565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fce57611fce612efd565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561202b5760809290921c916010015b604083901c156120405760409290921c916008015b602083901c156120555760209290921c916004015b601083901c1561206a5760109290921c916002015b600883901c1561073f5760010192915050565b60006020828403121561208f57600080fd5b81356001600160e01b031981168114610e5657600080fd5b6000602082840312156120b957600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b600080604083850312156120e857600080fd5b8235915060208301356120fa816120c0565b809150509250929050565b60006020828403121561211757600080fd5b8135610e56816120c0565b6001600160401b038116811461081257600080fd5b60008060006040848603121561214c57600080fd5b83356001600160401b038082111561216357600080fd5b818601915086601f83011261217757600080fd5b81358181111561218657600080fd5b87602082850101111561219857600080fd5b602092830195509350508401356121ae81612122565b809150509250925092565b6000806000806000806000806000806101408b8d0312156121d957600080fd5b8a356121e4816120c0565b995060208b01356121f4816120c0565b985060408b0135612204816120c0565b975060608b0135965060808b0135955060a08b0135945060c08b0135612229816120c0565b935060e08b0135612239816120c0565b92506101008b013561224a816120c0565b91506101208b013561225b816120c0565b809150509295989b9194979a5092959850565b60008083601f84011261228057600080fd5b5081356001600160401b0381111561229757600080fd5b6020830191508360208260051b85010111156116db57600080fd5b801515811461081257600080fd5b6000806000806000606086880312156122d857600080fd5b85356001600160401b03808211156122ef57600080fd5b6122fb89838a0161226e565b9097509550602088013591508082111561231457600080fd5b506123218882890161226e565b9094509250506040860135612335816122b2565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561237b5761237b612343565b60405290565b604051606081016001600160401b038111828210171561237b5761237b612343565b604051601f8201601f191681016001600160401b03811182821017156123cb576123cb612343565b604052919050565b60006001600160401b038211156123ec576123ec612343565b50601f01601f191660200190565b600082601f83011261240b57600080fd5b813561241e612419826123d3565b6123a3565b81815284602083860101111561243357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a03121561246b57600080fd5b87356001600160401b038082111561248257600080fd5b61248e8b838c016123fa565b985060208a013591506124a0826120c0565b9096506040890135906124b282612122565b9095506060890135906124c4826120c0565b909450608089013590808211156124da57600080fd5b506124e78a828b0161226e565b90945092505060a08801356124fb816122b2565b8091505092959891949750929550565b6000806040838503121561251e57600080fd5b50508035926020909101359150565b60006020828403121561253f57600080fd5b81356001600160401b0381111561255557600080fd5b612561848285016123fa565b949350505050565b6000806040838503121561257c57600080fd5b82356001600160401b0381111561259257600080fd5b61259e858286016123fa565b92505060208301356120fa81612122565b60008060008060008060008060e0898b0312156125cb57600080fd5b88356001600160401b03808211156125e257600080fd5b6125ee8c838d016123fa565b995060208b01359150612600826120c0565b90975060408a01359061261282612122565b90965060608a0135955060808a01359061262b826120c0565b90945060a08a0135908082111561264157600080fd5b5061264e8b828c0161226e565b90945092505060c0890135612662816122b2565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f612673565b6000602082840312156126ae57600080fd5b8151610e5681612122565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126f66060830186886126b9565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561274c57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127a957833561278c816120c0565b6001600160a01b0316815292810192600192909201918101612779565b861515604087015293506127bc92505050565b9695505050505050565b60005b838110156127e15781810151838201526020016127c9565b50506000910152565b600081518084526128028160208601602086016127c6565b601f01601f19169290920160200192915050565b602081526000610e5660208301846127ea565b6000612837612419846123d3565b905082815283838301111561284b57600080fd5b610e568360208301846127c6565b60006080828403121561286b57600080fd5b604051608081018181106001600160401b038211171561288d5761288d612343565b806040525080915082516128a0816120c0565b815260208301516128b0816120c0565b602082015260408301516128c381612122565b604082015260608301516128d6816122b2565b6060919091015292915050565b600060208083850312156128f657600080fd5b82516001600160401b038082111561290d57600080fd5b9084019060a0828703121561292157600080fd5b612929612359565b82518281111561293857600080fd5b83016060818903121561294a57600080fd5b612952612381565b815160ff8116811461296357600080fd5b8152818601518682015260408201518481111561297f57600080fd5b82019350601f8401891361299257600080fd5b6129a0898551888701612829565b60408201528252506129b487848601612859565b848201528094505050505092915050565b6080815260006129d860808301876127ea565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a1157600080fd5b8151610e56816122b2565b604081526000612a2f60408301856127ea565b90506001600160401b03831660208301529392505050565b600060408284031215612a5957600080fd5b612a61612359565b9050815181526020820151602082015292915050565b60008060808385031215612a8a57600080fd5b612a948484612a47565b9150612aa38460408501612a47565b90509250929050565b8082018082111561073f5761073f612673565b81835260006020808501808196508560051b810191508460005b87811015612b435782840389528135601e19883603018112612afa57600080fd5b870185810190356001600160401b03811115612b1557600080fd5b803603821315612b2457600080fd5b612b2f8682846126b9565b9a87019a9550505090840190600101612ad9565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612b999083018587612abf565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612bfb81602a8501602088016127c6565b660103b30b63ab2960cd1b602a918401918201528351612c228160318401602088016127c6565b01603101949350505050565b85815260a060208201526000612c4760a08301876127ea565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612c8c57600080fd5b8251612c9781612122565b6020939093015192949293505050565b608081526000612cba60808301876127ea565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d178160178501602088016127c6565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d488160288401602088016127c6565b01602801949350505050565b60008251612d668184602087016127c6565b9190910192915050565b838152604060208201526000612d8a604083018486612abf565b95945050505050565b60006020808385031215612da657600080fd5b82516001600160401b0380821115612dbd57600080fd5b818501915085601f830112612dd157600080fd5b815181811115612de357612de3612343565b8060051b612df28582016123a3565b9182528381018501918581019089841115612e0c57600080fd5b86860192505b83831015612e5d57825185811115612e2a5760008081fd5b8601603f81018b13612e3c5760008081fd5b612e4d8b8983015160408401612829565b8352509186019190860190612e12565b9998505050505050505050565b60008251612e7c8184602087016127c6565b63173937b760e11b920191825250600401919050565b6001600160a01b0383168152604060208201819052600090612561908301846127ea565b600060208284031215612ec857600080fd5b5051919050565b808202811582820484141761073f5761073f612673565b600081612ef557612ef5612673565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122006f996c081232038f43c5a1b7c3f11015820d9739a2a8d4b25e938ce2da8ea5764736f6c63430008150033", + "absolutePath": "RONRegistrarController.sol", + "address": "0xAae506b2232eAEa59238Ffe501A9E6CFC8f9b843", + "ast": "", + "blockNumber": 36083767, + "bytecode": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612fbc80620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a6102453660046120d0565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120fa565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d610358366004612128565b610745565b005b34801561036b57600080fd5b5061035d61037a366004612128565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b8366004612128565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612158565b610815565b61035d61043b36600461218a565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d61047336600461220c565b6109d8565b34801561048457600080fd5b5061035d610493366004612313565b610b80565b3480156104a457600080fd5b5061035d610cb9565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d93660046124a3565b610cd9565b3480156104ea57600080fd5b506102a26104f936600461255e565b610e3a565b34801561050a57600080fd5b5061024a610519366004612128565b610e59565b34801561052a57600080fd5b5061024a610539366004612580565b610e84565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e366004612580565b610f12565b34801561057f57600080fd5b5061027361058e3660046125bc565b610f9d565b34801561059f57600080fd5b5061035d6105ae3660046120fa565b61104d565b3480156105bf57600080fd5b506103086105ce3660046120fa565b611061565b61035d6105e1366004612602565b611078565b3480156105f257600080fd5b5061035d610601366004612128565b611184565b34801561061257600080fd5b50610308610621366004612602565b6111a9565b34801561063257600080fd5b5061035d61064136600461255e565b611235565b34801561065257600080fd5b50610308600080516020612f6783398151915281565b34801561067457600080fd5b5061035d610683366004612158565b61124a565b34801561069457600080fd5b5061035d6106a33660046120fa565b61125e565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f7366004612580565b6112b7565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f826112f4565b92915050565b60008281526002602052604090206001015461076081611329565b61076a8383611333565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611355565b5050565b600080516020612f6783398151915261080a81611329565b610812611377565b50565b600061082081611329565b6107ee826113c9565b610831611420565b610839611468565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610f9d915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac82346126dc565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112b792505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097391906126ef565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab9493929190612735565b60405180910390a282156109c3576109c333846114c1565b6109cb611526565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f678339815191528b61153c565b610aca60008c61153c565b610ad3836113c9565b610adc86611546565b610ae6878961157d565b610aef89611607565b603a80546001600160a01b038088166001600160a01b031992831617909255603b8054878416908316179055603d8054928516929091169190911790558015610b73576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610baa81611329565b84801580610bb85750808414155b15610bd657604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c665783603f60008a8a85818110610bf857610bf8612769565b9050602002013581526020019081526020016000206000888885818110610c2157610c21612769565b9050602002016020810190610c369190612158565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bd9565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610ca895949392919061277f565b60405180910390a250505050505050565b600080516020612f67833981519152610cd181611329565b610812611678565b610ce1611420565b610ce9611468565b86610cf3816116b5565b610cfc88610f12565b610d1b57876040516308eee0fd60e31b81526004016107db9190612869565b6000610d26896112b7565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d9d9190810190612936565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dda575080155b15610e00578a8a8383604051631fc5717160e01b81526004016107db9493929190612a18565b600080610e0d8d8c6116dd565b91509150610e228d8d8d8d8d8d8d8989611735565b505050505050610e3160018055565b50505050505050565b6000828152600360205260408120610e52908361185f565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e918361186b565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610eca908590600401612869565b602060405180830381865afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b9190612a52565b1592915050565b6000610f1d82610e84565b801561073f5750603a546001600160a01b03166396e494e8610f3e846112b7565b6040518263ffffffff1660e01b8152600401610f5c91815260200190565b602060405180830381865afa158015610f79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f9190612a52565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fd89089908990600401612a6f565b608060405180830381865afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110199190612aca565b8051825192945090925061102c91612aff565b9350806020015182602001516110429190612aff565b925050509250929050565b600061105881611329565b6107ee82611546565b600081815260036020526040812061073f90611959565b611080611420565b611088611468565b6000611093896112b7565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111059190810190612936565b60200151606001511561112d57886040516331597a5760e21b81526004016107db9190612869565b600061113f8a8a8a8a8a8a8a8a6111a9565b905061114b8882611963565b6000806111588c8b6116dd565b9150915061116d8c8c8c8b8b8b8b8989611735565b5050505061117a60018055565b5050505050505050565b60008281526002602052604090206001015461119f81611329565b61076a8383611355565b6000886111b5816116b5565b83158015906111cb57506001600160a01b038616155b156111e9576040516334fd817160e21b815260040160405180910390fd5b6111f28a6112b7565b89898989898989604051602001611210989796959493929190612ba3565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124081611329565b61076a838361157d565b600061125581611329565b6107ee82611607565b611266611420565b6037546000828152603e6020526040902054429161128391612aff565b106112a457604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b6108128133611a14565b61133d8282611a47565b600082815260036020526040902061076a9082611acd565b61135f8282611ae2565b600082815260036020526040902061076a9082611b49565b61137f611b5e565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114665760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114ba5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114cd8383611ba7565b90508061076a576114e6836001600160a01b0316611c1d565b6114ef83611c33565b604051602001611500929190612c03565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612869565b603954611466906001600160a01b0316476114c1565b6107ee8282611333565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611415565b4281111561159e57604051630b4319e560e21b815260040160405180910390fd5b8181116115be576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b6001600160a01b03811661162e5760405163e99d5ac560e01b815260040160405180910390fd5b603980546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b611680611420565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ac3390565b6116be81610f12565b61081257806040516308eee0fd60e31b81526004016107db9190612869565b6000806116ea8484610f9d565b9092509050348111156117105760405163044044a560e21b815260040160405180910390fd5b348181039082146117255761172533826114c1565b5061172e611526565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b81526004016117a1959493929190612c81565b60408051808303816000875af11580156117bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e39190612ccc565b909250905085156117fa576117fa88828989611c4a565b841561180a5761180a8b8b611cc8565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d86888760405161184a9493929190612cfa565b60405180910390a35050505050505050505050565b6000610e528383611d5f565b600080600080845190505b8083101561195157600085848151811061189257611892612769565b01602001516001600160f81b0319169050600160ff1b8110156118ba57600184019350611945565b600760fd1b6001600160f81b0319821610156118db57600284019350611945565b600f60fc1b6001600160f81b0319821610156118fc57600384019350611945565b601f60fb1b6001600160f81b03198216101561191d57600484019350611945565b603f60fa1b6001600160f81b03198216101561193e57600584019350611945565b6006840193505b50600190910190611876565b509392505050565b600061073f825490565b603854826001600160401b0316101561199a576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119b390426126dc565b90506036548110156119db57604051635320bcf960e01b8152600481018390526024016107db565b806037541015611a015760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b611a1e8282610e59565b6107ee57611a2b81611c1d565b611a36836020611d89565b604051602001611500929190612d32565b611a518282610e59565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a893390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e52836001600160a01b038416611f24565b611aec8282610e59565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e52836001600160a01b038416611f73565b60005460ff166114665760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611bd19190612da7565b60006040518083038185875af1925050503d8060008114611c0e576040519150601f19603f3d011682016040523d82523d6000602084013e611c13565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d89565b606061073f82611c4284612066565b600101611d89565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c7a90869086908690600401612dc3565b6000604051808303816000875af1158015611c99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cc19190810190612de6565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611cf0908690602001612ebd565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611d1c929190612ee5565b6020604051808303816000875af1158015611d3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612f09565b6000826000018281548110611d7657611d76612769565b9060005260206000200154905092915050565b60606000611d98836002612f22565b611da3906002612aff565b6001600160401b03811115611dba57611dba612396565b6040519080825280601f01601f191660200182016040528015611de4576020820181803683370190505b509050600360fc1b81600081518110611dff57611dff612769565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611e2e57611e2e612769565b60200101906001600160f81b031916908160001a9053506000611e52846002612f22565b611e5d906001612aff565b90505b6001811115611ed5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e9157611e91612769565b1a60f81b828281518110611ea757611ea7612769565b60200101906001600160f81b031916908160001a90535060049490941c93611ece81612f39565b9050611e60565b508315610e525760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f6b5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b6000818152600183016020526040812054801561205c576000611f976001836126dc565b8554909150600090611fab906001906126dc565b9050818114612010576000866000018281548110611fcb57611fcb612769565b9060005260206000200154905080876000018481548110611fee57611fee612769565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061202157612021612f50565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561207e5760809290921c916010015b604083901c156120935760409290921c916008015b602083901c156120a85760209290921c916004015b601083901c156120bd5760109290921c916002015b600883901c1561073f5760010192915050565b6000602082840312156120e257600080fd5b81356001600160e01b031981168114610e5257600080fd5b60006020828403121561210c57600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b6000806040838503121561213b57600080fd5b82359150602083013561214d81612113565b809150509250929050565b60006020828403121561216a57600080fd5b8135610e5281612113565b6001600160401b038116811461081257600080fd5b60008060006040848603121561219f57600080fd5b83356001600160401b03808211156121b657600080fd5b818601915086601f8301126121ca57600080fd5b8135818111156121d957600080fd5b8760208285010111156121eb57600080fd5b6020928301955093505084013561220181612175565b809150509250925092565b6000806000806000806000806000806101408b8d03121561222c57600080fd5b8a3561223781612113565b995060208b013561224781612113565b985060408b013561225781612113565b975060608b0135965060808b0135955060a08b0135945060c08b013561227c81612113565b935060e08b013561228c81612113565b92506101008b013561229d81612113565b91506101208b01356122ae81612113565b809150509295989b9194979a5092959850565b60008083601f8401126122d357600080fd5b5081356001600160401b038111156122ea57600080fd5b6020830191508360208260051b850101111561172e57600080fd5b801515811461081257600080fd5b60008060008060006060868803121561232b57600080fd5b85356001600160401b038082111561234257600080fd5b61234e89838a016122c1565b9097509550602088013591508082111561236757600080fd5b50612374888289016122c1565b909450925050604086013561238881612305565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156123ce576123ce612396565b60405290565b604051606081016001600160401b03811182821017156123ce576123ce612396565b604051601f8201601f191681016001600160401b038111828210171561241e5761241e612396565b604052919050565b60006001600160401b0382111561243f5761243f612396565b50601f01601f191660200190565b600082601f83011261245e57600080fd5b813561247161246c82612426565b6123f6565b81815284602083860101111561248657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a0312156124be57600080fd5b87356001600160401b03808211156124d557600080fd5b6124e18b838c0161244d565b985060208a013591506124f382612113565b90965060408901359061250582612175565b90955060608901359061251782612113565b9094506080890135908082111561252d57600080fd5b5061253a8a828b016122c1565b90945092505060a088013561254e81612305565b8091505092959891949750929550565b6000806040838503121561257157600080fd5b50508035926020909101359150565b60006020828403121561259257600080fd5b81356001600160401b038111156125a857600080fd5b6125b48482850161244d565b949350505050565b600080604083850312156125cf57600080fd5b82356001600160401b038111156125e557600080fd5b6125f18582860161244d565b925050602083013561214d81612175565b60008060008060008060008060e0898b03121561261e57600080fd5b88356001600160401b038082111561263557600080fd5b6126418c838d0161244d565b995060208b0135915061265382612113565b90975060408a01359061266582612175565b90965060608a0135955060808a01359061267e82612113565b90945060a08a0135908082111561269457600080fd5b506126a18b828c016122c1565b90945092505060c08901356126b581612305565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f6126c6565b60006020828403121561270157600080fd5b8151610e5281612175565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061274960608301868861270c565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561279f57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127fc5783356127df81612113565b6001600160a01b03168152928101926001929092019181016127cc565b8615156040870152935061280f92505050565b9695505050505050565b60005b8381101561283457818101518382015260200161281c565b50506000910152565b60008151808452612855816020860160208601612819565b601f01601f19169290920160200192915050565b602081526000610e52602083018461283d565b600061288a61246c84612426565b905082815283838301111561289e57600080fd5b610e52836020830184612819565b6000608082840312156128be57600080fd5b604051608081018181106001600160401b03821117156128e0576128e0612396565b806040525080915082516128f381612113565b8152602083015161290381612113565b6020820152604083015161291681612175565b6040820152606083015161292981612305565b6060919091015292915050565b6000602080838503121561294957600080fd5b82516001600160401b038082111561296057600080fd5b9084019060a0828703121561297457600080fd5b61297c6123ac565b82518281111561298b57600080fd5b83016060818903121561299d57600080fd5b6129a56123d4565b815160ff811681146129b657600080fd5b815281860151868201526040820151848111156129d257600080fd5b82019350601f840189136129e557600080fd5b6129f389855188870161287c565b6040820152825250612a07878486016128ac565b848201528094505050505092915050565b608081526000612a2b608083018761283d565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a6457600080fd5b8151610e5281612305565b604081526000612a82604083018561283d565b90506001600160401b03831660208301529392505050565b600060408284031215612aac57600080fd5b612ab46123ac565b9050815181526020820151602082015292915050565b60008060808385031215612add57600080fd5b612ae78484612a9a565b9150612af68460408501612a9a565b90509250929050565b8082018082111561073f5761073f6126c6565b81835260006020808501808196508560051b810191508460005b87811015612b965782840389528135601e19883603018112612b4d57600080fd5b870185810190356001600160401b03811115612b6857600080fd5b803603821315612b7757600080fd5b612b8286828461270c565b9a87019a9550505090840190600101612b2c565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612bec9083018587612b12565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612c4e81602a850160208801612819565b660103b30b63ab2960cd1b602a918401918201528351612c75816031840160208801612819565b01603101949350505050565b85815260a060208201526000612c9a60a083018761283d565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612cdf57600080fd5b8251612cea81612175565b6020939093015192949293505050565b608081526000612d0d608083018761283d565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d6a816017850160208801612819565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d9b816028840160208801612819565b01602801949350505050565b60008251612db9818460208701612819565b9190910192915050565b838152604060208201526000612ddd604083018486612b12565b95945050505050565b60006020808385031215612df957600080fd5b82516001600160401b0380821115612e1057600080fd5b818501915085601f830112612e2457600080fd5b815181811115612e3657612e36612396565b8060051b612e458582016123f6565b9182528381018501918581019089841115612e5f57600080fd5b86860192505b83831015612eb057825185811115612e7d5760008081fd5b8601603f81018b13612e8f5760008081fd5b612ea08b898301516040840161287c565b8352509186019190860190612e65565b9998505050505050505050565b60008251612ecf818460208701612819565b63173937b760e11b920191825250600401919050565b6001600160a01b03831681526040602082018190526000906125b49083018461283d565b600060208284031215612f1b57600080fd5b5051919050565b808202811582820484141761073f5761073f6126c6565b600081612f4857612f486126c6565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212203a109c3a44f7a0139823c421a40975bf8029ef66d689d4458e4d45cf8a5dbf8264736f6c63430008150033", + "callValue": 0, "chainId": 2020, + "constructorArgs": "0x", "contractName": "RONRegistrarController", - "deployedBytecode": "0x6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a61024536600461207d565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120a7565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d6103583660046120d5565b610745565b005b34801561036b57600080fd5b5061035d61037a3660046120d5565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b83660046120d5565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612105565b610815565b61035d61043b366004612137565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d6104733660046121b9565b6109d8565b34801561048457600080fd5b5061035d6104933660046122c0565b610b84565b3480156104a457600080fd5b5061035d610cbd565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d9366004612450565b610cdd565b3480156104ea57600080fd5b506102a26104f936600461250b565b610e3e565b34801561050a57600080fd5b5061024a6105193660046120d5565b610e5d565b34801561052a57600080fd5b5061024a61053936600461252d565b610e88565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e36600461252d565b610f16565b34801561057f57600080fd5b5061027361058e366004612569565b610fa1565b34801561059f57600080fd5b5061035d6105ae3660046120a7565b611051565b3480156105bf57600080fd5b506103086105ce3660046120a7565b611065565b61035d6105e13660046125af565b61107c565b3480156105f257600080fd5b5061035d6106013660046120d5565b611188565b34801561061257600080fd5b506103086106213660046125af565b6111ad565b34801561063257600080fd5b5061035d61064136600461250b565b611239565b34801561065257600080fd5b50610308600080516020612f1483398151915281565b34801561067457600080fd5b5061035d610683366004612105565b61124e565b34801561069457600080fd5b5061035d6106a33660046120a7565b61127c565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f736600461252d565b6112d5565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f82611312565b92915050565b60008281526002602052604090206001015461076081611347565b61076a8383611351565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611373565b5050565b600080516020612f1483398151915261080a81611347565b610812611395565b50565b600061082081611347565b6107ee826113e7565b61083161143e565b610839611486565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610fa1915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac8234612689565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d592505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610973919061269c565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab94939291906126e2565b60405180910390a282156109c3576109c333846114df565b6109cb611544565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f148339815191528b61155a565b610aca60008c61155a565b610ad3836113e7565b610adc86611564565b610ae6878961159b565b603980546001600160a01b03808c166001600160a01b031992831617909255603a8054888416908316179055603b8054878416908316179055603d8054928516929091169190911790558015610b77576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610bae81611347565b84801580610bbc5750808414155b15610bda57604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c6a5783603f60008a8a85818110610bfc57610bfc612716565b9050602002013581526020019081526020016000206000888885818110610c2557610c25612716565b9050602002016020810190610c3a9190612105565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bdd565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610cac95949392919061272c565b60405180910390a250505050505050565b600080516020612f14833981519152610cd581611347565b610812611625565b610ce561143e565b610ced611486565b86610cf781611662565b610d0088610f16565b610d1f57876040516308eee0fd60e31b81526004016107db9190612816565b6000610d2a896112d5565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610da191908101906128e3565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dde575080155b15610e04578a8a8383604051631fc5717160e01b81526004016107db94939291906129c5565b600080610e118d8c61168a565b91509150610e268d8d8d8d8d8d8d89896116e2565b505050505050610e3560018055565b50505050505050565b6000828152600360205260408120610e56908361180c565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e9583611818565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610ece908590600401612816565b602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906129ff565b1592915050565b6000610f2182610e88565b801561073f5750603a546001600160a01b03166396e494e8610f42846112d5565b6040518263ffffffff1660e01b8152600401610f6091815260200190565b602060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906129ff565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fdc9089908990600401612a1c565b608060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612a77565b8051825192945090925061103091612aac565b9350806020015182602001516110469190612aac565b925050509250929050565b600061105c81611347565b6107ee82611564565b600081815260036020526040812061073f90611906565b61108461143e565b61108c611486565b6000611097896112d5565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110991908101906128e3565b60200151606001511561113157886040516331597a5760e21b81526004016107db9190612816565b60006111438a8a8a8a8a8a8a8a6111ad565b905061114f8882611910565b60008061115c8c8b61168a565b915091506111718c8c8c8b8b8b8b89896116e2565b5050505061117e60018055565b5050505050505050565b6000828152600260205260409020600101546111a381611347565b61076a8383611373565b6000886111b981611662565b83158015906111cf57506001600160a01b038616155b156111ed576040516334fd817160e21b815260040160405180910390fd5b6111f68a6112d5565b89898989898989604051602001611214989796959493929190612b50565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124481611347565b61076a838361159b565b600061125981611347565b50603980546001600160a01b0319166001600160a01b0392909216919091179055565b61128461143e565b6037546000828152603e602052604090205442916112a191612aac565b106112c257604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b61081281336119c1565b61135b82826119f4565b600082815260036020526040902061076a9082611a7a565b61137d8282611a8f565b600082815260036020526040902061076a9082611af6565b61139d611b0b565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114845760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114d85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114eb8383611b54565b90508061076a57611504836001600160a01b0316611bca565b61150d83611be0565b60405160200161151e929190612bb0565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612816565b603954611484906001600160a01b0316476114df565b6107ee8282611351565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611433565b428111156115bc57604051630b4319e560e21b815260040160405180910390fd5b8181116115dc576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b61162d61143e565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ca3390565b61166b81610f16565b61081257806040516308eee0fd60e31b81526004016107db9190612816565b6000806116978484610fa1565b9092509050348111156116bd5760405163044044a560e21b815260040160405180910390fd5b348181039082146116d2576116d233826114df565b506116db611544565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b815260040161174e959493929190612c2e565b60408051808303816000875af115801561176c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117909190612c79565b909250905085156117a7576117a788828989611bf7565b84156117b7576117b78b8b611c75565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d8688876040516117f79493929190612ca7565b60405180910390a35050505050505050505050565b6000610e568383611d0c565b600080600080845190505b808310156118fe57600085848151811061183f5761183f612716565b01602001516001600160f81b0319169050600160ff1b811015611867576001840193506118f2565b600760fd1b6001600160f81b031982161015611888576002840193506118f2565b600f60fc1b6001600160f81b0319821610156118a9576003840193506118f2565b601f60fb1b6001600160f81b0319821610156118ca576004840193506118f2565b603f60fa1b6001600160f81b0319821610156118eb576005840193506118f2565b6006840193505b50600190910190611823565b509392505050565b600061073f825490565b603854826001600160401b03161015611947576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119609042612689565b905060365481101561198857604051635320bcf960e01b8152600481018390526024016107db565b8060375410156119ae5760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b6119cb8282610e5d565b6107ee576119d881611bca565b6119e3836020611d36565b60405160200161151e929190612cdf565b6119fe8282610e5d565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a363390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e56836001600160a01b038416611ed1565b611a998282610e5d565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e56836001600160a01b038416611f20565b60005460ff166114845760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611b7e9190612d54565b60006040518083038185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d36565b606061073f82611bef84612013565b600101611d36565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c2790869086908690600401612d70565b6000604051808303816000875af1158015611c46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6e9190810190612d93565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611c9d908690602001612e6a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611cc9929190612e92565b6020604051808303816000875af1158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612eb6565b6000826000018281548110611d2357611d23612716565b9060005260206000200154905092915050565b60606000611d45836002612ecf565b611d50906002612aac565b6001600160401b03811115611d6757611d67612343565b6040519080825280601f01601f191660200182016040528015611d91576020820181803683370190505b509050600360fc1b81600081518110611dac57611dac612716565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ddb57611ddb612716565b60200101906001600160f81b031916908160001a9053506000611dff846002612ecf565b611e0a906001612aac565b90505b6001811115611e82576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e3e57611e3e612716565b1a60f81b828281518110611e5457611e54612716565b60200101906001600160f81b031916908160001a90535060049490941c93611e7b81612ee6565b9050611e0d565b508315610e565760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f185750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b60008181526001830160205260408120548015612009576000611f44600183612689565b8554909150600090611f5890600190612689565b9050818114611fbd576000866000018281548110611f7857611f78612716565b9060005260206000200154905080876000018481548110611f9b57611f9b612716565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fce57611fce612efd565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561202b5760809290921c916010015b604083901c156120405760409290921c916008015b602083901c156120555760209290921c916004015b601083901c1561206a5760109290921c916002015b600883901c1561073f5760010192915050565b60006020828403121561208f57600080fd5b81356001600160e01b031981168114610e5657600080fd5b6000602082840312156120b957600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b600080604083850312156120e857600080fd5b8235915060208301356120fa816120c0565b809150509250929050565b60006020828403121561211757600080fd5b8135610e56816120c0565b6001600160401b038116811461081257600080fd5b60008060006040848603121561214c57600080fd5b83356001600160401b038082111561216357600080fd5b818601915086601f83011261217757600080fd5b81358181111561218657600080fd5b87602082850101111561219857600080fd5b602092830195509350508401356121ae81612122565b809150509250925092565b6000806000806000806000806000806101408b8d0312156121d957600080fd5b8a356121e4816120c0565b995060208b01356121f4816120c0565b985060408b0135612204816120c0565b975060608b0135965060808b0135955060a08b0135945060c08b0135612229816120c0565b935060e08b0135612239816120c0565b92506101008b013561224a816120c0565b91506101208b013561225b816120c0565b809150509295989b9194979a5092959850565b60008083601f84011261228057600080fd5b5081356001600160401b0381111561229757600080fd5b6020830191508360208260051b85010111156116db57600080fd5b801515811461081257600080fd5b6000806000806000606086880312156122d857600080fd5b85356001600160401b03808211156122ef57600080fd5b6122fb89838a0161226e565b9097509550602088013591508082111561231457600080fd5b506123218882890161226e565b9094509250506040860135612335816122b2565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561237b5761237b612343565b60405290565b604051606081016001600160401b038111828210171561237b5761237b612343565b604051601f8201601f191681016001600160401b03811182821017156123cb576123cb612343565b604052919050565b60006001600160401b038211156123ec576123ec612343565b50601f01601f191660200190565b600082601f83011261240b57600080fd5b813561241e612419826123d3565b6123a3565b81815284602083860101111561243357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a03121561246b57600080fd5b87356001600160401b038082111561248257600080fd5b61248e8b838c016123fa565b985060208a013591506124a0826120c0565b9096506040890135906124b282612122565b9095506060890135906124c4826120c0565b909450608089013590808211156124da57600080fd5b506124e78a828b0161226e565b90945092505060a08801356124fb816122b2565b8091505092959891949750929550565b6000806040838503121561251e57600080fd5b50508035926020909101359150565b60006020828403121561253f57600080fd5b81356001600160401b0381111561255557600080fd5b612561848285016123fa565b949350505050565b6000806040838503121561257c57600080fd5b82356001600160401b0381111561259257600080fd5b61259e858286016123fa565b92505060208301356120fa81612122565b60008060008060008060008060e0898b0312156125cb57600080fd5b88356001600160401b03808211156125e257600080fd5b6125ee8c838d016123fa565b995060208b01359150612600826120c0565b90975060408a01359061261282612122565b90965060608a0135955060808a01359061262b826120c0565b90945060a08a0135908082111561264157600080fd5b5061264e8b828c0161226e565b90945092505060c0890135612662816122b2565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f612673565b6000602082840312156126ae57600080fd5b8151610e5681612122565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126f66060830186886126b9565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561274c57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127a957833561278c816120c0565b6001600160a01b0316815292810192600192909201918101612779565b861515604087015293506127bc92505050565b9695505050505050565b60005b838110156127e15781810151838201526020016127c9565b50506000910152565b600081518084526128028160208601602086016127c6565b601f01601f19169290920160200192915050565b602081526000610e5660208301846127ea565b6000612837612419846123d3565b905082815283838301111561284b57600080fd5b610e568360208301846127c6565b60006080828403121561286b57600080fd5b604051608081018181106001600160401b038211171561288d5761288d612343565b806040525080915082516128a0816120c0565b815260208301516128b0816120c0565b602082015260408301516128c381612122565b604082015260608301516128d6816122b2565b6060919091015292915050565b600060208083850312156128f657600080fd5b82516001600160401b038082111561290d57600080fd5b9084019060a0828703121561292157600080fd5b612929612359565b82518281111561293857600080fd5b83016060818903121561294a57600080fd5b612952612381565b815160ff8116811461296357600080fd5b8152818601518682015260408201518481111561297f57600080fd5b82019350601f8401891361299257600080fd5b6129a0898551888701612829565b60408201528252506129b487848601612859565b848201528094505050505092915050565b6080815260006129d860808301876127ea565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a1157600080fd5b8151610e56816122b2565b604081526000612a2f60408301856127ea565b90506001600160401b03831660208301529392505050565b600060408284031215612a5957600080fd5b612a61612359565b9050815181526020820151602082015292915050565b60008060808385031215612a8a57600080fd5b612a948484612a47565b9150612aa38460408501612a47565b90509250929050565b8082018082111561073f5761073f612673565b81835260006020808501808196508560051b810191508460005b87811015612b435782840389528135601e19883603018112612afa57600080fd5b870185810190356001600160401b03811115612b1557600080fd5b803603821315612b2457600080fd5b612b2f8682846126b9565b9a87019a9550505090840190600101612ad9565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612b999083018587612abf565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612bfb81602a8501602088016127c6565b660103b30b63ab2960cd1b602a918401918201528351612c228160318401602088016127c6565b01603101949350505050565b85815260a060208201526000612c4760a08301876127ea565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612c8c57600080fd5b8251612c9781612122565b6020939093015192949293505050565b608081526000612cba60808301876127ea565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d178160178501602088016127c6565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d488160288401602088016127c6565b01602801949350505050565b60008251612d668184602087016127c6565b9190910192915050565b838152604060208201526000612d8a604083018486612abf565b95945050505050565b60006020808385031215612da657600080fd5b82516001600160401b0380821115612dbd57600080fd5b818501915085601f830112612dd157600080fd5b815181811115612de357612de3612343565b8060051b612df28582016123a3565b9182528381018501918581019089841115612e0c57600080fd5b86860192505b83831015612e5d57825185811115612e2a5760008081fd5b8601603f81018b13612e3c5760008081fd5b612e4d8b8983015160408401612829565b8352509186019190860190612e12565b9998505050505050505050565b60008251612e7c8184602087016127c6565b63173937b760e11b920191825250600401919050565b6001600160a01b0383168152604060208201819052600090612561908301846127ea565b600060208284031215612ec857600080fd5b5051919050565b808202811582820484141761073f5761073f612673565b600081612ef557612ef5612673565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122006f996c081232038f43c5a1b7c3f11015820d9739a2a8d4b25e938ce2da8ea5764736f6c63430008150033", - "deployer": "0x0F68eDBE14C8f68481771016d7E2871d6a35DE11", + "deployedBytecode": "0x6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a6102453660046120d0565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120fa565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d610358366004612128565b610745565b005b34801561036b57600080fd5b5061035d61037a366004612128565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b8366004612128565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612158565b610815565b61035d61043b36600461218a565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d61047336600461220c565b6109d8565b34801561048457600080fd5b5061035d610493366004612313565b610b80565b3480156104a457600080fd5b5061035d610cb9565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d93660046124a3565b610cd9565b3480156104ea57600080fd5b506102a26104f936600461255e565b610e3a565b34801561050a57600080fd5b5061024a610519366004612128565b610e59565b34801561052a57600080fd5b5061024a610539366004612580565b610e84565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e366004612580565b610f12565b34801561057f57600080fd5b5061027361058e3660046125bc565b610f9d565b34801561059f57600080fd5b5061035d6105ae3660046120fa565b61104d565b3480156105bf57600080fd5b506103086105ce3660046120fa565b611061565b61035d6105e1366004612602565b611078565b3480156105f257600080fd5b5061035d610601366004612128565b611184565b34801561061257600080fd5b50610308610621366004612602565b6111a9565b34801561063257600080fd5b5061035d61064136600461255e565b611235565b34801561065257600080fd5b50610308600080516020612f6783398151915281565b34801561067457600080fd5b5061035d610683366004612158565b61124a565b34801561069457600080fd5b5061035d6106a33660046120fa565b61125e565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f7366004612580565b6112b7565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f826112f4565b92915050565b60008281526002602052604090206001015461076081611329565b61076a8383611333565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611355565b5050565b600080516020612f6783398151915261080a81611329565b610812611377565b50565b600061082081611329565b6107ee826113c9565b610831611420565b610839611468565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610f9d915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac82346126dc565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112b792505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097391906126ef565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab9493929190612735565b60405180910390a282156109c3576109c333846114c1565b6109cb611526565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f678339815191528b61153c565b610aca60008c61153c565b610ad3836113c9565b610adc86611546565b610ae6878961157d565b610aef89611607565b603a80546001600160a01b038088166001600160a01b031992831617909255603b8054878416908316179055603d8054928516929091169190911790558015610b73576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610baa81611329565b84801580610bb85750808414155b15610bd657604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c665783603f60008a8a85818110610bf857610bf8612769565b9050602002013581526020019081526020016000206000888885818110610c2157610c21612769565b9050602002016020810190610c369190612158565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bd9565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610ca895949392919061277f565b60405180910390a250505050505050565b600080516020612f67833981519152610cd181611329565b610812611678565b610ce1611420565b610ce9611468565b86610cf3816116b5565b610cfc88610f12565b610d1b57876040516308eee0fd60e31b81526004016107db9190612869565b6000610d26896112b7565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d9d9190810190612936565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dda575080155b15610e00578a8a8383604051631fc5717160e01b81526004016107db9493929190612a18565b600080610e0d8d8c6116dd565b91509150610e228d8d8d8d8d8d8d8989611735565b505050505050610e3160018055565b50505050505050565b6000828152600360205260408120610e52908361185f565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e918361186b565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610eca908590600401612869565b602060405180830381865afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b9190612a52565b1592915050565b6000610f1d82610e84565b801561073f5750603a546001600160a01b03166396e494e8610f3e846112b7565b6040518263ffffffff1660e01b8152600401610f5c91815260200190565b602060405180830381865afa158015610f79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f9190612a52565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fd89089908990600401612a6f565b608060405180830381865afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110199190612aca565b8051825192945090925061102c91612aff565b9350806020015182602001516110429190612aff565b925050509250929050565b600061105881611329565b6107ee82611546565b600081815260036020526040812061073f90611959565b611080611420565b611088611468565b6000611093896112b7565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111059190810190612936565b60200151606001511561112d57886040516331597a5760e21b81526004016107db9190612869565b600061113f8a8a8a8a8a8a8a8a6111a9565b905061114b8882611963565b6000806111588c8b6116dd565b9150915061116d8c8c8c8b8b8b8b8989611735565b5050505061117a60018055565b5050505050505050565b60008281526002602052604090206001015461119f81611329565b61076a8383611355565b6000886111b5816116b5565b83158015906111cb57506001600160a01b038616155b156111e9576040516334fd817160e21b815260040160405180910390fd5b6111f28a6112b7565b89898989898989604051602001611210989796959493929190612ba3565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124081611329565b61076a838361157d565b600061125581611329565b6107ee82611607565b611266611420565b6037546000828152603e6020526040902054429161128391612aff565b106112a457604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b6108128133611a14565b61133d8282611a47565b600082815260036020526040902061076a9082611acd565b61135f8282611ae2565b600082815260036020526040902061076a9082611b49565b61137f611b5e565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114665760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114ba5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114cd8383611ba7565b90508061076a576114e6836001600160a01b0316611c1d565b6114ef83611c33565b604051602001611500929190612c03565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612869565b603954611466906001600160a01b0316476114c1565b6107ee8282611333565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611415565b4281111561159e57604051630b4319e560e21b815260040160405180910390fd5b8181116115be576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b6001600160a01b03811661162e5760405163e99d5ac560e01b815260040160405180910390fd5b603980546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b611680611420565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ac3390565b6116be81610f12565b61081257806040516308eee0fd60e31b81526004016107db9190612869565b6000806116ea8484610f9d565b9092509050348111156117105760405163044044a560e21b815260040160405180910390fd5b348181039082146117255761172533826114c1565b5061172e611526565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b81526004016117a1959493929190612c81565b60408051808303816000875af11580156117bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e39190612ccc565b909250905085156117fa576117fa88828989611c4a565b841561180a5761180a8b8b611cc8565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d86888760405161184a9493929190612cfa565b60405180910390a35050505050505050505050565b6000610e528383611d5f565b600080600080845190505b8083101561195157600085848151811061189257611892612769565b01602001516001600160f81b0319169050600160ff1b8110156118ba57600184019350611945565b600760fd1b6001600160f81b0319821610156118db57600284019350611945565b600f60fc1b6001600160f81b0319821610156118fc57600384019350611945565b601f60fb1b6001600160f81b03198216101561191d57600484019350611945565b603f60fa1b6001600160f81b03198216101561193e57600584019350611945565b6006840193505b50600190910190611876565b509392505050565b600061073f825490565b603854826001600160401b0316101561199a576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119b390426126dc565b90506036548110156119db57604051635320bcf960e01b8152600481018390526024016107db565b806037541015611a015760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b611a1e8282610e59565b6107ee57611a2b81611c1d565b611a36836020611d89565b604051602001611500929190612d32565b611a518282610e59565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a893390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e52836001600160a01b038416611f24565b611aec8282610e59565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e52836001600160a01b038416611f73565b60005460ff166114665760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611bd19190612da7565b60006040518083038185875af1925050503d8060008114611c0e576040519150601f19603f3d011682016040523d82523d6000602084013e611c13565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d89565b606061073f82611c4284612066565b600101611d89565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c7a90869086908690600401612dc3565b6000604051808303816000875af1158015611c99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cc19190810190612de6565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611cf0908690602001612ebd565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611d1c929190612ee5565b6020604051808303816000875af1158015611d3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612f09565b6000826000018281548110611d7657611d76612769565b9060005260206000200154905092915050565b60606000611d98836002612f22565b611da3906002612aff565b6001600160401b03811115611dba57611dba612396565b6040519080825280601f01601f191660200182016040528015611de4576020820181803683370190505b509050600360fc1b81600081518110611dff57611dff612769565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611e2e57611e2e612769565b60200101906001600160f81b031916908160001a9053506000611e52846002612f22565b611e5d906001612aff565b90505b6001811115611ed5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e9157611e91612769565b1a60f81b828281518110611ea757611ea7612769565b60200101906001600160f81b031916908160001a90535060049490941c93611ece81612f39565b9050611e60565b508315610e525760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f6b5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b6000818152600183016020526040812054801561205c576000611f976001836126dc565b8554909150600090611fab906001906126dc565b9050818114612010576000866000018281548110611fcb57611fcb612769565b9060005260206000200154905080876000018481548110611fee57611fee612769565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061202157612021612f50565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561207e5760809290921c916010015b604083901c156120935760409290921c916008015b602083901c156120a85760209290921c916004015b601083901c156120bd5760109290921c916002015b600883901c1561073f5760010192915050565b6000602082840312156120e257600080fd5b81356001600160e01b031981168114610e5257600080fd5b60006020828403121561210c57600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b6000806040838503121561213b57600080fd5b82359150602083013561214d81612113565b809150509250929050565b60006020828403121561216a57600080fd5b8135610e5281612113565b6001600160401b038116811461081257600080fd5b60008060006040848603121561219f57600080fd5b83356001600160401b03808211156121b657600080fd5b818601915086601f8301126121ca57600080fd5b8135818111156121d957600080fd5b8760208285010111156121eb57600080fd5b6020928301955093505084013561220181612175565b809150509250925092565b6000806000806000806000806000806101408b8d03121561222c57600080fd5b8a3561223781612113565b995060208b013561224781612113565b985060408b013561225781612113565b975060608b0135965060808b0135955060a08b0135945060c08b013561227c81612113565b935060e08b013561228c81612113565b92506101008b013561229d81612113565b91506101208b01356122ae81612113565b809150509295989b9194979a5092959850565b60008083601f8401126122d357600080fd5b5081356001600160401b038111156122ea57600080fd5b6020830191508360208260051b850101111561172e57600080fd5b801515811461081257600080fd5b60008060008060006060868803121561232b57600080fd5b85356001600160401b038082111561234257600080fd5b61234e89838a016122c1565b9097509550602088013591508082111561236757600080fd5b50612374888289016122c1565b909450925050604086013561238881612305565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156123ce576123ce612396565b60405290565b604051606081016001600160401b03811182821017156123ce576123ce612396565b604051601f8201601f191681016001600160401b038111828210171561241e5761241e612396565b604052919050565b60006001600160401b0382111561243f5761243f612396565b50601f01601f191660200190565b600082601f83011261245e57600080fd5b813561247161246c82612426565b6123f6565b81815284602083860101111561248657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a0312156124be57600080fd5b87356001600160401b03808211156124d557600080fd5b6124e18b838c0161244d565b985060208a013591506124f382612113565b90965060408901359061250582612175565b90955060608901359061251782612113565b9094506080890135908082111561252d57600080fd5b5061253a8a828b016122c1565b90945092505060a088013561254e81612305565b8091505092959891949750929550565b6000806040838503121561257157600080fd5b50508035926020909101359150565b60006020828403121561259257600080fd5b81356001600160401b038111156125a857600080fd5b6125b48482850161244d565b949350505050565b600080604083850312156125cf57600080fd5b82356001600160401b038111156125e557600080fd5b6125f18582860161244d565b925050602083013561214d81612175565b60008060008060008060008060e0898b03121561261e57600080fd5b88356001600160401b038082111561263557600080fd5b6126418c838d0161244d565b995060208b0135915061265382612113565b90975060408a01359061266582612175565b90965060608a0135955060808a01359061267e82612113565b90945060a08a0135908082111561269457600080fd5b506126a18b828c016122c1565b90945092505060c08901356126b581612305565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f6126c6565b60006020828403121561270157600080fd5b8151610e5281612175565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061274960608301868861270c565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561279f57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127fc5783356127df81612113565b6001600160a01b03168152928101926001929092019181016127cc565b8615156040870152935061280f92505050565b9695505050505050565b60005b8381101561283457818101518382015260200161281c565b50506000910152565b60008151808452612855816020860160208601612819565b601f01601f19169290920160200192915050565b602081526000610e52602083018461283d565b600061288a61246c84612426565b905082815283838301111561289e57600080fd5b610e52836020830184612819565b6000608082840312156128be57600080fd5b604051608081018181106001600160401b03821117156128e0576128e0612396565b806040525080915082516128f381612113565b8152602083015161290381612113565b6020820152604083015161291681612175565b6040820152606083015161292981612305565b6060919091015292915050565b6000602080838503121561294957600080fd5b82516001600160401b038082111561296057600080fd5b9084019060a0828703121561297457600080fd5b61297c6123ac565b82518281111561298b57600080fd5b83016060818903121561299d57600080fd5b6129a56123d4565b815160ff811681146129b657600080fd5b815281860151868201526040820151848111156129d257600080fd5b82019350601f840189136129e557600080fd5b6129f389855188870161287c565b6040820152825250612a07878486016128ac565b848201528094505050505092915050565b608081526000612a2b608083018761283d565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a6457600080fd5b8151610e5281612305565b604081526000612a82604083018561283d565b90506001600160401b03831660208301529392505050565b600060408284031215612aac57600080fd5b612ab46123ac565b9050815181526020820151602082015292915050565b60008060808385031215612add57600080fd5b612ae78484612a9a565b9150612af68460408501612a9a565b90509250929050565b8082018082111561073f5761073f6126c6565b81835260006020808501808196508560051b810191508460005b87811015612b965782840389528135601e19883603018112612b4d57600080fd5b870185810190356001600160401b03811115612b6857600080fd5b803603821315612b7757600080fd5b612b8286828461270c565b9a87019a9550505090840190600101612b2c565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612bec9083018587612b12565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612c4e81602a850160208801612819565b660103b30b63ab2960cd1b602a918401918201528351612c75816031840160208801612819565b01603101949350505050565b85815260a060208201526000612c9a60a083018761283d565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612cdf57600080fd5b8251612cea81612175565b6020939093015192949293505050565b608081526000612d0d608083018761283d565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d6a816017850160208801612819565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d9b816028840160208801612819565b01602801949350505050565b60008251612db9818460208701612819565b9190910192915050565b838152604060208201526000612ddd604083018486612b12565b95945050505050565b60006020808385031215612df957600080fd5b82516001600160401b0380821115612e1057600080fd5b818501915085601f830112612e2457600080fd5b815181811115612e3657612e36612396565b8060051b612e458582016123f6565b9182528381018501918581019089841115612e5f57600080fd5b86860192505b83831015612eb057825185811115612e7d5760008081fd5b8601603f81018b13612e8f5760008081fd5b612ea08b898301516040840161287c565b8352509186019190860190612e65565b9998505050505050505050565b60008251612ecf818460208701612819565b63173937b760e11b920191825250600401919050565b6001600160a01b03831681526040602082018190526000906125b49083018461283d565b600060208284031215612f1b57600080fd5b5051919050565b808202811582820484141761073f5761073f6126c6565b600081612f4857612f486126c6565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212203a109c3a44f7a0139823c421a40975bf8029ef66d689d4458e4d45cf8a5dbf8264736f6c63430008150033", + "deployer": "0x4d58Ea7231c394d5804e8B06B1365915f906E27F", "devdoc": { "version": 1, "kind": "dev", @@ -15954,6 +1409,9 @@ "RoleRevoked(bytes32,address,address)": { "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" }, + "TreasuryUpdated(address)": { + "details": "Emitted when the treasury is updated." + }, "Unpaused(address)": { "details": "Emitted when the pause is lifted by `account`." } @@ -16009,6 +1467,11 @@ "details": "Error: The requested name is not available for registration." } ], + "NullAddress()": [ + { + "details": "Thrown when treasury address is set to null" + } + ], "ResolverRequiredWhenDataSupplied()": [ { "details": "Error: A resolver is required when additional data is supplied during registration." @@ -16028,13 +1491,12 @@ "title": "RONRegistrarController" }, "isFoundry": true, - "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"CommitmentTooNew\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"CommitmentTooOld\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"DurationTooShort\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"requestOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"nameProtected\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"ownerWhitelisted\",\"type\":\"bool\"}],\"name\":\"ErrInvalidRegisterProtectedName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"ErrRequestedForProtectedName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCommitmentAgeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCommitmentAgeTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameNotAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ResolverRequiredWhenDataSupplied\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"UnexpiredCommitmentExists\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"}],\"name\":\"CommitmentAgeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract INSDomainPrice\",\"name\":\"newDomainPrice\",\"type\":\"address\"}],\"name\":\"DomainPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"MinRegistrationDurationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ronPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"expires\",\"type\":\"uint64\"}],\"name\":\"NameRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"expires\",\"type\":\"uint64\"}],\"name\":\"NameRenewed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"ProtectedNamesWhitelisted\",\"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\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_DOMAIN_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"available\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"bulkWhitelistProtectedNames\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"secret\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"bool\",\"name\":\"reverseRecord\",\"type\":\"bool\"}],\"name\":\"computeCommitment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"computeId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitmentAgeRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinRegistrationDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNameChecker\",\"outputs\":[{\"internalType\":\"contract INameChecker\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracle\",\"outputs\":[{\"internalType\":\"contract INSDomainPrice\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRNSUnified\",\"outputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReverseRegistrar\",\"outputs\":[{\"internalType\":\"contract INSReverseRegistrar\",\"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\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getWhitelistProtectedNameStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"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\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pauser\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minRegistrationDuration\",\"type\":\"uint256\"},{\"internalType\":\"contract INSUnified\",\"name\":\"rnsUnified\",\"type\":\"address\"},{\"internalType\":\"contract INameChecker\",\"name\":\"nameChecker\",\"type\":\"address\"},{\"internalType\":\"contract INSDomainPrice\",\"name\":\"priceOracle\",\"type\":\"address\"},{\"internalType\":\"contract INSReverseRegistrar\",\"name\":\"reverseRegistrar\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"secret\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"bool\",\"name\":\"reverseRecord\",\"type\":\"bool\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"bool\",\"name\":\"reverseRecord\",\"type\":\"bool\"}],\"name\":\"registerProtectedName\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"renew\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"rentPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"usdPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ronPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"}],\"name\":\"setCommitmentAge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setMinRegistrationDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract INSDomainPrice\",\"name\":\"priceOracle\",\"type\":\"address\"}],\"name\":\"setPriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setTreasury\",\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"valid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A registrar controller for registering and renewing names at fixed cost.\",\"errors\":{\"CommitmentTooNew(bytes32)\":[{\"details\":\"Error: The provided commitment timestamp is too new for registration.\"}],\"CommitmentTooOld(bytes32)\":[{\"details\":\"Error: The provided commitment timestamp is too old for registration.\"}],\"DurationTooShort(uint64)\":[{\"details\":\"Error: The requested duration for registration is too short.\"}],\"ErrInvalidRegisterProtectedName(string,address,bool,bool)\":[{\"details\":\"Thrown when received invalid params for registering protected name\"}],\"ErrRequestedForProtectedName(string)\":[{\"details\":\"Thrown when some one requests for protected names\"}],\"InsufficientValue()\":[{\"details\":\"Error: Insufficient value (RON) provided for registration.\"}],\"InvalidArrayLength()\":[{\"details\":\"Thrown when received invalid array length\"}],\"MaxCommitmentAgeTooHigh()\":[{\"details\":\"Error: The maximum commitment age is set too high.\"}],\"MaxCommitmentAgeTooLow()\":[{\"details\":\"Error: The maximum commitment age is set too low.\"}],\"NameNotAvailable(string)\":[{\"details\":\"Error: The requested name is not available for registration.\"}],\"ResolverRequiredWhenDataSupplied()\":[{\"details\":\"Error: A resolver is required when additional data is supplied during registration.\"}],\"Unauthorized(bytes32)\":[{\"details\":\"Error: The sender is not authorized for the given RNS node.\"}],\"UnexpiredCommitmentExists(bytes32)\":[{\"details\":\"Error: An unexpired commitment already exists for the given commitment.\"}]},\"events\":{\"CommitmentAgeUpdated(address,uint256,uint256)\":{\"details\":\"Emitted when the commitment age range is updated.\",\"params\":{\"maxCommitmentAge\":\"The new maximum commitment age in seconds.\",\"minCommitmentAge\":\"The new minimum commitment age in seconds.\",\"operator\":\"The address of the operator who triggered the update.\"}},\"DomainPriceUpdated(address,address)\":{\"details\":\"Emitted when RNSDomainPrice contract is updated.\",\"params\":{\"newDomainPrice\":\"The new duration domain price contract.\",\"operator\":\"The address of the operator who triggered the update.\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"MinRegistrationDurationUpdated(address,uint256)\":{\"details\":\"Emitted when the min registration duration is updated.\",\"params\":{\"duration\":\"The new duration in seconds.\",\"operator\":\"The address of the operator who triggered the update.\"}},\"NameRegistered(string,uint256,address,uint256,uint256,uint64)\":{\"details\":\"Emitted when a new name is successfully registered.\",\"params\":{\"expires\":\"The expiration timestamp of the registration.\",\"id\":\"The namehash of the registered name.\",\"name\":\"The registered name.\",\"owner\":\"The owner of the registered name.\",\"ronPrice\":\"The cost of the registration in RON.\",\"usdPrice\":\"The cost of the registration in USD.\"}},\"NameRenewed(string,uint256,uint256,uint64)\":{\"details\":\"Emitted when a name is renewed.\",\"params\":{\"cost\":\"The cost of renewal.\",\"expires\":\"The new expiration timestamp after renewal.\",\"id\":\"The namehash of the registered name.\",\"name\":\"The renewed name.\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"ProtectedNamesWhitelisted(address,uint256[],address[],bool)\":{\"details\":\"Emitted the whitelist status is updated for the owners of the protected names.\",\"params\":{\"operator\":\"The address of the operator who triggered the update.\"}},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"available(string)\":{\"details\":\"Checks if a name is available for registration.\",\"params\":{\"name\":\"The name to check availability for.\"},\"returns\":{\"_0\":\"A boolean indicating whether the name is available.\"}},\"bulkWhitelistProtectedNames(uint256[],address[],bool)\":{\"details\":\"Bulk (de)whitelist for buying protected names. Requirements: - The method caller is contract operator. Emits an event {ProtectedNamesWhitelisted}.\"},\"commit(bytes32)\":{\"details\":\"Commits to a registration using the commitment hash.\",\"params\":{\"commitment\":\"The commitment hash.\"}},\"computeCommitment(string,address,uint64,bytes32,address,bytes[],bool)\":{\"details\":\"Generates the commitment hash for a registration.\",\"params\":{\"data\":\"Additional data associated with the registration.\",\"duration\":\"The duration of the registration.\",\"name\":\"The name to be registered.\",\"owner\":\"The owner of the name.\",\"resolver\":\"The resolver contract address.\",\"reverseRecord\":\"Whether to use reverse record for additional data.\",\"secret\":\"The secret used for the commitment.\"},\"returns\":{\"_0\":\"The commitment hash.\"}},\"computeId(string)\":{\"details\":\"Calculate the corresponding id given RON_ID and name.\"},\"getCommitmentAgeRange()\":{\"details\":\"Returns the range of commitment ages allowed.\"},\"getMinRegistrationDuration()\":{\"details\":\"Returns the minimum registration duration.\"},\"getNameChecker()\":{\"details\":\"Returns the INameChecker contract associated with this controller.\"},\"getPriceOracle()\":{\"details\":\"Returns the INSDomainPrice contract associated with this controller.\"},\"getRNSUnified()\":{\"details\":\"Returns the INSUnified contract associated with this controller.\"},\"getReverseRegistrar()\":{\"details\":\"Returns the IReverseRegistrar contract associated with this controller.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"getTreasury()\":{\"details\":\"Returns the treasury address.\"},\"getWhitelistProtectedNameStatus(uint256,address)\":{\"details\":\"Returns the whitelist status for registering protected name.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"pause()\":{\"details\":\"Pauses the registrar controller's functionality. Requirements: - The caller must have the admin role.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"register(string,address,uint64,bytes32,address,bytes[],bool)\":{\"details\":\"Registers a new name.\",\"params\":{\"data\":\"Additional data associated with the registration.\",\"duration\":\"The duration of the registration.\",\"name\":\"The name to be registered.\",\"owner\":\"The owner of the name.\",\"resolver\":\"The resolver contract address.\",\"reverseRecord\":\"Whether to use reverse record for additional data.\",\"secret\":\"The secret used for the commitment.\"}},\"registerProtectedName(string,address,uint64,address,bytes[],bool)\":{\"details\":\"Registers a protected name. Requirements: - The owner is whitelisted for registering.\"},\"renew(string,uint64)\":{\"details\":\"Renews an existing name registration.\",\"params\":{\"duration\":\"The duration of the renewal.\",\"name\":\"The name to be renewed.\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"rentPrice(string,uint64)\":{\"details\":\"Retrieves the rent price for a given name and duration.\",\"params\":{\"duration\":\"The duration of the rent.\",\"name\":\"The name for which to calculate the rent price.\"},\"returns\":{\"ronPrice\":\"rent price in ron.\",\"usdPrice\":\"rent price in usd.\"}},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setCommitmentAge(uint256,uint256)\":{\"details\":\"Sets the minimum and maximum commitment ages. Requirements: - Caller must have the DEFAULT_ADMIN_ROLE. - The `maxCommitmentAge` must be less than or equal to the current block timestamp. - The `maxCommitmentAge` must be greater than the `minCommitmentAge`. Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\",\"params\":{\"maxCommitmentAge\":\"The maximum commitment age in seconds.\",\"minCommitmentAge\":\"The minimum commitment age in seconds.\"}},\"setMinRegistrationDuration(uint256)\":{\"details\":\"Updates min registration duration. Requirements: - The caller must have the admin role.\"},\"setPriceOracle(address)\":{\"details\":\"Updates price oracle address. Requirements: - The caller must have the admin role.\"},\"setTreasury(address)\":{\"details\":\"Updates treasury address. Requirements: - The caller must have the admin role.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"unpause()\":{\"details\":\"Unpauses the registrar controller's functionality. Requirements: - The caller must have the admin role.\"},\"valid(string)\":{\"details\":\"Checks if a name is valid.\",\"params\":{\"name\":\"The name to check validity for.\"},\"returns\":{\"_0\":\"A boolean indicating whether the name is available.\"}}},\"stateVariables\":{\"MIN_DOMAIN_LENGTH\":{\"details\":\"The minimum domain name's length\"},\"OPERATOR_ROLE\":{\"details\":\"Returns the operator role.\"},\"PAUSER_ROLE\":{\"details\":\"Returns the role identifier for the pauser role.\"},\"____gap\":{\"details\":\"Gap for upgradeability.\"},\"_committedAt\":{\"details\":\"Mapping from commitment hash => timestamp that commitment made.\"},\"_maxCommitmentAge\":{\"details\":\"Maximum duration between commitment and registration in second(s).\"},\"_minCommitmentAge\":{\"details\":\"Minimum duration between commitment and registration in second(s).\"},\"_minRegistrationDuration\":{\"details\":\"Min registration duration\"},\"_nameChecker\":{\"details\":\"The namechecker contract.\"},\"_priceOracle\":{\"details\":\"The price oracle.\"},\"_protectedNamesWhitelisted\":{\"details\":\"Mapping id => owner => flag indicating whether the owner is whitelisted to buy protected name\"},\"_reverseRegistrar\":{\"details\":\"The reverse registrar contract.\"},\"_rnsUnified\":{\"details\":\"The rns unified contract.\"},\"_treasury\":{\"details\":\"The treasury address.\"}},\"title\":\"RONRegistrarController\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Customized version of ETHRegistrarController: https://github.com/ensdomains/ens-contracts/blob/45455f1229556ed4f416ef7225d4caea2c1bc0b5/contracts/ethregistrar/ETHRegistrarController.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/RONRegistrarController.sol\":\"RONRegistrarController\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```solidity\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```solidity\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\\n * to enforce additional security measures for this role.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0dd6e52cb394d7f5abe5dca2d4908a6be40417914720932de757de34a99ab87f\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControlEnumerable.sol\\\";\\nimport \\\"./AccessControl.sol\\\";\\nimport \\\"../utils/structs/EnumerableSet.sol\\\";\\n\\n/**\\n * @dev Extension of {AccessControl} that allows enumerating the members of each role.\\n */\\nabstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {\\n using EnumerableSet for EnumerableSet.AddressSet;\\n\\n mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) public view virtual override returns (address) {\\n return _roleMembers[role].at(index);\\n }\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) public view virtual override returns (uint256) {\\n return _roleMembers[role].length();\\n }\\n\\n /**\\n * @dev Overload {_grantRole} to track enumerable memberships\\n */\\n function _grantRole(bytes32 role, address account) internal virtual override {\\n super._grantRole(role, account);\\n _roleMembers[role].add(account);\\n }\\n\\n /**\\n * @dev Overload {_revokeRole} to track enumerable memberships\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual override {\\n super._revokeRole(role, account);\\n _roleMembers[role].remove(account);\\n }\\n}\\n\",\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n _requireNotPaused();\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n _requirePaused();\\n _;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Throws if the contract is paused.\\n */\\n function _requireNotPaused() internal view virtual {\\n require(!paused(), \\\"Pausable: paused\\\");\\n }\\n\\n /**\\n * @dev Throws if the contract is not paused.\\n */\\n function _requirePaused() internal view virtual {\\n require(paused(), \\\"Pausable: not paused\\\");\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n * `nonReentrant` function in the call stack.\\n */\\n function _reentrancyGuardEntered() internal view returns (bool) {\\n return _status == _ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0xa535a5df777d44e945dd24aa43a11e44b024140fc340ad0dfe42acf4002aade1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toString(int256 value) internal pure returns (string memory) {\\n return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x58b21219689909c4f8339af00813760337f7e2e7f169a97fe49e2896dcfb3b9a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)\\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```solidity\\n * contract Example {\\n * // Add the library methods\\n * using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n * // Declare a set state variable\\n * EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n *\\n * [WARNING]\\n * ====\\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\\n * unusable.\\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\\n *\\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\\n * array of EnumerableSet.\\n * ====\\n */\\nlibrary EnumerableSet {\\n // To implement this library for multiple types with as little code\\n // repetition as possible, we write it in terms of a generic Set type with\\n // bytes32 values.\\n // The Set implementation uses private functions, and user-facing\\n // implementations (such as AddressSet) are just wrappers around the\\n // underlying Set.\\n // This means that we can only create new EnumerableSets for types that fit\\n // in bytes32.\\n\\n struct Set {\\n // Storage of set values\\n bytes32[] _values;\\n // Position of the value in the `values` array, plus 1 because index 0\\n // means a value is not in the set.\\n mapping(bytes32 => uint256) _indexes;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function _add(Set storage set, bytes32 value) private returns (bool) {\\n if (!_contains(set, value)) {\\n set._values.push(value);\\n // The value is stored at length-1, but we add 1 to all indexes\\n // and use 0 as a sentinel value\\n set._indexes[value] = set._values.length;\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function _remove(Set storage set, bytes32 value) private returns (bool) {\\n // We read and store the value's index to prevent multiple reads from the same storage slot\\n uint256 valueIndex = set._indexes[value];\\n\\n if (valueIndex != 0) {\\n // Equivalent to contains(set, value)\\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n // the array, and then remove the last element (sometimes called as 'swap and pop').\\n // This modifies the order of the array, as noted in {at}.\\n\\n uint256 toDeleteIndex = valueIndex - 1;\\n uint256 lastIndex = set._values.length - 1;\\n\\n if (lastIndex != toDeleteIndex) {\\n bytes32 lastValue = set._values[lastIndex];\\n\\n // Move the last value to the index where the value to delete is\\n set._values[toDeleteIndex] = lastValue;\\n // Update the index for the moved value\\n set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex\\n }\\n\\n // Delete the slot where the moved value was stored\\n set._values.pop();\\n\\n // Delete the index for the deleted slot\\n delete set._indexes[value];\\n\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n return set._indexes[value] != 0;\\n }\\n\\n /**\\n * @dev Returns the number of values on the set. O(1).\\n */\\n function _length(Set storage set) private view returns (uint256) {\\n return set._values.length;\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n return set._values[index];\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function _values(Set storage set) private view returns (bytes32[] memory) {\\n return set._values;\\n }\\n\\n // Bytes32Set\\n\\n struct Bytes32Set {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _add(set._inner, value);\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _remove(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n return _contains(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(Bytes32Set storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n return _at(set._inner, index);\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n bytes32[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // AddressSet\\n\\n struct AddressSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(AddressSet storage set, address value) internal returns (bool) {\\n return _add(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(AddressSet storage set, address value) internal returns (bool) {\\n return _remove(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(AddressSet storage set, address value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(AddressSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n return address(uint160(uint256(_at(set._inner, index))));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(AddressSet storage set) internal view returns (address[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n address[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // UintSet\\n\\n struct UintSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(UintSet storage set, uint256 value) internal returns (bool) {\\n return _add(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n return _remove(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(UintSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n return uint256(_at(set._inner, index));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(UintSet storage set) internal view returns (uint256[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n uint256[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\"},\"lib/pyth-sdk-solidity/IPyth.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PythStructs.sol\\\";\\nimport \\\"./IPythEvents.sol\\\";\\n\\n/// @title Consume prices from the Pyth Network (https://pyth.network/).\\n/// @dev Please refer to the guidance at https://docs.pyth.network/consumers/best-practices for how to consume prices safely.\\n/// @author Pyth Data Association\\ninterface IPyth is IPythEvents {\\n /// @notice Returns the period (in seconds) that a price feed is considered valid since its publish time\\n function getValidTimePeriod() external view returns (uint validTimePeriod);\\n\\n /// @notice Returns the price and confidence interval.\\n /// @dev Reverts if the price has not been updated within the last `getValidTimePeriod()` seconds.\\n /// @param id The Pyth Price Feed ID of which to fetch the price and confidence interval.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPrice(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price and confidence interval.\\n /// @dev Reverts if the EMA price is not available.\\n /// @param id The Pyth Price Feed ID of which to fetch the EMA price and confidence interval.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPrice(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the price of a price feed without any sanity checks.\\n /// @dev This function returns the most recent price update in this contract without any recency checks.\\n /// This function is unsafe as the returned price update may be arbitrarily far in the past.\\n ///\\n /// Users of this function should check the `publishTime` in the price to ensure that the returned price is\\n /// sufficiently recent for their application. If you are considering using this function, it may be\\n /// safer / easier to use either `getPrice` or `getPriceNoOlderThan`.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPriceUnsafe(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the price that is no older than `age` seconds of the current time.\\n /// @dev This function is a sanity-checked version of `getPriceUnsafe` which is useful in\\n /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently\\n /// recently.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPriceNoOlderThan(\\n bytes32 id,\\n uint age\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price of a price feed without any sanity checks.\\n /// @dev This function returns the same price as `getEmaPrice` in the case where the price is available.\\n /// However, if the price is not recent this function returns the latest available price.\\n ///\\n /// The returned price can be from arbitrarily far in the past; this function makes no guarantees that\\n /// the returned price is recent or useful for any particular application.\\n ///\\n /// Users of this function should check the `publishTime` in the price to ensure that the returned price is\\n /// sufficiently recent for their application. If you are considering using this function, it may be\\n /// safer / easier to use either `getEmaPrice` or `getEmaPriceNoOlderThan`.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPriceUnsafe(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price that is no older than `age` seconds\\n /// of the current time.\\n /// @dev This function is a sanity-checked version of `getEmaPriceUnsafe` which is useful in\\n /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently\\n /// recently.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPriceNoOlderThan(\\n bytes32 id,\\n uint age\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Update price feeds with given update messages.\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n /// Prices will be updated if they are more recent than the current stored prices.\\n /// The call will succeed even if the update is not the most recent.\\n /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid.\\n /// @param updateData Array of price update data.\\n function updatePriceFeeds(bytes[] calldata updateData) external payable;\\n\\n /// @notice Wrapper around updatePriceFeeds that rejects fast if a price update is not necessary. A price update is\\n /// necessary if the current on-chain publishTime is older than the given publishTime. It relies solely on the\\n /// given `publishTimes` for the price feeds and does not read the actual price update publish time within `updateData`.\\n ///\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n ///\\n /// `priceIds` and `publishTimes` are two arrays with the same size that correspond to senders known publishTime\\n /// of each priceId when calling this method. If all of price feeds within `priceIds` have updated and have\\n /// a newer or equal publish time than the given publish time, it will reject the transaction to save gas.\\n /// Otherwise, it calls updatePriceFeeds method to update the prices.\\n ///\\n /// @dev Reverts if update is not needed or the transferred fee is not sufficient or the updateData is invalid.\\n /// @param updateData Array of price update data.\\n /// @param priceIds Array of price ids.\\n /// @param publishTimes Array of publishTimes. `publishTimes[i]` corresponds to known `publishTime` of `priceIds[i]`\\n function updatePriceFeedsIfNecessary(\\n bytes[] calldata updateData,\\n bytes32[] calldata priceIds,\\n uint64[] calldata publishTimes\\n ) external payable;\\n\\n /// @notice Returns the required fee to update an array of price updates.\\n /// @param updateData Array of price update data.\\n /// @return feeAmount The required fee in Wei.\\n function getUpdateFee(\\n bytes[] calldata updateData\\n ) external view returns (uint feeAmount);\\n\\n /// @notice Parse `updateData` and return price feeds of the given `priceIds` if they are all published\\n /// within `minPublishTime` and `maxPublishTime`.\\n ///\\n /// You can use this method if you want to use a Pyth price at a fixed time and not the most recent price;\\n /// otherwise, please consider using `updatePriceFeeds`. This method does not store the price updates on-chain.\\n ///\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n ///\\n ///\\n /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is\\n /// no update for any of the given `priceIds` within the given time range.\\n /// @param updateData Array of price update data.\\n /// @param priceIds Array of price ids.\\n /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`.\\n /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`.\\n /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order).\\n function parsePriceFeedUpdates(\\n bytes[] calldata updateData,\\n bytes32[] calldata priceIds,\\n uint64 minPublishTime,\\n uint64 maxPublishTime\\n ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds);\\n}\\n\",\"keccak256\":\"0x949c65c65fea0578c09a6fc068e09ed1165adede2c835984cefcb25d76de1de2\",\"license\":\"Apache-2.0\"},\"lib/pyth-sdk-solidity/IPythEvents.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/// @title IPythEvents contains the events that Pyth contract emits.\\n/// @dev This interface can be used for listening to the updates for off-chain and testing purposes.\\ninterface IPythEvents {\\n /// @dev Emitted when the price feed with `id` has received a fresh update.\\n /// @param id The Pyth Price Feed ID.\\n /// @param publishTime Publish time of the given price update.\\n /// @param price Price of the given price update.\\n /// @param conf Confidence interval of the given price update.\\n event PriceFeedUpdate(\\n bytes32 indexed id,\\n uint64 publishTime,\\n int64 price,\\n uint64 conf\\n );\\n\\n /// @dev Emitted when a batch price update is processed successfully.\\n /// @param chainId ID of the source chain that the batch price update comes from.\\n /// @param sequenceNumber Sequence number of the batch price update.\\n event BatchPriceFeedUpdate(uint16 chainId, uint64 sequenceNumber);\\n}\\n\",\"keccak256\":\"0x048a35526c2e77d107d43ba336f1dcf31f64cef25ba429ae1f7a0fbc11c23320\",\"license\":\"Apache-2.0\"},\"lib/pyth-sdk-solidity/PythStructs.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\ncontract PythStructs {\\n // A price with a degree of uncertainty, represented as a price +- a confidence interval.\\n //\\n // The confidence interval roughly corresponds to the standard error of a normal distribution.\\n // Both the price and confidence are stored in a fixed-point numeric representation,\\n // `x * (10^expo)`, where `expo` is the exponent.\\n //\\n // Please refer to the documentation at https://docs.pyth.network/consumers/best-practices for how\\n // to how this price safely.\\n struct Price {\\n // Price\\n int64 price;\\n // Confidence interval around the price\\n uint64 conf;\\n // Price exponent\\n int32 expo;\\n // Unix timestamp describing when the price was published\\n uint publishTime;\\n }\\n\\n // PriceFeed represents a current aggregate price from pyth publisher feeds.\\n struct PriceFeed {\\n // The price ID.\\n bytes32 id;\\n // Latest available price\\n Price price;\\n // Latest available exponentially-weighted moving average price\\n Price emaPrice;\\n }\\n}\\n\",\"keccak256\":\"0x95ff0a6d64517348ef604b8bcf246b561a9445d7e607b8f48491c617cfda9b65\",\"license\":\"Apache-2.0\"},\"src/RONRegistrarController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\nimport { Initializable } from \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport { ReentrancyGuard } from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport { AccessControlEnumerable } from \\\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\\\";\\nimport { IPublicResolver } from \\\"./interfaces/resolvers/IPublicResolver.sol\\\";\\nimport {\\n INSUnified,\\n INameChecker,\\n INSDomainPrice,\\n INSReverseRegistrar,\\n IRONRegistrarController\\n} from \\\"./interfaces/IRONRegistrarController.sol\\\";\\nimport { LibString } from \\\"./libraries/LibString.sol\\\";\\nimport { LibRNSDomain } from \\\"./libraries/LibRNSDomain.sol\\\";\\nimport { RONTransferHelper } from \\\"./libraries/transfers/RONTransferHelper.sol\\\";\\n\\n/**\\n * @title RONRegistrarController\\n * @notice Customized version of ETHRegistrarController: https://github.com/ensdomains/ens-contracts/blob/45455f1229556ed4f416ef7225d4caea2c1bc0b5/contracts/ethregistrar/ETHRegistrarController.sol\\n * @dev A registrar controller for registering and renewing names at fixed cost.\\n */\\ncontract RONRegistrarController is\\n Pausable,\\n Initializable,\\n ReentrancyGuard,\\n AccessControlEnumerable,\\n IRONRegistrarController\\n{\\n using LibString for string;\\n using LibRNSDomain for string;\\n\\n /// @dev The minimum domain name's length\\n uint8 public constant MIN_DOMAIN_LENGTH = 3;\\n /// @inheritdoc IRONRegistrarController\\n bytes32 public constant PAUSER_ROLE = keccak256(\\\"PAUSER_ROLE\\\");\\n /// @inheritdoc IRONRegistrarController\\n bytes32 public constant OPERATOR_ROLE = keccak256(\\\"OPERATOR_ROLE\\\");\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev Minimum duration between commitment and registration in second(s).\\n uint256 internal _minCommitmentAge;\\n /// @dev Maximum duration between commitment and registration in second(s).\\n uint256 internal _maxCommitmentAge;\\n /// @dev Min registration duration\\n uint256 internal _minRegistrationDuration;\\n\\n /// @dev The treasury address.\\n address payable internal _treasury;\\n /// @dev The rns unified contract.\\n INSUnified internal _rnsUnified;\\n /// @dev The namechecker contract.\\n INameChecker internal _nameChecker;\\n /// @dev The price oracle.\\n INSDomainPrice internal _priceOracle;\\n /// @dev The reverse registrar contract.\\n INSReverseRegistrar internal _reverseRegistrar;\\n\\n /// @dev Mapping from commitment hash => timestamp that commitment made.\\n mapping(bytes32 commitment => uint256 timestamp) internal _committedAt;\\n /// @dev Mapping id => owner => flag indicating whether the owner is whitelisted to buy protected name\\n mapping(uint256 id => mapping(address owner => bool)) internal _protectedNamesWhitelisted;\\n\\n modifier onlyAvailable(string memory name) {\\n _requireAvailable(name);\\n _;\\n }\\n\\n constructor() payable {\\n _disableInitializers();\\n }\\n\\n function initialize(\\n address admin,\\n address pauser,\\n address payable treasury,\\n uint256 maxCommitmentAge,\\n uint256 minCommitmentAge,\\n uint256 minRegistrationDuration,\\n INSUnified rnsUnified,\\n INameChecker nameChecker,\\n INSDomainPrice priceOracle,\\n INSReverseRegistrar reverseRegistrar\\n ) external initializer {\\n _setupRole(PAUSER_ROLE, pauser);\\n _setupRole(DEFAULT_ADMIN_ROLE, admin);\\n\\n _setPriceOracle(priceOracle);\\n _setMinRegistrationDuration(minRegistrationDuration);\\n _setCommitmentAge(minCommitmentAge, maxCommitmentAge);\\n\\n _treasury = treasury;\\n _rnsUnified = rnsUnified;\\n _nameChecker = nameChecker;\\n _reverseRegistrar = reverseRegistrar;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function pause() external onlyRole(PAUSER_ROLE) {\\n _pause();\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function unpause() external onlyRole(PAUSER_ROLE) {\\n _unpause();\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getMinRegistrationDuration() public view returns (uint256) {\\n return _minRegistrationDuration;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function rentPrice(string memory name, uint64 duration) public view returns (uint256 usdPrice, uint256 ronPrice) {\\n (INSDomainPrice.UnitPrice memory basePrice, INSDomainPrice.UnitPrice memory tax) =\\n _priceOracle.getRenewalFee(name, duration);\\n usdPrice = basePrice.usd + tax.usd;\\n ronPrice = basePrice.ron + tax.ron;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function valid(string memory name) public view returns (bool) {\\n return name.strlen() >= MIN_DOMAIN_LENGTH && !_nameChecker.forbidden(name);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function available(string memory name) public view returns (bool) {\\n return valid(name) && _rnsUnified.available(computeId(name));\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function computeCommitment(\\n string memory name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) public view onlyAvailable(name) returns (bytes32) {\\n if (data.length != 0 && resolver == address(0)) revert ResolverRequiredWhenDataSupplied();\\n return keccak256(abi.encode(computeId(name), owner, duration, secret, resolver, data, reverseRecord));\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function computeId(string memory name) public pure returns (uint256 id) {\\n return LibRNSDomain.toId(LibRNSDomain.RON_ID, name);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function commit(bytes32 commitment) external whenNotPaused {\\n if (_committedAt[commitment] + _maxCommitmentAge >= block.timestamp) revert UnexpiredCommitmentExists(commitment);\\n _committedAt[commitment] = block.timestamp;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setMinRegistrationDuration(uint256 duration) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setMinRegistrationDuration(duration);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function register(\\n string memory name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable whenNotPaused nonReentrant {\\n uint256 id = computeId(name);\\n if (_rnsUnified.getRecord(id).mut.protected) revert ErrRequestedForProtectedName(name);\\n\\n bytes32 commitHash = computeCommitment({\\n name: name,\\n owner: owner,\\n duration: duration,\\n secret: secret,\\n resolver: resolver,\\n data: data,\\n reverseRecord: reverseRecord\\n });\\n _validateCommitment(duration, commitHash);\\n\\n (uint256 usdPrice, uint256 ronPrice) = _handlePrice(name, duration);\\n _register(name, owner, duration, resolver, data, reverseRecord, usdPrice, ronPrice);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function renew(string calldata name, uint64 duration) external payable whenNotPaused nonReentrant {\\n (, uint256 ronPrice) = rentPrice(name, duration);\\n if (msg.value < ronPrice) revert InsufficientValue();\\n uint256 remainAmount = msg.value - ronPrice;\\n\\n uint256 id = computeId(name);\\n uint64 expiryTime = _rnsUnified.renew(id, duration);\\n emit NameRenewed(name, id, ronPrice, expiryTime);\\n\\n if (remainAmount != 0) RONTransferHelper.safeTransfer(payable(_msgSender()), remainAmount);\\n _transferRONToTreasury();\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function registerProtectedName(\\n string memory name,\\n address owner,\\n uint64 duration,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable whenNotPaused nonReentrant onlyAvailable(name) {\\n if (!available(name)) revert NameNotAvailable(name);\\n uint256 id = computeId(name);\\n bool protected = _rnsUnified.getRecord(id).mut.protected;\\n bool whitelisted = _protectedNamesWhitelisted[id][owner];\\n if (!protected || !whitelisted) revert ErrInvalidRegisterProtectedName(name, owner, protected, whitelisted);\\n\\n (uint256 usdPrice, uint256 ronPrice) = _handlePrice(name, duration);\\n _register(name, owner, duration, resolver, data, reverseRecord, usdPrice, ronPrice);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function bulkWhitelistProtectedNames(uint256[] calldata ids, address[] calldata owners, bool status)\\n external\\n onlyRole(OPERATOR_ROLE)\\n {\\n uint256 length = ids.length;\\n if (length == 0 || length != owners.length) revert InvalidArrayLength();\\n\\n for (uint256 i; i < length;) {\\n _protectedNamesWhitelisted[ids[i]][owners[i]] = status;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit ProtectedNamesWhitelisted(_msgSender(), ids, owners, status);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getWhitelistProtectedNameStatus(uint256 id, address owner) external view returns (bool status) {\\n return _protectedNamesWhitelisted[id][owner];\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setTreasury(address payable addr) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _treasury = addr;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setCommitmentAge(minCommitmentAge, maxCommitmentAge);\\n }\\n\\n /**\\n * @dev Internal function to update the commitment age range.\\n * Requirements:\\n * - The `maxCommitmentAge` must be less than or equal to the current block timestamp.\\n * - The `maxCommitmentAge` must be greater than the `minCommitmentAge`.\\n * Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\\n * @param minCommitmentAge The minimum commitment age in seconds.\\n * @param maxCommitmentAge The maximum commitment age in seconds.\\n */\\n function _setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) internal {\\n if (maxCommitmentAge > block.timestamp) revert MaxCommitmentAgeTooHigh();\\n if (maxCommitmentAge <= minCommitmentAge) revert MaxCommitmentAgeTooLow();\\n\\n _minCommitmentAge = minCommitmentAge;\\n _maxCommitmentAge = maxCommitmentAge;\\n\\n emit CommitmentAgeUpdated(_msgSender(), minCommitmentAge, maxCommitmentAge);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setPriceOracle(INSDomainPrice priceOracle) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setPriceOracle(priceOracle);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getTreasury() external view returns (address) {\\n return _treasury;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getCommitmentAgeRange() external view returns (uint256 minCommitmentAge, uint256 maxCommitmentAge) {\\n return (_minCommitmentAge, _maxCommitmentAge);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getRNSUnified() external view returns (INSUnified) {\\n return _rnsUnified;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getPriceOracle() external view returns (INSDomainPrice) {\\n return _priceOracle;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getNameChecker() external view returns (INameChecker) {\\n return _nameChecker;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getReverseRegistrar() external view returns (INSReverseRegistrar) {\\n return _reverseRegistrar;\\n }\\n\\n /**\\n * @dev Validates commitment.\\n *\\n * Requirements:\\n * - The duration must larger than or equal to minimum registration duration.\\n * - The passed duration must in a valid range.\\n */\\n function _validateCommitment(uint64 duration, bytes32 commitment) internal {\\n if (duration < _minRegistrationDuration) revert DurationTooShort(duration);\\n\\n uint256 passedDuration = block.timestamp - _committedAt[commitment];\\n if (passedDuration < _minCommitmentAge) revert CommitmentTooNew(commitment);\\n if (_maxCommitmentAge < passedDuration) revert CommitmentTooOld(commitment);\\n\\n delete _committedAt[commitment];\\n }\\n\\n /**\\n * @dev Sets minimum registration duration.\\n * Emits a {MinRegistrationDurationUpdated} event indicating the successful update of the registration duration.\\n */\\n function _setMinRegistrationDuration(uint256 duration) internal {\\n _minRegistrationDuration = duration;\\n emit MinRegistrationDurationUpdated(_msgSender(), duration);\\n }\\n\\n /**\\n * @dev Sets data into resolver address contract.\\n */\\n function _setRecords(address resolverAddress, uint256 id, bytes[] calldata data) internal {\\n IPublicResolver(resolverAddress).multicallWithNodeCheck(bytes32(id), data);\\n }\\n\\n /**\\n * @dev Sets data into reverse registrar.\\n */\\n function _setReverseRecord(string memory name, address owner) internal {\\n _reverseRegistrar.setNameForAddr(owner, string.concat(name, \\\".ron\\\"));\\n }\\n\\n /**\\n * @dev Helper method to take fee into treasury address.\\n */\\n function _transferRONToTreasury() internal {\\n RONTransferHelper.safeTransfer(_treasury, address(this).balance);\\n }\\n\\n /**\\n * @dev Helper method to take renewal fee of a name.\\n */\\n function _handlePrice(string memory name, uint64 duration) internal returns (uint256 usdPrice, uint256 ronPrice) {\\n (usdPrice, ronPrice) = rentPrice(name, duration);\\n if (msg.value < ronPrice) revert InsufficientValue();\\n\\n unchecked {\\n uint256 remainAmount = msg.value - ronPrice;\\n if (remainAmount != 0) RONTransferHelper.safeTransfer(payable(_msgSender()), remainAmount);\\n }\\n\\n _transferRONToTreasury();\\n }\\n\\n /**\\n * @dev Helper method to register a name for owner.\\n *\\n * Emits an event {NameRegistered}.\\n */\\n function _register(\\n string memory name,\\n address owner,\\n uint64 duration,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord,\\n uint256 usdPrice,\\n uint256 ronPrice\\n ) internal {\\n (uint64 expiryTime, uint256 id) = _rnsUnified.mint(LibRNSDomain.RON_ID, name, resolver, owner, duration);\\n if (data.length != 0) _setRecords(resolver, id, data);\\n if (reverseRecord) _setReverseRecord(name, owner);\\n emit NameRegistered(name, id, owner, ronPrice, usdPrice, expiryTime);\\n }\\n\\n /**\\n * @dev Helper method to update RNSDomainPrice contract.\\n *\\n * Emits an event {DomainPriceUpdated}.\\n */\\n function _setPriceOracle(INSDomainPrice priceOracle) internal {\\n _priceOracle = priceOracle;\\n emit DomainPriceUpdated(_msgSender(), priceOracle);\\n }\\n\\n /**\\n * @dev Helper method to check if a domain name is available for register.\\n */\\n function _requireAvailable(string memory name) internal view {\\n if (!available(name)) revert NameNotAvailable(name);\\n }\\n}\\n\",\"keccak256\":\"0x5394d6c84b2adc85a27a6ee4e0cdfe0b3b09ba3293c363a5e520414d72a543c5\",\"license\":\"MIT\"},\"src/interfaces/IMulticallable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.0;\\n\\n/**\\n * @notice To multi-call to a specified contract which has multicall interface:\\n *\\n * ```solidity\\n * interface IMock is IMulticallable {\\n * function foo() external;\\n * function bar() external;\\n * }\\n *\\n * bytes[] memory calldatas = new bytes[](2);\\n * calldatas[0] = abi.encodeCall(IMock.foo,());\\n * calldatas[1] = abi.encodeCall(IMock.bar,());\\n * IMock(target).multicall(calldatas);\\n * ```\\n */\\ninterface IMulticallable {\\n /**\\n * @dev Executes bulk action to the original contract.\\n * Reverts if there is a single call failed.\\n *\\n * @param data The calldata to original contract.\\n *\\n */\\n function multicall(bytes[] calldata data) external returns (bytes[] memory results);\\n\\n /**\\n * @dev Executes bulk action to the original contract.\\n *\\n * @param requireSuccess Flag to indicating whether the contract reverts if there is a single call failed.\\n * @param data The calldata to original contract.\\n *\\n */\\n function tryMulticall(bool requireSuccess, bytes[] calldata data) external returns (bytes[] memory results);\\n}\\n\",\"keccak256\":\"0x0e76578b0efeafdf33915d77d3f98145ac2f74cdd311db03a9b94d4aa566d107\",\"license\":\"UNLICENSED\"},\"src/interfaces/INSDomainPrice.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { PeriodScaler } from \\\"../libraries/math/PeriodScalingUtils.sol\\\";\\nimport { IPyth } from \\\"@pythnetwork/IPyth.sol\\\";\\n\\ninterface INSDomainPrice {\\n error InvalidArrayLength();\\n error RenewalFeeIsNotOverriden();\\n error ExceedAuctionDomainExpiry();\\n\\n struct RenewalFee {\\n uint256 labelLength;\\n uint256 fee;\\n }\\n\\n struct UnitPrice {\\n uint256 usd;\\n uint256 ron;\\n }\\n\\n /// @dev Emitted when the renewal reservation ratio is updated.\\n event TaxRatioUpdated(address indexed operator, uint256 indexed ratio);\\n /// @dev Emitted when the maximum length of renewal fee is updated.\\n event MaxRenewalFeeLengthUpdated(address indexed operator, uint256 indexed maxLength);\\n /// @dev Emitted when the renew fee is updated.\\n event RenewalFeeByLengthUpdated(address indexed operator, uint256 indexed labelLength, uint256 renewalFee);\\n /// @dev Emitted when the renew fee of a domain is overridden. Value of `inverseRenewalFee` is 0 when not overridden.\\n event RenewalFeeOverridingUpdated(address indexed operator, bytes32 indexed labelHash, uint256 inverseRenewalFee);\\n\\n /// @dev Emitted when the domain price is updated.\\n event DomainPriceUpdated(\\n address indexed operator, bytes32 indexed labelHash, uint256 price, bytes32 indexed proofHash, uint256 setType\\n );\\n /// @dev Emitted when the rule to rescale domain price is updated.\\n event DomainPriceScaleRuleUpdated(address indexed operator, uint192 ratio, uint64 period);\\n\\n /// @dev Emitted when the Pyth Oracle config is updated.\\n event PythOracleConfigUpdated(\\n address indexed operator, IPyth indexed pyth, uint256 maxAcceptableAge, bytes32 indexed pythIdForRONUSD\\n );\\n\\n /**\\n * @dev Returns the Pyth oracle config.\\n */\\n function getPythOracleConfig() external view returns (IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD);\\n\\n /**\\n * @dev Sets the Pyth oracle config.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {PythOracleConfigUpdated}.\\n */\\n function setPythOracleConfig(IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) external;\\n\\n /**\\n * @dev Returns the percentage to scale from domain price each period.\\n */\\n function getScaleDownRuleForDomainPrice() external view returns (PeriodScaler memory dpScaleRule);\\n\\n /**\\n * @dev Sets the percentage to scale from domain price each period.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {DomainPriceScaleRuleUpdated}.\\n *\\n * @notice Applies for the business rule: -x% each y seconds.\\n */\\n function setScaleDownRuleForDomainPrice(PeriodScaler calldata scaleRule) external;\\n\\n /**\\n * @dev Returns the renewal fee by lengths.\\n */\\n function getRenewalFeeByLengths() external view returns (RenewalFee[] memory renewalFees);\\n\\n /**\\n * @dev Sets the renewal fee by lengths\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {RenewalFeeByLengthUpdated}.\\n * Emits an event {MaxRenewalFeeLengthUpdated} optionally.\\n */\\n function setRenewalFeeByLengths(RenewalFee[] calldata renewalFees) external;\\n\\n /**\\n * @dev Returns tax ratio.\\n */\\n function getTaxRatio() external view returns (uint256 taxRatio);\\n\\n /**\\n * @dev Sets renewal reservation ratio.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits an event {TaxRatioUpdated}.\\n */\\n function setTaxRatio(uint256 ratio) external;\\n\\n /**\\n * @dev Return the domain price.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n */\\n function getDomainPrice(string memory label) external view returns (uint256 usdPrice, uint256 ronPrice);\\n\\n /**\\n * @dev Returns the renewal fee in USD and RON.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n * @param duration Amount of second(s).\\n */\\n function getRenewalFee(string calldata label, uint256 duration)\\n external\\n view\\n returns (UnitPrice memory basePrice, UnitPrice memory tax);\\n\\n /**\\n * @dev Returns the renewal fee of a label. Reverts if not overridden.\\n * @notice This method is to help developers check the domain renewal fee overriding. Consider using method\\n * {getRenewalFee} instead for full handling of renewal fees.\\n */\\n function getOverriddenRenewalFee(string memory label) external view returns (uint256 usdFee);\\n\\n /**\\n * @dev Bulk override renewal fees.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {RenewalFeeOverridingUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param usdPrices Array of prices in USD. Leave 2^256 - 1 to remove overriding.\\n */\\n function bulkOverrideRenewalFees(bytes32[] calldata lbHashes, uint256[] calldata usdPrices) external;\\n\\n /**\\n * @dev Bulk try to set domain prices. Returns a boolean array indicating whether domain prices at the corresponding\\n * indexes if set or not.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n * - The price should be larger than current domain price or it will not be updated.\\n *\\n * Emits events {DomainPriceUpdated} optionally.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param ronPrices Array of prices in (W)RON token.\\n * @param proofHashes Array of proof hashes.\\n * @param setTypes Array of update types from the operator service.\\n */\\n function bulkTrySetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external returns (bool[] memory updated);\\n\\n /**\\n * @dev Bulk override domain prices.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {DomainPriceUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param ronPrices Array of prices in (W)RON token.\\n * @param proofHashes Array of proof hashes.\\n * @param setTypes Array of update types from the operator service.\\n */\\n function bulkSetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external;\\n\\n /**\\n * @dev Returns the converted amount from USD to RON.\\n */\\n function convertUSDToRON(uint256 usdAmount) external view returns (uint256 ronAmount);\\n\\n /**\\n * @dev Returns the converted amount from RON to USD.\\n */\\n function convertRONToUSD(uint256 ronAmount) external view returns (uint256 usdAmount);\\n\\n /**\\n * @dev Value equals to keccak256(\\\"OPERATOR_ROLE\\\").\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the overrider role.\\n */\\n function OVERRIDER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\\n */\\n function MAX_PERCENTAGE() external pure returns (uint64);\\n\\n /**\\n * @dev Decimal for USD.\\n */\\n function USD_DECIMALS() external pure returns (uint8);\\n}\\n\",\"keccak256\":\"0xcb57a6120bbe131d1c2a2ae72ce6a33ab95f5da4cae85e9cd1731496e26db7b1\",\"license\":\"MIT\"},\"src/interfaces/INSReverseRegistrar.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\nimport { INameResolver } from \\\"./resolvers/INameResolver.sol\\\";\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\n\\n/// @dev See https://eips.ethereum.org/EIPS/eip-181#registrar\\ninterface IERC181 {\\n /**\\n * @dev Claims the name hex(addr) + '.addr.reverse' for addr.\\n *\\n * @param addr The address to set as the addr of the reverse record in INS.\\n * @return id The INS node hash of the reverse record.\\n */\\n function claim(address addr) external returns (uint256 id);\\n\\n /**\\n * @dev Claims the name hex(owner) + '.addr.reverse' for owner and sets resolver.\\n *\\n * @param addr The address to set as the owner of the reverse record in INS.\\n * @param resolver The address of the resolver to set; 0 to leave unchanged.\\n * @return id The INS node hash of the reverse record.\\n */\\n function claimWithResolver(address addr, address resolver) external returns (uint256 id);\\n\\n /**\\n * @dev Sets the name record for the reverse INS record associated with the calling account. First updates the\\n * resolver to the default reverse resolver if necessary.\\n *\\n * @param name The name to set for this address.\\n * @return The INS node hash of the reverse record.\\n */\\n function setName(string memory name) external returns (uint256);\\n}\\n\\ninterface INSReverseRegistrar is IERC181, IERC165 {\\n /// @dev Error: The provided id is not child node of `ADDR_REVERSE_ID`\\n error InvalidId();\\n /// @dev Error: The contract is not authorized for minting or modifying domain hex(addr) + '.addr.reverse'.\\n error InvalidConfig();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: The provided resolver address is null.\\n error NullAssignment();\\n\\n /// @dev Emitted when reverse node is claimed.\\n event ReverseClaimed(address indexed addr, uint256 indexed id);\\n /// @dev Emitted when the default resolver is changed.\\n event DefaultResolverChanged(INameResolver indexed resolver);\\n\\n /**\\n * @dev Returns the controller role.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns default resolver.\\n */\\n function getDefaultResolver() external view returns (INameResolver);\\n\\n /**\\n * @dev Returns RNSUnified contract.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Sets default resolver.\\n *\\n * Requirement:\\n *\\n * - The method caller must be admin.\\n *\\n * Emitted an event {DefaultResolverChanged}.\\n *\\n */\\n function setDefaultResolver(INameResolver resolver) external;\\n\\n /**\\n * @dev Same as {IERC181-setName}.\\n */\\n function setNameForAddr(address addr, string memory name) external returns (uint256 id);\\n\\n /**\\n * @dev Returns address that the reverse node resolves for.\\n * Eg. node namehash('{addr}.addr.reverse') will always resolve for `addr`.\\n */\\n function getAddress(uint256 id) external view returns (address);\\n\\n /**\\n * @dev Returns the id hash for a given account's reverse records.\\n * @param addr The address to hash\\n * @return The INS node hash.\\n */\\n function computeId(address addr) external pure returns (uint256);\\n}\\n\",\"keccak256\":\"0x3b88e9ea1dd7c128244b5d0c69cee9dcadcb16b05a7e13416cc7b95c071b60a4\",\"license\":\"MIT\"},\"src/interfaces/INSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC721Metadata } from \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport { IAccessControlEnumerable } from \\\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\\\";\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\ninterface INSUnified is IAccessControlEnumerable, IERC721Metadata {\\n /// @dev Error: The provided token id is expired.\\n error Expired();\\n /// @dev Error: The provided token id is unexists.\\n error Unexists();\\n /// @dev Error: The provided token id's depth level is greater than 3.\\n error ThirdLevelDomainUnallowed();\\n /// @dev Error: The provided id expiry is greater than parent id expiry.\\n error ExceedParentExpiry();\\n /// @dev Error: The provided name is unavailable for registration.\\n error Unavailable();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: Missing controller role required for modification.\\n error MissingControllerRole();\\n /// @dev Error: Attempting to set an immutable field, which cannot be modified.\\n error CannotSetImmutableField();\\n /// @dev Error: Missing protected settler role required for modification.\\n error MissingProtectedSettlerRole();\\n /// @dev Error: Attempting to set an expiry time that is not larger than the previous one.\\n error ExpiryTimeMustBeLargerThanTheOldOne();\\n /// @dev Error: The provided name must be registered or is in a grace period.\\n error NameMustBeRegisteredOrInGracePeriod();\\n\\n /**\\n * | Fields\\\\Idc | Modifying Indicator |\\n * | ---------- | ------------------- |\\n * | depth | 0b00000001 |\\n * | parentId | 0b00000010 |\\n * | label | 0b00000100 |\\n */\\n struct ImmutableRecord {\\n // The level-th of a domain.\\n uint8 depth;\\n // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron')\\n uint256 parentId;\\n // The label of a domain. Eg, label is vip for domain vip.duke.ron\\n string label;\\n }\\n\\n /**\\n * | Fields\\\\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender |\\n * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- |\\n * | resolver | 0b00001000 | x | | x |\\n * | owner | 0b00010000 | x | | x |\\n * | expiry | 0b00100000 | x | | |\\n * | protected | 0b01000000 | | x | |\\n * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender.\\n */\\n struct MutableRecord {\\n // The resolver address.\\n address resolver;\\n // The record owner. This field must equal to the owner of token.\\n address owner;\\n // Expiry timestamp.\\n uint64 expiry;\\n // Flag indicating whether the token is protected or not.\\n bool protected;\\n }\\n\\n struct Record {\\n ImmutableRecord immut;\\n MutableRecord mut;\\n }\\n\\n /// @dev Emitted when a base URI is updated.\\n event BaseURIUpdated(address indexed operator, string newURI);\\n /// @dev Emitted when the grace period for all domain is updated.\\n event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod);\\n\\n /**\\n * @dev Emitted when the record of node is updated.\\n * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right\\n * to left) needs to be updated.\\n * @param record The updated fields.\\n */\\n event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record);\\n\\n /**\\n * @dev Returns the controller role.\\n * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the protected setter role.\\n * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\\n */\\n function PROTECTED_SETTLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the reservation role.\\n * @notice Never expire for token owner has this role.\\n */\\n function RESERVATION_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the max expiry value.\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the name hash output of a domain.\\n */\\n function namehash(string memory domain) external pure returns (bytes32 node);\\n\\n /**\\n * @dev Returns true if the specified name is available for registration.\\n * Note: Only available after passing the grace period.\\n */\\n function available(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Returns the grace period in second(s).\\n * Note: This period affects the availability of the domain.\\n */\\n function getGracePeriod() external view returns (uint64);\\n\\n /**\\n * @dev Returns the total minted ids.\\n * Note: Burning id will not affect `totalMinted`.\\n */\\n function totalMinted() external view returns (uint256);\\n\\n /**\\n * @dev Sets the grace period in second(s).\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Note: This period affects the availability of the domain.\\n */\\n function setGracePeriod(uint64) external;\\n\\n /**\\n * @dev Sets the base uri.\\n *\\n * Requirements:\\n * - The method caller must be contract owner.\\n *\\n */\\n function setBaseURI(string calldata baseTokenURI) external;\\n\\n /**\\n * @dev Mints token for subnode.\\n *\\n * Requirements:\\n * - The token must be available.\\n * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n *\\n * @param parentId The parent node to mint or create subnode.\\n * @param label The domain label. Eg, label is duke for domain duke.ron.\\n * @param resolver The resolver address.\\n * @param owner The token owner.\\n * @param duration Duration in second(s) to expire. Leave 0 to set as parent.\\n */\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n returns (uint64 expiryTime, uint256 id);\\n\\n /**\\n * @dev Returns all record of a domain.\\n * Reverts if the token is non existent.\\n */\\n function getRecord(uint256 id) external view returns (Record memory record);\\n\\n /**\\n * @dev Returns the domain name of id.\\n */\\n function getDomain(uint256 id) external view returns (string memory domain);\\n\\n /**\\n * @dev Returns whether the requester is able to modify the record based on the updated index.\\n * Note: This method strictly follows the permission of struct {MutableRecord}.\\n */\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n external\\n view\\n returns (bool, bytes4 error);\\n\\n /**\\n * @dev Sets record of existing token. Update operation for {Record.mut}.\\n *\\n * Requirements:\\n * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external;\\n\\n /**\\n * @dev Reclaims ownership. Update operation for {Record.mut.owner}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function reclaim(uint256 id, address owner) external;\\n\\n /**\\n * @dev Renews token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function renew(uint256 id, uint64 duration) external returns (uint64 expiry);\\n\\n /**\\n * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setExpiry(uint256 id, uint64 expiry) external;\\n\\n /**\\n * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}.\\n *\\n * Requirements:\\n * - The method caller must have protected setter role.\\n *\\n * Emits events {RecordUpdated}.\\n */\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external;\\n}\\n\",\"keccak256\":\"0x98e2e77490d7fd6d87a8e9800223bb2f60a33e7338e2f65f64a3aed4737c035c\",\"license\":\"MIT\"},\"src/interfaces/INameChecker.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\n/**\\n * @title INameChecker\\n * @dev The INameChecker interface provides functions for managing and checking substrings and forbidden words in strings.\\n */\\ninterface INameChecker {\\n /**\\n * @dev Emitted when the word range is updated.\\n * @param operator The address that updated the word range.\\n * @param min The minimum word length allowed.\\n * @param max The maximum word length allowed.\\n */\\n event WordRangeUpdated(address indexed operator, uint8 min, uint8 max);\\n\\n /**\\n * @dev Emitted when the forbidden words are updated.\\n * @param operator The address that updated the forbidden words list.\\n * @param wordCount The number of words in the list.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n event ForbiddenWordsUpdated(address indexed operator, uint256 wordCount, bool shouldForbid);\\n\\n /**\\n * @dev Returns an array of all substrings of a given string.\\n * @param str The input string to analyze.\\n * @return subStrings An array of all substrings.\\n */\\n function getAllSubStrings(string calldata str) external view returns (string[] memory subStrings);\\n\\n /**\\n * @dev Returns the total number of substrings for a given string length, as well as the minimum and maximum allowed word lengths.\\n * @param strlen The length of the input string.\\n * @return total The total number of substrings.\\n * @return min The minimum word length allowed.\\n * @return max The maximum word length allowed.\\n */\\n function totalSubString(uint256 strlen) external view returns (uint256 total, uint256 min, uint256 max);\\n\\n /**\\n * @dev Sets a list of forbidden words and specifies whether they should be forbidden.\\n * @param packedWords An array of packed word representations.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n function setForbiddenWords(uint256[] calldata packedWords, bool shouldForbid) external;\\n\\n /**\\n * @dev Sets a list of forbidden words and specifies whether they should be forbidden.\\n * @param words An array of raw words in string representations.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n function setForbiddenWords(string[] calldata words, bool shouldForbid) external;\\n\\n /**\\n * @dev Sets the minimum and maximum word lengths allowed.\\n * @param min The minimum word length.\\n * @param max The maximum word length.\\n */\\n function setWordRange(uint8 min, uint8 max) external;\\n\\n /**\\n * @dev Retrieves the current minimum and maximum word lengths allowed.\\n * @return min The minimum word length allowed.\\n * @return max The maximum word length allowed.\\n */\\n function getWordRange() external view returns (uint8 min, uint8 max);\\n\\n /**\\n * @notice Checks if a given name contains any forbidden characters or blacklisted words.\\n * @param name The string to check.\\n * @return true if the name contains forbidden characters or blacklisted words, false otherwise.\\n */\\n function forbidden(string calldata name) external view returns (bool);\\n\\n /**\\n * @notice Checks if a given name contains any blacklisted words.\\n * @param name The string to check.\\n * @return true if the name contains blacklisted words, false otherwise.\\n */\\n function containsBlacklistedWord(string calldata name) external view returns (bool);\\n\\n /**\\n * @notice Checks if a given name contains any invalid characters.\\n * requirements:\\n * - all characters in name must in range [a-z] or [0-9].\\n * @param name The string to check.\\n * @return true if the name contains invalid characters, false otherwise.\\n */\\n function containsInvalidCharacter(string calldata name) external pure returns (bool);\\n\\n /**\\n * @dev Packs a string into a single word representation.\\n * @param str The string to be packed.\\n * @notice Returns `uint256(0)` if the length is zero or greater than 31.\\n * @return packed The packed value of the input string.\\n */\\n function pack(string memory str) external pure returns (uint256 packed);\\n\\n /**\\n * @dev Packs an array of strings into their single word representations.\\n * @param strs The array of strings to be packed.\\n * @notice Returns an array of packed values, along with the minimum and maximum string lengths.\\n * @return packeds An array containing the packed values of the input strings.\\n */\\n function packBulk(string[] memory strs) external pure returns (uint256[] memory packeds);\\n}\\n\",\"keccak256\":\"0x9f2b9f08f8d60f565f93925ad64353f01feaad671440d865f45008d1304d4794\",\"license\":\"MIT\"},\"src/interfaces/IRONRegistrarController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\nimport { INSDomainPrice } from \\\"./INSDomainPrice.sol\\\";\\nimport { INameChecker } from \\\"./INameChecker.sol\\\";\\nimport { INSReverseRegistrar } from \\\"./INSReverseRegistrar.sol\\\";\\n\\n/**\\n * @title IRONRegistrarController\\n * @dev Interface for the Registrar Controller contract that manages the registration, renewal, and commitment of RNS\\n * names.\\n */\\ninterface IRONRegistrarController {\\n /// @dev Error: The provided commitment timestamp is too new for registration.\\n error CommitmentTooNew(bytes32 commitment);\\n /// @dev Error: The provided commitment timestamp is too old for registration.\\n error CommitmentTooOld(bytes32 commitment);\\n /// @dev Error: The requested name is not available for registration.\\n error NameNotAvailable(string name);\\n /// @dev Error: The requested duration for registration is too short.\\n error DurationTooShort(uint64 duration);\\n /// @dev Error: A resolver is required when additional data is supplied during registration.\\n error ResolverRequiredWhenDataSupplied();\\n /// @dev Error: An unexpired commitment already exists for the given commitment.\\n error UnexpiredCommitmentExists(bytes32 commitment);\\n /// @dev Error: Insufficient value (RON) provided for registration.\\n error InsufficientValue();\\n /// @dev Error: The sender is not authorized for the given RNS node.\\n error Unauthorized(bytes32 node);\\n /// @dev Error: The maximum commitment age is set too low.\\n error MaxCommitmentAgeTooLow();\\n /// @dev Error: The maximum commitment age is set too high.\\n error MaxCommitmentAgeTooHigh();\\n /// @dev Thrown when some one requests for protected names\\n error ErrRequestedForProtectedName(string name);\\n /// @dev Thrown when received invalid params for registering protected name\\n error ErrInvalidRegisterProtectedName(string name, address requestOwner, bool nameProtected, bool ownerWhitelisted);\\n /// @dev Thrown when received invalid array length\\n error InvalidArrayLength();\\n\\n /**\\n * @dev Emitted when the min registration duration is updated.\\n * @param operator The address of the operator who triggered the update.\\n * @param duration The new duration in seconds.\\n */\\n event MinRegistrationDurationUpdated(address indexed operator, uint256 duration);\\n\\n /**\\n * @dev Emitted when RNSDomainPrice contract is updated.\\n * @param operator The address of the operator who triggered the update.\\n * @param newDomainPrice The new duration domain price contract.\\n */\\n event DomainPriceUpdated(address indexed operator, INSDomainPrice newDomainPrice);\\n\\n /**\\n * @dev Emitted when the commitment age range is updated.\\n * @param operator The address of the operator who triggered the update.\\n * @param minCommitmentAge The new minimum commitment age in seconds.\\n * @param maxCommitmentAge The new maximum commitment age in seconds.\\n */\\n event CommitmentAgeUpdated(address indexed operator, uint256 minCommitmentAge, uint256 maxCommitmentAge);\\n\\n /**\\n * @dev Emitted when a new name is successfully registered.\\n * @param name The registered name.\\n * @param id The namehash of the registered name.\\n * @param owner The owner of the registered name.\\n * @param ronPrice The cost of the registration in RON.\\n * @param usdPrice The cost of the registration in USD.\\n * @param expires The expiration timestamp of the registration.\\n */\\n event NameRegistered(\\n string name, uint256 indexed id, address indexed owner, uint256 ronPrice, uint256 usdPrice, uint64 expires\\n );\\n\\n /**\\n * @dev Emitted when a name is renewed.\\n * @param name The renewed name.\\n * @param id The namehash of the registered name.\\n * @param cost The cost of renewal.\\n * @param expires The new expiration timestamp after renewal.\\n */\\n event NameRenewed(string name, uint256 indexed id, uint256 cost, uint64 expires);\\n\\n /**\\n * @dev Emitted the whitelist status is updated for the owners of the protected names.\\n * @param operator The address of the operator who triggered the update.\\n */\\n event ProtectedNamesWhitelisted(address indexed operator, uint256[] ids, address[] owners, bool status);\\n\\n /**\\n * @dev Retrieves the rent price for a given name and duration.\\n * @param name The name for which to calculate the rent price.\\n * @param duration The duration of the rent.\\n * @return usdPrice rent price in usd.\\n * @return ronPrice rent price in ron.\\n */\\n function rentPrice(string memory name, uint64 duration) external view returns (uint256 usdPrice, uint256 ronPrice);\\n\\n /**\\n * @dev Calculate the corresponding id given RON_ID and name.\\n */\\n function computeId(string memory name) external pure returns (uint256 id);\\n\\n /**\\n * @dev Checks if a name is valid.\\n * @param name The name to check validity for.\\n * @return A boolean indicating whether the name is available.\\n */\\n function valid(string memory name) external view returns (bool);\\n\\n /**\\n * @dev Checks if a name is available for registration.\\n * @param name The name to check availability for.\\n * @return A boolean indicating whether the name is available.\\n */\\n function available(string memory name) external returns (bool);\\n\\n /**\\n * @dev Generates the commitment hash for a registration.\\n * @param name The name to be registered.\\n * @param owner The owner of the name.\\n * @param duration The duration of the registration.\\n * @param secret The secret used for the commitment.\\n * @param resolver The resolver contract address.\\n * @param data Additional data associated with the registration.\\n * @param reverseRecord Whether to use reverse record for additional data.\\n * @return The commitment hash.\\n */\\n function computeCommitment(\\n string memory name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external view returns (bytes32);\\n\\n /**\\n * @dev Commits to a registration using the commitment hash.\\n * @param commitment The commitment hash.\\n */\\n function commit(bytes32 commitment) external;\\n\\n /**\\n * @dev Registers a new name.\\n * @param name The name to be registered.\\n * @param owner The owner of the name.\\n * @param duration The duration of the registration.\\n * @param secret The secret used for the commitment.\\n * @param resolver The resolver contract address.\\n * @param data Additional data associated with the registration.\\n * @param reverseRecord Whether to use reverse record for additional data.\\n */\\n function register(\\n string calldata name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable;\\n\\n /**\\n * @dev Renews an existing name registration.\\n * @param name The name to be renewed.\\n * @param duration The duration of the renewal.\\n */\\n function renew(string calldata name, uint64 duration) external payable;\\n\\n /**\\n * @dev Registers a protected name.\\n *\\n * Requirements:\\n * - The owner is whitelisted for registering.\\n */\\n function registerProtectedName(\\n string memory name,\\n address owner,\\n uint64 duration,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable;\\n\\n /**\\n * @dev Updates min registration duration.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function setMinRegistrationDuration(uint256 duration) external;\\n\\n /**\\n * @dev Sets the minimum and maximum commitment ages.\\n *\\n * Requirements:\\n * - Caller must have the DEFAULT_ADMIN_ROLE.\\n * - The `maxCommitmentAge` must be less than or equal to the current block timestamp.\\n * - The `maxCommitmentAge` must be greater than the `minCommitmentAge`.\\n *\\n * Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\\n *\\n * @param minCommitmentAge The minimum commitment age in seconds.\\n * @param maxCommitmentAge The maximum commitment age in seconds.\\n */\\n function setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) external;\\n\\n /**\\n * @dev Bulk (de)whitelist for buying protected names.\\n *\\n * Requirements:\\n * - The method caller is contract operator.\\n *\\n * Emits an event {ProtectedNamesWhitelisted}.\\n */\\n function bulkWhitelistProtectedNames(uint256[] calldata ids, address[] calldata owners, bool status) external;\\n\\n /**\\n * @dev Returns the whitelist status for registering protected name.\\n */\\n function getWhitelistProtectedNameStatus(uint256 id, address owner) external view returns (bool status);\\n\\n /**\\n * @dev Updates treasury address.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function setTreasury(address payable) external;\\n\\n /**\\n * @dev Updates price oracle address.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n */\\n function setPriceOracle(INSDomainPrice) external;\\n\\n /**\\n * @dev Returns the treasury address.\\n */\\n function getTreasury() external view returns (address);\\n\\n /**\\n * @dev Pauses the registrar controller's functionality.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function pause() external;\\n\\n /**\\n * @dev Unpauses the registrar controller's functionality.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function unpause() external;\\n\\n /**\\n * @dev Returns the role identifier for the pauser role.\\n */\\n function PAUSER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the operator role.\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the threshold for valid name length.\\n */\\n function MIN_DOMAIN_LENGTH() external view returns (uint8);\\n\\n /**\\n * @dev Returns the minimum registration duration.\\n */\\n function getMinRegistrationDuration() external view returns (uint256);\\n\\n /**\\n * @dev Returns the range of commitment ages allowed.\\n */\\n function getCommitmentAgeRange() external view returns (uint256 minCommitmentAge, uint256 maxCommitmentAge);\\n\\n /**\\n * @dev Returns the INSUnified contract associated with this controller.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Returns the INSDomainPrice contract associated with this controller.\\n */\\n function getPriceOracle() external view returns (INSDomainPrice);\\n\\n /**\\n * @dev Returns the INameChecker contract associated with this controller.\\n */\\n function getNameChecker() external view returns (INameChecker);\\n\\n /**\\n * @dev Returns the IReverseRegistrar contract associated with this controller.\\n */\\n function getReverseRegistrar() external view returns (INSReverseRegistrar);\\n}\\n\",\"keccak256\":\"0x553ded8a480060073e6274dadb390c441d4caa968df64d2f65b2401ffd422b00\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IABIResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.0;\\n\\ninterface IABIResolver {\\n /// Thrown when the input content type is invalid.\\n error InvalidContentType();\\n\\n /// @dev Emitted when the ABI is changed.\\n event ABIChanged(bytes32 indexed node, uint256 indexed contentType);\\n\\n /**\\n * @dev Sets the ABI associated with an INS node. Nodes may have one ABI of each content type. To remove an ABI, set it\\n * to the empty string.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n * - The content type must be powers of 2.\\n *\\n * Emitted an event {ABIChanged}.\\n *\\n * @param node The node to update.\\n * @param contentType The content type of the ABI\\n * @param data The ABI data.\\n */\\n function setABI(bytes32 node, uint256 contentType, bytes calldata data) external;\\n\\n /**\\n * @dev Returns the ABI associated with an INS node.\\n * Defined in EIP-205, see more at https://eips.ethereum.org/EIPS/eip-205\\n *\\n * @param node The INS node to query\\n * @param contentTypes A bitwise OR of the ABI formats accepted by the caller.\\n * @return contentType The content type of the return value\\n * @return data The ABI data\\n */\\n function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256 contentType, bytes memory data);\\n}\\n\",\"keccak256\":\"0xc701a6cafa883d6607b5916dfb4277099f39c450930d776da36a7acc2b2498c0\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IAddressResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.0;\\n\\ninterface IAddressResolver {\\n /// @dev Emitted when an address of a node is changed.\\n event AddrChanged(bytes32 indexed node, address addr);\\n\\n /**\\n * @dev Sets the address associated with an INS node.\\n *\\n * Requirement:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {AddrChanged}.\\n *\\n * @param node The node to update.\\n * @param addr The address to set.\\n */\\n function setAddr(bytes32 node, address addr) external;\\n\\n /**\\n * @dev Returns the address associated with an INS node.\\n * @param node The INS node to query.\\n * @return The associated address.\\n */\\n function addr(bytes32 node) external view returns (address payable);\\n}\\n\",\"keccak256\":\"0xb914cb4a730d20c867805fd148e7574c6565bc6c0a129825cdf3cf4f2f7f72d0\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IContentHashResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IContentHashResolver {\\n /// @dev Emitted when the content hash of a node is changed.\\n event ContentHashChanged(bytes32 indexed node, bytes hash);\\n\\n /**\\n * @dev Sets the content hash associated with an INS node.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {ContentHashChanged}.\\n *\\n * @param node The node to update.\\n * @param hash The content hash to set\\n */\\n function setContentHash(bytes32 node, bytes calldata hash) external;\\n\\n /**\\n * @dev Returns the content hash associated with an INS node.\\n * @param node The INS node to query.\\n * @return The associated content hash.\\n */\\n function contentHash(bytes32 node) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0xfbdc7211a813065e5cc2bdd3640c13f01c87b5f31fda86e562b0525628602c00\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IDNSRecordResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4;\\n\\ninterface IDNSRecordResolver {\\n /// @dev Emitted whenever a given node/name/resource's RRSET is updated.\\n event DNSRecordChanged(bytes32 indexed node, bytes name, uint16 resource, bytes record);\\n /// @dev Emitted whenever a given node/name/resource's RRSET is deleted.\\n event DNSRecordDeleted(bytes32 indexed node, bytes name, uint16 resource);\\n\\n /**\\n * @dev Set one or more DNS records. Records are supplied in wire-format. Records with the same node/name/resource\\n * must be supplied one after the other to ensure the data is updated correctly. For example, if the data was\\n * supplied:\\n * a.example.com IN A 1.2.3.4\\n * a.example.com IN A 5.6.7.8\\n * www.example.com IN CNAME a.example.com.\\n * then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was\\n * supplied:\\n * a.example.com IN A 1.2.3.4\\n * www.example.com IN CNAME a.example.com.\\n * a.example.com IN A 5.6.7.8\\n * then this would store the first A record, the CNAME, then the second A record which would overwrite the first.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * @param node the namehash of the node for which to set the records\\n * @param data the DNS wire format records to set\\n */\\n function setDNSRecords(bytes32 node, bytes calldata data) external;\\n\\n /**\\n * @dev Obtain a DNS record.\\n * @param node the namehash of the node for which to fetch the record\\n * @param name the keccak-256 hash of the fully-qualified name for which to fetch the record\\n * @param resource the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\\n * @return the DNS record in wire format if present, otherwise empty\\n */\\n function dnsRecord(bytes32 node, bytes32 name, uint16 resource) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x2341266d70b60f5bb666c066aaf1fdb35be81277bcdd04e3bf93ee774ae4d2f6\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IDNSZoneResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4;\\n\\ninterface IDNSZoneResolver {\\n /// @dev Emitted whenever a given node's zone hash is updated.\\n event DNSZonehashChanged(bytes32 indexed node, bytes lastzonehash, bytes zonehash);\\n\\n /**\\n * @dev Sets the hash for the zone.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {DNSZonehashChanged}.\\n *\\n * @param node The node to update.\\n * @param hash The zonehash to set\\n */\\n function setZonehash(bytes32 node, bytes calldata hash) external;\\n\\n /**\\n * @dev Obtains the hash for the zone.\\n * @param node The INS node to query.\\n * @return The associated contenthash.\\n */\\n function zonehash(bytes32 node) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x42aa5409a184740461e7477b8894d7549fd3908596bb7dba9adab59b8ff4ebed\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IInterfaceResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IInterfaceResolver {\\n /// @dev Emitted when the interface of node is changed.\\n event InterfaceChanged(bytes32 indexed node, bytes4 indexed interfaceID, address implementer);\\n\\n /**\\n * @dev Sets an interface associated with a name.\\n * Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * @param node The node to update.\\n * @param interfaceID The EIP 165 interface ID.\\n * @param implementer The address of a contract that implements this interface for this node.\\n */\\n function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external;\\n\\n /**\\n * @dev Returns the address of a contract that implements the specified interface for this name.\\n *\\n * If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`.\\n * If `addr()` is set, a contract exists at that address, and that contract implements EIP165 and returns `true` for\\n * the specified interfaceID, its address will be returned.\\n *\\n * @param node The INS node to query.\\n * @param interfaceID The EIP 165 interface ID to check for.\\n * @return The address that implements this interface, or 0 if the interface is unsupported.\\n */\\n function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address);\\n}\\n\",\"keccak256\":\"0xb4a1867d5cb899bfdc2e812c4bf9b9d3d14b34e0f72cbeffb4e018f8659b13fc\",\"license\":\"MIT\"},\"src/interfaces/resolvers/INameResolver.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.0;\\n\\ninterface INameResolver {\\n /// @dev Emitted when a node name is changed.\\n event NameChanged(bytes32 indexed node, string name);\\n\\n /**\\n * @dev Sets the name associated with an INS node, for reverse records.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {NameChanged}.\\n *\\n * @param node The node to update.\\n */\\n function setName(bytes32 node, string calldata newName) external;\\n\\n /**\\n * @dev Returns the name associated with an INS node, for reverse records.\\n * @param node The INS node to query.\\n * @return The associated name.\\n */\\n function name(bytes32 node) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xf3dbbe3238d5f1e491a43dbccbd74755fcd325b5c6aef6b7f0819684bd1f9da3\",\"license\":\"UNLICENSED\"},\"src/interfaces/resolvers/IPublicKeyResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ninterface IPublicKeyResolver {\\n struct PublicKey {\\n bytes32 x;\\n bytes32 y;\\n }\\n\\n /// @dev Emitted when a node public key is changed.\\n event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);\\n\\n /**\\n * @dev Sets the SECP256k1 public key associated with an INS node.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {PubkeyChanged}.\\n *\\n * @param node The INS node to query\\n * @param x the X coordinate of the curve point for the public key.\\n * @param y the Y coordinate of the curve point for the public key.\\n */\\n function setPubkey(bytes32 node, bytes32 x, bytes32 y) external;\\n\\n /**\\n * @dev Returns the SECP256k1 public key associated with an INS node.\\n * Defined in EIP 619.\\n *\\n * @param node The INS node to query\\n * @return x The X coordinate of the curve point for the public key.\\n * @return y The Y coordinate of the curve point for the public key.\\n */\\n function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y);\\n}\\n\",\"keccak256\":\"0x2644fd8d9b951c2aca5521ba519b68d4f3de19b731dae7907b6372e1ceac07ae\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IPublicResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"../INSUnified.sol\\\";\\nimport { INSReverseRegistrar } from \\\"../INSReverseRegistrar.sol\\\";\\nimport { IABIResolver } from \\\"./IABIResolver.sol\\\";\\nimport { IAddressResolver } from \\\"./IAddressResolver.sol\\\";\\nimport { IContentHashResolver } from \\\"./IContentHashResolver.sol\\\";\\nimport { IDNSRecordResolver } from \\\"./IDNSRecordResolver.sol\\\";\\nimport { IDNSZoneResolver } from \\\"./IDNSZoneResolver.sol\\\";\\nimport { IInterfaceResolver } from \\\"./IInterfaceResolver.sol\\\";\\nimport { INameResolver } from \\\"./INameResolver.sol\\\";\\nimport { IPublicKeyResolver } from \\\"./IPublicKeyResolver.sol\\\";\\nimport { ITextResolver } from \\\"./ITextResolver.sol\\\";\\nimport { IMulticallable } from \\\"../IMulticallable.sol\\\";\\n\\ninterface IPublicResolver is\\n IABIResolver,\\n IAddressResolver,\\n IContentHashResolver,\\n IDNSRecordResolver,\\n IDNSZoneResolver,\\n IInterfaceResolver,\\n INameResolver,\\n IPublicKeyResolver,\\n ITextResolver,\\n IMulticallable\\n{\\n /// @dev See {IERC1155-ApprovalForAll}. Logged when an operator is added or removed.\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /// @dev Logged when a delegate is approved or an approval is revoked.\\n event Approved(address owner, bytes32 indexed node, address indexed delegate, bool indexed approved);\\n\\n /**\\n * @dev Checks if an account is authorized to manage the resolution of a specific RNS node.\\n * @param node The RNS node.\\n * @param account The account address being checked for authorization.\\n * @return A boolean indicating whether the account is authorized.\\n */\\n function isAuthorized(bytes32 node, address account) external view returns (bool);\\n\\n /**\\n * @dev Retrieves the RNSUnified associated with this resolver.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Retrieves the reverse registrar associated with this resolver.\\n */\\n function getReverseRegistrar() external view returns (INSReverseRegistrar);\\n\\n /**\\n * @dev This function provides an extra security check when called from privileged contracts (such as\\n * RONRegistrarController) that can set records on behalf of the node owners.\\n *\\n * Reverts if the node is not null but calldata is mismatched.\\n */\\n function multicallWithNodeCheck(bytes32 node, bytes[] calldata data) external returns (bytes[] memory results);\\n}\\n\",\"keccak256\":\"0x97b6f762f25a4dc3f6398a76bbcb7d3922f5f440ee9e0541c83579e09a8f87b7\",\"license\":\"MIT\"},\"src/interfaces/resolvers/ITextResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ninterface ITextResolver {\\n /// @dev Emitted when a node text is changed.\\n event TextChanged(bytes32 indexed node, string indexed indexedKey, string key, string value);\\n\\n /**\\n * @dev Sets the text data associated with an INS node and key.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {TextChanged}.\\n *\\n * @param node The node to update.\\n * @param key The key to set.\\n * @param value The text data value to set.\\n */\\n function setText(bytes32 node, string calldata key, string calldata value) external;\\n\\n /**\\n * Returns the text data associated with an INS node and key.\\n * @param node The INS node to query.\\n * @param key The text data key to query.\\n * @return The associated text data.\\n */\\n function text(bytes32 node, string calldata key) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x05ce1760d3a16d99614b1a46c11308238e1ecd8be23f081fac146bbc58961ecf\",\"license\":\"MIT\"},\"src/libraries/LibRNSDomain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nlibrary LibRNSDomain {\\n /// @dev Value equals to namehash('ron')\\n uint256 internal constant RON_ID = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688;\\n /// @dev Value equals to namehash('addr.reverse')\\n uint256 internal constant ADDR_REVERSE_ID = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n /**\\n * @dev Calculate the corresponding id given parentId and label.\\n */\\n function toId(uint256 parentId, string memory label) internal pure returns (uint256 id) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(0x0, parentId)\\n mstore(0x20, keccak256(add(label, 32), mload(label)))\\n id := keccak256(0x0, 64)\\n }\\n }\\n\\n /**\\n * @dev Calculates the hash of the label.\\n */\\n function hashLabel(string memory label) internal pure returns (bytes32 hashed) {\\n assembly (\\\"memory-safe\\\") {\\n hashed := keccak256(add(label, 32), mload(label))\\n }\\n }\\n\\n /**\\n * @dev Calculate the RNS namehash of a str.\\n */\\n function namehash(string memory str) internal pure returns (bytes32 hashed) {\\n // notice: this method is case-sensitive, ensure the string is lowercased before calling this method\\n assembly (\\\"memory-safe\\\") {\\n // load str length\\n let len := mload(str)\\n // returns bytes32(0x0) if length is zero\\n if iszero(iszero(len)) {\\n let hashedLen\\n // compute pointer to str[0]\\n let head := add(str, 32)\\n // compute pointer to str[length - 1]\\n let tail := add(head, sub(len, 1))\\n // cleanup dirty bytes if contains any\\n mstore(0x0, 0)\\n // loop backwards from `tail` to `head`\\n for { let i := tail } iszero(lt(i, head)) { i := sub(i, 1) } {\\n // check if `i` is `head`\\n let isHead := eq(i, head)\\n // check if `str[i-1]` is \\\".\\\"\\n // `0x2e` == bytes1(\\\".\\\")\\n let isDotNext := eq(shr(248, mload(sub(i, 1))), 0x2e)\\n if or(isHead, isDotNext) {\\n // size = distance(length, i) - hashedLength + 1\\n let size := add(sub(sub(tail, i), hashedLen), 1)\\n mstore(0x20, keccak256(i, size))\\n mstore(0x0, keccak256(0x0, 64))\\n // skip \\\".\\\" thereby + 1\\n hashedLen := add(hashedLen, add(size, 1))\\n }\\n }\\n }\\n hashed := mload(0x0)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x715029b2b420c6ec00bc1f939b837acf45d247fde8426089575b0e7b5e84518b\",\"license\":\"MIT\"},\"src/libraries/LibString.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nlibrary LibString {\\n error InvalidStringLength();\\n error InvalidCharacter(bytes1 char);\\n\\n /// @dev Lookup constant for method. See more detail at https://eips.ethereum.org/EIPS/eip-181\\n bytes32 private constant LOOKUP = 0x3031323334353637383961626364656600000000000000000000000000000000;\\n\\n /**\\n * @dev Returns the length of a given string\\n *\\n * @param s The string to measure the length of\\n * @return The length of the input string\\n */\\n function strlen(string memory s) internal pure returns (uint256) {\\n unchecked {\\n uint256 i;\\n uint256 len;\\n uint256 bytelength = bytes(s).length;\\n for (len; i < bytelength; len++) {\\n bytes1 b = bytes(s)[i];\\n if (b < 0x80) {\\n i += 1;\\n } else if (b < 0xE0) {\\n i += 2;\\n } else if (b < 0xF0) {\\n i += 3;\\n } else if (b < 0xF8) {\\n i += 4;\\n } else if (b < 0xFC) {\\n i += 5;\\n } else {\\n i += 6;\\n }\\n }\\n return len;\\n }\\n }\\n\\n /**\\n * @dev Converts an address to string.\\n */\\n function toString(address addr) internal pure returns (string memory stringifiedAddr) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(stringifiedAddr, 40)\\n let ptr := add(stringifiedAddr, 0x20)\\n for { let i := 40 } gt(i, 0) { } {\\n i := sub(i, 1)\\n mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP))\\n addr := div(addr, 0x10)\\n\\n i := sub(i, 1)\\n mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP))\\n addr := div(addr, 0x10)\\n }\\n }\\n }\\n\\n /**\\n * @dev Converts string to address.\\n * Reverts if the string length is not equal to 40.\\n */\\n function parseAddr(string memory stringifiedAddr) internal pure returns (address) {\\n unchecked {\\n if (bytes(stringifiedAddr).length != 40) revert InvalidStringLength();\\n uint160 addr;\\n for (uint256 i = 0; i < 40; i += 2) {\\n addr *= 0x100;\\n addr += uint160(hexCharToDec(bytes(stringifiedAddr)[i])) * 0x10;\\n addr += hexCharToDec(bytes(stringifiedAddr)[i + 1]);\\n }\\n return address(addr);\\n }\\n }\\n\\n /**\\n * @dev Converts a hex char (0-9, a-f, A-F) to decimal number.\\n * Reverts if the char is invalid.\\n */\\n function hexCharToDec(bytes1 c) private pure returns (uint8 r) {\\n unchecked {\\n if ((bytes1(\\\"a\\\") <= c) && (c <= bytes1(\\\"f\\\"))) r = uint8(c) - 87;\\n else if ((bytes1(\\\"A\\\") <= c) && (c <= bytes1(\\\"F\\\"))) r = uint8(c) - 55;\\n else if ((bytes1(\\\"0\\\") <= c) && (c <= bytes1(\\\"9\\\"))) r = uint8(c) - 48;\\n else revert InvalidCharacter(c);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d456b294f0e44ccaabded43a3d96db6270761a167535155a762fe41e968b905\",\"license\":\"MIT\"},\"src/libraries/math/PeriodScalingUtils.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\nimport { PowMath } from \\\"./PowMath.sol\\\";\\n\\nstruct PeriodScaler {\\n uint192 ratio;\\n uint64 period;\\n}\\n\\nlibrary LibPeriodScaler {\\n using PowMath for uint256;\\n\\n error PeriodNumOverflowedUint16(uint256 n);\\n\\n /// @dev The precision number of calculation is 2\\n uint256 public constant MAX_PERCENTAGE = 100_00;\\n\\n /**\\n * @dev Scales down the input value `v` for a percentage of `self.ratio` each period `self.period`.\\n * Reverts if the passed period is larger than 2^16 - 1.\\n *\\n * @param self The period scaler with specific period and ratio\\n * @param v The original value to scale based on the rule `self`\\n * @param maxR The maximum value of 100%. Eg, if the `self.ratio` in range of [0;100_00] reflexes 0-100%, this param\\n * must be 100_00\\n * @param dur The passed duration in the same uint with `self.period`\\n */\\n function scaleDown(PeriodScaler memory self, uint256 v, uint64 maxR, uint256 dur) internal pure returns (uint256 rs) {\\n uint256 n = dur / uint256(self.period);\\n if (n == 0 || self.ratio == 0) return v;\\n if (maxR == self.ratio) return 0;\\n if (n > type(uint16).max) revert PeriodNumOverflowedUint16(n);\\n\\n unchecked {\\n // Normalizes the input ratios to be in range of [0;MAX_PERCENTAGE]\\n uint256 p = Math.mulDiv(maxR - self.ratio, MAX_PERCENTAGE, maxR);\\n return v.mulDiv({ y: p, d: MAX_PERCENTAGE, n: uint16(n) });\\n }\\n }\\n}\\n\",\"keccak256\":\"0x502d004fbd130a99f3f1e6685aebff9f47300565fbc5a65b4912824ea5eb5b78\",\"license\":\"MIT\"},\"src/libraries/math/PowMath.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nlibrary PowMath {\\n using Math for uint256;\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Negative exponent n for x*10^n.\\n */\\n function exp10(uint256 x, int32 n) internal pure returns (uint256) {\\n if (n < 0) {\\n return x / 10 ** uint32(-n);\\n } else if (n > 0) {\\n return x * 10 ** uint32(n);\\n } else {\\n return x;\\n }\\n }\\n\\n /**\\n * @dev Calculates floor(x * (y / d)**n) with full precision.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256 r) {\\n unchecked {\\n if (y == d || n == 0) return x;\\n r = x;\\n\\n bool ok;\\n uint256 r_;\\n uint16 nd_;\\n\\n {\\n uint16 ye = uint16(Math.min(n, findMaxExponent(y)));\\n while (ye > 0) {\\n (ok, r_) = r.tryMul(y ** ye);\\n if (ok) {\\n r = r_;\\n n -= ye;\\n nd_ += ye;\\n }\\n ye = uint16(Math.min(ye / 2, n));\\n }\\n }\\n\\n while (n > 0) {\\n (ok, r_) = r.tryMul(y);\\n if (ok) {\\n r = r_;\\n n--;\\n nd_++;\\n } else if (nd_ > 0) {\\n r /= d;\\n nd_--;\\n } else {\\n r = r.mulDiv(y, d);\\n n--;\\n }\\n }\\n\\n uint16 de = findMaxExponent(d);\\n while (nd_ > 0) {\\n uint16 e = uint16(Math.min(de, nd_));\\n r /= d ** e;\\n nd_ -= e;\\n }\\n }\\n }\\n\\n /**\\n * @dev Calculates floor(x * (y / d)**n) with low precision.\\n */\\n function mulDivLowPrecision(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256) {\\n return uncheckedMulDiv(x, y, d, n, findMaxExponent(Math.max(y, d)));\\n }\\n\\n /**\\n * @dev Aggregated calculate multiplications.\\n * ```\\n * r = x*(y/d)^k\\n * = \\\\prod(x*(y/d)^{k_i}) \\\\ where \\\\ sum(k_i) = k\\n * ```\\n */\\n function uncheckedMulDiv(uint256 x, uint256 y, uint256 d, uint16 n, uint16 maxE) internal pure returns (uint256 r) {\\n unchecked {\\n r = x;\\n uint16 e;\\n while (n > 0) {\\n e = uint16(Math.min(n, maxE));\\n r = r.mulDiv(y ** e, d ** e);\\n n -= e;\\n }\\n }\\n }\\n\\n /**\\n * @dev Returns the largest exponent `k` where, x^k <= 2^256-1\\n * Note: n = Surd[2^256-1,k]\\n * = 10^( log2(2^256-1) / k * log10(2) )\\n */\\n function findMaxExponent(uint256 x) internal pure returns (uint16 k) {\\n if (x < 3) k = 255;\\n else if (x < 4) k = 128;\\n else if (x < 16) k = 64;\\n else if (x < 256) k = 32;\\n else if (x < 7132) k = 20;\\n else if (x < 11376) k = 19;\\n else if (x < 19113) k = 18;\\n else if (x < 34132) k = 17;\\n else if (x < 65536) k = 16;\\n else if (x < 137271) k = 15;\\n else if (x < 319558) k = 14;\\n else if (x < 847180) k = 13;\\n else if (x < 2642246) k = 12;\\n else if (x < 10134189) k = 11;\\n else if (x < 50859009) k = 10;\\n else if (x < 365284285) k = 9;\\n else if (x < 4294967296) k = 8;\\n else if (x < 102116749983) k = 7;\\n else if (x < 6981463658332) k = 6;\\n else if (x < 2586638741762875) k = 5;\\n else if (x < 18446744073709551616) k = 4;\\n else if (x < 48740834812604276470692695) k = 3;\\n else if (x < 340282366920938463463374607431768211456) k = 2;\\n else k = 1;\\n }\\n}\\n\",\"keccak256\":\"0x29f943cf7c61149bc9a624244901720fc3a349adb418555db1db2a045fcdfb70\",\"license\":\"MIT\"},\"src/libraries/transfers/RONTransferHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Strings } from \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\n\\n/**\\n * @title RONTransferHelper\\n */\\nlibrary RONTransferHelper {\\n using Strings for *;\\n\\n /**\\n * @dev Transfers RON and wraps result for the method caller to a recipient.\\n */\\n function safeTransfer(address payable _to, uint256 _value) internal {\\n bool _success = send(_to, _value);\\n if (!_success) {\\n revert(\\n string.concat(\\\"TransferHelper: could not transfer RON to \\\", _to.toHexString(), \\\" value \\\", _value.toHexString())\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns whether the call was success.\\n * Note: this function should use with the `ReentrancyGuard`.\\n */\\n function send(address payable _to, uint256 _value) internal returns (bool _success) {\\n (_success,) = _to.call{ value: _value }(new bytes(0));\\n }\\n}\\n\",\"keccak256\":\"0x733e60374ee0a33d0da2ee24976b893ca6b6d9764243b175e1ac8025240394da\",\"license\":\"MIT\"},\"src/types/ModifyingIndicator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ntype ModifyingIndicator is uint256;\\n\\nusing { hasAny } for ModifyingIndicator global;\\nusing { or as | } for ModifyingIndicator global;\\nusing { and as & } for ModifyingIndicator global;\\nusing { eq as == } for ModifyingIndicator global;\\nusing { not as ~ } for ModifyingIndicator global;\\nusing { xor as ^ } for ModifyingIndicator global;\\nusing { neq as != } for ModifyingIndicator global;\\n\\n/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}.\\nModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7);\\n\\n/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}.\\nModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18);\\n\\n/// @dev Indicator when modifying all of the fields in {ModifyingField}.\\nModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max);\\n\\nfunction eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other);\\n}\\n\\nfunction neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return !eq(self, other);\\n}\\n\\nfunction xor(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) ^ ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction not(ModifyingIndicator self) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self));\\n}\\n\\nfunction or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return self & other != ModifyingIndicator.wrap(0);\\n}\\n\",\"keccak256\":\"0x2e42fbba358c470ff6b57268367d248f0e2fcf8d7142d762688f7aef5efae7ee\",\"license\":\"MIT\"}},\"version\":1}", - "nonce": 272, - "numDeployments": 1, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"CommitmentTooNew\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"CommitmentTooOld\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"DurationTooShort\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"requestOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"nameProtected\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"ownerWhitelisted\",\"type\":\"bool\"}],\"name\":\"ErrInvalidRegisterProtectedName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"ErrRequestedForProtectedName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCommitmentAgeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCommitmentAgeTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameNotAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NullAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ResolverRequiredWhenDataSupplied\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"UnexpiredCommitmentExists\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"}],\"name\":\"CommitmentAgeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract INSDomainPrice\",\"name\":\"newDomainPrice\",\"type\":\"address\"}],\"name\":\"DomainPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"MinRegistrationDurationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ronPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"expires\",\"type\":\"uint64\"}],\"name\":\"NameRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"expires\",\"type\":\"uint64\"}],\"name\":\"NameRenewed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"ProtectedNamesWhitelisted\",\"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\":\"addr\",\"type\":\"address\"}],\"name\":\"TreasuryUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_DOMAIN_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"available\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"bulkWhitelistProtectedNames\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"secret\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"bool\",\"name\":\"reverseRecord\",\"type\":\"bool\"}],\"name\":\"computeCommitment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"computeId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitmentAgeRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinRegistrationDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNameChecker\",\"outputs\":[{\"internalType\":\"contract INameChecker\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracle\",\"outputs\":[{\"internalType\":\"contract INSDomainPrice\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRNSUnified\",\"outputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReverseRegistrar\",\"outputs\":[{\"internalType\":\"contract INSReverseRegistrar\",\"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\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getWhitelistProtectedNameStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"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\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pauser\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minRegistrationDuration\",\"type\":\"uint256\"},{\"internalType\":\"contract INSUnified\",\"name\":\"rnsUnified\",\"type\":\"address\"},{\"internalType\":\"contract INameChecker\",\"name\":\"nameChecker\",\"type\":\"address\"},{\"internalType\":\"contract INSDomainPrice\",\"name\":\"priceOracle\",\"type\":\"address\"},{\"internalType\":\"contract INSReverseRegistrar\",\"name\":\"reverseRegistrar\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"secret\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"bool\",\"name\":\"reverseRecord\",\"type\":\"bool\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"bool\",\"name\":\"reverseRecord\",\"type\":\"bool\"}],\"name\":\"registerProtectedName\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"renew\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"rentPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"usdPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ronPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"}],\"name\":\"setCommitmentAge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setMinRegistrationDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract INSDomainPrice\",\"name\":\"priceOracle\",\"type\":\"address\"}],\"name\":\"setPriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setTreasury\",\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"valid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A registrar controller for registering and renewing names at fixed cost.\",\"errors\":{\"CommitmentTooNew(bytes32)\":[{\"details\":\"Error: The provided commitment timestamp is too new for registration.\"}],\"CommitmentTooOld(bytes32)\":[{\"details\":\"Error: The provided commitment timestamp is too old for registration.\"}],\"DurationTooShort(uint64)\":[{\"details\":\"Error: The requested duration for registration is too short.\"}],\"ErrInvalidRegisterProtectedName(string,address,bool,bool)\":[{\"details\":\"Thrown when received invalid params for registering protected name\"}],\"ErrRequestedForProtectedName(string)\":[{\"details\":\"Thrown when some one requests for protected names\"}],\"InsufficientValue()\":[{\"details\":\"Error: Insufficient value (RON) provided for registration.\"}],\"InvalidArrayLength()\":[{\"details\":\"Thrown when received invalid array length\"}],\"MaxCommitmentAgeTooHigh()\":[{\"details\":\"Error: The maximum commitment age is set too high.\"}],\"MaxCommitmentAgeTooLow()\":[{\"details\":\"Error: The maximum commitment age is set too low.\"}],\"NameNotAvailable(string)\":[{\"details\":\"Error: The requested name is not available for registration.\"}],\"NullAddress()\":[{\"details\":\"Thrown when treasury address is set to null\"}],\"ResolverRequiredWhenDataSupplied()\":[{\"details\":\"Error: A resolver is required when additional data is supplied during registration.\"}],\"Unauthorized(bytes32)\":[{\"details\":\"Error: The sender is not authorized for the given RNS node.\"}],\"UnexpiredCommitmentExists(bytes32)\":[{\"details\":\"Error: An unexpired commitment already exists for the given commitment.\"}]},\"events\":{\"CommitmentAgeUpdated(address,uint256,uint256)\":{\"details\":\"Emitted when the commitment age range is updated.\",\"params\":{\"maxCommitmentAge\":\"The new maximum commitment age in seconds.\",\"minCommitmentAge\":\"The new minimum commitment age in seconds.\",\"operator\":\"The address of the operator who triggered the update.\"}},\"DomainPriceUpdated(address,address)\":{\"details\":\"Emitted when RNSDomainPrice contract is updated.\",\"params\":{\"newDomainPrice\":\"The new duration domain price contract.\",\"operator\":\"The address of the operator who triggered the update.\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"MinRegistrationDurationUpdated(address,uint256)\":{\"details\":\"Emitted when the min registration duration is updated.\",\"params\":{\"duration\":\"The new duration in seconds.\",\"operator\":\"The address of the operator who triggered the update.\"}},\"NameRegistered(string,uint256,address,uint256,uint256,uint64)\":{\"details\":\"Emitted when a new name is successfully registered.\",\"params\":{\"expires\":\"The expiration timestamp of the registration.\",\"id\":\"The namehash of the registered name.\",\"name\":\"The registered name.\",\"owner\":\"The owner of the registered name.\",\"ronPrice\":\"The cost of the registration in RON.\",\"usdPrice\":\"The cost of the registration in USD.\"}},\"NameRenewed(string,uint256,uint256,uint64)\":{\"details\":\"Emitted when a name is renewed.\",\"params\":{\"cost\":\"The cost of renewal.\",\"expires\":\"The new expiration timestamp after renewal.\",\"id\":\"The namehash of the registered name.\",\"name\":\"The renewed name.\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"ProtectedNamesWhitelisted(address,uint256[],address[],bool)\":{\"details\":\"Emitted the whitelist status is updated for the owners of the protected names.\",\"params\":{\"operator\":\"The address of the operator who triggered the update.\"}},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"TreasuryUpdated(address)\":{\"details\":\"Emitted when the treasury is updated.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"available(string)\":{\"details\":\"Checks if a name is available for registration.\",\"params\":{\"name\":\"The name to check availability for.\"},\"returns\":{\"_0\":\"A boolean indicating whether the name is available.\"}},\"bulkWhitelistProtectedNames(uint256[],address[],bool)\":{\"details\":\"Bulk (de)whitelist for buying protected names. Requirements: - The method caller is contract operator. Emits an event {ProtectedNamesWhitelisted}.\"},\"commit(bytes32)\":{\"details\":\"Commits to a registration using the commitment hash.\",\"params\":{\"commitment\":\"The commitment hash.\"}},\"computeCommitment(string,address,uint64,bytes32,address,bytes[],bool)\":{\"details\":\"Generates the commitment hash for a registration.\",\"params\":{\"data\":\"Additional data associated with the registration.\",\"duration\":\"The duration of the registration.\",\"name\":\"The name to be registered.\",\"owner\":\"The owner of the name.\",\"resolver\":\"The resolver contract address.\",\"reverseRecord\":\"Whether to use reverse record for additional data.\",\"secret\":\"The secret used for the commitment.\"},\"returns\":{\"_0\":\"The commitment hash.\"}},\"computeId(string)\":{\"details\":\"Calculate the corresponding id given RON_ID and name.\"},\"getCommitmentAgeRange()\":{\"details\":\"Returns the range of commitment ages allowed.\"},\"getMinRegistrationDuration()\":{\"details\":\"Returns the minimum registration duration.\"},\"getNameChecker()\":{\"details\":\"Returns the INameChecker contract associated with this controller.\"},\"getPriceOracle()\":{\"details\":\"Returns the INSDomainPrice contract associated with this controller.\"},\"getRNSUnified()\":{\"details\":\"Returns the INSUnified contract associated with this controller.\"},\"getReverseRegistrar()\":{\"details\":\"Returns the IReverseRegistrar contract associated with this controller.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"getTreasury()\":{\"details\":\"Returns the treasury address.\"},\"getWhitelistProtectedNameStatus(uint256,address)\":{\"details\":\"Returns the whitelist status for registering protected name.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"pause()\":{\"details\":\"Pauses the registrar controller's functionality. Requirements: - The caller must have the admin role.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"register(string,address,uint64,bytes32,address,bytes[],bool)\":{\"details\":\"Registers a new name.\",\"params\":{\"data\":\"Additional data associated with the registration.\",\"duration\":\"The duration of the registration.\",\"name\":\"The name to be registered.\",\"owner\":\"The owner of the name.\",\"resolver\":\"The resolver contract address.\",\"reverseRecord\":\"Whether to use reverse record for additional data.\",\"secret\":\"The secret used for the commitment.\"}},\"registerProtectedName(string,address,uint64,address,bytes[],bool)\":{\"details\":\"Registers a protected name. Requirements: - The owner is whitelisted for registering.\"},\"renew(string,uint64)\":{\"details\":\"Renews an existing name registration.\",\"params\":{\"duration\":\"The duration of the renewal.\",\"name\":\"The name to be renewed.\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"rentPrice(string,uint64)\":{\"details\":\"Retrieves the rent price for a given name and duration.\",\"params\":{\"duration\":\"The duration of the rent.\",\"name\":\"The name for which to calculate the rent price.\"},\"returns\":{\"ronPrice\":\"rent price in ron.\",\"usdPrice\":\"rent price in usd.\"}},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setCommitmentAge(uint256,uint256)\":{\"details\":\"Sets the minimum and maximum commitment ages. Requirements: - Caller must have the DEFAULT_ADMIN_ROLE. - The `maxCommitmentAge` must be less than or equal to the current block timestamp. - The `maxCommitmentAge` must be greater than the `minCommitmentAge`. Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\",\"params\":{\"maxCommitmentAge\":\"The maximum commitment age in seconds.\",\"minCommitmentAge\":\"The minimum commitment age in seconds.\"}},\"setMinRegistrationDuration(uint256)\":{\"details\":\"Updates min registration duration. Requirements: - The caller must have the admin role.\"},\"setPriceOracle(address)\":{\"details\":\"Updates price oracle address. Requirements: - The caller must have the admin role.\"},\"setTreasury(address)\":{\"details\":\"Updates treasury address. Requirements: - The caller must have the admin role.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"unpause()\":{\"details\":\"Unpauses the registrar controller's functionality. Requirements: - The caller must have the admin role.\"},\"valid(string)\":{\"details\":\"Checks if a name is valid.\",\"params\":{\"name\":\"The name to check validity for.\"},\"returns\":{\"_0\":\"A boolean indicating whether the name is available.\"}}},\"stateVariables\":{\"MIN_DOMAIN_LENGTH\":{\"details\":\"The minimum domain name's length\"},\"OPERATOR_ROLE\":{\"details\":\"Returns the operator role.\"},\"PAUSER_ROLE\":{\"details\":\"Returns the role identifier for the pauser role.\"},\"____gap\":{\"details\":\"Gap for upgradeability.\"},\"_committedAt\":{\"details\":\"Mapping from commitment hash => timestamp that commitment made.\"},\"_maxCommitmentAge\":{\"details\":\"Maximum duration between commitment and registration in second(s).\"},\"_minCommitmentAge\":{\"details\":\"Minimum duration between commitment and registration in second(s).\"},\"_minRegistrationDuration\":{\"details\":\"Min registration duration\"},\"_nameChecker\":{\"details\":\"The namechecker contract.\"},\"_priceOracle\":{\"details\":\"The price oracle.\"},\"_protectedNamesWhitelisted\":{\"details\":\"Mapping id => owner => flag indicating whether the owner is whitelisted to buy protected name\"},\"_reverseRegistrar\":{\"details\":\"The reverse registrar contract.\"},\"_rnsUnified\":{\"details\":\"The rns unified contract.\"},\"_treasury\":{\"details\":\"The treasury address.\"}},\"title\":\"RONRegistrarController\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Customized version of ETHRegistrarController: https://github.com/ensdomains/ens-contracts/blob/45455f1229556ed4f416ef7225d4caea2c1bc0b5/contracts/ethregistrar/ETHRegistrarController.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/RONRegistrarController.sol\":\"RONRegistrarController\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@fdk-0.3.0-beta/=dependencies/@fdk-0.3.0-beta/\",\":@fdk/=dependencies/@fdk-0.3.0-beta/script/\",\":@openzeppelin-contracts-4.9.3/=dependencies/@openzeppelin-contracts-4.9.3/\",\":@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-4.9.3/\",\":@pythnetwork-pyth-sdk-solidity-2.2.0/=dependencies/@pythnetwork-pyth-sdk-solidity-2.2.0/\",\":@pythnetwork/=dependencies/@pythnetwork-pyth-sdk-solidity-2.2.0/\",\":@rns-contracts/=src/\",\":@solady/=dependencies/@fdk-0.3.0-beta/dependencies/solady-0.0.206/src/\",\":buffer/=lib/buffer/contracts/\",\":contract-libs/=lib/contract-libs/src/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=dependencies/@fdk-0.3.0-beta/dependencies/forge-std-1.8.2/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-4.9.3/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```solidity\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```solidity\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\\n * to enforce additional security measures for this role.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0dd6e52cb394d7f5abe5dca2d4908a6be40417914720932de757de34a99ab87f\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/access/AccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControlEnumerable.sol\\\";\\nimport \\\"./AccessControl.sol\\\";\\nimport \\\"../utils/structs/EnumerableSet.sol\\\";\\n\\n/**\\n * @dev Extension of {AccessControl} that allows enumerating the members of each role.\\n */\\nabstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {\\n using EnumerableSet for EnumerableSet.AddressSet;\\n\\n mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) public view virtual override returns (address) {\\n return _roleMembers[role].at(index);\\n }\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) public view virtual override returns (uint256) {\\n return _roleMembers[role].length();\\n }\\n\\n /**\\n * @dev Overload {_grantRole} to track enumerable memberships\\n */\\n function _grantRole(bytes32 role, address account) internal virtual override {\\n super._grantRole(role, account);\\n _roleMembers[role].add(account);\\n }\\n\\n /**\\n * @dev Overload {_revokeRole} to track enumerable memberships\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual override {\\n super._revokeRole(role, account);\\n _roleMembers[role].remove(account);\\n }\\n}\\n\",\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n _requireNotPaused();\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n _requirePaused();\\n _;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Throws if the contract is paused.\\n */\\n function _requireNotPaused() internal view virtual {\\n require(!paused(), \\\"Pausable: paused\\\");\\n }\\n\\n /**\\n * @dev Throws if the contract is not paused.\\n */\\n function _requirePaused() internal view virtual {\\n require(paused(), \\\"Pausable: not paused\\\");\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n * `nonReentrant` function in the call stack.\\n */\\n function _reentrancyGuardEntered() internal view returns (bool) {\\n return _status == _ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0xa535a5df777d44e945dd24aa43a11e44b024140fc340ad0dfe42acf4002aade1\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toString(int256 value) internal pure returns (string memory) {\\n return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x58b21219689909c4f8339af00813760337f7e2e7f169a97fe49e2896dcfb3b9a\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\"},\"dependencies/@openzeppelin-contracts-4.9.3/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)\\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```solidity\\n * contract Example {\\n * // Add the library methods\\n * using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n * // Declare a set state variable\\n * EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n *\\n * [WARNING]\\n * ====\\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\\n * unusable.\\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\\n *\\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\\n * array of EnumerableSet.\\n * ====\\n */\\nlibrary EnumerableSet {\\n // To implement this library for multiple types with as little code\\n // repetition as possible, we write it in terms of a generic Set type with\\n // bytes32 values.\\n // The Set implementation uses private functions, and user-facing\\n // implementations (such as AddressSet) are just wrappers around the\\n // underlying Set.\\n // This means that we can only create new EnumerableSets for types that fit\\n // in bytes32.\\n\\n struct Set {\\n // Storage of set values\\n bytes32[] _values;\\n // Position of the value in the `values` array, plus 1 because index 0\\n // means a value is not in the set.\\n mapping(bytes32 => uint256) _indexes;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function _add(Set storage set, bytes32 value) private returns (bool) {\\n if (!_contains(set, value)) {\\n set._values.push(value);\\n // The value is stored at length-1, but we add 1 to all indexes\\n // and use 0 as a sentinel value\\n set._indexes[value] = set._values.length;\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function _remove(Set storage set, bytes32 value) private returns (bool) {\\n // We read and store the value's index to prevent multiple reads from the same storage slot\\n uint256 valueIndex = set._indexes[value];\\n\\n if (valueIndex != 0) {\\n // Equivalent to contains(set, value)\\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n // the array, and then remove the last element (sometimes called as 'swap and pop').\\n // This modifies the order of the array, as noted in {at}.\\n\\n uint256 toDeleteIndex = valueIndex - 1;\\n uint256 lastIndex = set._values.length - 1;\\n\\n if (lastIndex != toDeleteIndex) {\\n bytes32 lastValue = set._values[lastIndex];\\n\\n // Move the last value to the index where the value to delete is\\n set._values[toDeleteIndex] = lastValue;\\n // Update the index for the moved value\\n set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex\\n }\\n\\n // Delete the slot where the moved value was stored\\n set._values.pop();\\n\\n // Delete the index for the deleted slot\\n delete set._indexes[value];\\n\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n return set._indexes[value] != 0;\\n }\\n\\n /**\\n * @dev Returns the number of values on the set. O(1).\\n */\\n function _length(Set storage set) private view returns (uint256) {\\n return set._values.length;\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n return set._values[index];\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function _values(Set storage set) private view returns (bytes32[] memory) {\\n return set._values;\\n }\\n\\n // Bytes32Set\\n\\n struct Bytes32Set {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _add(set._inner, value);\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _remove(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n return _contains(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(Bytes32Set storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n return _at(set._inner, index);\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n bytes32[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // AddressSet\\n\\n struct AddressSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(AddressSet storage set, address value) internal returns (bool) {\\n return _add(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(AddressSet storage set, address value) internal returns (bool) {\\n return _remove(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(AddressSet storage set, address value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(AddressSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n return address(uint160(uint256(_at(set._inner, index))));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(AddressSet storage set) internal view returns (address[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n address[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // UintSet\\n\\n struct UintSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(UintSet storage set, uint256 value) internal returns (bool) {\\n return _add(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n return _remove(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(UintSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n return uint256(_at(set._inner, index));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(UintSet storage set) internal view returns (uint256[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n uint256[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\"},\"dependencies/@pythnetwork-pyth-sdk-solidity-2.2.0/IPyth.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PythStructs.sol\\\";\\nimport \\\"./IPythEvents.sol\\\";\\n\\n/// @title Consume prices from the Pyth Network (https://pyth.network/).\\n/// @dev Please refer to the guidance at https://docs.pyth.network/consumers/best-practices for how to consume prices safely.\\n/// @author Pyth Data Association\\ninterface IPyth is IPythEvents {\\n /// @notice Returns the period (in seconds) that a price feed is considered valid since its publish time\\n function getValidTimePeriod() external view returns (uint validTimePeriod);\\n\\n /// @notice Returns the price and confidence interval.\\n /// @dev Reverts if the price has not been updated within the last `getValidTimePeriod()` seconds.\\n /// @param id The Pyth Price Feed ID of which to fetch the price and confidence interval.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPrice(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price and confidence interval.\\n /// @dev Reverts if the EMA price is not available.\\n /// @param id The Pyth Price Feed ID of which to fetch the EMA price and confidence interval.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPrice(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the price of a price feed without any sanity checks.\\n /// @dev This function returns the most recent price update in this contract without any recency checks.\\n /// This function is unsafe as the returned price update may be arbitrarily far in the past.\\n ///\\n /// Users of this function should check the `publishTime` in the price to ensure that the returned price is\\n /// sufficiently recent for their application. If you are considering using this function, it may be\\n /// safer / easier to use either `getPrice` or `getPriceNoOlderThan`.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPriceUnsafe(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the price that is no older than `age` seconds of the current time.\\n /// @dev This function is a sanity-checked version of `getPriceUnsafe` which is useful in\\n /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently\\n /// recently.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPriceNoOlderThan(\\n bytes32 id,\\n uint age\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price of a price feed without any sanity checks.\\n /// @dev This function returns the same price as `getEmaPrice` in the case where the price is available.\\n /// However, if the price is not recent this function returns the latest available price.\\n ///\\n /// The returned price can be from arbitrarily far in the past; this function makes no guarantees that\\n /// the returned price is recent or useful for any particular application.\\n ///\\n /// Users of this function should check the `publishTime` in the price to ensure that the returned price is\\n /// sufficiently recent for their application. If you are considering using this function, it may be\\n /// safer / easier to use either `getEmaPrice` or `getEmaPriceNoOlderThan`.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPriceUnsafe(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price that is no older than `age` seconds\\n /// of the current time.\\n /// @dev This function is a sanity-checked version of `getEmaPriceUnsafe` which is useful in\\n /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently\\n /// recently.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPriceNoOlderThan(\\n bytes32 id,\\n uint age\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Update price feeds with given update messages.\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n /// Prices will be updated if they are more recent than the current stored prices.\\n /// The call will succeed even if the update is not the most recent.\\n /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid.\\n /// @param updateData Array of price update data.\\n function updatePriceFeeds(bytes[] calldata updateData) external payable;\\n\\n /// @notice Wrapper around updatePriceFeeds that rejects fast if a price update is not necessary. A price update is\\n /// necessary if the current on-chain publishTime is older than the given publishTime. It relies solely on the\\n /// given `publishTimes` for the price feeds and does not read the actual price update publish time within `updateData`.\\n ///\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n ///\\n /// `priceIds` and `publishTimes` are two arrays with the same size that correspond to senders known publishTime\\n /// of each priceId when calling this method. If all of price feeds within `priceIds` have updated and have\\n /// a newer or equal publish time than the given publish time, it will reject the transaction to save gas.\\n /// Otherwise, it calls updatePriceFeeds method to update the prices.\\n ///\\n /// @dev Reverts if update is not needed or the transferred fee is not sufficient or the updateData is invalid.\\n /// @param updateData Array of price update data.\\n /// @param priceIds Array of price ids.\\n /// @param publishTimes Array of publishTimes. `publishTimes[i]` corresponds to known `publishTime` of `priceIds[i]`\\n function updatePriceFeedsIfNecessary(\\n bytes[] calldata updateData,\\n bytes32[] calldata priceIds,\\n uint64[] calldata publishTimes\\n ) external payable;\\n\\n /// @notice Returns the required fee to update an array of price updates.\\n /// @param updateData Array of price update data.\\n /// @return feeAmount The required fee in Wei.\\n function getUpdateFee(\\n bytes[] calldata updateData\\n ) external view returns (uint feeAmount);\\n\\n /// @notice Parse `updateData` and return price feeds of the given `priceIds` if they are all published\\n /// within `minPublishTime` and `maxPublishTime`.\\n ///\\n /// You can use this method if you want to use a Pyth price at a fixed time and not the most recent price;\\n /// otherwise, please consider using `updatePriceFeeds`. This method does not store the price updates on-chain.\\n ///\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n ///\\n ///\\n /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is\\n /// no update for any of the given `priceIds` within the given time range.\\n /// @param updateData Array of price update data.\\n /// @param priceIds Array of price ids.\\n /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`.\\n /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`.\\n /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order).\\n function parsePriceFeedUpdates(\\n bytes[] calldata updateData,\\n bytes32[] calldata priceIds,\\n uint64 minPublishTime,\\n uint64 maxPublishTime\\n ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds);\\n}\\n\",\"keccak256\":\"0x949c65c65fea0578c09a6fc068e09ed1165adede2c835984cefcb25d76de1de2\",\"license\":\"Apache-2.0\"},\"dependencies/@pythnetwork-pyth-sdk-solidity-2.2.0/IPythEvents.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/// @title IPythEvents contains the events that Pyth contract emits.\\n/// @dev This interface can be used for listening to the updates for off-chain and testing purposes.\\ninterface IPythEvents {\\n /// @dev Emitted when the price feed with `id` has received a fresh update.\\n /// @param id The Pyth Price Feed ID.\\n /// @param publishTime Publish time of the given price update.\\n /// @param price Price of the given price update.\\n /// @param conf Confidence interval of the given price update.\\n event PriceFeedUpdate(\\n bytes32 indexed id,\\n uint64 publishTime,\\n int64 price,\\n uint64 conf\\n );\\n\\n /// @dev Emitted when a batch price update is processed successfully.\\n /// @param chainId ID of the source chain that the batch price update comes from.\\n /// @param sequenceNumber Sequence number of the batch price update.\\n event BatchPriceFeedUpdate(uint16 chainId, uint64 sequenceNumber);\\n}\\n\",\"keccak256\":\"0x048a35526c2e77d107d43ba336f1dcf31f64cef25ba429ae1f7a0fbc11c23320\",\"license\":\"Apache-2.0\"},\"dependencies/@pythnetwork-pyth-sdk-solidity-2.2.0/PythStructs.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\ncontract PythStructs {\\n // A price with a degree of uncertainty, represented as a price +- a confidence interval.\\n //\\n // The confidence interval roughly corresponds to the standard error of a normal distribution.\\n // Both the price and confidence are stored in a fixed-point numeric representation,\\n // `x * (10^expo)`, where `expo` is the exponent.\\n //\\n // Please refer to the documentation at https://docs.pyth.network/consumers/best-practices for how\\n // to how this price safely.\\n struct Price {\\n // Price\\n int64 price;\\n // Confidence interval around the price\\n uint64 conf;\\n // Price exponent\\n int32 expo;\\n // Unix timestamp describing when the price was published\\n uint publishTime;\\n }\\n\\n // PriceFeed represents a current aggregate price from pyth publisher feeds.\\n struct PriceFeed {\\n // The price ID.\\n bytes32 id;\\n // Latest available price\\n Price price;\\n // Latest available exponentially-weighted moving average price\\n Price emaPrice;\\n }\\n}\\n\",\"keccak256\":\"0x95ff0a6d64517348ef604b8bcf246b561a9445d7e607b8f48491c617cfda9b65\",\"license\":\"Apache-2.0\"},\"src/RONRegistrarController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\nimport { Initializable } from \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport { ReentrancyGuard } from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport { AccessControlEnumerable } from \\\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\\\";\\nimport { IPublicResolver } from \\\"./interfaces/resolvers/IPublicResolver.sol\\\";\\nimport {\\n INSUnified,\\n INameChecker,\\n INSDomainPrice,\\n INSReverseRegistrar,\\n IRONRegistrarController\\n} from \\\"./interfaces/IRONRegistrarController.sol\\\";\\nimport { LibString } from \\\"./libraries/LibString.sol\\\";\\nimport { LibRNSDomain } from \\\"./libraries/LibRNSDomain.sol\\\";\\nimport { RONTransferHelper } from \\\"./libraries/transfers/RONTransferHelper.sol\\\";\\n\\n/**\\n * @title RONRegistrarController\\n * @notice Customized version of ETHRegistrarController: https://github.com/ensdomains/ens-contracts/blob/45455f1229556ed4f416ef7225d4caea2c1bc0b5/contracts/ethregistrar/ETHRegistrarController.sol\\n * @dev A registrar controller for registering and renewing names at fixed cost.\\n */\\ncontract RONRegistrarController is\\n Pausable,\\n Initializable,\\n ReentrancyGuard,\\n AccessControlEnumerable,\\n IRONRegistrarController\\n{\\n using LibString for string;\\n using LibRNSDomain for string;\\n\\n /// @dev The minimum domain name's length\\n uint8 public constant MIN_DOMAIN_LENGTH = 3;\\n /// @inheritdoc IRONRegistrarController\\n bytes32 public constant PAUSER_ROLE = keccak256(\\\"PAUSER_ROLE\\\");\\n /// @inheritdoc IRONRegistrarController\\n bytes32 public constant OPERATOR_ROLE = keccak256(\\\"OPERATOR_ROLE\\\");\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev Minimum duration between commitment and registration in second(s).\\n uint256 internal _minCommitmentAge;\\n /// @dev Maximum duration between commitment and registration in second(s).\\n uint256 internal _maxCommitmentAge;\\n /// @dev Min registration duration\\n uint256 internal _minRegistrationDuration;\\n\\n /// @dev The treasury address.\\n address payable internal _treasury;\\n /// @dev The rns unified contract.\\n INSUnified internal _rnsUnified;\\n /// @dev The namechecker contract.\\n INameChecker internal _nameChecker;\\n /// @dev The price oracle.\\n INSDomainPrice internal _priceOracle;\\n /// @dev The reverse registrar contract.\\n INSReverseRegistrar internal _reverseRegistrar;\\n\\n /// @dev Mapping from commitment hash => timestamp that commitment made.\\n mapping(bytes32 commitment => uint256 timestamp) internal _committedAt;\\n /// @dev Mapping id => owner => flag indicating whether the owner is whitelisted to buy protected name\\n mapping(uint256 id => mapping(address owner => bool)) internal _protectedNamesWhitelisted;\\n\\n modifier onlyAvailable(string memory name) {\\n _requireAvailable(name);\\n _;\\n }\\n\\n constructor() payable {\\n _disableInitializers();\\n }\\n\\n function initialize(\\n address admin,\\n address pauser,\\n address payable treasury,\\n uint256 maxCommitmentAge,\\n uint256 minCommitmentAge,\\n uint256 minRegistrationDuration,\\n INSUnified rnsUnified,\\n INameChecker nameChecker,\\n INSDomainPrice priceOracle,\\n INSReverseRegistrar reverseRegistrar\\n ) external initializer {\\n _setupRole(PAUSER_ROLE, pauser);\\n _setupRole(DEFAULT_ADMIN_ROLE, admin);\\n\\n _setPriceOracle(priceOracle);\\n _setMinRegistrationDuration(minRegistrationDuration);\\n _setCommitmentAge(minCommitmentAge, maxCommitmentAge);\\n _setTreasury(treasury);\\n\\n _rnsUnified = rnsUnified;\\n _nameChecker = nameChecker;\\n _reverseRegistrar = reverseRegistrar;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function pause() external onlyRole(PAUSER_ROLE) {\\n _pause();\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function unpause() external onlyRole(PAUSER_ROLE) {\\n _unpause();\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getMinRegistrationDuration() public view returns (uint256) {\\n return _minRegistrationDuration;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function rentPrice(string memory name, uint64 duration) public view returns (uint256 usdPrice, uint256 ronPrice) {\\n (INSDomainPrice.UnitPrice memory basePrice, INSDomainPrice.UnitPrice memory tax) =\\n _priceOracle.getRenewalFee(name, duration);\\n usdPrice = basePrice.usd + tax.usd;\\n ronPrice = basePrice.ron + tax.ron;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function valid(string memory name) public view returns (bool) {\\n return name.strlen() >= MIN_DOMAIN_LENGTH && !_nameChecker.forbidden(name);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function available(string memory name) public view returns (bool) {\\n return valid(name) && _rnsUnified.available(computeId(name));\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function computeCommitment(\\n string memory name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) public view onlyAvailable(name) returns (bytes32) {\\n if (data.length != 0 && resolver == address(0)) revert ResolverRequiredWhenDataSupplied();\\n return keccak256(abi.encode(computeId(name), owner, duration, secret, resolver, data, reverseRecord));\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function computeId(string memory name) public pure returns (uint256 id) {\\n return LibRNSDomain.toId(LibRNSDomain.RON_ID, name);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function commit(bytes32 commitment) external whenNotPaused {\\n if (_committedAt[commitment] + _maxCommitmentAge >= block.timestamp) revert UnexpiredCommitmentExists(commitment);\\n _committedAt[commitment] = block.timestamp;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setMinRegistrationDuration(uint256 duration) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setMinRegistrationDuration(duration);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function register(\\n string memory name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable whenNotPaused nonReentrant {\\n uint256 id = computeId(name);\\n if (_rnsUnified.getRecord(id).mut.protected) revert ErrRequestedForProtectedName(name);\\n\\n bytes32 commitHash = computeCommitment({\\n name: name,\\n owner: owner,\\n duration: duration,\\n secret: secret,\\n resolver: resolver,\\n data: data,\\n reverseRecord: reverseRecord\\n });\\n _validateCommitment(duration, commitHash);\\n\\n (uint256 usdPrice, uint256 ronPrice) = _handlePrice(name, duration);\\n _register(name, owner, duration, resolver, data, reverseRecord, usdPrice, ronPrice);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function renew(string calldata name, uint64 duration) external payable whenNotPaused nonReentrant {\\n (, uint256 ronPrice) = rentPrice(name, duration);\\n if (msg.value < ronPrice) revert InsufficientValue();\\n uint256 remainAmount = msg.value - ronPrice;\\n\\n uint256 id = computeId(name);\\n uint64 expiryTime = _rnsUnified.renew(id, duration);\\n emit NameRenewed(name, id, ronPrice, expiryTime);\\n\\n if (remainAmount != 0) RONTransferHelper.safeTransfer(payable(_msgSender()), remainAmount);\\n _transferRONToTreasury();\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function registerProtectedName(\\n string memory name,\\n address owner,\\n uint64 duration,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable whenNotPaused nonReentrant onlyAvailable(name) {\\n if (!available(name)) revert NameNotAvailable(name);\\n uint256 id = computeId(name);\\n bool protected = _rnsUnified.getRecord(id).mut.protected;\\n bool whitelisted = _protectedNamesWhitelisted[id][owner];\\n if (!protected || !whitelisted) revert ErrInvalidRegisterProtectedName(name, owner, protected, whitelisted);\\n\\n (uint256 usdPrice, uint256 ronPrice) = _handlePrice(name, duration);\\n _register(name, owner, duration, resolver, data, reverseRecord, usdPrice, ronPrice);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function bulkWhitelistProtectedNames(uint256[] calldata ids, address[] calldata owners, bool status)\\n external\\n onlyRole(OPERATOR_ROLE)\\n {\\n uint256 length = ids.length;\\n if (length == 0 || length != owners.length) revert InvalidArrayLength();\\n\\n for (uint256 i; i < length;) {\\n _protectedNamesWhitelisted[ids[i]][owners[i]] = status;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit ProtectedNamesWhitelisted(_msgSender(), ids, owners, status);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getWhitelistProtectedNameStatus(uint256 id, address owner) external view returns (bool status) {\\n return _protectedNamesWhitelisted[id][owner];\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setTreasury(address payable addr) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setTreasury(addr);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setCommitmentAge(minCommitmentAge, maxCommitmentAge);\\n }\\n\\n /**\\n * @dev Internal function to update the commitment age range.\\n * Requirements:\\n * - The `maxCommitmentAge` must be less than or equal to the current block timestamp.\\n * - The `maxCommitmentAge` must be greater than the `minCommitmentAge`.\\n * Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\\n * @param minCommitmentAge The minimum commitment age in seconds.\\n * @param maxCommitmentAge The maximum commitment age in seconds.\\n */\\n function _setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) internal {\\n if (maxCommitmentAge > block.timestamp) revert MaxCommitmentAgeTooHigh();\\n if (maxCommitmentAge <= minCommitmentAge) revert MaxCommitmentAgeTooLow();\\n\\n _minCommitmentAge = minCommitmentAge;\\n _maxCommitmentAge = maxCommitmentAge;\\n\\n emit CommitmentAgeUpdated(_msgSender(), minCommitmentAge, maxCommitmentAge);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setPriceOracle(INSDomainPrice priceOracle) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setPriceOracle(priceOracle);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getTreasury() external view returns (address) {\\n return _treasury;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getCommitmentAgeRange() external view returns (uint256 minCommitmentAge, uint256 maxCommitmentAge) {\\n return (_minCommitmentAge, _maxCommitmentAge);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getRNSUnified() external view returns (INSUnified) {\\n return _rnsUnified;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getPriceOracle() external view returns (INSDomainPrice) {\\n return _priceOracle;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getNameChecker() external view returns (INameChecker) {\\n return _nameChecker;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getReverseRegistrar() external view returns (INSReverseRegistrar) {\\n return _reverseRegistrar;\\n }\\n\\n /**\\n * @dev Validates commitment.\\n *\\n * Requirements:\\n * - The duration must larger than or equal to minimum registration duration.\\n * - The passed duration must in a valid range.\\n */\\n function _validateCommitment(uint64 duration, bytes32 commitment) internal {\\n if (duration < _minRegistrationDuration) revert DurationTooShort(duration);\\n\\n uint256 passedDuration = block.timestamp - _committedAt[commitment];\\n if (passedDuration < _minCommitmentAge) revert CommitmentTooNew(commitment);\\n if (_maxCommitmentAge < passedDuration) revert CommitmentTooOld(commitment);\\n\\n delete _committedAt[commitment];\\n }\\n\\n /**\\n * @dev Sets minimum registration duration.\\n * Emits a {MinRegistrationDurationUpdated} event indicating the successful update of the registration duration.\\n */\\n function _setMinRegistrationDuration(uint256 duration) internal {\\n _minRegistrationDuration = duration;\\n emit MinRegistrationDurationUpdated(_msgSender(), duration);\\n }\\n\\n /**\\n * @dev Sets data into resolver address contract.\\n */\\n function _setRecords(address resolverAddress, uint256 id, bytes[] calldata data) internal {\\n IPublicResolver(resolverAddress).multicallWithNodeCheck(bytes32(id), data);\\n }\\n\\n /**\\n * @dev Sets data into reverse registrar.\\n */\\n function _setReverseRecord(string memory name, address owner) internal {\\n _reverseRegistrar.setNameForAddr(owner, string.concat(name, \\\".ron\\\"));\\n }\\n\\n /**\\n * @dev Helper method to take fee into treasury address.\\n */\\n function _transferRONToTreasury() internal {\\n RONTransferHelper.safeTransfer(_treasury, address(this).balance);\\n }\\n\\n /**\\n * @dev Helper method to take renewal fee of a name.\\n */\\n function _handlePrice(string memory name, uint64 duration) internal returns (uint256 usdPrice, uint256 ronPrice) {\\n (usdPrice, ronPrice) = rentPrice(name, duration);\\n if (msg.value < ronPrice) revert InsufficientValue();\\n\\n unchecked {\\n uint256 remainAmount = msg.value - ronPrice;\\n if (remainAmount != 0) RONTransferHelper.safeTransfer(payable(_msgSender()), remainAmount);\\n }\\n\\n _transferRONToTreasury();\\n }\\n\\n /**\\n * @dev Helper method to register a name for owner.\\n *\\n * Emits an event {NameRegistered}.\\n */\\n function _register(\\n string memory name,\\n address owner,\\n uint64 duration,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord,\\n uint256 usdPrice,\\n uint256 ronPrice\\n ) internal {\\n (uint64 expiryTime, uint256 id) = _rnsUnified.mint(LibRNSDomain.RON_ID, name, resolver, owner, duration);\\n if (data.length != 0) _setRecords(resolver, id, data);\\n if (reverseRecord) _setReverseRecord(name, owner);\\n emit NameRegistered(name, id, owner, ronPrice, usdPrice, expiryTime);\\n }\\n\\n /**\\n * @dev Helper method to update RNSDomainPrice contract.\\n *\\n * Emits an event {DomainPriceUpdated}.\\n */\\n function _setPriceOracle(INSDomainPrice priceOracle) internal {\\n _priceOracle = priceOracle;\\n emit DomainPriceUpdated(_msgSender(), priceOracle);\\n }\\n\\n /**\\n * @dev Helper method to update treasury address.\\n *\\n * Emits an event {TreasuryUpdated}.\\n */\\n function _setTreasury(address payable addr) internal {\\n if (addr == address(0x0)) revert NullAddress();\\n\\n _treasury = addr;\\n\\n emit TreasuryUpdated(addr);\\n }\\n\\n /**\\n * @dev Helper method to check if a domain name is available for register.\\n */\\n function _requireAvailable(string memory name) internal view {\\n if (!available(name)) revert NameNotAvailable(name);\\n }\\n}\\n\",\"keccak256\":\"0x364878c7a629a72d59891dd370f6826eb75c1afb5bf1113c2ef6931233197766\",\"license\":\"MIT\"},\"src/interfaces/IMulticallable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.0;\\n\\n/**\\n * @notice To multi-call to a specified contract which has multicall interface:\\n *\\n * ```solidity\\n * interface IMock is IMulticallable {\\n * function foo() external;\\n * function bar() external;\\n * }\\n *\\n * bytes[] memory calldatas = new bytes[](2);\\n * calldatas[0] = abi.encodeCall(IMock.foo,());\\n * calldatas[1] = abi.encodeCall(IMock.bar,());\\n * IMock(target).multicall(calldatas);\\n * ```\\n */\\ninterface IMulticallable {\\n /**\\n * @dev Executes bulk action to the original contract.\\n * Reverts if there is a single call failed.\\n *\\n * @param data The calldata to original contract.\\n *\\n */\\n function multicall(bytes[] calldata data) external returns (bytes[] memory results);\\n\\n /**\\n * @dev Executes bulk action to the original contract.\\n *\\n * @param requireSuccess Flag to indicating whether the contract reverts if there is a single call failed.\\n * @param data The calldata to original contract.\\n *\\n */\\n function tryMulticall(bool requireSuccess, bytes[] calldata data) external returns (bytes[] memory results);\\n}\\n\",\"keccak256\":\"0x0e76578b0efeafdf33915d77d3f98145ac2f74cdd311db03a9b94d4aa566d107\",\"license\":\"UNLICENSED\"},\"src/interfaces/INSDomainPrice.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { PeriodScaler } from \\\"../libraries/math/PeriodScalingUtils.sol\\\";\\nimport { IPyth } from \\\"@pythnetwork/IPyth.sol\\\";\\n\\ninterface INSDomainPrice {\\n error InvalidArrayLength();\\n error RenewalFeeIsNotOverriden();\\n error TierIsNotOverriden();\\n error ExceedAuctionDomainExpiry();\\n\\n /// @dev The tier of a domain.\\n enum Tier {\\n Unknown,\\n Tier1,\\n Tier2,\\n Tier3\\n }\\n\\n struct RenewalFee {\\n uint256 labelLength;\\n uint256 fee;\\n }\\n\\n struct UnitPrice {\\n uint256 usd;\\n uint256 ron;\\n }\\n\\n /// @dev Emitted when the renewal reservation ratio is updated.\\n event TaxRatioUpdated(address indexed operator, uint256 indexed ratio);\\n /// @dev Emitted when the maximum length of renewal fee is updated.\\n event MaxRenewalFeeLengthUpdated(address indexed operator, uint256 indexed maxLength);\\n /// @dev Emitted when the renew fee is updated.\\n event RenewalFeeByLengthUpdated(address indexed operator, uint256 indexed labelLength, uint256 renewalFee);\\n /// @dev Emitted when the renew fee of a domain is overridden. Value of `inverseRenewalFee` is 0 when not overridden.\\n event RenewalFeeOverridingUpdated(address indexed operator, bytes32 indexed labelHash, uint256 inverseRenewalFee);\\n /// @dev Emitted when the tier of a domain is overridden.\\n event TierOverridingUpdated(address indexed operator, bytes32 indexed labelHash, Tier indexed tier);\\n\\n /// @dev Emitted when the domain price is updated.\\n event DomainPriceUpdated(\\n address indexed operator, bytes32 indexed labelHash, uint256 price, bytes32 indexed proofHash, uint256 setType\\n );\\n /// @dev Emitted when the rule to rescale domain price is updated.\\n event DomainPriceScaleRuleUpdated(address indexed operator, uint192 ratio, uint64 period);\\n\\n /// @dev Emitted when the Pyth Oracle config is updated.\\n event PythOracleConfigUpdated(\\n address indexed operator, IPyth indexed pyth, uint256 maxAcceptableAge, bytes32 indexed pythIdForRONUSD\\n );\\n\\n /**\\n * @dev Returns the Pyth oracle config.\\n */\\n function getPythOracleConfig() external view returns (IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD);\\n\\n /**\\n * @dev Sets the Pyth oracle config.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {PythOracleConfigUpdated}.\\n */\\n function setPythOracleConfig(IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) external;\\n\\n /**\\n * @dev Returns the percentage to scale from domain price each period.\\n */\\n function getScaleDownRuleForDomainPrice() external view returns (PeriodScaler memory dpScaleRule);\\n\\n /**\\n * @dev Sets the percentage to scale from domain price each period.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {DomainPriceScaleRuleUpdated}.\\n *\\n * @notice Applies for the business rule: -x% each y seconds.\\n */\\n function setScaleDownRuleForDomainPrice(PeriodScaler calldata scaleRule) external;\\n\\n /**\\n * @dev Returns the renewal fee by lengths.\\n */\\n function getRenewalFeeByLengths() external view returns (RenewalFee[] memory renewalFees);\\n\\n /**\\n * @dev Sets the renewal fee by lengths\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {RenewalFeeByLengthUpdated}.\\n * Emits an event {MaxRenewalFeeLengthUpdated} optionally.\\n */\\n function setRenewalFeeByLengths(RenewalFee[] calldata renewalFees) external;\\n\\n /**\\n * @dev Returns tax ratio.\\n */\\n function getTaxRatio() external view returns (uint256 taxRatio);\\n\\n /**\\n * @dev Sets renewal reservation ratio.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits an event {TaxRatioUpdated}.\\n */\\n function setTaxRatio(uint256 ratio) external;\\n\\n /**\\n * @dev Return the domain price.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n */\\n function getDomainPrice(string memory label) external view returns (uint256 usdPrice, uint256 ronPrice);\\n\\n /**\\n * @dev Returns the renewal fee in USD and RON.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n * @param duration Amount of second(s).\\n */\\n function getRenewalFee(string calldata label, uint256 duration)\\n external\\n view\\n returns (UnitPrice memory basePrice, UnitPrice memory tax);\\n\\n /**\\n * @dev Returns the tier of a label.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n * @return tier The tier of the label.\\n */\\n function getTier(string calldata label) external view returns (Tier tier);\\n\\n /**\\n * @dev Returns the renewal fee of a label. Reverts if not overridden.\\n * @notice This method is to help developers check the domain renewal fee overriding. Consider using method\\n * {getRenewalFee} instead for full handling of renewal fees.\\n */\\n function getOverriddenRenewalFee(string memory label) external view returns (uint256 usdFee);\\n\\n /**\\n * @dev Returns the tier of a label. Reverts if not overridden.\\n * @notice This method is to help developers check the domain tier overriding. Consider using method {getTier} instead\\n * for full handling of tiers.\\n */\\n function getOverriddenTier(string memory label) external view returns (Tier tier);\\n\\n /**\\n * @dev Bulk override renewal fees.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {RenewalFeeOverridingUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param usdPrices Array of prices in USD. Leave 2^256 - 1 to remove overriding.\\n */\\n function bulkOverrideRenewalFees(bytes32[] calldata lbHashes, uint256[] calldata usdPrices) external;\\n\\n /**\\n * @dev Bulk override tiers.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {TierOverridingUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param tiers Array of tiers. Leave 2^256 - 1 to remove overriding.\\n */\\n function bulkOverrideTiers(bytes32[] calldata lbHashes, Tier[] calldata tiers) external;\\n\\n /**\\n * @dev Bulk try to set domain prices. Returns a boolean array indicating whether domain prices at the corresponding\\n * indexes if set or not.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n * - The price should be larger than current domain price or it will not be updated.\\n *\\n * Emits events {DomainPriceUpdated} optionally.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param ronPrices Array of prices in (W)RON token.\\n * @param proofHashes Array of proof hashes.\\n * @param setTypes Array of update types from the operator service.\\n */\\n function bulkTrySetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external returns (bool[] memory updated);\\n\\n /**\\n * @dev Bulk override domain prices.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {DomainPriceUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param ronPrices Array of prices in (W)RON token.\\n * @param proofHashes Array of proof hashes.\\n * @param setTypes Array of update types from the operator service.\\n */\\n function bulkSetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external;\\n\\n /**\\n * @dev Returns the converted amount from USD to RON.\\n */\\n function convertUSDToRON(uint256 usdAmount) external view returns (uint256 ronAmount);\\n\\n /**\\n * @dev Returns the converted amount from RON to USD.\\n */\\n function convertRONToUSD(uint256 ronAmount) external view returns (uint256 usdAmount);\\n\\n /**\\n * @dev Value equals to keccak256(\\\"OPERATOR_ROLE\\\").\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the overrider role.\\n */\\n function OVERRIDER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\\n */\\n function MAX_PERCENTAGE() external pure returns (uint64);\\n\\n /**\\n * @dev Decimal for USD.\\n */\\n function USD_DECIMALS() external pure returns (uint8);\\n}\\n\",\"keccak256\":\"0x8788fdbb62a27ad604ade2ca281a1b76001b929245d4ef9117544636ac8ec545\",\"license\":\"MIT\"},\"src/interfaces/INSReverseRegistrar.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\nimport { INameResolver } from \\\"./resolvers/INameResolver.sol\\\";\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\n\\n/// @dev See https://eips.ethereum.org/EIPS/eip-181#registrar\\ninterface IERC181 {\\n /**\\n * @dev Claims the name hex(addr) + '.addr.reverse' for addr.\\n *\\n * @param addr The address to set as the addr of the reverse record in INS.\\n * @return id The INS node hash of the reverse record.\\n */\\n function claim(address addr) external returns (uint256 id);\\n\\n /**\\n * @dev Claims the name hex(owner) + '.addr.reverse' for owner and sets resolver.\\n *\\n * @param addr The address to set as the owner of the reverse record in INS.\\n * @param resolver The address of the resolver to set; 0 to leave unchanged.\\n * @return id The INS node hash of the reverse record.\\n */\\n function claimWithResolver(address addr, address resolver) external returns (uint256 id);\\n\\n /**\\n * @dev Sets the name record for the reverse INS record associated with the calling account. First updates the\\n * resolver to the default reverse resolver if necessary.\\n *\\n * @param name The name to set for this address.\\n * @return The INS node hash of the reverse record.\\n */\\n function setName(string memory name) external returns (uint256);\\n}\\n\\ninterface INSReverseRegistrar is IERC181, IERC165 {\\n /// @dev Error: The provided id is not child node of `ADDR_REVERSE_ID`\\n error InvalidId();\\n /// @dev Error: The contract is not authorized for minting or modifying domain hex(addr) + '.addr.reverse'.\\n error InvalidConfig();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: The provided resolver address is null.\\n error NullAssignment();\\n\\n /// @dev Emitted when reverse node is claimed.\\n event ReverseClaimed(address indexed addr, uint256 indexed id);\\n /// @dev Emitted when the default resolver is changed.\\n event DefaultResolverChanged(INameResolver indexed resolver);\\n\\n /**\\n * @dev Returns the controller role.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns default resolver.\\n */\\n function getDefaultResolver() external view returns (INameResolver);\\n\\n /**\\n * @dev Returns RNSUnified contract.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Sets default resolver.\\n *\\n * Requirement:\\n *\\n * - The method caller must be admin.\\n *\\n * Emitted an event {DefaultResolverChanged}.\\n *\\n */\\n function setDefaultResolver(INameResolver resolver) external;\\n\\n /**\\n * @dev Same as {IERC181-setName}.\\n */\\n function setNameForAddr(address addr, string memory name) external returns (uint256 id);\\n\\n /**\\n * @dev Returns address that the reverse node resolves for.\\n * Eg. node namehash('{addr}.addr.reverse') will always resolve for `addr`.\\n */\\n function getAddress(uint256 id) external view returns (address);\\n\\n /**\\n * @dev Returns the id hash for a given account's reverse records.\\n * @param addr The address to hash\\n * @return The INS node hash.\\n */\\n function computeId(address addr) external pure returns (uint256);\\n}\\n\",\"keccak256\":\"0x3b88e9ea1dd7c128244b5d0c69cee9dcadcb16b05a7e13416cc7b95c071b60a4\",\"license\":\"MIT\"},\"src/interfaces/INSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC721Metadata } from \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport { IAccessControlEnumerable } from \\\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\\\";\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\ninterface INSUnified is IAccessControlEnumerable, IERC721Metadata {\\n /// @dev Error: The provided token id is expired.\\n error Expired();\\n /// @dev Error: The provided token id is unexists.\\n error Unexists();\\n /// @dev Error: The provided token id's depth level is greater than 3.\\n error ThirdLevelDomainUnallowed();\\n /// @dev Error: The provided id expiry is greater than parent id expiry.\\n error ExceedParentExpiry();\\n /// @dev Error: The provided name is unavailable for registration.\\n error Unavailable();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: Missing controller role required for modification.\\n error MissingControllerRole();\\n /// @dev Error: Attempting to set an immutable field, which cannot be modified.\\n error CannotSetImmutableField();\\n /// @dev Error: Missing protected settler role required for modification.\\n error MissingProtectedSettlerRole();\\n /// @dev Error: Attempting to set an expiry time that is not larger than the previous one.\\n error ExpiryTimeMustBeLargerThanTheOldOne();\\n /// @dev Error: The provided name must be registered or is in a grace period.\\n error NameMustBeRegisteredOrInGracePeriod();\\n\\n /**\\n * | Fields\\\\Idc | Modifying Indicator |\\n * | ---------- | ------------------- |\\n * | depth | 0b00000001 |\\n * | parentId | 0b00000010 |\\n * | label | 0b00000100 |\\n */\\n struct ImmutableRecord {\\n // The level-th of a domain.\\n uint8 depth;\\n // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron')\\n uint256 parentId;\\n // The label of a domain. Eg, label is vip for domain vip.duke.ron\\n string label;\\n }\\n\\n /**\\n * | Fields\\\\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender |\\n * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- |\\n * | resolver | 0b00001000 | x | | x |\\n * | owner | 0b00010000 | x | | x |\\n * | expiry | 0b00100000 | x | | |\\n * | protected | 0b01000000 | | x | |\\n * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender.\\n */\\n struct MutableRecord {\\n // The resolver address.\\n address resolver;\\n // The record owner. This field must equal to the owner of token.\\n address owner;\\n // Expiry timestamp.\\n uint64 expiry;\\n // Flag indicating whether the token is protected or not.\\n bool protected;\\n }\\n\\n struct Record {\\n ImmutableRecord immut;\\n MutableRecord mut;\\n }\\n\\n /// @dev Emitted when a base URI is updated.\\n event BaseURIUpdated(address indexed operator, string newURI);\\n /// @dev Emitted when the grace period for all domain is updated.\\n event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod);\\n\\n /**\\n * @dev Emitted when the record of node is updated.\\n * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right\\n * to left) needs to be updated.\\n * @param record The updated fields.\\n */\\n event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record);\\n\\n /**\\n * @dev Returns the controller role.\\n * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the protected setter role.\\n * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\\n */\\n function PROTECTED_SETTLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the reservation role.\\n * @notice Never expire for token owner has this role.\\n */\\n function RESERVATION_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the max expiry value.\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the name hash output of a domain.\\n */\\n function namehash(string memory domain) external pure returns (bytes32 node);\\n\\n /**\\n * @dev Returns true if the specified name is available for registration.\\n * Note: Only available after passing the grace period.\\n */\\n function available(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Returns the grace period in second(s).\\n * Note: This period affects the availability of the domain.\\n */\\n function getGracePeriod() external view returns (uint64);\\n\\n /**\\n * @dev Returns the total minted ids.\\n * Note: Burning id will not affect `totalMinted`.\\n */\\n function totalMinted() external view returns (uint256);\\n\\n /**\\n * @dev Sets the grace period in second(s).\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Note: This period affects the availability of the domain.\\n */\\n function setGracePeriod(uint64) external;\\n\\n /**\\n * @dev Sets the base uri.\\n *\\n * Requirements:\\n * - The method caller must be contract owner.\\n *\\n */\\n function setBaseURI(string calldata baseTokenURI) external;\\n\\n /**\\n * @dev Mints token for subnode.\\n *\\n * Requirements:\\n * - The token must be available.\\n * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n *\\n * @param parentId The parent node to mint or create subnode.\\n * @param label The domain label. Eg, label is duke for domain duke.ron.\\n * @param resolver The resolver address.\\n * @param owner The token owner.\\n * @param duration Duration in second(s) to expire. Leave 0 to set as parent.\\n */\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n returns (uint64 expiryTime, uint256 id);\\n\\n /**\\n * @dev Returns all record of a domain.\\n * Reverts if the token is non existent.\\n */\\n function getRecord(uint256 id) external view returns (Record memory record);\\n\\n /**\\n * @dev Returns the domain name of id.\\n */\\n function getDomain(uint256 id) external view returns (string memory domain);\\n\\n /**\\n * @dev Returns whether the requester is able to modify the record based on the updated index.\\n * Note: This method strictly follows the permission of struct {MutableRecord}.\\n */\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n external\\n view\\n returns (bool, bytes4 error);\\n\\n /**\\n * @dev Sets record of existing token. Update operation for {Record.mut}.\\n *\\n * Requirements:\\n * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external;\\n\\n /**\\n * @dev Reclaims ownership. Update operation for {Record.mut.owner}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function reclaim(uint256 id, address owner) external;\\n\\n /**\\n * @dev Renews token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function renew(uint256 id, uint64 duration) external returns (uint64 expiry);\\n\\n /**\\n * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setExpiry(uint256 id, uint64 expiry) external;\\n\\n /**\\n * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}.\\n *\\n * Requirements:\\n * - The method caller must have protected setter role.\\n *\\n * Emits events {RecordUpdated}.\\n */\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external;\\n}\\n\",\"keccak256\":\"0x98e2e77490d7fd6d87a8e9800223bb2f60a33e7338e2f65f64a3aed4737c035c\",\"license\":\"MIT\"},\"src/interfaces/INameChecker.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\n/**\\n * @title INameChecker\\n * @dev The INameChecker interface provides functions for managing and checking substrings and forbidden words in strings.\\n */\\ninterface INameChecker {\\n /**\\n * @dev Emitted when the word range is updated.\\n * @param operator The address that updated the word range.\\n * @param min The minimum word length allowed.\\n * @param max The maximum word length allowed.\\n */\\n event WordRangeUpdated(address indexed operator, uint8 min, uint8 max);\\n\\n /**\\n * @dev Emitted when the forbidden words are updated.\\n * @param operator The address that updated the forbidden words list.\\n * @param wordCount The number of words in the list.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n event ForbiddenWordsUpdated(address indexed operator, uint256 wordCount, bool shouldForbid);\\n\\n /**\\n * @dev Returns an array of all substrings of a given string.\\n * @param str The input string to analyze.\\n * @return subStrings An array of all substrings.\\n */\\n function getAllSubStrings(string calldata str) external view returns (string[] memory subStrings);\\n\\n /**\\n * @dev Returns the total number of substrings for a given string length, as well as the minimum and maximum allowed word lengths.\\n * @param strlen The length of the input string.\\n * @return total The total number of substrings.\\n * @return min The minimum word length allowed.\\n * @return max The maximum word length allowed.\\n */\\n function totalSubString(uint256 strlen) external view returns (uint256 total, uint256 min, uint256 max);\\n\\n /**\\n * @dev Sets a list of forbidden words and specifies whether they should be forbidden.\\n * @param packedWords An array of packed word representations.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n function setForbiddenWords(uint256[] calldata packedWords, bool shouldForbid) external;\\n\\n /**\\n * @dev Sets a list of forbidden words and specifies whether they should be forbidden.\\n * @param words An array of raw words in string representations.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n function setForbiddenWords(string[] calldata words, bool shouldForbid) external;\\n\\n /**\\n * @dev Sets the minimum and maximum word lengths allowed.\\n * @param min The minimum word length.\\n * @param max The maximum word length.\\n */\\n function setWordRange(uint8 min, uint8 max) external;\\n\\n /**\\n * @dev Retrieves the current minimum and maximum word lengths allowed.\\n * @return min The minimum word length allowed.\\n * @return max The maximum word length allowed.\\n */\\n function getWordRange() external view returns (uint8 min, uint8 max);\\n\\n /**\\n * @notice Checks if a given name contains any forbidden characters or blacklisted words.\\n * @param name The string to check.\\n * @return true if the name contains forbidden characters or blacklisted words, false otherwise.\\n */\\n function forbidden(string calldata name) external view returns (bool);\\n\\n /**\\n * @notice Checks if a given name contains any blacklisted words.\\n * @param name The string to check.\\n * @return true if the name contains blacklisted words, false otherwise.\\n */\\n function containsBlacklistedWord(string calldata name) external view returns (bool);\\n\\n /**\\n * @notice Checks if a given name contains any invalid characters.\\n * requirements:\\n * - all characters in name must in range [a-z] or [0-9].\\n * @param name The string to check.\\n * @return true if the name contains invalid characters, false otherwise.\\n */\\n function containsInvalidCharacter(string calldata name) external pure returns (bool);\\n\\n /**\\n * @dev Packs a string into a single word representation.\\n * @param str The string to be packed.\\n * @notice Returns `uint256(0)` if the length is zero or greater than 31.\\n * @return packed The packed value of the input string.\\n */\\n function pack(string memory str) external pure returns (uint256 packed);\\n\\n /**\\n * @dev Packs an array of strings into their single word representations.\\n * @param strs The array of strings to be packed.\\n * @notice Returns an array of packed values, along with the minimum and maximum string lengths.\\n * @return packeds An array containing the packed values of the input strings.\\n */\\n function packBulk(string[] memory strs) external pure returns (uint256[] memory packeds);\\n}\\n\",\"keccak256\":\"0x9f2b9f08f8d60f565f93925ad64353f01feaad671440d865f45008d1304d4794\",\"license\":\"MIT\"},\"src/interfaces/IRONRegistrarController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\nimport { INSDomainPrice } from \\\"./INSDomainPrice.sol\\\";\\nimport { INameChecker } from \\\"./INameChecker.sol\\\";\\nimport { INSReverseRegistrar } from \\\"./INSReverseRegistrar.sol\\\";\\n\\n/**\\n * @title IRONRegistrarController\\n * @dev Interface for the Registrar Controller contract that manages the registration, renewal, and commitment of RNS\\n * names.\\n */\\ninterface IRONRegistrarController {\\n /// @dev Error: The provided commitment timestamp is too new for registration.\\n error CommitmentTooNew(bytes32 commitment);\\n /// @dev Error: The provided commitment timestamp is too old for registration.\\n error CommitmentTooOld(bytes32 commitment);\\n /// @dev Error: The requested name is not available for registration.\\n error NameNotAvailable(string name);\\n /// @dev Error: The requested duration for registration is too short.\\n error DurationTooShort(uint64 duration);\\n /// @dev Error: A resolver is required when additional data is supplied during registration.\\n error ResolverRequiredWhenDataSupplied();\\n /// @dev Error: An unexpired commitment already exists for the given commitment.\\n error UnexpiredCommitmentExists(bytes32 commitment);\\n /// @dev Error: Insufficient value (RON) provided for registration.\\n error InsufficientValue();\\n /// @dev Error: The sender is not authorized for the given RNS node.\\n error Unauthorized(bytes32 node);\\n /// @dev Error: The maximum commitment age is set too low.\\n error MaxCommitmentAgeTooLow();\\n /// @dev Error: The maximum commitment age is set too high.\\n error MaxCommitmentAgeTooHigh();\\n /// @dev Thrown when some one requests for protected names\\n error ErrRequestedForProtectedName(string name);\\n /// @dev Thrown when received invalid params for registering protected name\\n error ErrInvalidRegisterProtectedName(string name, address requestOwner, bool nameProtected, bool ownerWhitelisted);\\n /// @dev Thrown when received invalid array length\\n error InvalidArrayLength();\\n /// @dev Thrown when treasury address is set to null\\n error NullAddress();\\n\\n /**\\n * @dev Emitted when the min registration duration is updated.\\n * @param operator The address of the operator who triggered the update.\\n * @param duration The new duration in seconds.\\n */\\n event MinRegistrationDurationUpdated(address indexed operator, uint256 duration);\\n\\n /// @dev Emitted when the treasury is updated.\\n event TreasuryUpdated(address indexed addr);\\n\\n /**\\n * @dev Emitted when RNSDomainPrice contract is updated.\\n * @param operator The address of the operator who triggered the update.\\n * @param newDomainPrice The new duration domain price contract.\\n */\\n event DomainPriceUpdated(address indexed operator, INSDomainPrice newDomainPrice);\\n\\n /**\\n * @dev Emitted when the commitment age range is updated.\\n * @param operator The address of the operator who triggered the update.\\n * @param minCommitmentAge The new minimum commitment age in seconds.\\n * @param maxCommitmentAge The new maximum commitment age in seconds.\\n */\\n event CommitmentAgeUpdated(address indexed operator, uint256 minCommitmentAge, uint256 maxCommitmentAge);\\n\\n /**\\n * @dev Emitted when a new name is successfully registered.\\n * @param name The registered name.\\n * @param id The namehash of the registered name.\\n * @param owner The owner of the registered name.\\n * @param ronPrice The cost of the registration in RON.\\n * @param usdPrice The cost of the registration in USD.\\n * @param expires The expiration timestamp of the registration.\\n */\\n event NameRegistered(\\n string name, uint256 indexed id, address indexed owner, uint256 ronPrice, uint256 usdPrice, uint64 expires\\n );\\n\\n /**\\n * @dev Emitted when a name is renewed.\\n * @param name The renewed name.\\n * @param id The namehash of the registered name.\\n * @param cost The cost of renewal.\\n * @param expires The new expiration timestamp after renewal.\\n */\\n event NameRenewed(string name, uint256 indexed id, uint256 cost, uint64 expires);\\n\\n /**\\n * @dev Emitted the whitelist status is updated for the owners of the protected names.\\n * @param operator The address of the operator who triggered the update.\\n */\\n event ProtectedNamesWhitelisted(address indexed operator, uint256[] ids, address[] owners, bool status);\\n\\n /**\\n * @dev Retrieves the rent price for a given name and duration.\\n * @param name The name for which to calculate the rent price.\\n * @param duration The duration of the rent.\\n * @return usdPrice rent price in usd.\\n * @return ronPrice rent price in ron.\\n */\\n function rentPrice(string memory name, uint64 duration) external view returns (uint256 usdPrice, uint256 ronPrice);\\n\\n /**\\n * @dev Calculate the corresponding id given RON_ID and name.\\n */\\n function computeId(string memory name) external pure returns (uint256 id);\\n\\n /**\\n * @dev Checks if a name is valid.\\n * @param name The name to check validity for.\\n * @return A boolean indicating whether the name is available.\\n */\\n function valid(string memory name) external view returns (bool);\\n\\n /**\\n * @dev Checks if a name is available for registration.\\n * @param name The name to check availability for.\\n * @return A boolean indicating whether the name is available.\\n */\\n function available(string memory name) external returns (bool);\\n\\n /**\\n * @dev Generates the commitment hash for a registration.\\n * @param name The name to be registered.\\n * @param owner The owner of the name.\\n * @param duration The duration of the registration.\\n * @param secret The secret used for the commitment.\\n * @param resolver The resolver contract address.\\n * @param data Additional data associated with the registration.\\n * @param reverseRecord Whether to use reverse record for additional data.\\n * @return The commitment hash.\\n */\\n function computeCommitment(\\n string memory name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external view returns (bytes32);\\n\\n /**\\n * @dev Commits to a registration using the commitment hash.\\n * @param commitment The commitment hash.\\n */\\n function commit(bytes32 commitment) external;\\n\\n /**\\n * @dev Registers a new name.\\n * @param name The name to be registered.\\n * @param owner The owner of the name.\\n * @param duration The duration of the registration.\\n * @param secret The secret used for the commitment.\\n * @param resolver The resolver contract address.\\n * @param data Additional data associated with the registration.\\n * @param reverseRecord Whether to use reverse record for additional data.\\n */\\n function register(\\n string calldata name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable;\\n\\n /**\\n * @dev Renews an existing name registration.\\n * @param name The name to be renewed.\\n * @param duration The duration of the renewal.\\n */\\n function renew(string calldata name, uint64 duration) external payable;\\n\\n /**\\n * @dev Registers a protected name.\\n *\\n * Requirements:\\n * - The owner is whitelisted for registering.\\n */\\n function registerProtectedName(\\n string memory name,\\n address owner,\\n uint64 duration,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable;\\n\\n /**\\n * @dev Updates min registration duration.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function setMinRegistrationDuration(uint256 duration) external;\\n\\n /**\\n * @dev Sets the minimum and maximum commitment ages.\\n *\\n * Requirements:\\n * - Caller must have the DEFAULT_ADMIN_ROLE.\\n * - The `maxCommitmentAge` must be less than or equal to the current block timestamp.\\n * - The `maxCommitmentAge` must be greater than the `minCommitmentAge`.\\n *\\n * Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\\n *\\n * @param minCommitmentAge The minimum commitment age in seconds.\\n * @param maxCommitmentAge The maximum commitment age in seconds.\\n */\\n function setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) external;\\n\\n /**\\n * @dev Bulk (de)whitelist for buying protected names.\\n *\\n * Requirements:\\n * - The method caller is contract operator.\\n *\\n * Emits an event {ProtectedNamesWhitelisted}.\\n */\\n function bulkWhitelistProtectedNames(uint256[] calldata ids, address[] calldata owners, bool status) external;\\n\\n /**\\n * @dev Returns the whitelist status for registering protected name.\\n */\\n function getWhitelistProtectedNameStatus(uint256 id, address owner) external view returns (bool status);\\n\\n /**\\n * @dev Updates treasury address.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function setTreasury(address payable) external;\\n\\n /**\\n * @dev Updates price oracle address.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n */\\n function setPriceOracle(INSDomainPrice) external;\\n\\n /**\\n * @dev Returns the treasury address.\\n */\\n function getTreasury() external view returns (address);\\n\\n /**\\n * @dev Pauses the registrar controller's functionality.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function pause() external;\\n\\n /**\\n * @dev Unpauses the registrar controller's functionality.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function unpause() external;\\n\\n /**\\n * @dev Returns the role identifier for the pauser role.\\n */\\n function PAUSER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the operator role.\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the threshold for valid name length.\\n */\\n function MIN_DOMAIN_LENGTH() external view returns (uint8);\\n\\n /**\\n * @dev Returns the minimum registration duration.\\n */\\n function getMinRegistrationDuration() external view returns (uint256);\\n\\n /**\\n * @dev Returns the range of commitment ages allowed.\\n */\\n function getCommitmentAgeRange() external view returns (uint256 minCommitmentAge, uint256 maxCommitmentAge);\\n\\n /**\\n * @dev Returns the INSUnified contract associated with this controller.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Returns the INSDomainPrice contract associated with this controller.\\n */\\n function getPriceOracle() external view returns (INSDomainPrice);\\n\\n /**\\n * @dev Returns the INameChecker contract associated with this controller.\\n */\\n function getNameChecker() external view returns (INameChecker);\\n\\n /**\\n * @dev Returns the IReverseRegistrar contract associated with this controller.\\n */\\n function getReverseRegistrar() external view returns (INSReverseRegistrar);\\n}\\n\",\"keccak256\":\"0x537b708f5188b82cd1374feebb0a855988a935206dfbf84abe550876e03228f1\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IABIResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.0;\\n\\ninterface IABIResolver {\\n /// Thrown when the input content type is invalid.\\n error InvalidContentType();\\n\\n /// @dev Emitted when the ABI is changed.\\n event ABIChanged(bytes32 indexed node, uint256 indexed contentType);\\n\\n /**\\n * @dev Sets the ABI associated with an INS node. Nodes may have one ABI of each content type. To remove an ABI, set it\\n * to the empty string.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n * - The content type must be powers of 2.\\n *\\n * Emitted an event {ABIChanged}.\\n *\\n * @param node The node to update.\\n * @param contentType The content type of the ABI\\n * @param data The ABI data.\\n */\\n function setABI(bytes32 node, uint256 contentType, bytes calldata data) external;\\n\\n /**\\n * @dev Returns the ABI associated with an INS node.\\n * Defined in EIP-205, see more at https://eips.ethereum.org/EIPS/eip-205\\n *\\n * @param node The INS node to query\\n * @param contentTypes A bitwise OR of the ABI formats accepted by the caller.\\n * @return contentType The content type of the return value\\n * @return data The ABI data\\n */\\n function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256 contentType, bytes memory data);\\n}\\n\",\"keccak256\":\"0xc701a6cafa883d6607b5916dfb4277099f39c450930d776da36a7acc2b2498c0\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IAddressResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.0;\\n\\ninterface IAddressResolver {\\n /// @dev Emitted when an address of a node is changed.\\n event AddrChanged(bytes32 indexed node, address addr);\\n\\n /**\\n * @dev Sets the address associated with an INS node.\\n *\\n * Requirement:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {AddrChanged}.\\n *\\n * @param node The node to update.\\n * @param addr The address to set.\\n */\\n function setAddr(bytes32 node, address addr) external;\\n\\n /**\\n * @dev Returns the address associated with an INS node.\\n * @param node The INS node to query.\\n * @return The associated address.\\n */\\n function addr(bytes32 node) external view returns (address payable);\\n}\\n\",\"keccak256\":\"0xb914cb4a730d20c867805fd148e7574c6565bc6c0a129825cdf3cf4f2f7f72d0\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IContentHashResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IContentHashResolver {\\n /// @dev Emitted when the content hash of a node is changed.\\n event ContentHashChanged(bytes32 indexed node, bytes hash);\\n\\n /**\\n * @dev Sets the content hash associated with an INS node.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {ContentHashChanged}.\\n *\\n * @param node The node to update.\\n * @param hash The content hash to set\\n */\\n function setContentHash(bytes32 node, bytes calldata hash) external;\\n\\n /**\\n * @dev Returns the content hash associated with an INS node.\\n * @param node The INS node to query.\\n * @return The associated content hash.\\n */\\n function contentHash(bytes32 node) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0xfbdc7211a813065e5cc2bdd3640c13f01c87b5f31fda86e562b0525628602c00\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IDNSRecordResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4;\\n\\ninterface IDNSRecordResolver {\\n /// @dev Emitted whenever a given node/name/resource's RRSET is updated.\\n event DNSRecordChanged(bytes32 indexed node, bytes name, uint16 resource, bytes record);\\n /// @dev Emitted whenever a given node/name/resource's RRSET is deleted.\\n event DNSRecordDeleted(bytes32 indexed node, bytes name, uint16 resource);\\n\\n /**\\n * @dev Set one or more DNS records. Records are supplied in wire-format. Records with the same node/name/resource\\n * must be supplied one after the other to ensure the data is updated correctly. For example, if the data was\\n * supplied:\\n * a.example.com IN A 1.2.3.4\\n * a.example.com IN A 5.6.7.8\\n * www.example.com IN CNAME a.example.com.\\n * then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was\\n * supplied:\\n * a.example.com IN A 1.2.3.4\\n * www.example.com IN CNAME a.example.com.\\n * a.example.com IN A 5.6.7.8\\n * then this would store the first A record, the CNAME, then the second A record which would overwrite the first.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * @param node the namehash of the node for which to set the records\\n * @param data the DNS wire format records to set\\n */\\n function setDNSRecords(bytes32 node, bytes calldata data) external;\\n\\n /**\\n * @dev Obtain a DNS record.\\n * @param node the namehash of the node for which to fetch the record\\n * @param name the keccak-256 hash of the fully-qualified name for which to fetch the record\\n * @param resource the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\\n * @return the DNS record in wire format if present, otherwise empty\\n */\\n function dnsRecord(bytes32 node, bytes32 name, uint16 resource) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x2341266d70b60f5bb666c066aaf1fdb35be81277bcdd04e3bf93ee774ae4d2f6\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IDNSZoneResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4;\\n\\ninterface IDNSZoneResolver {\\n /// @dev Emitted whenever a given node's zone hash is updated.\\n event DNSZonehashChanged(bytes32 indexed node, bytes lastzonehash, bytes zonehash);\\n\\n /**\\n * @dev Sets the hash for the zone.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {DNSZonehashChanged}.\\n *\\n * @param node The node to update.\\n * @param hash The zonehash to set\\n */\\n function setZonehash(bytes32 node, bytes calldata hash) external;\\n\\n /**\\n * @dev Obtains the hash for the zone.\\n * @param node The INS node to query.\\n * @return The associated contenthash.\\n */\\n function zonehash(bytes32 node) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x42aa5409a184740461e7477b8894d7549fd3908596bb7dba9adab59b8ff4ebed\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IInterfaceResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IInterfaceResolver {\\n /// @dev Emitted when the interface of node is changed.\\n event InterfaceChanged(bytes32 indexed node, bytes4 indexed interfaceID, address implementer);\\n\\n /**\\n * @dev Sets an interface associated with a name.\\n * Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * @param node The node to update.\\n * @param interfaceID The EIP 165 interface ID.\\n * @param implementer The address of a contract that implements this interface for this node.\\n */\\n function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external;\\n\\n /**\\n * @dev Returns the address of a contract that implements the specified interface for this name.\\n *\\n * If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`.\\n * If `addr()` is set, a contract exists at that address, and that contract implements EIP165 and returns `true` for\\n * the specified interfaceID, its address will be returned.\\n *\\n * @param node The INS node to query.\\n * @param interfaceID The EIP 165 interface ID to check for.\\n * @return The address that implements this interface, or 0 if the interface is unsupported.\\n */\\n function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address);\\n}\\n\",\"keccak256\":\"0xb4a1867d5cb899bfdc2e812c4bf9b9d3d14b34e0f72cbeffb4e018f8659b13fc\",\"license\":\"MIT\"},\"src/interfaces/resolvers/INameResolver.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.0;\\n\\ninterface INameResolver {\\n /// @dev Emitted when a node name is changed.\\n event NameChanged(bytes32 indexed node, string name);\\n\\n /**\\n * @dev Sets the name associated with an INS node, for reverse records.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {NameChanged}.\\n *\\n * @param node The node to update.\\n */\\n function setName(bytes32 node, string calldata newName) external;\\n\\n /**\\n * @dev Returns the name associated with an INS node, for reverse records.\\n * @param node The INS node to query.\\n * @return The associated name.\\n */\\n function name(bytes32 node) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xf3dbbe3238d5f1e491a43dbccbd74755fcd325b5c6aef6b7f0819684bd1f9da3\",\"license\":\"UNLICENSED\"},\"src/interfaces/resolvers/IPublicKeyResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ninterface IPublicKeyResolver {\\n struct PublicKey {\\n bytes32 x;\\n bytes32 y;\\n }\\n\\n /// @dev Emitted when a node public key is changed.\\n event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);\\n\\n /**\\n * @dev Sets the SECP256k1 public key associated with an INS node.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {PubkeyChanged}.\\n *\\n * @param node The INS node to query\\n * @param x the X coordinate of the curve point for the public key.\\n * @param y the Y coordinate of the curve point for the public key.\\n */\\n function setPubkey(bytes32 node, bytes32 x, bytes32 y) external;\\n\\n /**\\n * @dev Returns the SECP256k1 public key associated with an INS node.\\n * Defined in EIP 619.\\n *\\n * @param node The INS node to query\\n * @return x The X coordinate of the curve point for the public key.\\n * @return y The Y coordinate of the curve point for the public key.\\n */\\n function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y);\\n}\\n\",\"keccak256\":\"0x2644fd8d9b951c2aca5521ba519b68d4f3de19b731dae7907b6372e1ceac07ae\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IPublicResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"../INSUnified.sol\\\";\\nimport { INSReverseRegistrar } from \\\"../INSReverseRegistrar.sol\\\";\\nimport { IABIResolver } from \\\"./IABIResolver.sol\\\";\\nimport { IAddressResolver } from \\\"./IAddressResolver.sol\\\";\\nimport { IContentHashResolver } from \\\"./IContentHashResolver.sol\\\";\\nimport { IDNSRecordResolver } from \\\"./IDNSRecordResolver.sol\\\";\\nimport { IDNSZoneResolver } from \\\"./IDNSZoneResolver.sol\\\";\\nimport { IInterfaceResolver } from \\\"./IInterfaceResolver.sol\\\";\\nimport { INameResolver } from \\\"./INameResolver.sol\\\";\\nimport { IPublicKeyResolver } from \\\"./IPublicKeyResolver.sol\\\";\\nimport { ITextResolver } from \\\"./ITextResolver.sol\\\";\\nimport { IMulticallable } from \\\"../IMulticallable.sol\\\";\\n\\ninterface IPublicResolver is\\n IABIResolver,\\n IAddressResolver,\\n IContentHashResolver,\\n IDNSRecordResolver,\\n IDNSZoneResolver,\\n IInterfaceResolver,\\n INameResolver,\\n IPublicKeyResolver,\\n ITextResolver,\\n IMulticallable\\n{\\n /// @dev See {IERC1155-ApprovalForAll}. Logged when an operator is added or removed.\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /// @dev Logged when a delegate is approved or an approval is revoked.\\n event Approved(address owner, bytes32 indexed node, address indexed delegate, bool indexed approved);\\n\\n /**\\n * @dev Checks if an account is authorized to manage the resolution of a specific RNS node.\\n * @param node The RNS node.\\n * @param account The account address being checked for authorization.\\n * @return A boolean indicating whether the account is authorized.\\n */\\n function isAuthorized(bytes32 node, address account) external view returns (bool);\\n\\n /**\\n * @dev Retrieves the RNSUnified associated with this resolver.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Retrieves the reverse registrar associated with this resolver.\\n */\\n function getReverseRegistrar() external view returns (INSReverseRegistrar);\\n\\n /**\\n * @dev This function provides an extra security check when called from privileged contracts (such as\\n * RONRegistrarController) that can set records on behalf of the node owners.\\n *\\n * Reverts if the node is not null but calldata is mismatched.\\n */\\n function multicallWithNodeCheck(bytes32 node, bytes[] calldata data) external returns (bytes[] memory results);\\n}\\n\",\"keccak256\":\"0x97b6f762f25a4dc3f6398a76bbcb7d3922f5f440ee9e0541c83579e09a8f87b7\",\"license\":\"MIT\"},\"src/interfaces/resolvers/ITextResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ninterface ITextResolver {\\n /// @dev Emitted when a node text is changed.\\n event TextChanged(bytes32 indexed node, string indexed indexedKey, string key, string value);\\n\\n /**\\n * @dev Sets the text data associated with an INS node and key.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {TextChanged}.\\n *\\n * @param node The node to update.\\n * @param key The key to set.\\n * @param value The text data value to set.\\n */\\n function setText(bytes32 node, string calldata key, string calldata value) external;\\n\\n /**\\n * Returns the text data associated with an INS node and key.\\n * @param node The INS node to query.\\n * @param key The text data key to query.\\n * @return The associated text data.\\n */\\n function text(bytes32 node, string calldata key) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x05ce1760d3a16d99614b1a46c11308238e1ecd8be23f081fac146bbc58961ecf\",\"license\":\"MIT\"},\"src/libraries/LibRNSDomain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nlibrary LibRNSDomain {\\n /// @dev Value equals to namehash('ron')\\n uint256 internal constant RON_ID = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688;\\n /// @dev Value equals to namehash('addr.reverse')\\n uint256 internal constant ADDR_REVERSE_ID = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n /**\\n * @dev Calculate the corresponding id given parentId and label.\\n */\\n function toId(uint256 parentId, string memory label) internal pure returns (uint256 id) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(0x0, parentId)\\n mstore(0x20, keccak256(add(label, 32), mload(label)))\\n id := keccak256(0x0, 64)\\n }\\n }\\n\\n /**\\n * @dev Calculates the hash of the label.\\n */\\n function hashLabel(string memory label) internal pure returns (bytes32 hashed) {\\n assembly (\\\"memory-safe\\\") {\\n hashed := keccak256(add(label, 32), mload(label))\\n }\\n }\\n\\n /**\\n * @dev Calculate the RNS namehash of a str.\\n */\\n function namehash(string memory str) internal pure returns (bytes32 hashed) {\\n // notice: this method is case-sensitive, ensure the string is lowercased before calling this method\\n assembly (\\\"memory-safe\\\") {\\n // load str length\\n let len := mload(str)\\n // returns bytes32(0x0) if length is zero\\n if iszero(iszero(len)) {\\n let hashedLen\\n // compute pointer to str[0]\\n let head := add(str, 32)\\n // compute pointer to str[length - 1]\\n let tail := add(head, sub(len, 1))\\n // cleanup dirty bytes if contains any\\n mstore(0x0, 0)\\n // loop backwards from `tail` to `head`\\n for { let i := tail } iszero(lt(i, head)) { i := sub(i, 1) } {\\n // check if `i` is `head`\\n let isHead := eq(i, head)\\n // check if `str[i-1]` is \\\".\\\"\\n // `0x2e` == bytes1(\\\".\\\")\\n let isDotNext := eq(shr(248, mload(sub(i, 1))), 0x2e)\\n if or(isHead, isDotNext) {\\n // size = distance(length, i) - hashedLength + 1\\n let size := add(sub(sub(tail, i), hashedLen), 1)\\n mstore(0x20, keccak256(i, size))\\n mstore(0x0, keccak256(0x0, 64))\\n // skip \\\".\\\" thereby + 1\\n hashedLen := add(hashedLen, add(size, 1))\\n }\\n }\\n }\\n hashed := mload(0x0)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x715029b2b420c6ec00bc1f939b837acf45d247fde8426089575b0e7b5e84518b\",\"license\":\"MIT\"},\"src/libraries/LibString.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nlibrary LibString {\\n error InvalidStringLength();\\n error InvalidCharacter(bytes1 char);\\n\\n /// @dev Lookup constant for method. See more detail at https://eips.ethereum.org/EIPS/eip-181\\n bytes32 private constant LOOKUP = 0x3031323334353637383961626364656600000000000000000000000000000000;\\n\\n /**\\n * @dev Returns the length of a given string\\n *\\n * @param s The string to measure the length of\\n * @return The length of the input string\\n */\\n function strlen(string memory s) internal pure returns (uint256) {\\n unchecked {\\n uint256 i;\\n uint256 len;\\n uint256 bytelength = bytes(s).length;\\n for (len; i < bytelength; len++) {\\n bytes1 b = bytes(s)[i];\\n if (b < 0x80) {\\n i += 1;\\n } else if (b < 0xE0) {\\n i += 2;\\n } else if (b < 0xF0) {\\n i += 3;\\n } else if (b < 0xF8) {\\n i += 4;\\n } else if (b < 0xFC) {\\n i += 5;\\n } else {\\n i += 6;\\n }\\n }\\n return len;\\n }\\n }\\n\\n /**\\n * @dev Converts an address to string.\\n */\\n function toString(address addr) internal pure returns (string memory stringifiedAddr) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(stringifiedAddr, 40)\\n let ptr := add(stringifiedAddr, 0x20)\\n for { let i := 40 } gt(i, 0) { } {\\n i := sub(i, 1)\\n mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP))\\n addr := div(addr, 0x10)\\n\\n i := sub(i, 1)\\n mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP))\\n addr := div(addr, 0x10)\\n }\\n }\\n }\\n\\n /**\\n * @dev Converts string to address.\\n * Reverts if the string length is not equal to 40.\\n */\\n function parseAddr(string memory stringifiedAddr) internal pure returns (address) {\\n unchecked {\\n if (bytes(stringifiedAddr).length != 40) revert InvalidStringLength();\\n uint160 addr;\\n for (uint256 i = 0; i < 40; i += 2) {\\n addr *= 0x100;\\n addr += uint160(hexCharToDec(bytes(stringifiedAddr)[i])) * 0x10;\\n addr += hexCharToDec(bytes(stringifiedAddr)[i + 1]);\\n }\\n return address(addr);\\n }\\n }\\n\\n /**\\n * @dev Converts a hex char (0-9, a-f, A-F) to decimal number.\\n * Reverts if the char is invalid.\\n */\\n function hexCharToDec(bytes1 c) private pure returns (uint8 r) {\\n unchecked {\\n if ((bytes1(\\\"a\\\") <= c) && (c <= bytes1(\\\"f\\\"))) r = uint8(c) - 87;\\n else if ((bytes1(\\\"A\\\") <= c) && (c <= bytes1(\\\"F\\\"))) r = uint8(c) - 55;\\n else if ((bytes1(\\\"0\\\") <= c) && (c <= bytes1(\\\"9\\\"))) r = uint8(c) - 48;\\n else revert InvalidCharacter(c);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d456b294f0e44ccaabded43a3d96db6270761a167535155a762fe41e968b905\",\"license\":\"MIT\"},\"src/libraries/math/PeriodScalingUtils.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\nimport { PowMath } from \\\"./PowMath.sol\\\";\\n\\nstruct PeriodScaler {\\n uint192 ratio;\\n uint64 period;\\n}\\n\\nlibrary LibPeriodScaler {\\n using PowMath for uint256;\\n\\n error PeriodNumOverflowedUint16(uint256 n);\\n\\n /// @dev The precision number of calculation is 2\\n uint256 public constant MAX_PERCENTAGE = 100_00;\\n\\n /**\\n * @dev Scales down the input value `v` for a percentage of `self.ratio` each period `self.period`.\\n * Reverts if the passed period is larger than 2^16 - 1.\\n *\\n * @param self The period scaler with specific period and ratio\\n * @param v The original value to scale based on the rule `self`\\n * @param maxR The maximum value of 100%. Eg, if the `self.ratio` in range of [0;100_00] reflexes 0-100%, this param\\n * must be 100_00\\n * @param dur The passed duration in the same uint with `self.period`\\n */\\n function scaleDown(PeriodScaler memory self, uint256 v, uint64 maxR, uint256 dur) internal pure returns (uint256 rs) {\\n uint256 n = dur / uint256(self.period);\\n if (n == 0 || self.ratio == 0) return v;\\n if (maxR == self.ratio) return 0;\\n if (n > type(uint16).max) revert PeriodNumOverflowedUint16(n);\\n\\n unchecked {\\n // Normalizes the input ratios to be in range of [0;MAX_PERCENTAGE]\\n uint256 p = Math.mulDiv(maxR - self.ratio, MAX_PERCENTAGE, maxR);\\n return v.mulDiv({ y: p, d: MAX_PERCENTAGE, n: uint16(n) });\\n }\\n }\\n}\\n\",\"keccak256\":\"0x502d004fbd130a99f3f1e6685aebff9f47300565fbc5a65b4912824ea5eb5b78\",\"license\":\"MIT\"},\"src/libraries/math/PowMath.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nlibrary PowMath {\\n using Math for uint256;\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Negative exponent n for x*10^n.\\n */\\n function exp10(uint256 x, int32 n) internal pure returns (uint256) {\\n if (n < 0) {\\n return x / 10 ** uint32(-n);\\n } else if (n > 0) {\\n return x * 10 ** uint32(n);\\n } else {\\n return x;\\n }\\n }\\n\\n /**\\n * @dev Calculates floor(x * (y / d)**n) with full precision.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256 r) {\\n unchecked {\\n if (y == d || n == 0) return x;\\n r = x;\\n\\n bool ok;\\n uint256 r_;\\n uint16 nd_;\\n\\n {\\n uint16 ye = uint16(Math.min(n, findMaxExponent(y)));\\n while (ye > 0) {\\n (ok, r_) = r.tryMul(y ** ye);\\n if (ok) {\\n r = r_;\\n n -= ye;\\n nd_ += ye;\\n }\\n ye = uint16(Math.min(ye / 2, n));\\n }\\n }\\n\\n while (n > 0) {\\n (ok, r_) = r.tryMul(y);\\n if (ok) {\\n r = r_;\\n n--;\\n nd_++;\\n } else if (nd_ > 0) {\\n r /= d;\\n nd_--;\\n } else {\\n r = r.mulDiv(y, d);\\n n--;\\n }\\n }\\n\\n uint16 de = findMaxExponent(d);\\n while (nd_ > 0) {\\n uint16 e = uint16(Math.min(de, nd_));\\n r /= d ** e;\\n nd_ -= e;\\n }\\n }\\n }\\n\\n /**\\n * @dev Calculates floor(x * (y / d)**n) with low precision.\\n */\\n function mulDivLowPrecision(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256) {\\n return uncheckedMulDiv(x, y, d, n, findMaxExponent(Math.max(y, d)));\\n }\\n\\n /**\\n * @dev Aggregated calculate multiplications.\\n * ```\\n * r = x*(y/d)^k\\n * = \\\\prod(x*(y/d)^{k_i}) \\\\ where \\\\ sum(k_i) = k\\n * ```\\n */\\n function uncheckedMulDiv(uint256 x, uint256 y, uint256 d, uint16 n, uint16 maxE) internal pure returns (uint256 r) {\\n unchecked {\\n r = x;\\n uint16 e;\\n while (n > 0) {\\n e = uint16(Math.min(n, maxE));\\n r = r.mulDiv(y ** e, d ** e);\\n n -= e;\\n }\\n }\\n }\\n\\n /**\\n * @dev Returns the largest exponent `k` where, x^k <= 2^256-1\\n * Note: n = Surd[2^256-1,k]\\n * = 10^( log2(2^256-1) / k * log10(2) )\\n */\\n function findMaxExponent(uint256 x) internal pure returns (uint16 k) {\\n if (x < 3) k = 255;\\n else if (x < 4) k = 128;\\n else if (x < 16) k = 64;\\n else if (x < 256) k = 32;\\n else if (x < 7132) k = 20;\\n else if (x < 11376) k = 19;\\n else if (x < 19113) k = 18;\\n else if (x < 34132) k = 17;\\n else if (x < 65536) k = 16;\\n else if (x < 137271) k = 15;\\n else if (x < 319558) k = 14;\\n else if (x < 847180) k = 13;\\n else if (x < 2642246) k = 12;\\n else if (x < 10134189) k = 11;\\n else if (x < 50859009) k = 10;\\n else if (x < 365284285) k = 9;\\n else if (x < 4294967296) k = 8;\\n else if (x < 102116749983) k = 7;\\n else if (x < 6981463658332) k = 6;\\n else if (x < 2586638741762875) k = 5;\\n else if (x < 18446744073709551616) k = 4;\\n else if (x < 48740834812604276470692695) k = 3;\\n else if (x < 340282366920938463463374607431768211456) k = 2;\\n else k = 1;\\n }\\n}\\n\",\"keccak256\":\"0x29f943cf7c61149bc9a624244901720fc3a349adb418555db1db2a045fcdfb70\",\"license\":\"MIT\"},\"src/libraries/transfers/RONTransferHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Strings } from \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\n\\n/**\\n * @title RONTransferHelper\\n */\\nlibrary RONTransferHelper {\\n using Strings for *;\\n\\n /**\\n * @dev Transfers RON and wraps result for the method caller to a recipient.\\n */\\n function safeTransfer(address payable _to, uint256 _value) internal {\\n bool _success = send(_to, _value);\\n if (!_success) {\\n revert(\\n string.concat(\\\"TransferHelper: could not transfer RON to \\\", _to.toHexString(), \\\" value \\\", _value.toHexString())\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns whether the call was success.\\n * Note: this function should use with the `ReentrancyGuard`.\\n */\\n function send(address payable _to, uint256 _value) internal returns (bool _success) {\\n (_success,) = _to.call{ value: _value }(new bytes(0));\\n }\\n}\\n\",\"keccak256\":\"0x733e60374ee0a33d0da2ee24976b893ca6b6d9764243b175e1ac8025240394da\",\"license\":\"MIT\"},\"src/types/ModifyingIndicator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ntype ModifyingIndicator is uint256;\\n\\nusing { hasAny } for ModifyingIndicator global;\\nusing { or as | } for ModifyingIndicator global;\\nusing { and as & } for ModifyingIndicator global;\\nusing { eq as == } for ModifyingIndicator global;\\nusing { not as ~ } for ModifyingIndicator global;\\nusing { xor as ^ } for ModifyingIndicator global;\\nusing { neq as != } for ModifyingIndicator global;\\n\\n/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}.\\nModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7);\\n\\n/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}.\\nModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18);\\n\\n/// @dev Indicator when modifying all of the fields in {ModifyingField}.\\nModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max);\\n\\nfunction eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other);\\n}\\n\\nfunction neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return !eq(self, other);\\n}\\n\\nfunction xor(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) ^ ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction not(ModifyingIndicator self) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self));\\n}\\n\\nfunction or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return self & other != ModifyingIndicator.wrap(0);\\n}\\n\",\"keccak256\":\"0x2e42fbba358c470ff6b57268367d248f0e2fcf8d7142d762688f7aef5efae7ee\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 195, "storageLayout": { "storage": [ { - "astId": 50266, + "astId": 60522, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_paused", "offset": 0, @@ -16042,7 +1504,7 @@ "type": "t_bool" }, { - "astId": 50086, + "astId": 60342, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_initialized", "offset": 1, @@ -16050,7 +1512,7 @@ "type": "t_uint8" }, { - "astId": 50089, + "astId": 60345, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_initializing", "offset": 2, @@ -16058,7 +1520,7 @@ "type": "t_bool" }, { - "astId": 50367, + "astId": 60623, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_status", "offset": 0, @@ -16066,23 +1528,23 @@ "type": "t_uint256" }, { - "astId": 48559, + "astId": 58815, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_roles", "offset": 0, "slot": "2", - "type": "t_mapping(t_bytes32,t_struct(RoleData)48554_storage)" + "type": "t_mapping(t_bytes32,t_struct(RoleData)58810_storage)" }, { - "astId": 48869, + "astId": 59125, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_roleMembers", "offset": 0, "slot": "3", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)54438_storage)" + "type": "t_mapping(t_bytes32,t_struct(AddressSet)64694_storage)" }, { - "astId": 64887, + "astId": 83016, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "____gap", "offset": 0, @@ -16090,7 +1552,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 64890, + "astId": 83019, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_minCommitmentAge", "offset": 0, @@ -16098,7 +1560,7 @@ "type": "t_uint256" }, { - "astId": 64893, + "astId": 83022, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_maxCommitmentAge", "offset": 0, @@ -16106,7 +1568,7 @@ "type": "t_uint256" }, { - "astId": 64896, + "astId": 83025, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_minRegistrationDuration", "offset": 0, @@ -16114,7 +1576,7 @@ "type": "t_uint256" }, { - "astId": 64899, + "astId": 83028, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_treasury", "offset": 0, @@ -16122,39 +1584,39 @@ "type": "t_address_payable" }, { - "astId": 64903, + "astId": 83032, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_rnsUnified", "offset": 0, "slot": "58", - "type": "t_contract(INSUnified)67046" + "type": "t_contract(INSUnified)85351" }, { - "astId": 64907, + "astId": 83036, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_nameChecker", "offset": 0, "slot": "59", - "type": "t_contract(INameChecker)67165" + "type": "t_contract(INameChecker)85470" }, { - "astId": 64911, + "astId": 83040, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_priceOracle", "offset": 0, "slot": "60", - "type": "t_contract(INSDomainPrice)66670" + "type": "t_contract(INSDomainPrice)84975" }, { - "astId": 64915, + "astId": 83044, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_reverseRegistrar", "offset": 0, "slot": "61", - "type": "t_contract(INSReverseRegistrar)66789" + "type": "t_contract(INSReverseRegistrar)85094" }, { - "astId": 64920, + "astId": 83049, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_committedAt", "offset": 0, @@ -16162,7 +1624,7 @@ "type": "t_mapping(t_bytes32,t_uint256)" }, { - "astId": 64927, + "astId": 83056, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_protectedNamesWhitelisted", "offset": 0, @@ -16203,22 +1665,22 @@ "label": "bytes32", "numberOfBytes": "32" }, - "t_contract(INSDomainPrice)66670": { + "t_contract(INSDomainPrice)84975": { "encoding": "inplace", "label": "contract INSDomainPrice", "numberOfBytes": "20" }, - "t_contract(INSReverseRegistrar)66789": { + "t_contract(INSReverseRegistrar)85094": { "encoding": "inplace", "label": "contract INSReverseRegistrar", "numberOfBytes": "20" }, - "t_contract(INSUnified)67046": { + "t_contract(INSUnified)85351": { "encoding": "inplace", "label": "contract INSUnified", "numberOfBytes": "20" }, - "t_contract(INameChecker)67165": { + "t_contract(INameChecker)85470": { "encoding": "inplace", "label": "contract INameChecker", "numberOfBytes": "20" @@ -16230,19 +1692,19 @@ "numberOfBytes": "32", "value": "t_bool" }, - "t_mapping(t_bytes32,t_struct(AddressSet)54438_storage)": { + "t_mapping(t_bytes32,t_struct(AddressSet)64694_storage)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => struct EnumerableSet.AddressSet)", "numberOfBytes": "32", - "value": "t_struct(AddressSet)54438_storage" + "value": "t_struct(AddressSet)64694_storage" }, - "t_mapping(t_bytes32,t_struct(RoleData)48554_storage)": { + "t_mapping(t_bytes32,t_struct(RoleData)58810_storage)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => struct AccessControl.RoleData)", "numberOfBytes": "32", - "value": "t_struct(RoleData)48554_storage" + "value": "t_struct(RoleData)58810_storage" }, "t_mapping(t_bytes32,t_uint256)": { "encoding": "mapping", @@ -16258,28 +1720,28 @@ "numberOfBytes": "32", "value": "t_mapping(t_address,t_bool)" }, - "t_struct(AddressSet)54438_storage": { + "t_struct(AddressSet)64694_storage": { "encoding": "inplace", "label": "struct EnumerableSet.AddressSet", "numberOfBytes": "64", "members": [ { - "astId": 54437, + "astId": 64693, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_inner", "offset": 0, "slot": "0", - "type": "t_struct(Set)54123_storage" + "type": "t_struct(Set)64379_storage" } ] }, - "t_struct(RoleData)48554_storage": { + "t_struct(RoleData)58810_storage": { "encoding": "inplace", "label": "struct AccessControl.RoleData", "numberOfBytes": "64", "members": [ { - "astId": 48551, + "astId": 58807, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "members", "offset": 0, @@ -16287,7 +1749,7 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 48553, + "astId": 58809, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "adminRole", "offset": 0, @@ -16296,13 +1758,13 @@ } ] }, - "t_struct(Set)54123_storage": { + "t_struct(Set)64379_storage": { "encoding": "inplace", "label": "struct EnumerableSet.Set", "numberOfBytes": "64", "members": [ { - "astId": 54118, + "astId": 64374, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_values", "offset": 0, @@ -16310,7 +1772,7 @@ "type": "t_array(t_bytes32)dyn_storage" }, { - "astId": 54122, + "astId": 64378, "contract": "src/RONRegistrarController.sol:RONRegistrarController", "label": "_indexes", "offset": 0, @@ -16331,7 +1793,7 @@ } } }, - "timestamp": 1699254558, + "timestamp": 1720084974, "userdoc": { "version": 1, "kind": "user", diff --git a/script/20240704-upgrade-controller-deploy-rnscommission-mainnet/20240704_UpgradeControllerAndDeployRNSCommissionMainnet.sol b/script/20240704-upgrade-controller-deploy-rnscommission-mainnet/20240704_UpgradeControllerAndDeployRNSCommissionMainnet.sol new file mode 100644 index 0000000..c419499 --- /dev/null +++ b/script/20240704-upgrade-controller-deploy-rnscommission-mainnet/20240704_UpgradeControllerAndDeployRNSCommissionMainnet.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { RNSAuction, RNSAuctionDeploy } from "script/contracts/RNSAuctionDeploy.s.sol"; +import { + RONRegistrarController, RONRegistrarControllerDeploy +} from "script/contracts/RONRegistrarControllerDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { RNSCommission, RNSCommissionDeploy } from "script/contracts/RNSCommissionDeploy.s.sol"; +import { Migration } from "script/Migration.s.sol"; + +contract Migration__20240407_UpgradeControllerAndDeployRNSCommissionMainnet is Migration { + RONRegistrarController private _controller; + RNSCommission private _rnsCommission; + RNSAuction _auction; + + function run() public { + _auction = RNSAuction(loadContract(Contract.RNSAuction.key())); + _controller = RONRegistrarController(_upgradeProxy(Contract.RONRegistrarController.key())); + _rnsCommission = new RNSCommissionDeploy().run(); + } + + function _postCheck() internal override { + _validateSendMoneyFromSenders(); + _validateCommissionInfo(); + _validateSendersAddress(); + } + + function _validateCommissionInfo() internal logFn("_validateSetCommissionInfo") { + assertEq(_rnsCommission.getCommissions().length, 2); + + assertEq(_rnsCommission.getCommissions()[0].recipient, payable(0xFf43f5Ef28EcB7c1f219751fc793deB40ef07A53)); + assertEq(_rnsCommission.getCommissions()[1].recipient, payable(0x22cEfc91E9b7c0f3890eBf9527EA89053490694e)); + + assertEq(_rnsCommission.getCommissions()[0].ratio, 70_00); + assertEq(_rnsCommission.getCommissions()[1].ratio, 30_00); + + assertEq(_rnsCommission.getCommissions()[0].name, "Sky Mavis"); + assertEq(_rnsCommission.getCommissions()[1].name, "Ronin"); + } + + function _validateSendMoneyFromSenders() internal logFn("_validateSendMoneyFromSenders") { + vm.deal(address(_auction), 100 ether); + vm.prank(address(_auction)); + address(_rnsCommission).call{ value: 100 ether }(""); + + vm.deal(address(_controller), 100 ether); + vm.prank(address(_controller)); + address(_rnsCommission).call{ value: 100 ether }(""); + + assertEq(address(_rnsCommission).balance, 0 ether); + + address randomAddr = makeAddr("random address"); + vm.deal(address(randomAddr), 100 ether); + vm.prank(randomAddr); + address(_rnsCommission).call{ value: 100 ether }(""); + + assertEq(address(_rnsCommission).balance, 100 ether); + } + + function _validateSendersAddress() internal logFn("_validateSendersAddress") { + bytes32 SENDER_ROLE = keccak256("SENDER_ROLE"); + + require(_rnsCommission.hasRole(SENDER_ROLE, address(_auction))); + require(_rnsCommission.hasRole(SENDER_ROLE, address(_controller))); + } +} diff --git a/script/Migration.s.sol b/script/Migration.s.sol index e4c73c3..2f1304f 100644 --- a/script/Migration.s.sol +++ b/script/Migration.s.sol @@ -152,6 +152,22 @@ abstract contract Migration is BaseMigration { param.rnsUnified.protectedSettler = temporaryAdmin; param.rnsUnified.gracePeriod = 90 days; param.rnsUnified.baseTokenURI = "https://metadata-rns.roninchain.com/ronin/"; + + // RNSCommission + param.rnsCommission.admin = 0x9D05D1F5b0424F8fDE534BC196FFB6Dd211D902a; + param.rnsCommission.commissionSetters = new address[](1); + param.rnsCommission.commissionSetters[0] = 0x9D05D1F5b0424F8fDE534BC196FFB6Dd211D902a; + + param.rnsCommission.allowedSenders = new address[](2); + + param.rnsCommission.treasuryCommission = new INSCommission.Commission[](2); + param.rnsCommission.treasuryCommission[0].recipient = payable(0xFf43f5Ef28EcB7c1f219751fc793deB40ef07A53); + param.rnsCommission.treasuryCommission[0].ratio = 70_00; + param.rnsCommission.treasuryCommission[0].name = "Sky Mavis"; + + param.rnsCommission.treasuryCommission[1].recipient = payable(0x22cEfc91E9b7c0f3890eBf9527EA89053490694e); + param.rnsCommission.treasuryCommission[1].ratio = 30_00; + param.rnsCommission.treasuryCommission[1].name = "Ronin"; } else { revert("Missing param"); }