{"matchId":"57819713","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-10-31T11:46:21Z","creationBytecode":{"onchainBytecode":"0x610120604052348015610010575f80fd5b506040516111eb3803806111eb83398101604081905261002f916102e3565b866001600160a01b038116610062575f604051631e4fbdf760e01b8152600401610059919061034a565b60405180910390fd5b61006b8161025d565b50856001600160a01b03163b5f03610098578560405163bf29a5e560e01b8152600401610059919061034a565b846001600160a01b03163b5f036100c45784604051637d0da82360e01b8152600401610059919061034a565b8015806100d2575061177081115b156100f35760405163b9ca264560e01b815260048101829052602401610059565b8215806100ff57508183115b156101275760405163b037129360e01b81526004810184905260248101839052604401610059565b8284108061013457508184115b15610155576040516340fe4bf560e11b815260048101859052602401610059565b61016a602069d3c21bcecceda100000061035e565b610175905f19610387565b82111561019f5760405163b037129360e01b81526004810184905260248101839052604401610059565b604051633698617160e11b81526001600160a01b03878116600483015260016024830152861690636d30c2e290604401602060405180830381865afa1580156101ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020e91906103a6565b5f0361022f5784604051637d0da82360e01b8152600401610059919061034a565b6001600160a01b039586166080529390941660a05260c05260e09290925260029190915561010052506103bd565b600180546001600160a01b031916905561027681610279565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146102de575f80fd5b919050565b5f805f805f805f60e0888a0312156102f9575f80fd5b610302886102c8565b9650610310602089016102c8565b955061031e604089016102c8565b606089015160808a015160a08b015160c0909b0151999c989b5091999098919790965090945092505050565b6001600160a01b0391909116815260200190565b808202811582820484141761038157634e487b7160e01b5f52601160045260245ffd5b92915050565b5f826103a157634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156103b6575f80fd5b5051919050565b60805160a05160c05160e05161010051610db96104325f395f81816101a6015281816104f1015261053001525f81816103300152610a8e01525f81816102c80152610a6501525f81816101cd015261070f01525f81816102160152818161036a0152818161043b01526106de0152610db95ff3fe608060405234801561000f575f80fd5b5060043610610152575f3560e01c806304eaa11314610156578063106cd4241461017c5780631bfaae1d1461018f578063249d39e914610198578063276b7377146101a15780634cf088d9146101c857806354393b34146101fc578063570dcb2f146102115780635aca870d1461023857806360ee764314610240578063623ef2aa14610253578063660e35921461025c578063696ef3051461026d578063715018a61461027557806379ba50971461027d5780637a720b5f1461028557806381c6c9761461028e57806384f0a74a146102975780638da5cb5b1461029f578063970f2888146102a7578063b65d1ea8146102ba578063bc537912146102c3578063bd0c28c3146102ea578063dec616fb146102f4578063e30c3978146102fd578063e637bb8b14610305578063f2fde38b14610318578063fdcf9e1f1461032b575b5f80fd5b610169610164366004610bbb565b610352565b6040519081526020015b60405180910390f35b61016961018a366004610bd2565b6104de565b61016961177081565b61016961271081565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101739190610c41565b61020f61020a366004610bbb565b610579565b005b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b61020f6105e9565b61016961024e366004610bbb565b610698565b61016960045481565b61016969d3c21bcecceda100000081565b610169602081565b61020f6107cc565b61020f6107df565b61016960025481565b61016960055481565b61020f61081e565b6101ef610883565b6101696102b5366004610bd2565b610891565b6101696107d081565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101696202a30081565b61016960035481565b6101ef6108a9565b610169610313366004610bd2565b6108b8565b61020f610326366004610c69565b6109cb565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa9250505080156103d5575060408051601f3d908101601f191682019092526103d291810190610c84565b60015b6103fa5760405163124bad6360e31b8152600481018390526024015b60405180910390fd5b6001600160a01b0381166104245760405163124bad6360e31b8152600481018490526024016103f1565b506040516302e2c6f960e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906305c58df290602401602060405180830381865afa9250505080156104a6575060408051601f3d908101601f191682019092526104a391810190610c9f565b60015b6104c657604051635c3a82cf60e11b8152600481018390526024016103f1565b6104d28160ff16610698565b9392505050565b919050565b5f806104ea8484610891565b90506127107f000000000000000000000000000000000000000000000000000000000000000061051a8284610cd3565b6105249190610cfa565b61052e9190610d11565b7f000000000000000000000000000000000000000000000000000000000000000061055b61271084610d11565b6105659190610cfa565b61056f9190610d24565b9150505b92915050565b610581610a31565b61058a81610a63565b600381905561059c6202a30042610d24565b600481905560025460408051918252602082018490528101919091527f23425d5d10aa216657346914b0a3ab4bfb01b111b6a15fb044a0d8f9c3b73107906060015b60405180910390a150565b6105f1610a31565b6003545f81900361061557604051630d925ae760e21b815260040160405180910390fd5b60045442101561063c576004805460405163ee68b01760e01b8152918201526024016103f1565b61064581610a63565b600280545f600381905560045590829055426005556040517ffaeaabf7d533ed4e9b1bc7b65e847c6b84ee674b7f7acce6de5b46de63ea71bf9061068c9083908590610d37565b60405180910390a15050565b5f8115806106a6575060ff82115b156106c75760405163716593c960e01b8152600481018390526024016103f1565b604051633698617160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260ff841660248301527f00000000000000000000000000000000000000000000000000000000000000001690636d30c2e290604401602060405180830381865afa158015610754573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107789190610d45565b9050805f0361079d5760405163716593c960e01b8152600481018390526024016103f1565b69d3c21bcecceda10000008111156104d95781816040516304d6f4e560e21b81526004016103f1929190610d37565b6107d4610a31565b6107dd5f610b58565b565b33806107e96108a9565b6001600160a01b031614610812578060405163118cdaa760e01b81526004016103f19190610c41565b61081b81610b58565b50565b610826610a31565b6003545f81900361084a57604051630d925ae760e21b815260040160405180910390fd5b5f60038190556004556040518181527fb3504e3db0d46f4929f0e020e3e206a2f034bd6219c0bf767d19a518ee5f6c44906020016105de565b5f546001600160a01b031690565b5f60025461089f84846108b8565b6104d29190610cfa565b6001546001600160a01b031690565b5f8160208111156108df57604051630677bac560e31b8152600481018290526024016103f1565b5f5b818110156109c357801580159061093257508484610900600184610d5c565b81811061090f5761090f610d6f565b9050602002013585858381811061092857610928610d6f565b9050602002013511155b1561098e578484610944600184610d5c565b81811061095357610953610d6f565b9050602002013585858381811061096c5761096c610d6f565b90506020020135604051630a6f6bbf60e11b81526004016103f1929190610d37565b6109af8585838181106109a3576109a3610d6f565b90506020020135610352565b6109b99084610d24565b92506001016108e1565b505092915050565b6109d3610a31565b600180546001600160a01b0319166001600160a01b0383169081179091556109f9610883565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b33610a3a610883565b6001600160a01b0316146107dd573360405163118cdaa760e01b81526004016103f19190610c41565b7f0000000000000000000000000000000000000000000000000000000000000000811080610ab057507f000000000000000000000000000000000000000000000000000000000000000081115b15610ad1576040516340fe4bf560e11b8152600481018290526024016103f1565b600254808203610af45760405163011986d960e71b815260040160405180910390fd5b5f818311610b0b57610b068383610d5c565b610b15565b610b158284610d5c565b9050610b256107d0612710610d11565b610b2f9083610d11565b811115610b5357818360405163089e191b60e01b81526004016103f1929190610d37565b505050565b600180546001600160a01b031916905561081b815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610bcb575f80fd5b5035919050565b5f8060208385031215610be3575f80fd5b82356001600160401b03811115610bf8575f80fd5b8301601f81018513610c08575f80fd5b80356001600160401b03811115610c1d575f80fd5b8560208260051b8401011115610c31575f80fd5b6020919091019590945092505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461081b575f80fd5b5f60208284031215610c79575f80fd5b81356104d281610c55565b5f60208284031215610c94575f80fd5b81516104d281610c55565b5f60208284031215610caf575f80fd5b815160ff811681146104d2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f82610ce157610ce1610cbf565b500690565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761057357610573610ce6565b5f82610d1f57610d1f610cbf565b500490565b8082018082111561057357610573610ce6565b918252602082015260400190565b5f60208284031215610d55575f80fd5b5051919050565b8181038181111561057357610573610ce6565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220fb13dd3e76b481c5c9e69c913b06a8bcab8e84373953f8ab5f8ba03d4b6b8eec64736f6c634300081a0033000000000000000000000000bc8744370bcb6d5abf5de8b4086ecfbb4c5629c3000000000000000000000000cb98349c134ab983da5bfd80527dfe2552bdb70f0000000000000000000000004b67b739dfd832f4eac67a7aa3bc244fb74cea4f0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000001770","recompiledBytecode":"0x610120604052348015610010575f80fd5b506040516111eb3803806111eb83398101604081905261002f916102e3565b866001600160a01b038116610062575f604051631e4fbdf760e01b8152600401610059919061034a565b60405180910390fd5b61006b8161025d565b50856001600160a01b03163b5f03610098578560405163bf29a5e560e01b8152600401610059919061034a565b846001600160a01b03163b5f036100c45784604051637d0da82360e01b8152600401610059919061034a565b8015806100d2575061177081115b156100f35760405163b9ca264560e01b815260048101829052602401610059565b8215806100ff57508183115b156101275760405163b037129360e01b81526004810184905260248101839052604401610059565b8284108061013457508184115b15610155576040516340fe4bf560e11b815260048101859052602401610059565b61016a602069d3c21bcecceda100000061035e565b610175905f19610387565b82111561019f5760405163b037129360e01b81526004810184905260248101839052604401610059565b604051633698617160e11b81526001600160a01b03878116600483015260016024830152861690636d30c2e290604401602060405180830381865afa1580156101ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020e91906103a6565b5f0361022f5784604051637d0da82360e01b8152600401610059919061034a565b6001600160a01b039586166080529390941660a05260c05260e09290925260029190915561010052506103bd565b600180546001600160a01b031916905561027681610279565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146102de575f80fd5b919050565b5f805f805f805f60e0888a0312156102f9575f80fd5b610302886102c8565b9650610310602089016102c8565b955061031e604089016102c8565b606089015160808a015160a08b015160c0909b0151999c989b5091999098919790965090945092505050565b6001600160a01b0391909116815260200190565b808202811582820484141761038157634e487b7160e01b5f52601160045260245ffd5b92915050565b5f826103a157634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156103b6575f80fd5b5051919050565b60805160a05160c05160e05161010051610db96104325f395f81816101a6015281816104f1015261053001525f81816103300152610a8e01525f81816102c80152610a6501525f81816101cd015261070f01525f81816102160152818161036a0152818161043b01526106de0152610db95ff3fe608060405234801561000f575f80fd5b5060043610610152575f3560e01c806304eaa11314610156578063106cd4241461017c5780631bfaae1d1461018f578063249d39e914610198578063276b7377146101a15780634cf088d9146101c857806354393b34146101fc578063570dcb2f146102115780635aca870d1461023857806360ee764314610240578063623ef2aa14610253578063660e35921461025c578063696ef3051461026d578063715018a61461027557806379ba50971461027d5780637a720b5f1461028557806381c6c9761461028e57806384f0a74a146102975780638da5cb5b1461029f578063970f2888146102a7578063b65d1ea8146102ba578063bc537912146102c3578063bd0c28c3146102ea578063dec616fb146102f4578063e30c3978146102fd578063e637bb8b14610305578063f2fde38b14610318578063fdcf9e1f1461032b575b5f80fd5b610169610164366004610bbb565b610352565b6040519081526020015b60405180910390f35b61016961018a366004610bd2565b6104de565b61016961177081565b61016961271081565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101739190610c41565b61020f61020a366004610bbb565b610579565b005b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b61020f6105e9565b61016961024e366004610bbb565b610698565b61016960045481565b61016969d3c21bcecceda100000081565b610169602081565b61020f6107cc565b61020f6107df565b61016960025481565b61016960055481565b61020f61081e565b6101ef610883565b6101696102b5366004610bd2565b610891565b6101696107d081565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101696202a30081565b61016960035481565b6101ef6108a9565b610169610313366004610bd2565b6108b8565b61020f610326366004610c69565b6109cb565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa9250505080156103d5575060408051601f3d908101601f191682019092526103d291810190610c84565b60015b6103fa5760405163124bad6360e31b8152600481018390526024015b60405180910390fd5b6001600160a01b0381166104245760405163124bad6360e31b8152600481018490526024016103f1565b506040516302e2c6f960e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906305c58df290602401602060405180830381865afa9250505080156104a6575060408051601f3d908101601f191682019092526104a391810190610c9f565b60015b6104c657604051635c3a82cf60e11b8152600481018390526024016103f1565b6104d28160ff16610698565b9392505050565b919050565b5f806104ea8484610891565b90506127107f000000000000000000000000000000000000000000000000000000000000000061051a8284610cd3565b6105249190610cfa565b61052e9190610d11565b7f000000000000000000000000000000000000000000000000000000000000000061055b61271084610d11565b6105659190610cfa565b61056f9190610d24565b9150505b92915050565b610581610a31565b61058a81610a63565b600381905561059c6202a30042610d24565b600481905560025460408051918252602082018490528101919091527f23425d5d10aa216657346914b0a3ab4bfb01b111b6a15fb044a0d8f9c3b73107906060015b60405180910390a150565b6105f1610a31565b6003545f81900361061557604051630d925ae760e21b815260040160405180910390fd5b60045442101561063c576004805460405163ee68b01760e01b8152918201526024016103f1565b61064581610a63565b600280545f600381905560045590829055426005556040517ffaeaabf7d533ed4e9b1bc7b65e847c6b84ee674b7f7acce6de5b46de63ea71bf9061068c9083908590610d37565b60405180910390a15050565b5f8115806106a6575060ff82115b156106c75760405163716593c960e01b8152600481018390526024016103f1565b604051633698617160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260ff841660248301527f00000000000000000000000000000000000000000000000000000000000000001690636d30c2e290604401602060405180830381865afa158015610754573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107789190610d45565b9050805f0361079d5760405163716593c960e01b8152600481018390526024016103f1565b69d3c21bcecceda10000008111156104d95781816040516304d6f4e560e21b81526004016103f1929190610d37565b6107d4610a31565b6107dd5f610b58565b565b33806107e96108a9565b6001600160a01b031614610812578060405163118cdaa760e01b81526004016103f19190610c41565b61081b81610b58565b50565b610826610a31565b6003545f81900361084a57604051630d925ae760e21b815260040160405180910390fd5b5f60038190556004556040518181527fb3504e3db0d46f4929f0e020e3e206a2f034bd6219c0bf767d19a518ee5f6c44906020016105de565b5f546001600160a01b031690565b5f60025461089f84846108b8565b6104d29190610cfa565b6001546001600160a01b031690565b5f8160208111156108df57604051630677bac560e31b8152600481018290526024016103f1565b5f5b818110156109c357801580159061093257508484610900600184610d5c565b81811061090f5761090f610d6f565b9050602002013585858381811061092857610928610d6f565b9050602002013511155b1561098e578484610944600184610d5c565b81811061095357610953610d6f565b9050602002013585858381811061096c5761096c610d6f565b90506020020135604051630a6f6bbf60e11b81526004016103f1929190610d37565b6109af8585838181106109a3576109a3610d6f565b90506020020135610352565b6109b99084610d24565b92506001016108e1565b505092915050565b6109d3610a31565b600180546001600160a01b0319166001600160a01b0383169081179091556109f9610883565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b33610a3a610883565b6001600160a01b0316146107dd573360405163118cdaa760e01b81526004016103f19190610c41565b7f0000000000000000000000000000000000000000000000000000000000000000811080610ab057507f000000000000000000000000000000000000000000000000000000000000000081115b15610ad1576040516340fe4bf560e11b8152600481018290526024016103f1565b600254808203610af45760405163011986d960e71b815260040160405180910390fd5b5f818311610b0b57610b068383610d5c565b610b15565b610b158284610d5c565b9050610b256107d0612710610d11565b610b2f9083610d11565b811115610b5357818360405163089e191b60e01b81526004016103f1929190610d37565b505050565b600180546001600160a01b031916905561081b815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610bcb575f80fd5b5035919050565b5f8060208385031215610be3575f80fd5b82356001600160401b03811115610bf8575f80fd5b8301601f81018513610c08575f80fd5b80356001600160401b03811115610c1d575f80fd5b8560208260051b8401011115610c31575f80fd5b6020919091019590945092505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461081b575f80fd5b5f60208284031215610c79575f80fd5b81356104d281610c55565b5f60208284031215610c94575f80fd5b81516104d281610c55565b5f60208284031215610caf575f80fd5b815160ff811681146104d2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f82610ce157610ce1610cbf565b500690565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761057357610573610ce6565b5f82610d1f57610d1f610cbf565b500490565b8082018082111561057357610573610ce6565b918252602082015260400190565b5f60208284031215610d55575f80fd5b5051919050565b8181038181111561057357610573610ce6565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220fb13dd3e76b481c5c9e69c913b06a8bcab8e84373953f8ab5f8ba03d4b6b8eec64736f6c634300081a0033","sourceMap":"8726:8768:0:-:0;;;11309:1400;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11552:12;-1:-1:-1;;;;;3755:26:0;;3751:95;;3832:1;3804:31;;-1:-1:-1;;;3804:31:0;;;;;;;;:::i;:::-;;;;;;;;3751:95;3855:32;3874:12;3855:18;:32::i;:::-;3707:187;11580:10:::1;-1:-1:-1::0;;;;;11580:22:0::1;;11606:1;11580:27:::0;11576:69:::1;;11634:10;11616:29;;-1:-1:-1::0;;;11616:29:0::1;;;;;;;;:::i;11576:69::-;11659:8;-1:-1:-1::0;;;;;11659:20:0::1;;11683:1;11659:25:::0;11655:62:::1;;11708:8;11693:24;;-1:-1:-1::0;;;11693:24:0::1;;;;;;;;:::i;11655:62::-;11731:18:::0;;;:49:::1;;;8862:5;11753:13;:27;11731:49;11727:90;;;11789:28;::::0;-1:-1:-1;;;11789:28:0;;::::1;::::0;::::1;1383:25:1::0;;;1356:18;;11789:28:0::1;1237:177:1::0;11727:90:0::1;11831:17:::0;;;:48:::1;;;11867:12;11852;:27;11831:48;11827:130;;;11902:44;::::0;-1:-1:-1;;;11902:44:0;;::::1;::::0;::::1;1593:25:1::0;;;1634:18;;;1627:34;;;1566:18;;11902:44:0::1;1419:248:1::0;11827:130:0::1;11985:12;11970;:27;:58;;;;12016:12;12001;:27;11970:58;11966:126;;;12051:30;::::0;-1:-1:-1;;;12051:30:0;;::::1;::::0;::::1;1383:25:1::0;;;1356:18;;12051:30:0::1;1237:177:1::0;11966:126:0::1;12141:25;9024:2;9153:4;12141:25;:::i;:::-;12120:47;::::0;-1:-1:-1;;12120:47:0::1;:::i;:::-;12105:12;:62;12101:144;;;12190:44;::::0;-1:-1:-1;;;12190:44:0;;::::1;::::0;::::1;1593:25:1::0;;;1634:18;;;1627:34;;;1566:18;;12190:44:0::1;1419:248:1::0;12101:144:0::1;12350:55;::::0;-1:-1:-1;;;12350:55:0;;-1:-1:-1;;;;;2362:32:1;;;12350:55:0::1;::::0;::::1;2344:51:1::0;12403:1:0::1;2411:18:1::0;;;2404:45;12350:40:0;::::1;::::0;::::1;::::0;2317:18:1;;12350:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12409:1;12350:60:::0;12346:97:::1;;12434:8;12419:24;;-1:-1:-1::0;;;12419:24:0::1;;;;;;;;:::i;12346:97::-;-1:-1:-1::0;;;;;12454:46:0;;::::1;;::::0;12510:40;;;::::1;;::::0;12560:31:::1;::::0;12601::::1;::::0;;;;12642:13:::1;:28:::0;;;;12680:22:::1;::::0;-1:-1:-1;8726:8768:0;;7075:153;7164:13;7157:20;;-1:-1:-1;;;;;;7157:20:0;;;7187:34;7212:8;7187:24;:34::i;:::-;7075:153;:::o;5394:187::-;5467:16;5486:6;;-1:-1:-1;;;;;5502:17:0;;;-1:-1:-1;;;;;;5502:17:0;;;;;;5534:40;;5486:6;;;;;;;5534:40;;5467:16;5534:40;5457:124;5394:187;:::o;14:177:1:-;93:13;;-1:-1:-1;;;;;135:31:1;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:828::-;320:6;328;336;344;352;360;368;421:3;409:9;400:7;396:23;392:33;389:53;;;438:1;435;428:12;389:53;461:40;491:9;461:40;:::i;:::-;451:50;;520:49;565:2;554:9;550:18;520:49;:::i;:::-;510:59;;588:49;633:2;622:9;618:18;588:49;:::i;:::-;699:2;684:18;;678:25;793:3;778:19;;772:26;890:3;875:19;;869:26;987:3;972:19;;;966:26;196:828;;;;-1:-1:-1;578:59:1;;678:25;;772:26;;869;;-1:-1:-1;966:26:1;;-1:-1:-1;196:828:1;-1:-1:-1;;;196:828:1:o;1029:203::-;-1:-1:-1;;;;;1193:32:1;;;;1175:51;;1163:2;1148:18;;1029:203::o;1672:265::-;1745:9;;;1776;;1793:15;;;1787:22;;1773:37;1763:168;;1853:10;1848:3;1844:20;1841:1;1834:31;1888:4;1885:1;1878:15;1916:4;1913:1;1906:15;1763:168;1672:265;;;;:::o;1942:217::-;1982:1;2008;1998:132;;2052:10;2047:3;2043:20;2040:1;2033:31;2087:4;2084:1;2077:15;2115:4;2112:1;2105:15;1998:132;-1:-1:-1;2144:9:1;;1942:217::o;2460:230::-;2530:6;2583:2;2571:9;2562:7;2558:23;2554:32;2551:52;;;2599:1;2596;2589:12;2551:52;-1:-1:-1;2644:16:1;;2460:230;-1:-1:-1;2460:230:1:o;:::-;8726:8768:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa2646970667358221220fb13dd3e76b481c5c9e69c913b06a8bcab8e84373953f8ab5f8ba03d4b6b8eec64736f6c634300081a0033","offset":4534}},"transformations":[{"type":"insert","offset":4587,"reason":"constructorArguments"}],"transformationValues":{"constructorArguments":"0x000000000000000000000000bc8744370bcb6d5abf5de8b4086ecfbb4c5629c3000000000000000000000000cb98349c134ab983da5bfd80527dfe2552bdb70f0000000000000000000000004b67b739dfd832f4eac67a7aa3bc244fb74cea4f0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000001770"}},"runtimeBytecode":{"onchainBytecode":"0x608060405234801561000f575f80fd5b5060043610610152575f3560e01c806304eaa11314610156578063106cd4241461017c5780631bfaae1d1461018f578063249d39e914610198578063276b7377146101a15780634cf088d9146101c857806354393b34146101fc578063570dcb2f146102115780635aca870d1461023857806360ee764314610240578063623ef2aa14610253578063660e35921461025c578063696ef3051461026d578063715018a61461027557806379ba50971461027d5780637a720b5f1461028557806381c6c9761461028e57806384f0a74a146102975780638da5cb5b1461029f578063970f2888146102a7578063b65d1ea8146102ba578063bc537912146102c3578063bd0c28c3146102ea578063dec616fb146102f4578063e30c3978146102fd578063e637bb8b14610305578063f2fde38b14610318578063fdcf9e1f1461032b575b5f80fd5b610169610164366004610bbb565b610352565b6040519081526020015b60405180910390f35b61016961018a366004610bd2565b6104de565b61016961177081565b61016961271081565b6101697f000000000000000000000000000000000000000000000000000000000000177081565b6101ef7f0000000000000000000000004b67b739dfd832f4eac67a7aa3bc244fb74cea4f81565b6040516101739190610c41565b61020f61020a366004610bbb565b610579565b005b6101ef7f000000000000000000000000cb98349c134ab983da5bfd80527dfe2552bdb70f81565b61020f6105e9565b61016961024e366004610bbb565b610698565b61016960045481565b61016969d3c21bcecceda100000081565b610169602081565b61020f6107cc565b61020f6107df565b61016960025481565b61016960055481565b61020f61081e565b6101ef610883565b6101696102b5366004610bd2565b610891565b6101696107d081565b6101697f00000000000000000000000000000000000000000000000006f05b59d3b2000081565b6101696202a30081565b61016960035481565b6101ef6108a9565b610169610313366004610bd2565b6108b8565b61020f610326366004610c69565b6109cb565b6101697f0000000000000000000000000000000000000000000000001bc16d674ec8000081565b6040516331a9108f60e11b8152600481018290525f907f000000000000000000000000cb98349c134ab983da5bfd80527dfe2552bdb70f6001600160a01b031690636352211e90602401602060405180830381865afa9250505080156103d5575060408051601f3d908101601f191682019092526103d291810190610c84565b60015b6103fa5760405163124bad6360e31b8152600481018390526024015b60405180910390fd5b6001600160a01b0381166104245760405163124bad6360e31b8152600481018490526024016103f1565b506040516302e2c6f960e11b8152600481018390527f000000000000000000000000cb98349c134ab983da5bfd80527dfe2552bdb70f6001600160a01b0316906305c58df290602401602060405180830381865afa9250505080156104a6575060408051601f3d908101601f191682019092526104a391810190610c9f565b60015b6104c657604051635c3a82cf60e11b8152600481018390526024016103f1565b6104d28160ff16610698565b9392505050565b919050565b5f806104ea8484610891565b90506127107f000000000000000000000000000000000000000000000000000000000000177061051a8284610cd3565b6105249190610cfa565b61052e9190610d11565b7f000000000000000000000000000000000000000000000000000000000000177061055b61271084610d11565b6105659190610cfa565b61056f9190610d24565b9150505b92915050565b610581610a31565b61058a81610a63565b600381905561059c6202a30042610d24565b600481905560025460408051918252602082018490528101919091527f23425d5d10aa216657346914b0a3ab4bfb01b111b6a15fb044a0d8f9c3b73107906060015b60405180910390a150565b6105f1610a31565b6003545f81900361061557604051630d925ae760e21b815260040160405180910390fd5b60045442101561063c576004805460405163ee68b01760e01b8152918201526024016103f1565b61064581610a63565b600280545f600381905560045590829055426005556040517ffaeaabf7d533ed4e9b1bc7b65e847c6b84ee674b7f7acce6de5b46de63ea71bf9061068c9083908590610d37565b60405180910390a15050565b5f8115806106a6575060ff82115b156106c75760405163716593c960e01b8152600481018390526024016103f1565b604051633698617160e11b81526001600160a01b037f000000000000000000000000cb98349c134ab983da5bfd80527dfe2552bdb70f8116600483015260ff841660248301527f0000000000000000000000004b67b739dfd832f4eac67a7aa3bc244fb74cea4f1690636d30c2e290604401602060405180830381865afa158015610754573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107789190610d45565b9050805f0361079d5760405163716593c960e01b8152600481018390526024016103f1565b69d3c21bcecceda10000008111156104d95781816040516304d6f4e560e21b81526004016103f1929190610d37565b6107d4610a31565b6107dd5f610b58565b565b33806107e96108a9565b6001600160a01b031614610812578060405163118cdaa760e01b81526004016103f19190610c41565b61081b81610b58565b50565b610826610a31565b6003545f81900361084a57604051630d925ae760e21b815260040160405180910390fd5b5f60038190556004556040518181527fb3504e3db0d46f4929f0e020e3e206a2f034bd6219c0bf767d19a518ee5f6c44906020016105de565b5f546001600160a01b031690565b5f60025461089f84846108b8565b6104d29190610cfa565b6001546001600160a01b031690565b5f8160208111156108df57604051630677bac560e31b8152600481018290526024016103f1565b5f5b818110156109c357801580159061093257508484610900600184610d5c565b81811061090f5761090f610d6f565b9050602002013585858381811061092857610928610d6f565b9050602002013511155b1561098e578484610944600184610d5c565b81811061095357610953610d6f565b9050602002013585858381811061096c5761096c610d6f565b90506020020135604051630a6f6bbf60e11b81526004016103f1929190610d37565b6109af8585838181106109a3576109a3610d6f565b90506020020135610352565b6109b99084610d24565b92506001016108e1565b505092915050565b6109d3610a31565b600180546001600160a01b0319166001600160a01b0383169081179091556109f9610883565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b33610a3a610883565b6001600160a01b0316146107dd573360405163118cdaa760e01b81526004016103f19190610c41565b7f00000000000000000000000000000000000000000000000006f05b59d3b20000811080610ab057507f0000000000000000000000000000000000000000000000001bc16d674ec8000081115b15610ad1576040516340fe4bf560e11b8152600481018290526024016103f1565b600254808203610af45760405163011986d960e71b815260040160405180910390fd5b5f818311610b0b57610b068383610d5c565b610b15565b610b158284610d5c565b9050610b256107d0612710610d11565b610b2f9083610d11565b811115610b5357818360405163089e191b60e01b81526004016103f1929190610d37565b505050565b600180546001600160a01b031916905561081b815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610bcb575f80fd5b5035919050565b5f8060208385031215610be3575f80fd5b82356001600160401b03811115610bf8575f80fd5b8301601f81018513610c08575f80fd5b80356001600160401b03811115610c1d575f80fd5b8560208260051b8401011115610c31575f80fd5b6020919091019590945092505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461081b575f80fd5b5f60208284031215610c79575f80fd5b81356104d281610c55565b5f60208284031215610c94575f80fd5b81516104d281610c55565b5f60208284031215610caf575f80fd5b815160ff811681146104d2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f82610ce157610ce1610cbf565b500690565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761057357610573610ce6565b5f82610d1f57610d1f610cbf565b500490565b8082018082111561057357610573610ce6565b918252602082015260400190565b5f60208284031215610d55575f80fd5b5051919050565b8181038181111561057357610573610ce6565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220fb13dd3e76b481c5c9e69c913b06a8bcab8e84373953f8ab5f8ba03d4b6b8eec64736f6c634300081a0033","recompiledBytecode":"0x608060405234801561000f575f80fd5b5060043610610152575f3560e01c806304eaa11314610156578063106cd4241461017c5780631bfaae1d1461018f578063249d39e914610198578063276b7377146101a15780634cf088d9146101c857806354393b34146101fc578063570dcb2f146102115780635aca870d1461023857806360ee764314610240578063623ef2aa14610253578063660e35921461025c578063696ef3051461026d578063715018a61461027557806379ba50971461027d5780637a720b5f1461028557806381c6c9761461028e57806384f0a74a146102975780638da5cb5b1461029f578063970f2888146102a7578063b65d1ea8146102ba578063bc537912146102c3578063bd0c28c3146102ea578063dec616fb146102f4578063e30c3978146102fd578063e637bb8b14610305578063f2fde38b14610318578063fdcf9e1f1461032b575b5f80fd5b610169610164366004610bbb565b610352565b6040519081526020015b60405180910390f35b61016961018a366004610bd2565b6104de565b61016961177081565b61016961271081565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101739190610c41565b61020f61020a366004610bbb565b610579565b005b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b61020f6105e9565b61016961024e366004610bbb565b610698565b61016960045481565b61016969d3c21bcecceda100000081565b610169602081565b61020f6107cc565b61020f6107df565b61016960025481565b61016960055481565b61020f61081e565b6101ef610883565b6101696102b5366004610bd2565b610891565b6101696107d081565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101696202a30081565b61016960035481565b6101ef6108a9565b610169610313366004610bd2565b6108b8565b61020f610326366004610c69565b6109cb565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa9250505080156103d5575060408051601f3d908101601f191682019092526103d291810190610c84565b60015b6103fa5760405163124bad6360e31b8152600481018390526024015b60405180910390fd5b6001600160a01b0381166104245760405163124bad6360e31b8152600481018490526024016103f1565b506040516302e2c6f960e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906305c58df290602401602060405180830381865afa9250505080156104a6575060408051601f3d908101601f191682019092526104a391810190610c9f565b60015b6104c657604051635c3a82cf60e11b8152600481018390526024016103f1565b6104d28160ff16610698565b9392505050565b919050565b5f806104ea8484610891565b90506127107f000000000000000000000000000000000000000000000000000000000000000061051a8284610cd3565b6105249190610cfa565b61052e9190610d11565b7f000000000000000000000000000000000000000000000000000000000000000061055b61271084610d11565b6105659190610cfa565b61056f9190610d24565b9150505b92915050565b610581610a31565b61058a81610a63565b600381905561059c6202a30042610d24565b600481905560025460408051918252602082018490528101919091527f23425d5d10aa216657346914b0a3ab4bfb01b111b6a15fb044a0d8f9c3b73107906060015b60405180910390a150565b6105f1610a31565b6003545f81900361061557604051630d925ae760e21b815260040160405180910390fd5b60045442101561063c576004805460405163ee68b01760e01b8152918201526024016103f1565b61064581610a63565b600280545f600381905560045590829055426005556040517ffaeaabf7d533ed4e9b1bc7b65e847c6b84ee674b7f7acce6de5b46de63ea71bf9061068c9083908590610d37565b60405180910390a15050565b5f8115806106a6575060ff82115b156106c75760405163716593c960e01b8152600481018390526024016103f1565b604051633698617160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260ff841660248301527f00000000000000000000000000000000000000000000000000000000000000001690636d30c2e290604401602060405180830381865afa158015610754573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107789190610d45565b9050805f0361079d5760405163716593c960e01b8152600481018390526024016103f1565b69d3c21bcecceda10000008111156104d95781816040516304d6f4e560e21b81526004016103f1929190610d37565b6107d4610a31565b6107dd5f610b58565b565b33806107e96108a9565b6001600160a01b031614610812578060405163118cdaa760e01b81526004016103f19190610c41565b61081b81610b58565b50565b610826610a31565b6003545f81900361084a57604051630d925ae760e21b815260040160405180910390fd5b5f60038190556004556040518181527fb3504e3db0d46f4929f0e020e3e206a2f034bd6219c0bf767d19a518ee5f6c44906020016105de565b5f546001600160a01b031690565b5f60025461089f84846108b8565b6104d29190610cfa565b6001546001600160a01b031690565b5f8160208111156108df57604051630677bac560e31b8152600481018290526024016103f1565b5f5b818110156109c357801580159061093257508484610900600184610d5c565b81811061090f5761090f610d6f565b9050602002013585858381811061092857610928610d6f565b9050602002013511155b1561098e578484610944600184610d5c565b81811061095357610953610d6f565b9050602002013585858381811061096c5761096c610d6f565b90506020020135604051630a6f6bbf60e11b81526004016103f1929190610d37565b6109af8585838181106109a3576109a3610d6f565b90506020020135610352565b6109b99084610d24565b92506001016108e1565b505092915050565b6109d3610a31565b600180546001600160a01b0319166001600160a01b0383169081179091556109f9610883565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b33610a3a610883565b6001600160a01b0316146107dd573360405163118cdaa760e01b81526004016103f19190610c41565b7f0000000000000000000000000000000000000000000000000000000000000000811080610ab057507f000000000000000000000000000000000000000000000000000000000000000081115b15610ad1576040516340fe4bf560e11b8152600481018290526024016103f1565b600254808203610af45760405163011986d960e71b815260040160405180910390fd5b5f818311610b0b57610b068383610d5c565b610b15565b610b158284610d5c565b9050610b256107d0612710610d11565b610b2f9083610d11565b811115610b5357818360405163089e191b60e01b81526004016103f1929190610d37565b505050565b600180546001600160a01b031916905561081b815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610bcb575f80fd5b5035919050565b5f8060208385031215610be3575f80fd5b82356001600160401b03811115610bf8575f80fd5b8301601f81018513610c08575f80fd5b80356001600160401b03811115610c1d575f80fd5b8560208260051b8401011115610c31575f80fd5b6020919091019590945092505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461081b575f80fd5b5f60208284031215610c79575f80fd5b81356104d281610c55565b5f60208284031215610c94575f80fd5b81516104d281610c55565b5f60208284031215610caf575f80fd5b815160ff811681146104d2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f82610ce157610ce1610cbf565b500690565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761057357610573610ce6565b5f82610d1f57610d1f610cbf565b500490565b8082018082111561057357610573610ce6565b918252602082015260400190565b5f60208284031215610d55575f80fd5b5051919050565b8181038181111561057357610573610ce6565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220fb13dd3e76b481c5c9e69c913b06a8bcab8e84373953f8ab5f8ba03d4b6b8eec64736f6c634300081a0033","sourceMap":"8726:8768:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14258:618;;;;;;:::i;:::-;;:::i;:::-;;;345:25:1;;;333:2;318:18;14258:618:0;;;;;;;;12874:368;;;;;;:::i;:::-;;:::i;8824:43::-;;8862:5;8824:43;;8782:36;;8812:6;8782:36;;9364:31;;;;;9219:45;;;;;;;;;;;;:::i;15525:291::-;;;;;;:::i;:::-;;:::i;:::-;;9164:49;;;;;15905:543;;;:::i;15055:377::-;;;;;;:::i;:::-;;:::i;9477:33::-;;;;;;9117:40;;9153:4;9117:40;;8984:42;;9024:2;8984:42;;4775:101;;;:::i;7308:229::-;;;:::i;9402:28::-;;;;;;9763:30;;;;;;16540:283;;;:::i;4120:85::-;;;:::i;13327:144::-;;;;;;:::i;:::-;;:::i;8873:52::-;;8920:5;8873:52;;9270:41;;;;;8931:47;;8972:6;8931:47;;9436:35;;;;;;6421:99;;;:::i;13720:451::-;;;;;;:::i;:::-;;:::i;6713:178::-;;;;;;:::i;:::-;;:::i;9317:41::-;;;;;14258:618;14490:26;;-1:-1:-1;;;14490:26:0;;;;;345:25:1;;;14313:7:0;;14490:9;-1:-1:-1;;;;;14490:17:0;;;;318:18:1;;14490:26:0;;;;;;;;;;;;;;;;;;-1:-1:-1;14490:26:0;;;;;;;;-1:-1:-1;;14490:26:0;;;;;;;;;;;;:::i;:::-;;;14486:203;;14657:21;;-1:-1:-1;;;14657:21:0;;;;;345:25:1;;;318:18;;14657:21:0;;;;;;;;14486:203;-1:-1:-1;;;;;14564:24:0;;14560:58;;14597:21;;-1:-1:-1;;;14597:21:0;;;;;345:25:1;;;318:18;;14597:21:0;199:177:1;14560:58:0;-1:-1:-1;14702:24:0;;-1:-1:-1;;;14702:24:0;;;;;345:25:1;;;14702:9:0;-1:-1:-1;;;;;14702:15:0;;;;318:18:1;;14702:24:0;;;;;;;;;;;;;;;;;;-1:-1:-1;14702:24:0;;;;;;;;-1:-1:-1;;14702:24:0;;;;;;;;;;;;:::i;:::-;;;14698:172;;14835:24;;-1:-1:-1;;;14835:24:0;;;;;345:25:1;;;318:18;;14835:24:0;199:177:1;14698:172:0;14773:23;14787:8;14773:23;;:13;:23::i;:::-;14766:30;14258:618;-1:-1:-1;;;14258:618:0:o;14698:172::-;14258:618;;;:::o;12874:368::-;12946:7;12965:13;12981:25;12997:8;;12981:15;:25::i;:::-;12965:41;-1:-1:-1;8812:6:0;13223;13208:11;8812:6;12965:41;13208:11;:::i;:::-;13207:22;;;;:::i;:::-;:28;;;;:::i;:::-;13198:6;13183:11;8812:6;13183:5;:11;:::i;:::-;13182:22;;;;:::i;:::-;:53;;;;:::i;:::-;13175:60;;;12874:368;;;;;:::o;15525:291::-;4013:13;:11;:13::i;:::-;15602:30:::1;15623:8;15602:20;:30::i;:::-;15642:20;:31:::0;;;15704:32:::1;8972:6;15704:15;:32;:::i;:::-;15683:18;:53:::0;;;15765:13:::1;::::0;15751:58:::1;::::0;;3611:25:1;;;3667:2;3652:18;;3645:34;;;3695:18;;3688:34;;;;15751:58:0::1;::::0;3599:2:1;3584:18;15751:58:0::1;;;;;;;;15525:291:::0;:::o;15905:543::-;4013:13;:11;:13::i;:::-;15985:20:::1;::::0;15966:16:::1;16019:13:::0;;;16015:48:::1;;16041:22;;-1:-1:-1::0;;;16041:22:0::1;;;;;;;;;;;16015:48;16095:18;;16077:15;:36;16073:88;;;16142:18;::::0;;16122:39:::1;::::0;-1:-1:-1;;;16122:39:0;;;;::::1;345:25:1::0;318:18;;16122:39:0::1;199:177:1::0;16073:88:0::1;16171:30;16192:8;16171:20;:30::i;:::-;16231:13;::::0;;16212:16:::1;16261:20;16254:27:::0;;;16298:18:::1;16291:25:::0;16326:24;;;;16378:15:::1;16360;:33:::0;16408::::1;::::0;::::1;::::0;::::1;::::0;16231:13;;16342:8;;16408:33:::1;:::i;:::-;;;;;;;;15956:492;;15905:543::o:0;15055:377::-;15117:13;15146;;;:43;;-1:-1:-1;15174:15:0;15163:26;;15146:43;15142:82;;;15198:26;;-1:-1:-1;;;15198:26:0;;;;;345:25:1;;;318:18;;15198:26:0;199:177:1;15142:82:0;15242:54;;-1:-1:-1;;;15242:54:0;;-1:-1:-1;;;;;15268:9:0;4174:32:1;;15242:54:0;;;4156:51:1;4255:4;4243:17;;4223:18;;;4216:45;15242:7:0;:17;;;;4129:18:1;;15242:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15234:62;;15310:5;15319:1;15310:10;15306:49;;15329:26;;-1:-1:-1;;;15329:26:0;;;;;345:25:1;;;318:18;;15329:26:0;199:177:1;15306:49:0;9153:4;15369:5;:17;15365:60;;;15409:8;15419:5;15395:30;;-1:-1:-1;;;15395:30:0;;;;;;;;;:::i;4775:101::-;4013:13;:11;:13::i;:::-;4839:30:::1;4866:1;4839:18;:30::i;:::-;4775:101::o:0;7308:229::-;2322:10;;7403:14;:12;:14::i;:::-;-1:-1:-1;;;;;7403:24:0;;7399:96;;7477:6;7450:34;;-1:-1:-1;;;7450:34:0;;;;;;;;:::i;7399:96::-;7504:26;7523:6;7504:18;:26::i;:::-;7350:187;7308:229::o;16540:283::-;4013:13;:11;:13::i;:::-;16619:20:::1;::::0;16600:16:::1;16653:13:::0;;;16649:48:::1;;16675:22;;-1:-1:-1::0;;;16675:22:0::1;;;;;;;;;;;16649:48;16707:27;16714:20;16707:27:::0;;;16751:18:::1;16744:25:::0;16784:32:::1;::::0;345:25:1;;;16784:32:0::1;::::0;333:2:1;318:18;16784:32:0::1;199:177:1::0;4120:85:0;4166:7;4192:6;-1:-1:-1;;;;;4192:6:0;;4120:85::o;13327:144::-;13402:7;13451:13;;13428:20;13439:8;;13428:10;:20::i;:::-;:36;;;;:::i;6421:99::-;6500:13;;-1:-1:-1;;;;;6500:13:0;;6421:99::o;13720:451::-;13790:13;13831:8;9024:2;13860:21;;13856:56;;;13890:22;;-1:-1:-1;;;13890:22:0;;;;;345:25:1;;;318:18;;13890:22:0;199:177:1;13856:56:0;13927:9;13922:243;13942:5;13938:1;:9;13922:243;;;13972:6;;;;;:40;;-1:-1:-1;13997:8:0;;14006:5;14010:1;14006;:5;:::i;:::-;13997:15;;;;;;;:::i;:::-;;;;;;;13982:8;;13991:1;13982:11;;;;;;;:::i;:::-;;;;;;;:30;;13972:40;13968:144;;;14068:8;;14077:5;14081:1;14077;:5;:::i;:::-;14068:15;;;;;;;:::i;:::-;;;;;;;14085:8;;14094:1;14085:11;;;;;;;:::i;:::-;;;;;;;14039:58;;-1:-1:-1;;;14039:58:0;;;;;;;;;:::i;13968:144::-;14134:20;14142:8;;14151:1;14142:11;;;;;;;:::i;:::-;;;;;;;14134:7;:20::i;:::-;14125:29;;;;:::i;:::-;;-1:-1:-1;13949:3:0;;13922:243;;;;13805:366;13720:451;;;;:::o;6713:178::-;4013:13;:11;:13::i;:::-;6802::::1;:24:::0;;-1:-1:-1;;;;;;6802:24:0::1;-1:-1:-1::0;;;;;6802:24:0;::::1;::::0;;::::1;::::0;;;6866:7:::1;:5;:7::i;:::-;-1:-1:-1::0;;;;;6841:43:0::1;;;;;;;;;;;6713:178:::0;:::o;4278:162::-;2322:10;4337:7;:5;:7::i;:::-;-1:-1:-1;;;;;4337:23:0;;4333:101;;2322:10;4383:40;;-1:-1:-1;;;4383:40:0;;;;;;;;:::i;16829:663::-;16915:16;16904:8;:27;:58;;;;16946:16;16935:8;:27;16904:58;16900:97;;;16971:26;;-1:-1:-1;;;16971:26:0;;;;;345:25:1;;;318:18;;16971:26:0;199:177:1;16900:97:0;17025:13;;17052:19;;;17048:48;;17080:16;;-1:-1:-1;;;17080:16:0;;;;;;;;;;;17048:48;17106:18;17138:7;17127:8;:18;:60;;17169:18;17179:8;17169:7;:18;:::i;:::-;17127:60;;;17148:18;17159:7;17148:8;:18;:::i;:::-;17106:81;-1:-1:-1;17387:26:0;8920:5;8812:6;17387:26;:::i;:::-;17376:38;;:7;:38;:::i;:::-;17363:10;:51;17359:127;;;17457:7;17466:8;17437:38;;-1:-1:-1;;;17437:38:0;;;;;;;;;:::i;17359:127::-;16890:602;;16829:663;:::o;7075:153::-;7164:13;7157:20;;-1:-1:-1;;;;;;7157:20:0;;;7187:34;7212:8;5467:16;5486:6;;-1:-1:-1;;;;;5502:17:0;;;-1:-1:-1;;;;;;5502:17:0;;;;;;5534:40;;5486:6;;;;;;;5534:40;;5467:16;5534:40;5457:124;5394:187;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:610::-;467:6;475;528:2;516:9;507:7;503:23;499:32;496:52;;;544:1;541;534:12;496:52;571:23;;-1:-1:-1;;;;;606:30:1;;603:50;;;649:1;646;639:12;603:50;672:22;;725:4;717:13;;713:27;-1:-1:-1;703:55:1;;754:1;751;744:12;703:55;781:16;;-1:-1:-1;;;;;809:30:1;;806:50;;;852:1;849;842:12;806:50;905:7;900:2;890:6;887:1;883:14;879:2;875:23;871:32;868:45;865:65;;;926:1;923;916:12;865:65;957:2;949:11;;;;;979:6;;-1:-1:-1;381:610:1;-1:-1:-1;;;381:610:1:o;996:231::-;-1:-1:-1;;;;;1188:32:1;;;;1170:51;;1158:2;1143:18;;996:231::o;1678:131::-;-1:-1:-1;;;;;1753:31:1;;1743:42;;1733:70;;1799:1;1796;1789:12;1814:247;1873:6;1926:2;1914:9;1905:7;1901:23;1897:32;1894:52;;;1942:1;1939;1932:12;1894:52;1981:9;1968:23;2000:31;2025:5;2000:31;:::i;2066:251::-;2136:6;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2237:9;2231:16;2256:31;2281:5;2256:31;:::i;2322:273::-;2390:6;2443:2;2431:9;2422:7;2418:23;2414:32;2411:52;;;2459:1;2456;2449:12;2411:52;2491:9;2485:16;2541:4;2534:5;2530:16;2523:5;2520:27;2510:55;;2561:1;2558;2551:12;2600:127;2661:10;2656:3;2652:20;2649:1;2642:31;2692:4;2689:1;2682:15;2716:4;2713:1;2706:15;2732:112;2764:1;2790;2780:35;;2795:18;;:::i;:::-;-1:-1:-1;2829:9:1;;2732:112::o;2849:127::-;2910:10;2905:3;2901:20;2898:1;2891:31;2941:4;2938:1;2931:15;2965:4;2962:1;2955:15;2981:168;3054:9;;;3085;;3102:15;;;3096:22;;3082:37;3072:71;;3123:18;;:::i;3154:120::-;3194:1;3220;3210:35;;3225:18;;:::i;:::-;-1:-1:-1;3259:9:1;;3154:120::o;3279:125::-;3344:9;;;3365:10;;;3362:36;;;3378:18;;:::i;3733:248::-;3907:25;;;3963:2;3948:18;;3941:34;3895:2;3880:18;;3733:248::o;4272:184::-;4342:6;4395:2;4383:9;4374:7;4370:23;4366:32;4363:52;;;4411:1;4408;4401:12;4363:52;-1:-1:-1;4434:16:1;;4272:184;-1:-1:-1;4272:184:1:o;4461:128::-;4528:9;;;4549:11;;;4546:37;;;4563:18;;:::i;4594:127::-;4655:10;4650:3;4646:20;4643:1;4636:31;4686:4;4683:1;4676:15;4710:4;4707:1;4700:15","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa2646970667358221220fb13dd3e76b481c5c9e69c913b06a8bcab8e84373953f8ab5f8ba03d4b6b8eec64736f6c634300081a0033","offset":3460}},"immutableReferences":{"307":[{"start":534,"length":32},{"start":874,"length":32},{"start":1083,"length":32},{"start":1758,"length":32}],"310":[{"start":461,"length":32},{"start":1807,"length":32}],"312":[{"start":712,"length":32},{"start":2661,"length":32}],"314":[{"start":816,"length":32},{"start":2702,"length":32}],"316":[{"start":422,"length":32},{"start":1265,"length":32},{"start":1328,"length":32}]},"transformations":[{"id":"316","type":"replace","offset":422,"reason":"immutable"},{"id":"310","type":"replace","offset":461,"reason":"immutable"},{"id":"307","type":"replace","offset":534,"reason":"immutable"},{"id":"312","type":"replace","offset":712,"reason":"immutable"},{"id":"314","type":"replace","offset":816,"reason":"immutable"},{"id":"307","type":"replace","offset":874,"reason":"immutable"},{"id":"307","type":"replace","offset":1083,"reason":"immutable"},{"id":"316","type":"replace","offset":1265,"reason":"immutable"},{"id":"316","type":"replace","offset":1328,"reason":"immutable"},{"id":"307","type":"replace","offset":1758,"reason":"immutable"},{"id":"310","type":"replace","offset":1807,"reason":"immutable"},{"id":"312","type":"replace","offset":2661,"reason":"immutable"},{"id":"314","type":"replace","offset":2702,"reason":"immutable"}],"transformationValues":{"immutables":{"307":"0x000000000000000000000000cb98349c134ab983da5bfd80527dfe2552bdb70f","310":"0x0000000000000000000000004b67b739dfd832f4eac67a7aa3bc244fb74cea4f","312":"0x00000000000000000000000000000000000000000000000006f05b59d3b20000","314":"0x0000000000000000000000000000000000000000000000001bc16d674ec80000","316":"0x0000000000000000000000000000000000000000000000000000000000001770"}}},"deployment":{"transactionHash":"0xf2b8d05b281f1ea8a8ce091ee798ad6b91693015cf216078b68268a39fb50d6d","blockNumber":"12033610","transactionIndex":"97","deployer":"0xbC8744370bCb6D5AbF5dE8B4086ecfBB4C5629C3"},"sources":{"src/BurrowValuer.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\n/*\n * OpenZeppelin Contracts v5.0.2: Context, Ownable and Ownable2Step are\n * included below to make this single-file submission build offline.\n * Only contract identifiers are prefixed with BurrowValuer; imports and\n * duplicate pragma/license headers are removed. The implementation is unchanged.\n * Source: https://github.com/OpenZeppelin/openzeppelin-contracts/tree/v5.0.2/contracts\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2016-2023 zOS Global Limited and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/BurrowValuerContext.sol)\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 BurrowValuerContext {\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    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n\n// OpenZeppelin Contracts (last updated v5.0.0) (access/BurrowValuerOwnable.sol)\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract BurrowValuerOwnable is BurrowValuerContext {\n    address private _owner;\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    constructor(address initialOwner) {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n\n// OpenZeppelin Contracts (last updated v5.0.0) (access/BurrowValuerOwnable2Step.sol)\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is specified at deployment time in the constructor for `BurrowValuerOwnable`. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (BurrowValuerOwnable).\n */\nabstract contract BurrowValuerOwnable2Step is BurrowValuerOwnable {\n    address private _pendingOwner;\n\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Returns the address of the pending owner.\n     */\n    function pendingOwner() public view virtual returns (address) {\n        return _pendingOwner;\n    }\n\n    /**\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\n        _pendingOwner = newOwner;\n        emit OwnershipTransferStarted(owner(), newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual override {\n        delete _pendingOwner;\n        super._transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev The new owner accepts the ownership transfer.\n     */\n    function acceptOwnership() public virtual {\n        address sender = _msgSender();\n        if (pendingOwner() != sender) {\n            revert OwnableUnauthorizedAccount(sender);\n        }\n        _transferOwnership(sender);\n    }\n}\n\n/// @dev The Squeek NFT's level is one-based; it is not a staking position.\ninterface IBurrowValuerSqueekNFT {\n    function ownerOf(uint256 tokenId) external view returns (address);\n    function level(uint256 tokenId) external view returns (uint8);\n}\n/// @dev Squeekchain staking publishes the mining power of each level. Reading it live keeps\n///      valuation equal to what the chain actually pays for the NFT; no table to drift.\ninterface IBurrowValuerStaking {\n    function basePower(address collection, uint8 level) external view returns (uint256);\n}\n\n/// @title BurrowValuer\n/// @notice Values up to 32 distinct Squeek NFTs in SQK base units.\n/// @dev Unaudited, testnet only. Power is Squeekchain staking's basePower for the\n///      NFT's level (1000, 2200, 4840, ... on Sepolia), and pricePerPower is SQK base\n///      units (18 decimals) per one power. Consequently\n///      creditLine = floor(sum(power) * pricePerPower * ltvBps / 10_000).\n///      The collection, staking source, LTV and price band cannot be changed.\n///      The owner may only govern price within the band and rate limit, through\n///      a two-day delay. This contract never holds or moves collateral.\ncontract BurrowValuer is BurrowValuerOwnable2Step {\n    uint256 public constant BPS = 10_000;\n    uint256 public constant MAX_LTV_BPS = 6_000;\n    uint256 public constant MAX_PRICE_CHANGE_BPS = 2_000;\n    uint256 public constant PRICE_TIMELOCK = 2 days;\n    uint256 public constant MAX_TOKEN_IDS = 32;\n    /// @dev Power per NFT is bounded so 32 NFTs at maxPricePerPower never overflow.\n    uint256 public constant MAX_POWER = 1e24;\n\n    IBurrowValuerSqueekNFT public immutable squeekNFT;\n    IBurrowValuerStaking public immutable staking;\n    uint256 public immutable minPricePerPower;\n    uint256 public immutable maxPricePerPower;\n    uint256 public immutable ltvBps;\n\n    uint256 public pricePerPower;\n    uint256 public pendingPricePerPower;\n    uint256 public priceChangeReadyAt;\n\n    /// @notice Timestamp of the last EXECUTED price change; zero before any change.\n    /// @dev The vault must reject liquidation until lastPriceChange + 1 hours\n    ///      after an execution. A proposal or cancellation does not change this.\n    uint256 public lastPriceChange;\n\n    error InvalidCollection(address collection);\n    error InvalidLtvBps(uint256 supplied);\n    error InvalidPriceBand(uint256 minimum, uint256 maximum);\n    error InvalidStaking(address staking);\n    error PowerTooLarge(uint256 level, uint256 power);\n    error TooManyTokenIds(uint256 supplied);\n    error TokenIdsNotStrictlyAscending(uint256 previous, uint256 current);\n    error InvalidToken(uint256 tokenId);\n    error LevelReadFailed(uint256 tokenId);\n    error UnsupportedLevel(uint256 level);\n    error PriceOutsideBand(uint256 supplied);\n    error PriceUnchanged();\n    error PriceChangeTooLarge(uint256 oldPrice, uint256 newPrice);\n    error NoPendingPriceChange();\n    error PriceChangeNotReady(uint256 readyAt);\n\n    event PriceProposed(uint256 oldPrice, uint256 newPrice, uint256 readyAt);\n    event PriceExecuted(uint256 oldPrice, uint256 newPrice);\n    event PriceProposalCancelled(uint256 proposedPrice);\n\n    /// @param initialOwner Explicit governance address; ownership transfers take two steps.\n    /// @param collection The live Squeek ERC721, supplied by the deployer.\n    /// @param staking_ Squeekchain staking, read for basePower(collection, level).\n    /// @param initialPrice Initial SQK base units per power, within the immutable band.\n    /// @param minimumPrice Nonzero inclusive floor for pricePerPower.\n    /// @param maximumPrice Inclusive ceiling; bounded so 32 NFTs of MAX_POWER fit uint256.\n    /// @param initialLtvBps Fixed loan-to-value ratio, at most 6000 basis points.\n    constructor(\n        address initialOwner,\n        address collection,\n        address staking_,\n        uint256 initialPrice,\n        uint256 minimumPrice,\n        uint256 maximumPrice,\n        uint256 initialLtvBps\n    ) BurrowValuerOwnable(initialOwner) {\n        if (collection.code.length == 0) revert InvalidCollection(collection);\n        if (staking_.code.length == 0) revert InvalidStaking(staking_);\n        if (initialLtvBps == 0 || initialLtvBps > MAX_LTV_BPS) revert InvalidLtvBps(initialLtvBps);\n        if (minimumPrice == 0 || minimumPrice > maximumPrice) {\n            revert InvalidPriceBand(minimumPrice, maximumPrice);\n        }\n        if (initialPrice < minimumPrice || initialPrice > maximumPrice) {\n            revert PriceOutsideBand(initialPrice);\n        }\n        if (maximumPrice > type(uint256).max / (MAX_POWER * MAX_TOKEN_IDS)) {\n            revert InvalidPriceBand(minimumPrice, maximumPrice);\n        }\n        // Level one must be priced by the staking contract, or nothing can ever be valued.\n        if (IBurrowValuerStaking(staking_).basePower(collection, 1) == 0) revert InvalidStaking(staking_);\n\n        squeekNFT = IBurrowValuerSqueekNFT(collection);\n        staking = IBurrowValuerStaking(staking_);\n        minPricePerPower = minimumPrice;\n        maxPricePerPower = maximumPrice;\n        pricePerPower = initialPrice;\n        ltvBps = initialLtvBps;\n    }\n\n    /// @notice Maximum debt, rounded down once after summing collateral power.\n    /// @dev Empty collateral has a zero line. IDs must be strictly ascending.\n    function creditLine(uint256[] calldata tokenIds) external view returns (uint256) {\n        uint256 value = collateralValue(tokenIds);\n        // Quotient/remainder decomposition is exactly floor(value * LTV / BPS)\n        // without overflowing the intermediate product for large valid bands.\n        return (value / BPS) * ltvBps + (value % BPS) * ltvBps / BPS;\n    }\n\n    /// @notice Undiscounted SQK value, before LTV, also usable for NFT bonds.\n    function collateralValue(uint256[] calldata tokenIds) public view returns (uint256) {\n        return totalPower(tokenIds) * pricePerPower;\n    }\n\n    /// @notice Sum of the immutable table powers for the NFTs' current levels.\n    /// @dev The caller (vault) is responsible for escrow and ownership checks for\n    ///      its borrower; valuation remains valid while staking owns the NFTs.\n    function totalPower(uint256[] calldata tokenIds) public view returns (uint256 power) {\n        uint256 count = tokenIds.length;\n        if (count > MAX_TOKEN_IDS) revert TooManyTokenIds(count);\n        for (uint256 i; i < count; ++i) {\n            if (i != 0 && tokenIds[i] <= tokenIds[i - 1]) {\n                revert TokenIdsNotStrictlyAscending(tokenIds[i - 1], tokenIds[i]);\n            }\n            power += powerOf(tokenIds[i]);\n        }\n    }\n\n    /// @notice Power of one existing NFT, independent of its current custodian.\n    function powerOf(uint256 tokenId) public view returns (uint256) {\n        // Check existence independently: a mapping-backed level getter might\n        // retain a burned NFT's level. Never credit that stale collateral.\n        try squeekNFT.ownerOf(tokenId) returns (address tokenOwner) {\n            if (tokenOwner == address(0)) revert InvalidToken(tokenId);\n        } catch {\n            revert InvalidToken(tokenId);\n        }\n        try squeekNFT.level(tokenId) returns (uint8 nftLevel) {\n            return powerForLevel(nftLevel);\n        } catch {\n            revert LevelReadFailed(tokenId);\n        }\n    }\n\n    /// @notice Squeekchain's own mining power for a one-based NFT level. Fails closed\n    ///         on levels the chain does not price (returns zero) or prices absurdly.\n    function powerForLevel(uint256 nftLevel) public view returns (uint256 power) {\n        if (nftLevel == 0 || nftLevel > type(uint8).max) revert UnsupportedLevel(nftLevel);\n        power = staking.basePower(address(squeekNFT), uint8(nftLevel));\n        if (power == 0) revert UnsupportedLevel(nftLevel);\n        if (power > MAX_POWER) revert PowerTooLarge(nftLevel, power);\n    }\n\n    /// @notice Propose a price. Replacing a pending proposal restarts the full delay.\n    function proposePricePerPower(uint256 newPrice) external onlyOwner {\n        _validatePriceChange(newPrice);\n        pendingPricePerPower = newPrice;\n        priceChangeReadyAt = block.timestamp + PRICE_TIMELOCK;\n        emit PriceProposed(pricePerPower, newPrice, priceChangeReadyAt);\n    }\n\n    /// @notice Apply the sole pending proposal after two days, consuming it once.\n    function executePricePerPower() external onlyOwner {\n        uint256 newPrice = pendingPricePerPower;\n        if (newPrice == 0) revert NoPendingPriceChange();\n        if (block.timestamp < priceChangeReadyAt) revert PriceChangeNotReady(priceChangeReadyAt);\n        _validatePriceChange(newPrice);\n\n        uint256 oldPrice = pricePerPower;\n        delete pendingPricePerPower;\n        delete priceChangeReadyAt;\n        pricePerPower = newPrice;\n        lastPriceChange = block.timestamp;\n        emit PriceExecuted(oldPrice, newPrice);\n    }\n\n    /// @notice Discard a proposal without moving the price or liquidation timestamp.\n    function cancelPriceProposal() external onlyOwner {\n        uint256 proposed = pendingPricePerPower;\n        if (proposed == 0) revert NoPendingPriceChange();\n        delete pendingPricePerPower;\n        delete priceChangeReadyAt;\n        emit PriceProposalCancelled(proposed);\n    }\n\n    function _validatePriceChange(uint256 newPrice) private view {\n        if (newPrice < minPricePerPower || newPrice > maxPricePerPower) revert PriceOutsideBand(newPrice);\n        uint256 current = pricePerPower;\n        if (newPrice == current) revert PriceUnchanged();\n        uint256 difference = newPrice > current ? newPrice - current : current - newPrice;\n        // 20% = 1/5. Rounding the allowed change DOWN rejects even one wei over\n        // the exact limit, in either direction, without current * BPS overflow.\n        if (difference > current / (BPS / MAX_PRICE_CHANGE_BPS)) {\n            revert PriceChangeTooLarge(current, newPrice);\n        }\n    }\n}\n"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.8.26+commit.8a97fa7a","compilerSettings":{"viaIR":false,"metadata":{"appendCBOR":true,"bytecodeHash":"ipfs","useLiteralContent":false},"libraries":{},"optimizer":{"runs":1,"enabled":true},"evmVersion":"cancun","remappings":["forge-std/=/Users/loserzx/squeek/burrow-lite/lib/forge-std/src/"]},"name":"BurrowValuer","fullyQualifiedName":"src/BurrowValuer.sol:BurrowValuer"},"abi":[{"type":"constructor","inputs":[{"name":"initialOwner","type":"address","internalType":"address"},{"name":"collection","type":"address","internalType":"address"},{"name":"staking_","type":"address","internalType":"address"},{"name":"initialPrice","type":"uint256","internalType":"uint256"},{"name":"minimumPrice","type":"uint256","internalType":"uint256"},{"name":"maximumPrice","type":"uint256","internalType":"uint256"},{"name":"initialLtvBps","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"InvalidCollection","type":"error","inputs":[{"name":"collection","type":"address","internalType":"address"}]},{"name":"InvalidLtvBps","type":"error","inputs":[{"name":"supplied","type":"uint256","internalType":"uint256"}]},{"name":"InvalidPriceBand","type":"error","inputs":[{"name":"minimum","type":"uint256","internalType":"uint256"},{"name":"maximum","type":"uint256","internalType":"uint256"}]},{"name":"InvalidStaking","type":"error","inputs":[{"name":"staking","type":"address","internalType":"address"}]},{"name":"InvalidToken","type":"error","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"name":"LevelReadFailed","type":"error","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"name":"NoPendingPriceChange","type":"error","inputs":[]},{"name":"OwnableInvalidOwner","type":"error","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"name":"OwnableUnauthorizedAccount","type":"error","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"name":"PowerTooLarge","type":"error","inputs":[{"name":"level","type":"uint256","internalType":"uint256"},{"name":"power","type":"uint256","internalType":"uint256"}]},{"name":"PriceChangeNotReady","type":"error","inputs":[{"name":"readyAt","type":"uint256","internalType":"uint256"}]},{"name":"PriceChangeTooLarge","type":"error","inputs":[{"name":"oldPrice","type":"uint256","internalType":"uint256"},{"name":"newPrice","type":"uint256","internalType":"uint256"}]},{"name":"PriceOutsideBand","type":"error","inputs":[{"name":"supplied","type":"uint256","internalType":"uint256"}]},{"name":"PriceUnchanged","type":"error","inputs":[]},{"name":"TokenIdsNotStrictlyAscending","type":"error","inputs":[{"name":"previous","type":"uint256","internalType":"uint256"},{"name":"current","type":"uint256","internalType":"uint256"}]},{"name":"TooManyTokenIds","type":"error","inputs":[{"name":"supplied","type":"uint256","internalType":"uint256"}]},{"name":"UnsupportedLevel","type":"error","inputs":[{"name":"level","type":"uint256","internalType":"uint256"}]},{"name":"OwnershipTransferStarted","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"OwnershipTransferred","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"PriceExecuted","type":"event","inputs":[{"name":"oldPrice","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newPrice","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"PriceProposalCancelled","type":"event","inputs":[{"name":"proposedPrice","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"PriceProposed","type":"event","inputs":[{"name":"oldPrice","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newPrice","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"readyAt","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_LTV_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_POWER","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_PRICE_CHANGE_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_TOKEN_IDS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PRICE_TIMELOCK","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"acceptOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"cancelPriceProposal","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"collateralValue","type":"function","inputs":[{"name":"tokenIds","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"creditLine","type":"function","inputs":[{"name":"tokenIds","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"executePricePerPower","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"lastPriceChange","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"ltvBps","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"maxPricePerPower","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"minPricePerPower","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"pendingOwner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"pendingPricePerPower","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"powerForLevel","type":"function","inputs":[{"name":"nftLevel","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"power","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"powerOf","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"priceChangeReadyAt","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"pricePerPower","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"proposePricePerPower","type":"function","inputs":[{"name":"newPrice","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"renounceOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"squeekNFT","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBurrowValuerSqueekNFT"}],"stateMutability":"view"},{"name":"staking","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBurrowValuerStaking"}],"stateMutability":"view"},{"name":"totalPower","type":"function","inputs":[{"name":"tokenIds","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"power","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transferOwnership","type":"function","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"}],"metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"address","name":"staking_","type":"address"},{"internalType":"uint256","name":"initialPrice","type":"uint256"},{"internalType":"uint256","name":"minimumPrice","type":"uint256"},{"internalType":"uint256","name":"maximumPrice","type":"uint256"},{"internalType":"uint256","name":"initialLtvBps","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"InvalidCollection","type":"error"},{"inputs":[{"internalType":"uint256","name":"supplied","type":"uint256"}],"name":"InvalidLtvBps","type":"error"},{"inputs":[{"internalType":"uint256","name":"minimum","type":"uint256"},{"internalType":"uint256","name":"maximum","type":"uint256"}],"name":"InvalidPriceBand","type":"error"},{"inputs":[{"internalType":"address","name":"staking","type":"address"}],"name":"InvalidStaking","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"InvalidToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"LevelReadFailed","type":"error"},{"inputs":[],"name":"NoPendingPriceChange","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"}],"name":"PowerTooLarge","type":"error"},{"inputs":[{"internalType":"uint256","name":"readyAt","type":"uint256"}],"name":"PriceChangeNotReady","type":"error"},{"inputs":[{"internalType":"uint256","name":"oldPrice","type":"uint256"},{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"PriceChangeTooLarge","type":"error"},{"inputs":[{"internalType":"uint256","name":"supplied","type":"uint256"}],"name":"PriceOutsideBand","type":"error"},{"inputs":[],"name":"PriceUnchanged","type":"error"},{"inputs":[{"internalType":"uint256","name":"previous","type":"uint256"},{"internalType":"uint256","name":"current","type":"uint256"}],"name":"TokenIdsNotStrictlyAscending","type":"error"},{"inputs":[{"internalType":"uint256","name":"supplied","type":"uint256"}],"name":"TooManyTokenIds","type":"error"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"name":"UnsupportedLevel","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"PriceExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposedPrice","type":"uint256"}],"name":"PriceProposalCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"readyAt","type":"uint256"}],"name":"PriceProposed","type":"event"},{"inputs":[],"name":"BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LTV_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_POWER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRICE_CHANGE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKEN_IDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_TIMELOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelPriceProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"collateralValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"creditLine","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executePricePerPower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastPriceChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ltvBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPricePerPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPricePerPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingPricePerPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftLevel","type":"uint256"}],"name":"powerForLevel","outputs":[{"internalType":"uint256","name":"power","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"powerOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceChangeReadyAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricePerPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"proposePricePerPower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"squeekNFT","outputs":[{"internalType":"contract IBurrowValuerSqueekNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"contract IBurrowValuerStaking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"totalPower","outputs":[{"internalType":"uint256","name":"power","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Unaudited, testnet only. Power is Squeekchain staking's basePower for the      NFT's level (1000, 2200, 4840, ... on Sepolia), and pricePerPower is SQK base      units (18 decimals) per one power. Consequently      creditLine = floor(sum(power) * pricePerPower * ltvBps / 10_000).      The collection, staking source, LTV and price band cannot be changed.      The owner may only govern price within the band and rate limit, through      a two-day delay. This contract never holds or moves collateral.","errors":{"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"constructor":{"params":{"collection":"The live Squeek ERC721, supplied by the deployer.","initialLtvBps":"Fixed loan-to-value ratio, at most 6000 basis points.","initialOwner":"Explicit governance address; ownership transfers take two steps.","initialPrice":"Initial SQK base units per power, within the immutable band.","maximumPrice":"Inclusive ceiling; bounded so 32 NFTs of MAX_POWER fit uint256.","minimumPrice":"Nonzero inclusive floor for pricePerPower.","staking_":"Squeekchain staking, read for basePower(collection, level)."}},"creditLine(uint256[])":{"details":"Empty collateral has a zero line. IDs must be strictly ascending."},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"totalPower(uint256[])":{"details":"The caller (vault) is responsible for escrow and ownership checks for      its borrower; valuation remains valid while staking owns the NFTs."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."}},"stateVariables":{"MAX_POWER":{"details":"Power per NFT is bounded so 32 NFTs at maxPricePerPower never overflow."},"lastPriceChange":{"details":"The vault must reject liquidation until lastPriceChange + 1 hours      after an execution. A proposal or cancellation does not change this."}},"title":"BurrowValuer","version":1},"userdoc":{"kind":"user","methods":{"cancelPriceProposal()":{"notice":"Discard a proposal without moving the price or liquidation timestamp."},"collateralValue(uint256[])":{"notice":"Undiscounted SQK value, before LTV, also usable for NFT bonds."},"creditLine(uint256[])":{"notice":"Maximum debt, rounded down once after summing collateral power."},"executePricePerPower()":{"notice":"Apply the sole pending proposal after two days, consuming it once."},"lastPriceChange()":{"notice":"Timestamp of the last EXECUTED price change; zero before any change."},"powerForLevel(uint256)":{"notice":"Squeekchain's own mining power for a one-based NFT level. Fails closed         on levels the chain does not price (returns zero) or prices absurdly."},"powerOf(uint256)":{"notice":"Power of one existing NFT, independent of its current custodian."},"proposePricePerPower(uint256)":{"notice":"Propose a price. Replacing a pending proposal restarts the full delay."},"totalPower(uint256[])":{"notice":"Sum of the immutable table powers for the NFTs' current levels."}},"notice":"Values up to 32 distinct Squeek NFTs in SQK base units.","version":1}},"settings":{"compilationTarget":{"src/BurrowValuer.sol":"BurrowValuer"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":1},"remappings":[":forge-std/=/Users/loserzx/squeek/burrow-lite/lib/forge-std/src/"]},"sources":{"src/BurrowValuer.sol":{"keccak256":"0x5bb0924c485f59757cd234938765f96d19c86fdc82b0835f3272c196f831bae8","license":"MIT","urls":["bzz-raw://d74e55d257f79e9ec8098b2f065c9250a251de56b540bd6199e959b9a26224da","dweb:/ipfs/QmQogkuitckPJQodZBHuEeZ9eYFYh1HXnkSkYeeTTaA9iY"]}},"version":1},"storageLayout":{"types":{"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_address","astId":34,"label":"_owner","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"},{"slot":"1","type":"t_address","astId":178,"label":"_pendingOwner","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"},{"slot":"2","type":"t_uint256","astId":318,"label":"pricePerPower","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"},{"slot":"3","type":"t_uint256","astId":320,"label":"pendingPricePerPower","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"},{"slot":"4","type":"t_uint256","astId":322,"label":"priceChangeReadyAt","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"},{"slot":"5","type":"t_uint256","astId":325,"label":"lastPriceChange","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"}]},"transientStorageLayout":null,"userdoc":{"kind":"user","notice":"Values up to 32 distinct Squeek NFTs in SQK base units.","methods":{"powerOf(uint256)":{"notice":"Power of one existing NFT, independent of its current custodian."},"lastPriceChange()":{"notice":"Timestamp of the last EXECUTED price change; zero before any change."},"cancelPriceProposal()":{"notice":"Discard a proposal without moving the price or liquidation timestamp."},"creditLine(uint256[])":{"notice":"Maximum debt, rounded down once after summing collateral power."},"totalPower(uint256[])":{"notice":"Sum of the immutable table powers for the NFTs' current levels."},"executePricePerPower()":{"notice":"Apply the sole pending proposal after two days, consuming it once."},"powerForLevel(uint256)":{"notice":"Squeekchain's own mining power for a one-based NFT level. Fails closed         on levels the chain does not price (returns zero) or prices absurdly."},"collateralValue(uint256[])":{"notice":"Undiscounted SQK value, before LTV, also usable for NFT bonds."},"proposePricePerPower(uint256)":{"notice":"Propose a price. Replacing a pending proposal restarts the full delay."}},"version":1},"devdoc":{"kind":"dev","title":"BurrowValuer","errors":{"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"details":"Unaudited, testnet only. Power is Squeekchain staking's basePower for the      NFT's level (1000, 2200, 4840, ... on Sepolia), and pricePerPower is SQK base      units (18 decimals) per one power. Consequently      creditLine = floor(sum(power) * pricePerPower * ltvBps / 10_000).      The collection, staking source, LTV and price band cannot be changed.      The owner may only govern price within the band and rate limit, through      a two-day delay. This contract never holds or moves collateral.","methods":{"owner()":{"details":"Returns the address of the current owner."},"constructor":{"params":{"staking_":"Squeekchain staking, read for basePower(collection, level).","collection":"The live Squeek ERC721, supplied by the deployer.","initialOwner":"Explicit governance address; ownership transfers take two steps.","initialPrice":"Initial SQK base units per power, within the immutable band.","maximumPrice":"Inclusive ceiling; bounded so 32 NFTs of MAX_POWER fit uint256.","minimumPrice":"Nonzero inclusive floor for pricePerPower.","initialLtvBps":"Fixed loan-to-value ratio, at most 6000 basis points."}},"pendingOwner()":{"details":"Returns the address of the pending owner."},"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"creditLine(uint256[])":{"details":"Empty collateral has a zero line. IDs must be strictly ascending."},"totalPower(uint256[])":{"details":"The caller (vault) is responsible for escrow and ownership checks for      its borrower; valuation remains valid while staking owns the NFTs."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."}},"version":1,"stateVariables":{"MAX_POWER":{"details":"Power per NFT is bounded so 32 NFTs at maxPricePerPower never overflow."},"lastPriceChange":{"details":"The vault must reject liquidation until lastPriceChange + 1 hours      after an execution. A proposal or cancellation does not change this."}}},"sourceIds":{"src/BurrowValuer.sol":{"id":0}},"additionalInput":null,"stdJsonInput":{"sources":{"src/BurrowValuer.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\n/*\n * OpenZeppelin Contracts v5.0.2: Context, Ownable and Ownable2Step are\n * included below to make this single-file submission build offline.\n * Only contract identifiers are prefixed with BurrowValuer; imports and\n * duplicate pragma/license headers are removed. The implementation is unchanged.\n * Source: https://github.com/OpenZeppelin/openzeppelin-contracts/tree/v5.0.2/contracts\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2016-2023 zOS Global Limited and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/BurrowValuerContext.sol)\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 BurrowValuerContext {\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    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n\n// OpenZeppelin Contracts (last updated v5.0.0) (access/BurrowValuerOwnable.sol)\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract BurrowValuerOwnable is BurrowValuerContext {\n    address private _owner;\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    constructor(address initialOwner) {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n\n// OpenZeppelin Contracts (last updated v5.0.0) (access/BurrowValuerOwnable2Step.sol)\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is specified at deployment time in the constructor for `BurrowValuerOwnable`. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (BurrowValuerOwnable).\n */\nabstract contract BurrowValuerOwnable2Step is BurrowValuerOwnable {\n    address private _pendingOwner;\n\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Returns the address of the pending owner.\n     */\n    function pendingOwner() public view virtual returns (address) {\n        return _pendingOwner;\n    }\n\n    /**\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\n        _pendingOwner = newOwner;\n        emit OwnershipTransferStarted(owner(), newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual override {\n        delete _pendingOwner;\n        super._transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev The new owner accepts the ownership transfer.\n     */\n    function acceptOwnership() public virtual {\n        address sender = _msgSender();\n        if (pendingOwner() != sender) {\n            revert OwnableUnauthorizedAccount(sender);\n        }\n        _transferOwnership(sender);\n    }\n}\n\n/// @dev The Squeek NFT's level is one-based; it is not a staking position.\ninterface IBurrowValuerSqueekNFT {\n    function ownerOf(uint256 tokenId) external view returns (address);\n    function level(uint256 tokenId) external view returns (uint8);\n}\n/// @dev Squeekchain staking publishes the mining power of each level. Reading it live keeps\n///      valuation equal to what the chain actually pays for the NFT; no table to drift.\ninterface IBurrowValuerStaking {\n    function basePower(address collection, uint8 level) external view returns (uint256);\n}\n\n/// @title BurrowValuer\n/// @notice Values up to 32 distinct Squeek NFTs in SQK base units.\n/// @dev Unaudited, testnet only. Power is Squeekchain staking's basePower for the\n///      NFT's level (1000, 2200, 4840, ... on Sepolia), and pricePerPower is SQK base\n///      units (18 decimals) per one power. Consequently\n///      creditLine = floor(sum(power) * pricePerPower * ltvBps / 10_000).\n///      The collection, staking source, LTV and price band cannot be changed.\n///      The owner may only govern price within the band and rate limit, through\n///      a two-day delay. This contract never holds or moves collateral.\ncontract BurrowValuer is BurrowValuerOwnable2Step {\n    uint256 public constant BPS = 10_000;\n    uint256 public constant MAX_LTV_BPS = 6_000;\n    uint256 public constant MAX_PRICE_CHANGE_BPS = 2_000;\n    uint256 public constant PRICE_TIMELOCK = 2 days;\n    uint256 public constant MAX_TOKEN_IDS = 32;\n    /// @dev Power per NFT is bounded so 32 NFTs at maxPricePerPower never overflow.\n    uint256 public constant MAX_POWER = 1e24;\n\n    IBurrowValuerSqueekNFT public immutable squeekNFT;\n    IBurrowValuerStaking public immutable staking;\n    uint256 public immutable minPricePerPower;\n    uint256 public immutable maxPricePerPower;\n    uint256 public immutable ltvBps;\n\n    uint256 public pricePerPower;\n    uint256 public pendingPricePerPower;\n    uint256 public priceChangeReadyAt;\n\n    /// @notice Timestamp of the last EXECUTED price change; zero before any change.\n    /// @dev The vault must reject liquidation until lastPriceChange + 1 hours\n    ///      after an execution. A proposal or cancellation does not change this.\n    uint256 public lastPriceChange;\n\n    error InvalidCollection(address collection);\n    error InvalidLtvBps(uint256 supplied);\n    error InvalidPriceBand(uint256 minimum, uint256 maximum);\n    error InvalidStaking(address staking);\n    error PowerTooLarge(uint256 level, uint256 power);\n    error TooManyTokenIds(uint256 supplied);\n    error TokenIdsNotStrictlyAscending(uint256 previous, uint256 current);\n    error InvalidToken(uint256 tokenId);\n    error LevelReadFailed(uint256 tokenId);\n    error UnsupportedLevel(uint256 level);\n    error PriceOutsideBand(uint256 supplied);\n    error PriceUnchanged();\n    error PriceChangeTooLarge(uint256 oldPrice, uint256 newPrice);\n    error NoPendingPriceChange();\n    error PriceChangeNotReady(uint256 readyAt);\n\n    event PriceProposed(uint256 oldPrice, uint256 newPrice, uint256 readyAt);\n    event PriceExecuted(uint256 oldPrice, uint256 newPrice);\n    event PriceProposalCancelled(uint256 proposedPrice);\n\n    /// @param initialOwner Explicit governance address; ownership transfers take two steps.\n    /// @param collection The live Squeek ERC721, supplied by the deployer.\n    /// @param staking_ Squeekchain staking, read for basePower(collection, level).\n    /// @param initialPrice Initial SQK base units per power, within the immutable band.\n    /// @param minimumPrice Nonzero inclusive floor for pricePerPower.\n    /// @param maximumPrice Inclusive ceiling; bounded so 32 NFTs of MAX_POWER fit uint256.\n    /// @param initialLtvBps Fixed loan-to-value ratio, at most 6000 basis points.\n    constructor(\n        address initialOwner,\n        address collection,\n        address staking_,\n        uint256 initialPrice,\n        uint256 minimumPrice,\n        uint256 maximumPrice,\n        uint256 initialLtvBps\n    ) BurrowValuerOwnable(initialOwner) {\n        if (collection.code.length == 0) revert InvalidCollection(collection);\n        if (staking_.code.length == 0) revert InvalidStaking(staking_);\n        if (initialLtvBps == 0 || initialLtvBps > MAX_LTV_BPS) revert InvalidLtvBps(initialLtvBps);\n        if (minimumPrice == 0 || minimumPrice > maximumPrice) {\n            revert InvalidPriceBand(minimumPrice, maximumPrice);\n        }\n        if (initialPrice < minimumPrice || initialPrice > maximumPrice) {\n            revert PriceOutsideBand(initialPrice);\n        }\n        if (maximumPrice > type(uint256).max / (MAX_POWER * MAX_TOKEN_IDS)) {\n            revert InvalidPriceBand(minimumPrice, maximumPrice);\n        }\n        // Level one must be priced by the staking contract, or nothing can ever be valued.\n        if (IBurrowValuerStaking(staking_).basePower(collection, 1) == 0) revert InvalidStaking(staking_);\n\n        squeekNFT = IBurrowValuerSqueekNFT(collection);\n        staking = IBurrowValuerStaking(staking_);\n        minPricePerPower = minimumPrice;\n        maxPricePerPower = maximumPrice;\n        pricePerPower = initialPrice;\n        ltvBps = initialLtvBps;\n    }\n\n    /// @notice Maximum debt, rounded down once after summing collateral power.\n    /// @dev Empty collateral has a zero line. IDs must be strictly ascending.\n    function creditLine(uint256[] calldata tokenIds) external view returns (uint256) {\n        uint256 value = collateralValue(tokenIds);\n        // Quotient/remainder decomposition is exactly floor(value * LTV / BPS)\n        // without overflowing the intermediate product for large valid bands.\n        return (value / BPS) * ltvBps + (value % BPS) * ltvBps / BPS;\n    }\n\n    /// @notice Undiscounted SQK value, before LTV, also usable for NFT bonds.\n    function collateralValue(uint256[] calldata tokenIds) public view returns (uint256) {\n        return totalPower(tokenIds) * pricePerPower;\n    }\n\n    /// @notice Sum of the immutable table powers for the NFTs' current levels.\n    /// @dev The caller (vault) is responsible for escrow and ownership checks for\n    ///      its borrower; valuation remains valid while staking owns the NFTs.\n    function totalPower(uint256[] calldata tokenIds) public view returns (uint256 power) {\n        uint256 count = tokenIds.length;\n        if (count > MAX_TOKEN_IDS) revert TooManyTokenIds(count);\n        for (uint256 i; i < count; ++i) {\n            if (i != 0 && tokenIds[i] <= tokenIds[i - 1]) {\n                revert TokenIdsNotStrictlyAscending(tokenIds[i - 1], tokenIds[i]);\n            }\n            power += powerOf(tokenIds[i]);\n        }\n    }\n\n    /// @notice Power of one existing NFT, independent of its current custodian.\n    function powerOf(uint256 tokenId) public view returns (uint256) {\n        // Check existence independently: a mapping-backed level getter might\n        // retain a burned NFT's level. Never credit that stale collateral.\n        try squeekNFT.ownerOf(tokenId) returns (address tokenOwner) {\n            if (tokenOwner == address(0)) revert InvalidToken(tokenId);\n        } catch {\n            revert InvalidToken(tokenId);\n        }\n        try squeekNFT.level(tokenId) returns (uint8 nftLevel) {\n            return powerForLevel(nftLevel);\n        } catch {\n            revert LevelReadFailed(tokenId);\n        }\n    }\n\n    /// @notice Squeekchain's own mining power for a one-based NFT level. Fails closed\n    ///         on levels the chain does not price (returns zero) or prices absurdly.\n    function powerForLevel(uint256 nftLevel) public view returns (uint256 power) {\n        if (nftLevel == 0 || nftLevel > type(uint8).max) revert UnsupportedLevel(nftLevel);\n        power = staking.basePower(address(squeekNFT), uint8(nftLevel));\n        if (power == 0) revert UnsupportedLevel(nftLevel);\n        if (power > MAX_POWER) revert PowerTooLarge(nftLevel, power);\n    }\n\n    /// @notice Propose a price. Replacing a pending proposal restarts the full delay.\n    function proposePricePerPower(uint256 newPrice) external onlyOwner {\n        _validatePriceChange(newPrice);\n        pendingPricePerPower = newPrice;\n        priceChangeReadyAt = block.timestamp + PRICE_TIMELOCK;\n        emit PriceProposed(pricePerPower, newPrice, priceChangeReadyAt);\n    }\n\n    /// @notice Apply the sole pending proposal after two days, consuming it once.\n    function executePricePerPower() external onlyOwner {\n        uint256 newPrice = pendingPricePerPower;\n        if (newPrice == 0) revert NoPendingPriceChange();\n        if (block.timestamp < priceChangeReadyAt) revert PriceChangeNotReady(priceChangeReadyAt);\n        _validatePriceChange(newPrice);\n\n        uint256 oldPrice = pricePerPower;\n        delete pendingPricePerPower;\n        delete priceChangeReadyAt;\n        pricePerPower = newPrice;\n        lastPriceChange = block.timestamp;\n        emit PriceExecuted(oldPrice, newPrice);\n    }\n\n    /// @notice Discard a proposal without moving the price or liquidation timestamp.\n    function cancelPriceProposal() external onlyOwner {\n        uint256 proposed = pendingPricePerPower;\n        if (proposed == 0) revert NoPendingPriceChange();\n        delete pendingPricePerPower;\n        delete priceChangeReadyAt;\n        emit PriceProposalCancelled(proposed);\n    }\n\n    function _validatePriceChange(uint256 newPrice) private view {\n        if (newPrice < minPricePerPower || newPrice > maxPricePerPower) revert PriceOutsideBand(newPrice);\n        uint256 current = pricePerPower;\n        if (newPrice == current) revert PriceUnchanged();\n        uint256 difference = newPrice > current ? newPrice - current : current - newPrice;\n        // 20% = 1/5. Rounding the allowed change DOWN rejects even one wei over\n        // the exact limit, in either direction, without current * BPS overflow.\n        if (difference > current / (BPS / MAX_PRICE_CHANGE_BPS)) {\n            revert PriceChangeTooLarge(current, newPrice);\n        }\n    }\n}\n"}},"language":"Solidity","settings":{"viaIR":false,"metadata":{"appendCBOR":true,"bytecodeHash":"ipfs","useLiteralContent":false},"libraries":{},"optimizer":{"runs":1,"enabled":true},"evmVersion":"cancun","remappings":["forge-std/=/Users/loserzx/squeek/burrow-lite/lib/forge-std/src/"]}},"stdJsonOutput":{"sources":{"src/BurrowValuer.sol":{"id":0}},"contracts":{"src/BurrowValuer.sol":{"BurrowValuer":{"abi":[{"type":"constructor","inputs":[{"name":"initialOwner","type":"address","internalType":"address"},{"name":"collection","type":"address","internalType":"address"},{"name":"staking_","type":"address","internalType":"address"},{"name":"initialPrice","type":"uint256","internalType":"uint256"},{"name":"minimumPrice","type":"uint256","internalType":"uint256"},{"name":"maximumPrice","type":"uint256","internalType":"uint256"},{"name":"initialLtvBps","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"InvalidCollection","type":"error","inputs":[{"name":"collection","type":"address","internalType":"address"}]},{"name":"InvalidLtvBps","type":"error","inputs":[{"name":"supplied","type":"uint256","internalType":"uint256"}]},{"name":"InvalidPriceBand","type":"error","inputs":[{"name":"minimum","type":"uint256","internalType":"uint256"},{"name":"maximum","type":"uint256","internalType":"uint256"}]},{"name":"InvalidStaking","type":"error","inputs":[{"name":"staking","type":"address","internalType":"address"}]},{"name":"InvalidToken","type":"error","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"name":"LevelReadFailed","type":"error","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"name":"NoPendingPriceChange","type":"error","inputs":[]},{"name":"OwnableInvalidOwner","type":"error","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"name":"OwnableUnauthorizedAccount","type":"error","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"name":"PowerTooLarge","type":"error","inputs":[{"name":"level","type":"uint256","internalType":"uint256"},{"name":"power","type":"uint256","internalType":"uint256"}]},{"name":"PriceChangeNotReady","type":"error","inputs":[{"name":"readyAt","type":"uint256","internalType":"uint256"}]},{"name":"PriceChangeTooLarge","type":"error","inputs":[{"name":"oldPrice","type":"uint256","internalType":"uint256"},{"name":"newPrice","type":"uint256","internalType":"uint256"}]},{"name":"PriceOutsideBand","type":"error","inputs":[{"name":"supplied","type":"uint256","internalType":"uint256"}]},{"name":"PriceUnchanged","type":"error","inputs":[]},{"name":"TokenIdsNotStrictlyAscending","type":"error","inputs":[{"name":"previous","type":"uint256","internalType":"uint256"},{"name":"current","type":"uint256","internalType":"uint256"}]},{"name":"TooManyTokenIds","type":"error","inputs":[{"name":"supplied","type":"uint256","internalType":"uint256"}]},{"name":"UnsupportedLevel","type":"error","inputs":[{"name":"level","type":"uint256","internalType":"uint256"}]},{"name":"OwnershipTransferStarted","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"OwnershipTransferred","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"PriceExecuted","type":"event","inputs":[{"name":"oldPrice","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newPrice","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"PriceProposalCancelled","type":"event","inputs":[{"name":"proposedPrice","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"PriceProposed","type":"event","inputs":[{"name":"oldPrice","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newPrice","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"readyAt","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_LTV_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_POWER","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_PRICE_CHANGE_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_TOKEN_IDS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PRICE_TIMELOCK","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"acceptOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"cancelPriceProposal","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"collateralValue","type":"function","inputs":[{"name":"tokenIds","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"creditLine","type":"function","inputs":[{"name":"tokenIds","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"executePricePerPower","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"lastPriceChange","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"ltvBps","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"maxPricePerPower","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"minPricePerPower","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"pendingOwner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"pendingPricePerPower","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"powerForLevel","type":"function","inputs":[{"name":"nftLevel","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"power","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"powerOf","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"priceChangeReadyAt","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"pricePerPower","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"proposePricePerPower","type":"function","inputs":[{"name":"newPrice","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"renounceOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"squeekNFT","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBurrowValuerSqueekNFT"}],"stateMutability":"view"},{"name":"staking","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBurrowValuerStaking"}],"stateMutability":"view"},{"name":"totalPower","type":"function","inputs":[{"name":"tokenIds","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"power","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transferOwnership","type":"function","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"}],"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"collection\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"staking_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialLtvBps\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collection\",\"type\":\"address\"}],\"name\":\"InvalidCollection\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"supplied\",\"type\":\"uint256\"}],\"name\":\"InvalidLtvBps\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximum\",\"type\":\"uint256\"}],\"name\":\"InvalidPriceBand\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staking\",\"type\":\"address\"}],\"name\":\"InvalidStaking\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"LevelReadFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoPendingPriceChange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"power\",\"type\":\"uint256\"}],\"name\":\"PowerTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"readyAt\",\"type\":\"uint256\"}],\"name\":\"PriceChangeNotReady\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"oldPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newPrice\",\"type\":\"uint256\"}],\"name\":\"PriceChangeTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"supplied\",\"type\":\"uint256\"}],\"name\":\"PriceOutsideBand\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceUnchanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"previous\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"current\",\"type\":\"uint256\"}],\"name\":\"TokenIdsNotStrictlyAscending\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"supplied\",\"type\":\"uint256\"}],\"name\":\"TooManyTokenIds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"}],\"name\":\"UnsupportedLevel\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPrice\",\"type\":\"uint256\"}],\"name\":\"PriceExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposedPrice\",\"type\":\"uint256\"}],\"name\":\"PriceProposalCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"readyAt\",\"type\":\"uint256\"}],\"name\":\"PriceProposed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_LTV_BPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_POWER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PRICE_CHANGE_BPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_TOKEN_IDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRICE_TIMELOCK\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelPriceProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"collateralValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"creditLine\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executePricePerPower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPriceChange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ltvBps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPricePerPower\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minPricePerPower\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingPricePerPower\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nftLevel\",\"type\":\"uint256\"}],\"name\":\"powerForLevel\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"power\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"powerOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceChangeReadyAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pricePerPower\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPrice\",\"type\":\"uint256\"}],\"name\":\"proposePricePerPower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"squeekNFT\",\"outputs\":[{\"internalType\":\"contract IBurrowValuerSqueekNFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staking\",\"outputs\":[{\"internalType\":\"contract IBurrowValuerStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"totalPower\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"power\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Unaudited, testnet only. Power is Squeekchain staking's basePower for the      NFT's level (1000, 2200, 4840, ... on Sepolia), and pricePerPower is SQK base      units (18 decimals) per one power. Consequently      creditLine = floor(sum(power) * pricePerPower * ltvBps / 10_000).      The collection, staking source, LTV and price band cannot be changed.      The owner may only govern price within the band and rate limit, through      a two-day delay. This contract never holds or moves collateral.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"constructor\":{\"params\":{\"collection\":\"The live Squeek ERC721, supplied by the deployer.\",\"initialLtvBps\":\"Fixed loan-to-value ratio, at most 6000 basis points.\",\"initialOwner\":\"Explicit governance address; ownership transfers take two steps.\",\"initialPrice\":\"Initial SQK base units per power, within the immutable band.\",\"maximumPrice\":\"Inclusive ceiling; bounded so 32 NFTs of MAX_POWER fit uint256.\",\"minimumPrice\":\"Nonzero inclusive floor for pricePerPower.\",\"staking_\":\"Squeekchain staking, read for basePower(collection, level).\"}},\"creditLine(uint256[])\":{\"details\":\"Empty collateral has a zero line. IDs must be strictly ascending.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"totalPower(uint256[])\":{\"details\":\"The caller (vault) is responsible for escrow and ownership checks for      its borrower; valuation remains valid while staking owns the NFTs.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"stateVariables\":{\"MAX_POWER\":{\"details\":\"Power per NFT is bounded so 32 NFTs at maxPricePerPower never overflow.\"},\"lastPriceChange\":{\"details\":\"The vault must reject liquidation until lastPriceChange + 1 hours      after an execution. A proposal or cancellation does not change this.\"}},\"title\":\"BurrowValuer\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cancelPriceProposal()\":{\"notice\":\"Discard a proposal without moving the price or liquidation timestamp.\"},\"collateralValue(uint256[])\":{\"notice\":\"Undiscounted SQK value, before LTV, also usable for NFT bonds.\"},\"creditLine(uint256[])\":{\"notice\":\"Maximum debt, rounded down once after summing collateral power.\"},\"executePricePerPower()\":{\"notice\":\"Apply the sole pending proposal after two days, consuming it once.\"},\"lastPriceChange()\":{\"notice\":\"Timestamp of the last EXECUTED price change; zero before any change.\"},\"powerForLevel(uint256)\":{\"notice\":\"Squeekchain's own mining power for a one-based NFT level. Fails closed         on levels the chain does not price (returns zero) or prices absurdly.\"},\"powerOf(uint256)\":{\"notice\":\"Power of one existing NFT, independent of its current custodian.\"},\"proposePricePerPower(uint256)\":{\"notice\":\"Propose a price. Replacing a pending proposal restarts the full delay.\"},\"totalPower(uint256[])\":{\"notice\":\"Sum of the immutable table powers for the NFTs' current levels.\"}},\"notice\":\"Values up to 32 distinct Squeek NFTs in SQK base units.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/BurrowValuer.sol\":\"BurrowValuer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1},\"remappings\":[\":forge-std/=/Users/loserzx/squeek/burrow-lite/lib/forge-std/src/\"]},\"sources\":{\"src/BurrowValuer.sol\":{\"keccak256\":\"0x5bb0924c485f59757cd234938765f96d19c86fdc82b0835f3272c196f831bae8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d74e55d257f79e9ec8098b2f065c9250a251de56b540bd6199e959b9a26224da\",\"dweb:/ipfs/QmQogkuitckPJQodZBHuEeZ9eYFYh1HXnkSkYeeTTaA9iY\"]}},\"version\":1}","userdoc":{"kind":"user","notice":"Values up to 32 distinct Squeek NFTs in SQK base units.","methods":{"powerOf(uint256)":{"notice":"Power of one existing NFT, independent of its current custodian."},"lastPriceChange()":{"notice":"Timestamp of the last EXECUTED price change; zero before any change."},"cancelPriceProposal()":{"notice":"Discard a proposal without moving the price or liquidation timestamp."},"creditLine(uint256[])":{"notice":"Maximum debt, rounded down once after summing collateral power."},"totalPower(uint256[])":{"notice":"Sum of the immutable table powers for the NFTs' current levels."},"executePricePerPower()":{"notice":"Apply the sole pending proposal after two days, consuming it once."},"powerForLevel(uint256)":{"notice":"Squeekchain's own mining power for a one-based NFT level. Fails closed         on levels the chain does not price (returns zero) or prices absurdly."},"collateralValue(uint256[])":{"notice":"Undiscounted SQK value, before LTV, also usable for NFT bonds."},"proposePricePerPower(uint256)":{"notice":"Propose a price. Replacing a pending proposal restarts the full delay."}},"version":1},"devdoc":{"kind":"dev","title":"BurrowValuer","errors":{"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"details":"Unaudited, testnet only. Power is Squeekchain staking's basePower for the      NFT's level (1000, 2200, 4840, ... on Sepolia), and pricePerPower is SQK base      units (18 decimals) per one power. Consequently      creditLine = floor(sum(power) * pricePerPower * ltvBps / 10_000).      The collection, staking source, LTV and price band cannot be changed.      The owner may only govern price within the band and rate limit, through      a two-day delay. This contract never holds or moves collateral.","methods":{"owner()":{"details":"Returns the address of the current owner."},"constructor":{"params":{"staking_":"Squeekchain staking, read for basePower(collection, level).","collection":"The live Squeek ERC721, supplied by the deployer.","initialOwner":"Explicit governance address; ownership transfers take two steps.","initialPrice":"Initial SQK base units per power, within the immutable band.","maximumPrice":"Inclusive ceiling; bounded so 32 NFTs of MAX_POWER fit uint256.","minimumPrice":"Nonzero inclusive floor for pricePerPower.","initialLtvBps":"Fixed loan-to-value ratio, at most 6000 basis points."}},"pendingOwner()":{"details":"Returns the address of the pending owner."},"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"creditLine(uint256[])":{"details":"Empty collateral has a zero line. IDs must be strictly ascending."},"totalPower(uint256[])":{"details":"The caller (vault) is responsible for escrow and ownership checks for      its borrower; valuation remains valid while staking owns the NFTs."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."}},"version":1,"stateVariables":{"MAX_POWER":{"details":"Power per NFT is bounded so 32 NFTs at maxPricePerPower never overflow."},"lastPriceChange":{"details":"The vault must reject liquidation until lastPriceChange + 1 hours      after an execution. A proposal or cancellation does not change this."}}},"storageLayout":{"types":{"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_address","astId":34,"label":"_owner","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"},{"slot":"1","type":"t_address","astId":178,"label":"_pendingOwner","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"},{"slot":"2","type":"t_uint256","astId":318,"label":"pricePerPower","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"},{"slot":"3","type":"t_uint256","astId":320,"label":"pendingPricePerPower","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"},{"slot":"4","type":"t_uint256","astId":322,"label":"priceChangeReadyAt","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"},{"slot":"5","type":"t_uint256","astId":325,"label":"lastPriceChange","offset":0,"contract":"src/BurrowValuer.sol:BurrowValuer"}]},"transientStorageLayout":null,"evm":{"bytecode":{"object":"610120604052348015610010575f80fd5b506040516111eb3803806111eb83398101604081905261002f916102e3565b866001600160a01b038116610062575f604051631e4fbdf760e01b8152600401610059919061034a565b60405180910390fd5b61006b8161025d565b50856001600160a01b03163b5f03610098578560405163bf29a5e560e01b8152600401610059919061034a565b846001600160a01b03163b5f036100c45784604051637d0da82360e01b8152600401610059919061034a565b8015806100d2575061177081115b156100f35760405163b9ca264560e01b815260048101829052602401610059565b8215806100ff57508183115b156101275760405163b037129360e01b81526004810184905260248101839052604401610059565b8284108061013457508184115b15610155576040516340fe4bf560e11b815260048101859052602401610059565b61016a602069d3c21bcecceda100000061035e565b610175905f19610387565b82111561019f5760405163b037129360e01b81526004810184905260248101839052604401610059565b604051633698617160e11b81526001600160a01b03878116600483015260016024830152861690636d30c2e290604401602060405180830381865afa1580156101ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020e91906103a6565b5f0361022f5784604051637d0da82360e01b8152600401610059919061034a565b6001600160a01b039586166080529390941660a05260c05260e09290925260029190915561010052506103bd565b600180546001600160a01b031916905561027681610279565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146102de575f80fd5b919050565b5f805f805f805f60e0888a0312156102f9575f80fd5b610302886102c8565b9650610310602089016102c8565b955061031e604089016102c8565b606089015160808a015160a08b015160c0909b0151999c989b5091999098919790965090945092505050565b6001600160a01b0391909116815260200190565b808202811582820484141761038157634e487b7160e01b5f52601160045260245ffd5b92915050565b5f826103a157634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156103b6575f80fd5b5051919050565b60805160a05160c05160e05161010051610db96104325f395f81816101a6015281816104f1015261053001525f81816103300152610a8e01525f81816102c80152610a6501525f81816101cd015261070f01525f81816102160152818161036a0152818161043b01526106de0152610db95ff3fe608060405234801561000f575f80fd5b5060043610610152575f3560e01c806304eaa11314610156578063106cd4241461017c5780631bfaae1d1461018f578063249d39e914610198578063276b7377146101a15780634cf088d9146101c857806354393b34146101fc578063570dcb2f146102115780635aca870d1461023857806360ee764314610240578063623ef2aa14610253578063660e35921461025c578063696ef3051461026d578063715018a61461027557806379ba50971461027d5780637a720b5f1461028557806381c6c9761461028e57806384f0a74a146102975780638da5cb5b1461029f578063970f2888146102a7578063b65d1ea8146102ba578063bc537912146102c3578063bd0c28c3146102ea578063dec616fb146102f4578063e30c3978146102fd578063e637bb8b14610305578063f2fde38b14610318578063fdcf9e1f1461032b575b5f80fd5b610169610164366004610bbb565b610352565b6040519081526020015b60405180910390f35b61016961018a366004610bd2565b6104de565b61016961177081565b61016961271081565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101739190610c41565b61020f61020a366004610bbb565b610579565b005b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b61020f6105e9565b61016961024e366004610bbb565b610698565b61016960045481565b61016969d3c21bcecceda100000081565b610169602081565b61020f6107cc565b61020f6107df565b61016960025481565b61016960055481565b61020f61081e565b6101ef610883565b6101696102b5366004610bd2565b610891565b6101696107d081565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101696202a30081565b61016960035481565b6101ef6108a9565b610169610313366004610bd2565b6108b8565b61020f610326366004610c69565b6109cb565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa9250505080156103d5575060408051601f3d908101601f191682019092526103d291810190610c84565b60015b6103fa5760405163124bad6360e31b8152600481018390526024015b60405180910390fd5b6001600160a01b0381166104245760405163124bad6360e31b8152600481018490526024016103f1565b506040516302e2c6f960e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906305c58df290602401602060405180830381865afa9250505080156104a6575060408051601f3d908101601f191682019092526104a391810190610c9f565b60015b6104c657604051635c3a82cf60e11b8152600481018390526024016103f1565b6104d28160ff16610698565b9392505050565b919050565b5f806104ea8484610891565b90506127107f000000000000000000000000000000000000000000000000000000000000000061051a8284610cd3565b6105249190610cfa565b61052e9190610d11565b7f000000000000000000000000000000000000000000000000000000000000000061055b61271084610d11565b6105659190610cfa565b61056f9190610d24565b9150505b92915050565b610581610a31565b61058a81610a63565b600381905561059c6202a30042610d24565b600481905560025460408051918252602082018490528101919091527f23425d5d10aa216657346914b0a3ab4bfb01b111b6a15fb044a0d8f9c3b73107906060015b60405180910390a150565b6105f1610a31565b6003545f81900361061557604051630d925ae760e21b815260040160405180910390fd5b60045442101561063c576004805460405163ee68b01760e01b8152918201526024016103f1565b61064581610a63565b600280545f600381905560045590829055426005556040517ffaeaabf7d533ed4e9b1bc7b65e847c6b84ee674b7f7acce6de5b46de63ea71bf9061068c9083908590610d37565b60405180910390a15050565b5f8115806106a6575060ff82115b156106c75760405163716593c960e01b8152600481018390526024016103f1565b604051633698617160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260ff841660248301527f00000000000000000000000000000000000000000000000000000000000000001690636d30c2e290604401602060405180830381865afa158015610754573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107789190610d45565b9050805f0361079d5760405163716593c960e01b8152600481018390526024016103f1565b69d3c21bcecceda10000008111156104d95781816040516304d6f4e560e21b81526004016103f1929190610d37565b6107d4610a31565b6107dd5f610b58565b565b33806107e96108a9565b6001600160a01b031614610812578060405163118cdaa760e01b81526004016103f19190610c41565b61081b81610b58565b50565b610826610a31565b6003545f81900361084a57604051630d925ae760e21b815260040160405180910390fd5b5f60038190556004556040518181527fb3504e3db0d46f4929f0e020e3e206a2f034bd6219c0bf767d19a518ee5f6c44906020016105de565b5f546001600160a01b031690565b5f60025461089f84846108b8565b6104d29190610cfa565b6001546001600160a01b031690565b5f8160208111156108df57604051630677bac560e31b8152600481018290526024016103f1565b5f5b818110156109c357801580159061093257508484610900600184610d5c565b81811061090f5761090f610d6f565b9050602002013585858381811061092857610928610d6f565b9050602002013511155b1561098e578484610944600184610d5c565b81811061095357610953610d6f565b9050602002013585858381811061096c5761096c610d6f565b90506020020135604051630a6f6bbf60e11b81526004016103f1929190610d37565b6109af8585838181106109a3576109a3610d6f565b90506020020135610352565b6109b99084610d24565b92506001016108e1565b505092915050565b6109d3610a31565b600180546001600160a01b0319166001600160a01b0383169081179091556109f9610883565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b33610a3a610883565b6001600160a01b0316146107dd573360405163118cdaa760e01b81526004016103f19190610c41565b7f0000000000000000000000000000000000000000000000000000000000000000811080610ab057507f000000000000000000000000000000000000000000000000000000000000000081115b15610ad1576040516340fe4bf560e11b8152600481018290526024016103f1565b600254808203610af45760405163011986d960e71b815260040160405180910390fd5b5f818311610b0b57610b068383610d5c565b610b15565b610b158284610d5c565b9050610b256107d0612710610d11565b610b2f9083610d11565b811115610b5357818360405163089e191b60e01b81526004016103f1929190610d37565b505050565b600180546001600160a01b031916905561081b815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610bcb575f80fd5b5035919050565b5f8060208385031215610be3575f80fd5b82356001600160401b03811115610bf8575f80fd5b8301601f81018513610c08575f80fd5b80356001600160401b03811115610c1d575f80fd5b8560208260051b8401011115610c31575f80fd5b6020919091019590945092505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461081b575f80fd5b5f60208284031215610c79575f80fd5b81356104d281610c55565b5f60208284031215610c94575f80fd5b81516104d281610c55565b5f60208284031215610caf575f80fd5b815160ff811681146104d2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f82610ce157610ce1610cbf565b500690565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761057357610573610ce6565b5f82610d1f57610d1f610cbf565b500490565b8082018082111561057357610573610ce6565b918252602082015260400190565b5f60208284031215610d55575f80fd5b5051919050565b8181038181111561057357610573610ce6565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220fb13dd3e76b481c5c9e69c913b06a8bcab8e84373953f8ab5f8ba03d4b6b8eec64736f6c634300081a0033","sourceMap":"8726:8768:0:-:0;;;11309:1400;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11552:12;-1:-1:-1;;;;;3755:26:0;;3751:95;;3832:1;3804:31;;-1:-1:-1;;;3804:31:0;;;;;;;;:::i;:::-;;;;;;;;3751:95;3855:32;3874:12;3855:18;:32::i;:::-;3707:187;11580:10:::1;-1:-1:-1::0;;;;;11580:22:0::1;;11606:1;11580:27:::0;11576:69:::1;;11634:10;11616:29;;-1:-1:-1::0;;;11616:29:0::1;;;;;;;;:::i;11576:69::-;11659:8;-1:-1:-1::0;;;;;11659:20:0::1;;11683:1;11659:25:::0;11655:62:::1;;11708:8;11693:24;;-1:-1:-1::0;;;11693:24:0::1;;;;;;;;:::i;11655:62::-;11731:18:::0;;;:49:::1;;;8862:5;11753:13;:27;11731:49;11727:90;;;11789:28;::::0;-1:-1:-1;;;11789:28:0;;::::1;::::0;::::1;1383:25:1::0;;;1356:18;;11789:28:0::1;1237:177:1::0;11727:90:0::1;11831:17:::0;;;:48:::1;;;11867:12;11852;:27;11831:48;11827:130;;;11902:44;::::0;-1:-1:-1;;;11902:44:0;;::::1;::::0;::::1;1593:25:1::0;;;1634:18;;;1627:34;;;1566:18;;11902:44:0::1;1419:248:1::0;11827:130:0::1;11985:12;11970;:27;:58;;;;12016:12;12001;:27;11970:58;11966:126;;;12051:30;::::0;-1:-1:-1;;;12051:30:0;;::::1;::::0;::::1;1383:25:1::0;;;1356:18;;12051:30:0::1;1237:177:1::0;11966:126:0::1;12141:25;9024:2;9153:4;12141:25;:::i;:::-;12120:47;::::0;-1:-1:-1;;12120:47:0::1;:::i;:::-;12105:12;:62;12101:144;;;12190:44;::::0;-1:-1:-1;;;12190:44:0;;::::1;::::0;::::1;1593:25:1::0;;;1634:18;;;1627:34;;;1566:18;;12190:44:0::1;1419:248:1::0;12101:144:0::1;12350:55;::::0;-1:-1:-1;;;12350:55:0;;-1:-1:-1;;;;;2362:32:1;;;12350:55:0::1;::::0;::::1;2344:51:1::0;12403:1:0::1;2411:18:1::0;;;2404:45;12350:40:0;::::1;::::0;::::1;::::0;2317:18:1;;12350:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12409:1;12350:60:::0;12346:97:::1;;12434:8;12419:24;;-1:-1:-1::0;;;12419:24:0::1;;;;;;;;:::i;12346:97::-;-1:-1:-1::0;;;;;12454:46:0;;::::1;;::::0;12510:40;;;::::1;;::::0;12560:31:::1;::::0;12601::::1;::::0;;;;12642:13:::1;:28:::0;;;;12680:22:::1;::::0;-1:-1:-1;8726:8768:0;;7075:153;7164:13;7157:20;;-1:-1:-1;;;;;;7157:20:0;;;7187:34;7212:8;7187:24;:34::i;:::-;7075:153;:::o;5394:187::-;5467:16;5486:6;;-1:-1:-1;;;;;5502:17:0;;;-1:-1:-1;;;;;;5502:17:0;;;;;;5534:40;;5486:6;;;;;;;5534:40;;5467:16;5534:40;5457:124;5394:187;:::o;14:177:1:-;93:13;;-1:-1:-1;;;;;135:31:1;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:828::-;320:6;328;336;344;352;360;368;421:3;409:9;400:7;396:23;392:33;389:53;;;438:1;435;428:12;389:53;461:40;491:9;461:40;:::i;:::-;451:50;;520:49;565:2;554:9;550:18;520:49;:::i;:::-;510:59;;588:49;633:2;622:9;618:18;588:49;:::i;:::-;699:2;684:18;;678:25;793:3;778:19;;772:26;890:3;875:19;;869:26;987:3;972:19;;;966:26;196:828;;;;-1:-1:-1;578:59:1;;678:25;;772:26;;869;;-1:-1:-1;966:26:1;;-1:-1:-1;196:828:1;-1:-1:-1;;;196:828:1:o;1029:203::-;-1:-1:-1;;;;;1193:32:1;;;;1175:51;;1163:2;1148:18;;1029:203::o;1672:265::-;1745:9;;;1776;;1793:15;;;1787:22;;1773:37;1763:168;;1853:10;1848:3;1844:20;1841:1;1834:31;1888:4;1885:1;1878:15;1916:4;1913:1;1906:15;1763:168;1672:265;;;;:::o;1942:217::-;1982:1;2008;1998:132;;2052:10;2047:3;2043:20;2040:1;2033:31;2087:4;2084:1;2077:15;2115:4;2112:1;2105:15;1998:132;-1:-1:-1;2144:9:1;;1942:217::o;2460:230::-;2530:6;2583:2;2571:9;2562:7;2558:23;2554:32;2551:52;;;2599:1;2596;2589:12;2551:52;-1:-1:-1;2644:16:1;;2460:230;-1:-1:-1;2460:230:1:o;:::-;8726:8768:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"608060405234801561000f575f80fd5b5060043610610152575f3560e01c806304eaa11314610156578063106cd4241461017c5780631bfaae1d1461018f578063249d39e914610198578063276b7377146101a15780634cf088d9146101c857806354393b34146101fc578063570dcb2f146102115780635aca870d1461023857806360ee764314610240578063623ef2aa14610253578063660e35921461025c578063696ef3051461026d578063715018a61461027557806379ba50971461027d5780637a720b5f1461028557806381c6c9761461028e57806384f0a74a146102975780638da5cb5b1461029f578063970f2888146102a7578063b65d1ea8146102ba578063bc537912146102c3578063bd0c28c3146102ea578063dec616fb146102f4578063e30c3978146102fd578063e637bb8b14610305578063f2fde38b14610318578063fdcf9e1f1461032b575b5f80fd5b610169610164366004610bbb565b610352565b6040519081526020015b60405180910390f35b61016961018a366004610bd2565b6104de565b61016961177081565b61016961271081565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101739190610c41565b61020f61020a366004610bbb565b610579565b005b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b61020f6105e9565b61016961024e366004610bbb565b610698565b61016960045481565b61016969d3c21bcecceda100000081565b610169602081565b61020f6107cc565b61020f6107df565b61016960025481565b61016960055481565b61020f61081e565b6101ef610883565b6101696102b5366004610bd2565b610891565b6101696107d081565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101696202a30081565b61016960035481565b6101ef6108a9565b610169610313366004610bd2565b6108b8565b61020f610326366004610c69565b6109cb565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa9250505080156103d5575060408051601f3d908101601f191682019092526103d291810190610c84565b60015b6103fa5760405163124bad6360e31b8152600481018390526024015b60405180910390fd5b6001600160a01b0381166104245760405163124bad6360e31b8152600481018490526024016103f1565b506040516302e2c6f960e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906305c58df290602401602060405180830381865afa9250505080156104a6575060408051601f3d908101601f191682019092526104a391810190610c9f565b60015b6104c657604051635c3a82cf60e11b8152600481018390526024016103f1565b6104d28160ff16610698565b9392505050565b919050565b5f806104ea8484610891565b90506127107f000000000000000000000000000000000000000000000000000000000000000061051a8284610cd3565b6105249190610cfa565b61052e9190610d11565b7f000000000000000000000000000000000000000000000000000000000000000061055b61271084610d11565b6105659190610cfa565b61056f9190610d24565b9150505b92915050565b610581610a31565b61058a81610a63565b600381905561059c6202a30042610d24565b600481905560025460408051918252602082018490528101919091527f23425d5d10aa216657346914b0a3ab4bfb01b111b6a15fb044a0d8f9c3b73107906060015b60405180910390a150565b6105f1610a31565b6003545f81900361061557604051630d925ae760e21b815260040160405180910390fd5b60045442101561063c576004805460405163ee68b01760e01b8152918201526024016103f1565b61064581610a63565b600280545f600381905560045590829055426005556040517ffaeaabf7d533ed4e9b1bc7b65e847c6b84ee674b7f7acce6de5b46de63ea71bf9061068c9083908590610d37565b60405180910390a15050565b5f8115806106a6575060ff82115b156106c75760405163716593c960e01b8152600481018390526024016103f1565b604051633698617160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260ff841660248301527f00000000000000000000000000000000000000000000000000000000000000001690636d30c2e290604401602060405180830381865afa158015610754573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107789190610d45565b9050805f0361079d5760405163716593c960e01b8152600481018390526024016103f1565b69d3c21bcecceda10000008111156104d95781816040516304d6f4e560e21b81526004016103f1929190610d37565b6107d4610a31565b6107dd5f610b58565b565b33806107e96108a9565b6001600160a01b031614610812578060405163118cdaa760e01b81526004016103f19190610c41565b61081b81610b58565b50565b610826610a31565b6003545f81900361084a57604051630d925ae760e21b815260040160405180910390fd5b5f60038190556004556040518181527fb3504e3db0d46f4929f0e020e3e206a2f034bd6219c0bf767d19a518ee5f6c44906020016105de565b5f546001600160a01b031690565b5f60025461089f84846108b8565b6104d29190610cfa565b6001546001600160a01b031690565b5f8160208111156108df57604051630677bac560e31b8152600481018290526024016103f1565b5f5b818110156109c357801580159061093257508484610900600184610d5c565b81811061090f5761090f610d6f565b9050602002013585858381811061092857610928610d6f565b9050602002013511155b1561098e578484610944600184610d5c565b81811061095357610953610d6f565b9050602002013585858381811061096c5761096c610d6f565b90506020020135604051630a6f6bbf60e11b81526004016103f1929190610d37565b6109af8585838181106109a3576109a3610d6f565b90506020020135610352565b6109b99084610d24565b92506001016108e1565b505092915050565b6109d3610a31565b600180546001600160a01b0319166001600160a01b0383169081179091556109f9610883565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b33610a3a610883565b6001600160a01b0316146107dd573360405163118cdaa760e01b81526004016103f19190610c41565b7f0000000000000000000000000000000000000000000000000000000000000000811080610ab057507f000000000000000000000000000000000000000000000000000000000000000081115b15610ad1576040516340fe4bf560e11b8152600481018290526024016103f1565b600254808203610af45760405163011986d960e71b815260040160405180910390fd5b5f818311610b0b57610b068383610d5c565b610b15565b610b158284610d5c565b9050610b256107d0612710610d11565b610b2f9083610d11565b811115610b5357818360405163089e191b60e01b81526004016103f1929190610d37565b505050565b600180546001600160a01b031916905561081b815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610bcb575f80fd5b5035919050565b5f8060208385031215610be3575f80fd5b82356001600160401b03811115610bf8575f80fd5b8301601f81018513610c08575f80fd5b80356001600160401b03811115610c1d575f80fd5b8560208260051b8401011115610c31575f80fd5b6020919091019590945092505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461081b575f80fd5b5f60208284031215610c79575f80fd5b81356104d281610c55565b5f60208284031215610c94575f80fd5b81516104d281610c55565b5f60208284031215610caf575f80fd5b815160ff811681146104d2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f82610ce157610ce1610cbf565b500690565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761057357610573610ce6565b5f82610d1f57610d1f610cbf565b500490565b8082018082111561057357610573610ce6565b918252602082015260400190565b5f60208284031215610d55575f80fd5b5051919050565b8181038181111561057357610573610ce6565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220fb13dd3e76b481c5c9e69c913b06a8bcab8e84373953f8ab5f8ba03d4b6b8eec64736f6c634300081a0033","sourceMap":"8726:8768:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14258:618;;;;;;:::i;:::-;;:::i;:::-;;;345:25:1;;;333:2;318:18;14258:618:0;;;;;;;;12874:368;;;;;;:::i;:::-;;:::i;8824:43::-;;8862:5;8824:43;;8782:36;;8812:6;8782:36;;9364:31;;;;;9219:45;;;;;;;;;;;;:::i;15525:291::-;;;;;;:::i;:::-;;:::i;:::-;;9164:49;;;;;15905:543;;;:::i;15055:377::-;;;;;;:::i;:::-;;:::i;9477:33::-;;;;;;9117:40;;9153:4;9117:40;;8984:42;;9024:2;8984:42;;4775:101;;;:::i;7308:229::-;;;:::i;9402:28::-;;;;;;9763:30;;;;;;16540:283;;;:::i;4120:85::-;;;:::i;13327:144::-;;;;;;:::i;:::-;;:::i;8873:52::-;;8920:5;8873:52;;9270:41;;;;;8931:47;;8972:6;8931:47;;9436:35;;;;;;6421:99;;;:::i;13720:451::-;;;;;;:::i;:::-;;:::i;6713:178::-;;;;;;:::i;:::-;;:::i;9317:41::-;;;;;14258:618;14490:26;;-1:-1:-1;;;14490:26:0;;;;;345:25:1;;;14313:7:0;;14490:9;-1:-1:-1;;;;;14490:17:0;;;;318:18:1;;14490:26:0;;;;;;;;;;;;;;;;;;-1:-1:-1;14490:26:0;;;;;;;;-1:-1:-1;;14490:26:0;;;;;;;;;;;;:::i;:::-;;;14486:203;;14657:21;;-1:-1:-1;;;14657:21:0;;;;;345:25:1;;;318:18;;14657:21:0;;;;;;;;14486:203;-1:-1:-1;;;;;14564:24:0;;14560:58;;14597:21;;-1:-1:-1;;;14597:21:0;;;;;345:25:1;;;318:18;;14597:21:0;199:177:1;14560:58:0;-1:-1:-1;14702:24:0;;-1:-1:-1;;;14702:24:0;;;;;345:25:1;;;14702:9:0;-1:-1:-1;;;;;14702:15:0;;;;318:18:1;;14702:24:0;;;;;;;;;;;;;;;;;;-1:-1:-1;14702:24:0;;;;;;;;-1:-1:-1;;14702:24:0;;;;;;;;;;;;:::i;:::-;;;14698:172;;14835:24;;-1:-1:-1;;;14835:24:0;;;;;345:25:1;;;318:18;;14835:24:0;199:177:1;14698:172:0;14773:23;14787:8;14773:23;;:13;:23::i;:::-;14766:30;14258:618;-1:-1:-1;;;14258:618:0:o;14698:172::-;14258:618;;;:::o;12874:368::-;12946:7;12965:13;12981:25;12997:8;;12981:15;:25::i;:::-;12965:41;-1:-1:-1;8812:6:0;13223;13208:11;8812:6;12965:41;13208:11;:::i;:::-;13207:22;;;;:::i;:::-;:28;;;;:::i;:::-;13198:6;13183:11;8812:6;13183:5;:11;:::i;:::-;13182:22;;;;:::i;:::-;:53;;;;:::i;:::-;13175:60;;;12874:368;;;;;:::o;15525:291::-;4013:13;:11;:13::i;:::-;15602:30:::1;15623:8;15602:20;:30::i;:::-;15642:20;:31:::0;;;15704:32:::1;8972:6;15704:15;:32;:::i;:::-;15683:18;:53:::0;;;15765:13:::1;::::0;15751:58:::1;::::0;;3611:25:1;;;3667:2;3652:18;;3645:34;;;3695:18;;3688:34;;;;15751:58:0::1;::::0;3599:2:1;3584:18;15751:58:0::1;;;;;;;;15525:291:::0;:::o;15905:543::-;4013:13;:11;:13::i;:::-;15985:20:::1;::::0;15966:16:::1;16019:13:::0;;;16015:48:::1;;16041:22;;-1:-1:-1::0;;;16041:22:0::1;;;;;;;;;;;16015:48;16095:18;;16077:15;:36;16073:88;;;16142:18;::::0;;16122:39:::1;::::0;-1:-1:-1;;;16122:39:0;;;;::::1;345:25:1::0;318:18;;16122:39:0::1;199:177:1::0;16073:88:0::1;16171:30;16192:8;16171:20;:30::i;:::-;16231:13;::::0;;16212:16:::1;16261:20;16254:27:::0;;;16298:18:::1;16291:25:::0;16326:24;;;;16378:15:::1;16360;:33:::0;16408::::1;::::0;::::1;::::0;::::1;::::0;16231:13;;16342:8;;16408:33:::1;:::i;:::-;;;;;;;;15956:492;;15905:543::o:0;15055:377::-;15117:13;15146;;;:43;;-1:-1:-1;15174:15:0;15163:26;;15146:43;15142:82;;;15198:26;;-1:-1:-1;;;15198:26:0;;;;;345:25:1;;;318:18;;15198:26:0;199:177:1;15142:82:0;15242:54;;-1:-1:-1;;;15242:54:0;;-1:-1:-1;;;;;15268:9:0;4174:32:1;;15242:54:0;;;4156:51:1;4255:4;4243:17;;4223:18;;;4216:45;15242:7:0;:17;;;;4129:18:1;;15242:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15234:62;;15310:5;15319:1;15310:10;15306:49;;15329:26;;-1:-1:-1;;;15329:26:0;;;;;345:25:1;;;318:18;;15329:26:0;199:177:1;15306:49:0;9153:4;15369:5;:17;15365:60;;;15409:8;15419:5;15395:30;;-1:-1:-1;;;15395:30:0;;;;;;;;;:::i;4775:101::-;4013:13;:11;:13::i;:::-;4839:30:::1;4866:1;4839:18;:30::i;:::-;4775:101::o:0;7308:229::-;2322:10;;7403:14;:12;:14::i;:::-;-1:-1:-1;;;;;7403:24:0;;7399:96;;7477:6;7450:34;;-1:-1:-1;;;7450:34:0;;;;;;;;:::i;7399:96::-;7504:26;7523:6;7504:18;:26::i;:::-;7350:187;7308:229::o;16540:283::-;4013:13;:11;:13::i;:::-;16619:20:::1;::::0;16600:16:::1;16653:13:::0;;;16649:48:::1;;16675:22;;-1:-1:-1::0;;;16675:22:0::1;;;;;;;;;;;16649:48;16707:27;16714:20;16707:27:::0;;;16751:18:::1;16744:25:::0;16784:32:::1;::::0;345:25:1;;;16784:32:0::1;::::0;333:2:1;318:18;16784:32:0::1;199:177:1::0;4120:85:0;4166:7;4192:6;-1:-1:-1;;;;;4192:6:0;;4120:85::o;13327:144::-;13402:7;13451:13;;13428:20;13439:8;;13428:10;:20::i;:::-;:36;;;;:::i;6421:99::-;6500:13;;-1:-1:-1;;;;;6500:13:0;;6421:99::o;13720:451::-;13790:13;13831:8;9024:2;13860:21;;13856:56;;;13890:22;;-1:-1:-1;;;13890:22:0;;;;;345:25:1;;;318:18;;13890:22:0;199:177:1;13856:56:0;13927:9;13922:243;13942:5;13938:1;:9;13922:243;;;13972:6;;;;;:40;;-1:-1:-1;13997:8:0;;14006:5;14010:1;14006;:5;:::i;:::-;13997:15;;;;;;;:::i;:::-;;;;;;;13982:8;;13991:1;13982:11;;;;;;;:::i;:::-;;;;;;;:30;;13972:40;13968:144;;;14068:8;;14077:5;14081:1;14077;:5;:::i;:::-;14068:15;;;;;;;:::i;:::-;;;;;;;14085:8;;14094:1;14085:11;;;;;;;:::i;:::-;;;;;;;14039:58;;-1:-1:-1;;;14039:58:0;;;;;;;;;:::i;13968:144::-;14134:20;14142:8;;14151:1;14142:11;;;;;;;:::i;:::-;;;;;;;14134:7;:20::i;:::-;14125:29;;;;:::i;:::-;;-1:-1:-1;13949:3:0;;13922:243;;;;13805:366;13720:451;;;;:::o;6713:178::-;4013:13;:11;:13::i;:::-;6802::::1;:24:::0;;-1:-1:-1;;;;;;6802:24:0::1;-1:-1:-1::0;;;;;6802:24:0;::::1;::::0;;::::1;::::0;;;6866:7:::1;:5;:7::i;:::-;-1:-1:-1::0;;;;;6841:43:0::1;;;;;;;;;;;6713:178:::0;:::o;4278:162::-;2322:10;4337:7;:5;:7::i;:::-;-1:-1:-1;;;;;4337:23:0;;4333:101;;2322:10;4383:40;;-1:-1:-1;;;4383:40:0;;;;;;;;:::i;16829:663::-;16915:16;16904:8;:27;:58;;;;16946:16;16935:8;:27;16904:58;16900:97;;;16971:26;;-1:-1:-1;;;16971:26:0;;;;;345:25:1;;;318:18;;16971:26:0;199:177:1;16900:97:0;17025:13;;17052:19;;;17048:48;;17080:16;;-1:-1:-1;;;17080:16:0;;;;;;;;;;;17048:48;17106:18;17138:7;17127:8;:18;:60;;17169:18;17179:8;17169:7;:18;:::i;:::-;17127:60;;;17148:18;17159:7;17148:8;:18;:::i;:::-;17106:81;-1:-1:-1;17387:26:0;8920:5;8812:6;17387:26;:::i;:::-;17376:38;;:7;:38;:::i;:::-;17363:10;:51;17359:127;;;17457:7;17466:8;17437:38;;-1:-1:-1;;;17437:38:0;;;;;;;;;:::i;17359:127::-;16890:602;;16829:663;:::o;7075:153::-;7164:13;7157:20;;-1:-1:-1;;;;;;7157:20:0;;;7187:34;7212:8;5467:16;5486:6;;-1:-1:-1;;;;;5502:17:0;;;-1:-1:-1;;;;;;5502:17:0;;;;;;5534:40;;5486:6;;;;;;;5534:40;;5467:16;5534:40;5457:124;5394:187;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:610::-;467:6;475;528:2;516:9;507:7;503:23;499:32;496:52;;;544:1;541;534:12;496:52;571:23;;-1:-1:-1;;;;;606:30:1;;603:50;;;649:1;646;639:12;603:50;672:22;;725:4;717:13;;713:27;-1:-1:-1;703:55:1;;754:1;751;744:12;703:55;781:16;;-1:-1:-1;;;;;809:30:1;;806:50;;;852:1;849;842:12;806:50;905:7;900:2;890:6;887:1;883:14;879:2;875:23;871:32;868:45;865:65;;;926:1;923;916:12;865:65;957:2;949:11;;;;;979:6;;-1:-1:-1;381:610:1;-1:-1:-1;;;381:610:1:o;996:231::-;-1:-1:-1;;;;;1188:32:1;;;;1170:51;;1158:2;1143:18;;996:231::o;1678:131::-;-1:-1:-1;;;;;1753:31:1;;1743:42;;1733:70;;1799:1;1796;1789:12;1814:247;1873:6;1926:2;1914:9;1905:7;1901:23;1897:32;1894:52;;;1942:1;1939;1932:12;1894:52;1981:9;1968:23;2000:31;2025:5;2000:31;:::i;2066:251::-;2136:6;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2237:9;2231:16;2256:31;2281:5;2256:31;:::i;2322:273::-;2390:6;2443:2;2431:9;2422:7;2418:23;2414:32;2411:52;;;2459:1;2456;2449:12;2411:52;2491:9;2485:16;2541:4;2534:5;2530:16;2523:5;2520:27;2510:55;;2561:1;2558;2551:12;2600:127;2661:10;2656:3;2652:20;2649:1;2642:31;2692:4;2689:1;2682:15;2716:4;2713:1;2706:15;2732:112;2764:1;2790;2780:35;;2795:18;;:::i;:::-;-1:-1:-1;2829:9:1;;2732:112::o;2849:127::-;2910:10;2905:3;2901:20;2898:1;2891:31;2941:4;2938:1;2931:15;2965:4;2962:1;2955:15;2981:168;3054:9;;;3085;;3102:15;;;3096:22;;3082:37;3072:71;;3123:18;;:::i;3154:120::-;3194:1;3220;3210:35;;3225:18;;:::i;:::-;-1:-1:-1;3259:9:1;;3154:120::o;3279:125::-;3344:9;;;3365:10;;;3362:36;;;3378:18;;:::i;3733:248::-;3907:25;;;3963:2;3948:18;;3941:34;3895:2;3880:18;;3733:248::o;4272:184::-;4342:6;4395:2;4383:9;4374:7;4370:23;4366:32;4363:52;;;4411:1;4408;4401:12;4363:52;-1:-1:-1;4434:16:1;;4272:184;-1:-1:-1;4272:184:1:o;4461:128::-;4528:9;;;4549:11;;;4546:37;;;4563:18;;:::i;4594:127::-;4655:10;4650:3;4646:20;4643:1;4636:31;4686:4;4683:1;4676:15;4710:4;4707:1;4700:15","linkReferences":{},"immutableReferences":{"307":[{"start":534,"length":32},{"start":874,"length":32},{"start":1083,"length":32},{"start":1758,"length":32}],"310":[{"start":461,"length":32},{"start":1807,"length":32}],"312":[{"start":712,"length":32},{"start":2661,"length":32}],"314":[{"start":816,"length":32},{"start":2702,"length":32}],"316":[{"start":422,"length":32},{"start":1265,"length":32},{"start":1328,"length":32}]}}}}}}},"signatures":{"function":[{"signature":"acceptOwnership()","signatureHash4":"0x79ba5097","signatureHash32":"0x79ba5097e5519a381a52113cdcc59540d13f73fd9d26abc0453484a096cc96f2"},{"signature":"BPS()","signatureHash4":"0x249d39e9","signatureHash32":"0x249d39e95dcf38deb6c884103e990949e9d7e5d370eee3d20091aba0a46aa824"},{"signature":"cancelPriceProposal()","signatureHash4":"0x84f0a74a","signatureHash32":"0x84f0a74a79aabc7bfc0f3c06ba7a538b407cab39723b45800f293958c4336953"},{"signature":"collateralValue(uint256[])","signatureHash4":"0x970f2888","signatureHash32":"0x970f28886393dd8befc898f006627f0187a3245b7decd302ba4c1cdfd4e50cdc"},{"signature":"creditLine(uint256[])","signatureHash4":"0x106cd424","signatureHash32":"0x106cd42426a914e5f4b88a9b09575929f93347022cbea4df92b087c57932f30f"},{"signature":"executePricePerPower()","signatureHash4":"0x5aca870d","signatureHash32":"0x5aca870d0c9b1f3207dbfad2f5c2e2503cc5e26405eef1ea62768bde554c3d1e"},{"signature":"lastPriceChange()","signatureHash4":"0x81c6c976","signatureHash32":"0x81c6c97641985582cdfe6f43a1075c7c02bb91df95e7b1584d1fdd432138100b"},{"signature":"ltvBps()","signatureHash4":"0x276b7377","signatureHash32":"0x276b73777e011a747f6b9fc807a59c42e54496484f577f007a09a44c8b8ca3e0"},{"signature":"MAX_LTV_BPS()","signatureHash4":"0x1bfaae1d","signatureHash32":"0x1bfaae1d22af1e441707d46a382e1571ec9183c01a18b9a7ae78ecb781f76b9e"},{"signature":"MAX_POWER()","signatureHash4":"0x660e3592","signatureHash32":"0x660e359220d925a726edb235e7ee94e781f8c6d6f402fdd786780abee0c5fc9e"},{"signature":"MAX_PRICE_CHANGE_BPS()","signatureHash4":"0xb65d1ea8","signatureHash32":"0xb65d1ea8ff3add652801dc22d64ce39ffb6f22e24a688d51c1481cee3a545aa8"},{"signature":"maxPricePerPower()","signatureHash4":"0xfdcf9e1f","signatureHash32":"0xfdcf9e1fd90ea3109bfaf4e1dac2c04918162de3fac90a48ae88f67110ff59b8"},{"signature":"MAX_TOKEN_IDS()","signatureHash4":"0x696ef305","signatureHash32":"0x696ef305adf554f5099a983021d4c8941b33f999afaae8191cdf5b1881990cdb"},{"signature":"minPricePerPower()","signatureHash4":"0xbc537912","signatureHash32":"0xbc537912a93045b5ac735f84afa3a7e8ef23eda39cae9f71e6942c5d53b58a9e"},{"signature":"owner()","signatureHash4":"0x8da5cb5b","signatureHash32":"0x8da5cb5b36e7f68c1d2e56001220cdbdd3ba2616072f718acfda4a06441a807d"},{"signature":"pendingOwner()","signatureHash4":"0xe30c3978","signatureHash32":"0xe30c3978ddd82956a01b5cb08d17f1a2d73e636aeefb7b36f896e41d4c2aab90"},{"signature":"pendingPricePerPower()","signatureHash4":"0xdec616fb","signatureHash32":"0xdec616fbece495a245e16be54a84889ae20754d777f97076dcb1c954e6e6f220"},{"signature":"powerForLevel(uint256)","signatureHash4":"0x60ee7643","signatureHash32":"0x60ee7643ca0e34f5b144d2329361365d90a7818f17b751324a4c49ddb2a8e186"},{"signature":"powerOf(uint256)","signatureHash4":"0x04eaa113","signatureHash32":"0x04eaa1136b92790be9521ec404d3fca153d8741061c34c4cf4267212885c65da"},{"signature":"priceChangeReadyAt()","signatureHash4":"0x623ef2aa","signatureHash32":"0x623ef2aa5572a185da1f4cb0c710537f2576a68b111382337334820553b9fd38"},{"signature":"pricePerPower()","signatureHash4":"0x7a720b5f","signatureHash32":"0x7a720b5fe859be15edc5f27b41a9ea519f6ad1d17c3632f4950f74476b9053bf"},{"signature":"PRICE_TIMELOCK()","signatureHash4":"0xbd0c28c3","signatureHash32":"0xbd0c28c36a5d671997e1f8b7642396336a71581912b835d2a49d563022003b66"},{"signature":"proposePricePerPower(uint256)","signatureHash4":"0x54393b34","signatureHash32":"0x54393b34f3de8bd76df1cfd81417459641453fc32f4a0839fb7a123d90a393d4"},{"signature":"renounceOwnership()","signatureHash4":"0x715018a6","signatureHash32":"0x715018a616b5f2044428f6fadb7deef4ce9ca76ef60ea57978964ad137bbe7ae"},{"signature":"squeekNFT()","signatureHash4":"0x570dcb2f","signatureHash32":"0x570dcb2f04078d8870c8e97267ce23863a3699bc8e8249bd49958f62e6c0e15e"},{"signature":"staking()","signatureHash4":"0x4cf088d9","signatureHash32":"0x4cf088d99cdcc3849c6e3347a342e632ea145b43d563ff7182bc6e930797e161"},{"signature":"totalPower(uint256[])","signatureHash4":"0xe637bb8b","signatureHash32":"0xe637bb8b4fbd90c659c6a9827482142125caf718752b28f7f1e121d622708bbf"},{"signature":"transferOwnership(address)","signatureHash4":"0xf2fde38b","signatureHash32":"0xf2fde38b092330466c661fc723d5289b90272a3e580e3187d1d7ef788506c557"}],"event":[{"signature":"OwnershipTransferred(address,address)","signatureHash4":"0x8be0079c","signatureHash32":"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0"},{"signature":"OwnershipTransferStarted(address,address)","signatureHash4":"0x38d16b8c","signatureHash32":"0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700"},{"signature":"PriceExecuted(uint256,uint256)","signatureHash4":"0xfaeaabf7","signatureHash32":"0xfaeaabf7d533ed4e9b1bc7b65e847c6b84ee674b7f7acce6de5b46de63ea71bf"},{"signature":"PriceProposalCancelled(uint256)","signatureHash4":"0xb3504e3d","signatureHash32":"0xb3504e3db0d46f4929f0e020e3e206a2f034bd6219c0bf767d19a518ee5f6c44"},{"signature":"PriceProposed(uint256,uint256,uint256)","signatureHash4":"0x23425d5d","signatureHash32":"0x23425d5d10aa216657346914b0a3ab4bfb01b111b6a15fb044a0d8f9c3b73107"}],"error":[{"signature":"InvalidCollection(address)","signatureHash4":"0xbf29a5e5","signatureHash32":"0xbf29a5e5d72173fc93ca887f1f63fc6cc44a99689da856217e501d1c8f1aa044"},{"signature":"InvalidLtvBps(uint256)","signatureHash4":"0xb9ca2645","signatureHash32":"0xb9ca2645e40e7f0b6e707428b7dc71810188c122b6de426b2312f2acfa4df05e"},{"signature":"InvalidPriceBand(uint256,uint256)","signatureHash4":"0xb0371293","signatureHash32":"0xb037129322eb0d921b5aeb4d9d092efdcb1737bd005abce6f3159546a928c4c0"},{"signature":"InvalidStaking(address)","signatureHash4":"0x7d0da823","signatureHash32":"0x7d0da823960777a40ba3bebb7ff9bd493f3440e47beb37e2542cd9541a7715db"},{"signature":"InvalidToken(uint256)","signatureHash4":"0x925d6b18","signatureHash32":"0x925d6b18913fcd11bb4450b4a5673caa137bc298340c803dd17fca37d99fb2bb"},{"signature":"LevelReadFailed(uint256)","signatureHash4":"0xb875059e","signatureHash32":"0xb875059eec3e041d0fb8d228d319abbb07d652e234c9e69a0936c3620c1e2b85"},{"signature":"NoPendingPriceChange()","signatureHash4":"0x36496b9c","signatureHash32":"0x36496b9cef50a8f8a988b8660e8159c1b1601d3a07aad3c83e79fa009443b95d"},{"signature":"OwnableInvalidOwner(address)","signatureHash4":"0x1e4fbdf7","signatureHash32":"0x1e4fbdf7f3ef8bcaa855599e3abf48b232380f183f08f6f813d9ffa5bd585188"},{"signature":"OwnableUnauthorizedAccount(address)","signatureHash4":"0x118cdaa7","signatureHash32":"0x118cdaa7a341953d1887a2245fd6665d741c67c8c50581daa59e1d03373fa188"},{"signature":"PowerTooLarge(uint256,uint256)","signatureHash4":"0x135bd394","signatureHash32":"0x135bd39402023a139c264d0ce49dae38370ea4af1f440b950f7b44778f7cf458"},{"signature":"PriceChangeNotReady(uint256)","signatureHash4":"0xee68b017","signatureHash32":"0xee68b017206067ffe01ae8e56303ab9b00ad1e2322556fe10b147e88798e624e"},{"signature":"PriceChangeTooLarge(uint256,uint256)","signatureHash4":"0x089e191b","signatureHash32":"0x089e191b8a54d91e92c962e584404f96ee0ebd09a23020ee617cbeb73a116565"},{"signature":"PriceOutsideBand(uint256)","signatureHash4":"0x81fc97ea","signatureHash32":"0x81fc97eafbf50a9d00d3a928fa59f6ff206610a392bb727acf4beaa8fe72cd4b"},{"signature":"PriceUnchanged()","signatureHash4":"0x8cc36c80","signatureHash32":"0x8cc36c80a95702166ce1ee2e19d42aa59c96fde9a08bdcbbc7f1eacd63fd1fdd"},{"signature":"TokenIdsNotStrictlyAscending(uint256,uint256)","signatureHash4":"0x14ded77e","signatureHash32":"0x14ded77e3975144446386d6155e58c51db6fa8f1c5f96598f1db97efec6f4464"},{"signature":"TooManyTokenIds(uint256)","signatureHash4":"0x33bdd628","signatureHash32":"0x33bdd6282efef70faaf8edef65bf340138c40b842ca3254c4588e2da91478332"},{"signature":"UnsupportedLevel(uint256)","signatureHash4":"0x716593c9","signatureHash32":"0x716593c9a9b540262ba4010e3eacdbda231856ebaa449065754d91dd1c638c63"}]},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"match":"exact_match","chainId":"11155111","address":"0x8F677a270fFd8769C01876216991c98561302C7b"}