{"matchId":"57915337","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-11-01T04:55:56Z","creationBytecode":{"onchainBytecode":"0x60e060405260018055348015610013575f80fd5b5060405161148d38038061148d833981016040819052610032916100d3565b6001600160a01b03808316608052811660a08190526040805163c98a295b60e01b8152905163c98a295b916004808201926020929091908290030181865afa158015610080573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a49190610104565b6001600160a01b031660c052506101249050565b80516001600160a01b03811681146100ce575f80fd5b919050565b5f80604083850312156100e4575f80fd5b6100ed836100b8565b91506100fb602084016100b8565b90509250929050565b5f60208284031215610114575f80fd5b61011d826100b8565b9392505050565b60805160a05160c05161130061018d5f395f818161022c015261079801525f81816102ca0152818161056d0152818161070c015281816107c50152818161084601528181610bc90152610d9701525f81816102900152818161063c015261091501526113005ff3fe608060405234801561000f575f80fd5b50600436106100e4575f3560e01c80630225d3cc146100e85780630361bf14146101045780631338736f14610117578063322e9f041461012a57806351e42ab5146101325780635922e2531461013b5780635f1c17c01461015057806361b8ce8c146101f857806396c82e57146102015780639886bf631461020a5780639dcedb6e14610214578063c98a295b14610227578063db006a7514610266578063eb72c8d814610279578063f060482914610282578063f2f4eb261461028b578063fb3d3df2146102b2578063fbfa77cf146102c5575b5f80fd5b6100f16107d081565b6040519081526020015b60405180910390f35b6100f161011236600461108e565b6102ec565b6100f16101253660046110a5565b6103c9565b6100f1610639565b6100f160035481565b61014e61014936600461108e565b6106cd565b005b6101b061015e36600461108e565b5f602081905290815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160401b039081169290811691600160401b9091046001600160801b03169085565b604080516001600160a01b039690961686526001600160401b03948516602087015292909316918401919091526001600160801b03166060830152608082015260a0016100fb565b6100f160015481565b6100f160025481565b6100f1620f424081565b61014e6102223660046110a5565b6108e3565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100fb565b61014e61027436600461108e565b610c95565b6100f160045481565b6100f16101f481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6100f16102c036600461108e565b610e8e565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082015281610362610639565b905081604001516001600160401b03168110156103bf5781602001516001600160401b031681116103a05781602001516001600160401b03166103a2565b805b82604001516001600160401b03166103ba91906110d9565b6103c1565b5f5b949350505050565b5f8215806103dd57506001600160801b0383115b156103fb5760405163f456040360e01b815260040160405180910390fd5b6101f482108061040d5750620f424082115b1561042b5760405163014b311560e31b815260040160405180910390fd5b5f610434610639565b600180549192505f610445836110ec565b909155506040805160a0810182523381526001600160401b03841660208201529193505f919081016104778685611104565b6001600160401b0390811682526001600160801b038089166020808501919091526003546040948501525f88815280825284902085518154928701518516600160a01b026001600160e01b03199093166001600160a01b0390911617919091178155928401516001840180546060870151909316600160401b026001600160c01b031990931691909316171790556080820151600290910155905061051b81610f3d565b60025f82825461052b9190611104565b90915550506004541561054b57600480545f90915561054981610f79565b505b6040516323b872dd60e01b8152336004820152306024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af11580156105bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105df9190611126565b506040818101518151878152602081018590526001600160401b03909116818301529051339185917fd5987d72b516fb12b1d31e6a7ab75f0c975e512aba9225ebbbb1b58c25cbb7a79181900360600190a3505092915050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa158015610697573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bb919061117e565b602001516001600160401b0316905090565b3330146106ed576040516330cd747160e01b815260040160405180910390fd5b604051630441a3e760e41b8152600481018290525f60248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063441a3e70906044016020604051808303815f875af115801561075a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077e9190611245565b60405163095ea7b360e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906107ef907f000000000000000000000000000000000000000000000000000000000000000090859060040161125c565b6020604051808303815f875af115801561080b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082f9190611126565b5060405163f14faf6f60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f14faf6f906024015f604051808303815f87803b15801561088f575f80fd5b505af11580156108a1573d5f803e3d5ffd5b505060408051858152602081018590527f3f2a7eec90b377537d640acdf78c4ffc072aec2431c1057ea33245c8f3255ce4935001905060405180910390a15050565b5f6108ed83610fd0565b90505f816020015182604001516109049190611275565b6001600160401b031690505f8190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa92505050801561098e575060408051601f3d908101601f1916820190925261098b9181019061117e565b60015b156109fe57602081015160408501516001600160401b0391821691168110156109f75784602001516001600160401b031681116109d85784602001516001600160401b03166109da565b805b85604001516001600160401b03166109f291906110d9565b6109f9565b5f5b925050505b5f61271083836107d087606001516001600160801b0316610a1f9190611294565b610a299190611294565b610a3391906112ab565b610a3d91906112ab565b90505f6a0c097ce7bc90715b34b9f160241b8560800151600354610a6191906110d9565b610a6a87610f3d565b610a749190611294565b610a7e91906112ab565b90505f8286606001516001600160801b0316610a9a91906110d9565b905086811015610abd57604051633de57c2360e21b815260040160405180910390fd5b5f88815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201556060860151610b079086906001600160801b0316611294565b60025f828254610b1791906110d9565b909155505f9050610b296002856112ab565b90505f83610b3783876110d9565b610b419190611104565b90508115610ba157604051635922e25360e01b8152600481018390523090635922e253906024015f604051808303815f87803b158015610b7f575f80fd5b505af1925050508015610b90575060015b610ba157610b9e8282611104565b90505b8015610bb057610bb081610f79565b875160405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91610bff9190879060040161125c565b6020604051808303815f875af1158015610c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3f9190611126565b50875160408051858152602081018890526001600160a01b03909216918c917fb9447a366f766b5feac87e6d186f8bd51e5cd2b1226ec8a58b31d0e1ba83e4a4910160405180910390a350505050505050505050565b5f610c9f82610fd0565b90505f610caa610639565b905081604001516001600160401b0316811015610cf6576040808301519051630f09f55b60e41b8152600481018390526001600160401b03909116602482015260440160405180910390fd5b5f6a0c097ce7bc90715b34b9f160241b8360800151600354610d1891906110d9565b610d2185610f3d565b610d2b9190611294565b610d3591906112ab565b5f85815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201559050610d7183610f3d565b60025f828254610d8191906110d9565b9091555050825160608401516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91610dd29085906001600160801b0316611104565b6040518363ffffffff1660e01b8152600401610def92919061125c565b6020604051808303815f875af1158015610e0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2f9190611126565b5082516060840151604080516001600160801b039092168252602082018490526001600160a01b039092169186917fa5851b0172fdafd3dafe0e52ce051747548a4c642a2f22793c01faf228e13062910160405180910390a350505050565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082018190526003546a0c097ce7bc90715b34b9f160241b91610f19916110d9565b610f2283610f3d565b610f2c9190611294565b610f3691906112ab565b9392505050565b5f81602001518260400151610f529190611275565b6001600160401b031682606001516001600160801b0316610f739190611294565b92915050565b6002545f03610f9b578060045f828254610f939190611104565b909155505050565b600254610fb66a0c097ce7bc90715b34b9f160241b83611294565b610fc091906112ab565b60035f828254610f939190611104565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152505f8181526020818152604091829020825160a08101845281546001600160a01b038116808352600160a01b9091046001600160401b0390811694830194909452600183015493841694820194909452600160401b9092046001600160801b03166060830152600201546080820152903314611089576040516330cd747160e01b815260040160405180910390fd5b919050565b5f6020828403121561109e575f80fd5b5035919050565b5f80604083850312156110b6575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610f7357610f736110c5565b5f600182016110fd576110fd6110c5565b5060010190565b80820180821115610f7357610f736110c5565b80518015158114611089575f80fd5b5f60208284031215611136575f80fd5b610f3682611117565b80516001600160401b0381168114611089575f80fd5b80516001600160601b0381168114611089575f80fd5b805163ffffffff81168114611089575f80fd5b5f610100828403128015611190575f80fd5b5060405161010081016001600160401b03811182821017156111c057634e487b7160e01b5f52604160045260245ffd5b6040526111cc8361113f565b81526111da6020840161113f565b60208201526111eb60408401611155565b60408201526111fc6060840161113f565b606082015261120d60808401611155565b608082015261121e60a0840161116b565b60a082015260c0838101519082015261123960e08401611117565b60e08201529392505050565b5f60208284031215611255575f80fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6001600160401b038281168282160390811115610f7357610f736110c5565b8082028115828204841417610f7357610f736110c5565b5f826112c557634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212206efae6d7008736996f0110e0c304aea683c2cf78ccd7ab365b36e87dd2a468d564736f6c634300081a0033000000000000000000000000980b4424c007caf7a1f3670b48c8eaef7ebc3d44000000000000000000000000b63abab9019fa0db4a3ab1824c5e5fa7171f1472","recompiledBytecode":"0x60e060405260018055348015610013575f80fd5b5060405161148d38038061148d833981016040819052610032916100d3565b6001600160a01b03808316608052811660a08190526040805163c98a295b60e01b8152905163c98a295b916004808201926020929091908290030181865afa158015610080573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a49190610104565b6001600160a01b031660c052506101249050565b80516001600160a01b03811681146100ce575f80fd5b919050565b5f80604083850312156100e4575f80fd5b6100ed836100b8565b91506100fb602084016100b8565b90509250929050565b5f60208284031215610114575f80fd5b61011d826100b8565b9392505050565b60805160a05160c05161130061018d5f395f818161022c015261079801525f81816102ca0152818161056d0152818161070c015281816107c50152818161084601528181610bc90152610d9701525f81816102900152818161063c015261091501526113005ff3fe608060405234801561000f575f80fd5b50600436106100e4575f3560e01c80630225d3cc146100e85780630361bf14146101045780631338736f14610117578063322e9f041461012a57806351e42ab5146101325780635922e2531461013b5780635f1c17c01461015057806361b8ce8c146101f857806396c82e57146102015780639886bf631461020a5780639dcedb6e14610214578063c98a295b14610227578063db006a7514610266578063eb72c8d814610279578063f060482914610282578063f2f4eb261461028b578063fb3d3df2146102b2578063fbfa77cf146102c5575b5f80fd5b6100f16107d081565b6040519081526020015b60405180910390f35b6100f161011236600461108e565b6102ec565b6100f16101253660046110a5565b6103c9565b6100f1610639565b6100f160035481565b61014e61014936600461108e565b6106cd565b005b6101b061015e36600461108e565b5f602081905290815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160401b039081169290811691600160401b9091046001600160801b03169085565b604080516001600160a01b039690961686526001600160401b03948516602087015292909316918401919091526001600160801b03166060830152608082015260a0016100fb565b6100f160015481565b6100f160025481565b6100f1620f424081565b61014e6102223660046110a5565b6108e3565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100fb565b61014e61027436600461108e565b610c95565b6100f160045481565b6100f16101f481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6100f16102c036600461108e565b610e8e565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082015281610362610639565b905081604001516001600160401b03168110156103bf5781602001516001600160401b031681116103a05781602001516001600160401b03166103a2565b805b82604001516001600160401b03166103ba91906110d9565b6103c1565b5f5b949350505050565b5f8215806103dd57506001600160801b0383115b156103fb5760405163f456040360e01b815260040160405180910390fd5b6101f482108061040d5750620f424082115b1561042b5760405163014b311560e31b815260040160405180910390fd5b5f610434610639565b600180549192505f610445836110ec565b909155506040805160a0810182523381526001600160401b03841660208201529193505f919081016104778685611104565b6001600160401b0390811682526001600160801b038089166020808501919091526003546040948501525f88815280825284902085518154928701518516600160a01b026001600160e01b03199093166001600160a01b0390911617919091178155928401516001840180546060870151909316600160401b026001600160c01b031990931691909316171790556080820151600290910155905061051b81610f3d565b60025f82825461052b9190611104565b90915550506004541561054b57600480545f90915561054981610f79565b505b6040516323b872dd60e01b8152336004820152306024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af11580156105bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105df9190611126565b506040818101518151878152602081018590526001600160401b03909116818301529051339185917fd5987d72b516fb12b1d31e6a7ab75f0c975e512aba9225ebbbb1b58c25cbb7a79181900360600190a3505092915050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa158015610697573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bb919061117e565b602001516001600160401b0316905090565b3330146106ed576040516330cd747160e01b815260040160405180910390fd5b604051630441a3e760e41b8152600481018290525f60248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063441a3e70906044016020604051808303815f875af115801561075a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077e9190611245565b60405163095ea7b360e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906107ef907f000000000000000000000000000000000000000000000000000000000000000090859060040161125c565b6020604051808303815f875af115801561080b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082f9190611126565b5060405163f14faf6f60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f14faf6f906024015f604051808303815f87803b15801561088f575f80fd5b505af11580156108a1573d5f803e3d5ffd5b505060408051858152602081018590527f3f2a7eec90b377537d640acdf78c4ffc072aec2431c1057ea33245c8f3255ce4935001905060405180910390a15050565b5f6108ed83610fd0565b90505f816020015182604001516109049190611275565b6001600160401b031690505f8190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa92505050801561098e575060408051601f3d908101601f1916820190925261098b9181019061117e565b60015b156109fe57602081015160408501516001600160401b0391821691168110156109f75784602001516001600160401b031681116109d85784602001516001600160401b03166109da565b805b85604001516001600160401b03166109f291906110d9565b6109f9565b5f5b925050505b5f61271083836107d087606001516001600160801b0316610a1f9190611294565b610a299190611294565b610a3391906112ab565b610a3d91906112ab565b90505f6a0c097ce7bc90715b34b9f160241b8560800151600354610a6191906110d9565b610a6a87610f3d565b610a749190611294565b610a7e91906112ab565b90505f8286606001516001600160801b0316610a9a91906110d9565b905086811015610abd57604051633de57c2360e21b815260040160405180910390fd5b5f88815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201556060860151610b079086906001600160801b0316611294565b60025f828254610b1791906110d9565b909155505f9050610b296002856112ab565b90505f83610b3783876110d9565b610b419190611104565b90508115610ba157604051635922e25360e01b8152600481018390523090635922e253906024015f604051808303815f87803b158015610b7f575f80fd5b505af1925050508015610b90575060015b610ba157610b9e8282611104565b90505b8015610bb057610bb081610f79565b875160405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91610bff9190879060040161125c565b6020604051808303815f875af1158015610c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3f9190611126565b50875160408051858152602081018890526001600160a01b03909216918c917fb9447a366f766b5feac87e6d186f8bd51e5cd2b1226ec8a58b31d0e1ba83e4a4910160405180910390a350505050505050505050565b5f610c9f82610fd0565b90505f610caa610639565b905081604001516001600160401b0316811015610cf6576040808301519051630f09f55b60e41b8152600481018390526001600160401b03909116602482015260440160405180910390fd5b5f6a0c097ce7bc90715b34b9f160241b8360800151600354610d1891906110d9565b610d2185610f3d565b610d2b9190611294565b610d3591906112ab565b5f85815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201559050610d7183610f3d565b60025f828254610d8191906110d9565b9091555050825160608401516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91610dd29085906001600160801b0316611104565b6040518363ffffffff1660e01b8152600401610def92919061125c565b6020604051808303815f875af1158015610e0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2f9190611126565b5082516060840151604080516001600160801b039092168252602082018490526001600160a01b039092169186917fa5851b0172fdafd3dafe0e52ce051747548a4c642a2f22793c01faf228e13062910160405180910390a350505050565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082018190526003546a0c097ce7bc90715b34b9f160241b91610f19916110d9565b610f2283610f3d565b610f2c9190611294565b610f3691906112ab565b9392505050565b5f81602001518260400151610f529190611275565b6001600160401b031682606001516001600160801b0316610f739190611294565b92915050565b6002545f03610f9b578060045f828254610f939190611104565b909155505050565b600254610fb66a0c097ce7bc90715b34b9f160241b83611294565b610fc091906112ab565b60035f828254610f939190611104565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152505f8181526020818152604091829020825160a08101845281546001600160a01b038116808352600160a01b9091046001600160401b0390811694830194909452600183015493841694820194909452600160401b9092046001600160801b03166060830152600201546080820152903314611089576040516330cd747160e01b815260040160405180910390fd5b919050565b5f6020828403121561109e575f80fd5b5035919050565b5f80604083850312156110b6575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610f7357610f736110c5565b5f600182016110fd576110fd6110c5565b5060010190565b80820180821115610f7357610f736110c5565b80518015158114611089575f80fd5b5f60208284031215611136575f80fd5b610f3682611117565b80516001600160401b0381168114611089575f80fd5b80516001600160601b0381168114611089575f80fd5b805163ffffffff81168114611089575f80fd5b5f610100828403128015611190575f80fd5b5060405161010081016001600160401b03811182821017156111c057634e487b7160e01b5f52604160045260245ffd5b6040526111cc8361113f565b81526111da6020840161113f565b60208201526111eb60408401611155565b60408201526111fc6060840161113f565b606082015261120d60808401611155565b608082015261121e60a0840161116b565b60a082015260c0838101519082015261123960e08401611117565b60e08201529392505050565b5f60208284031215611255575f80fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6001600160401b038281168282160390811115610f7357610f736110c5565b8082028115828204841417610f7357610f736110c5565b5f826112c557634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212206efae6d7008736996f0110e0c304aea683c2cf78ccd7ab365b36e87dd2a468d564736f6c634300081a0033","sourceMap":"1266:5191:0:-:0;;;1852:1;1828:25;;2584:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2637:24:0;;;;;2671:28;;;;;;2715:26;;;-1:-1:-1;;;2715:26:0;;;;:24;;:26;;;;;;;;;;;;;;;2671:28;2715:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2709:32:0;;;-1:-1:-1;1266:5191:0;;-1:-1:-1;1266:5191:0;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:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;494:208::-;564:6;617:2;605:9;596:7;592:23;588:32;585:52;;;633:1;630;623:12;585:52;656:40;686:9;656:40;:::i;:::-;646:50;494:208;-1:-1:-1;;;494:208:1:o;:::-;1266:5191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa26469706673582212206efae6d7008736996f0110e0c304aea683c2cf78ccd7ab365b36e87dd2a468d564736f6c634300081a0033","offset":5208}},"transformations":[{"type":"insert","offset":5261,"reason":"constructorArguments"}],"transformationValues":{"constructorArguments":"0x000000000000000000000000980b4424c007caf7a1f3670b48c8eaef7ebc3d44000000000000000000000000b63abab9019fa0db4a3ab1824c5e5fa7171f1472"}},"runtimeBytecode":{"onchainBytecode":"0x608060405234801561000f575f80fd5b50600436106100e4575f3560e01c80630225d3cc146100e85780630361bf14146101045780631338736f14610117578063322e9f041461012a57806351e42ab5146101325780635922e2531461013b5780635f1c17c01461015057806361b8ce8c146101f857806396c82e57146102015780639886bf631461020a5780639dcedb6e14610214578063c98a295b14610227578063db006a7514610266578063eb72c8d814610279578063f060482914610282578063f2f4eb261461028b578063fb3d3df2146102b2578063fbfa77cf146102c5575b5f80fd5b6100f16107d081565b6040519081526020015b60405180910390f35b6100f161011236600461108e565b6102ec565b6100f16101253660046110a5565b6103c9565b6100f1610639565b6100f160035481565b61014e61014936600461108e565b6106cd565b005b6101b061015e36600461108e565b5f602081905290815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160401b039081169290811691600160401b9091046001600160801b03169085565b604080516001600160a01b039690961686526001600160401b03948516602087015292909316918401919091526001600160801b03166060830152608082015260a0016100fb565b6100f160015481565b6100f160025481565b6100f1620f424081565b61014e6102223660046110a5565b6108e3565b61024e7f0000000000000000000000005501e1fa81be1c3f49225fa7668da0245d07db6081565b6040516001600160a01b0390911681526020016100fb565b61014e61027436600461108e565b610c95565b6100f160045481565b6100f16101f481565b61024e7f000000000000000000000000980b4424c007caf7a1f3670b48c8eaef7ebc3d4481565b6100f16102c036600461108e565b610e8e565b61024e7f000000000000000000000000b63abab9019fa0db4a3ab1824c5e5fa7171f147281565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082015281610362610639565b905081604001516001600160401b03168110156103bf5781602001516001600160401b031681116103a05781602001516001600160401b03166103a2565b805b82604001516001600160401b03166103ba91906110d9565b6103c1565b5f5b949350505050565b5f8215806103dd57506001600160801b0383115b156103fb5760405163f456040360e01b815260040160405180910390fd5b6101f482108061040d5750620f424082115b1561042b5760405163014b311560e31b815260040160405180910390fd5b5f610434610639565b600180549192505f610445836110ec565b909155506040805160a0810182523381526001600160401b03841660208201529193505f919081016104778685611104565b6001600160401b0390811682526001600160801b038089166020808501919091526003546040948501525f88815280825284902085518154928701518516600160a01b026001600160e01b03199093166001600160a01b0390911617919091178155928401516001840180546060870151909316600160401b026001600160c01b031990931691909316171790556080820151600290910155905061051b81610f3d565b60025f82825461052b9190611104565b90915550506004541561054b57600480545f90915561054981610f79565b505b6040516323b872dd60e01b8152336004820152306024820152604481018690527f000000000000000000000000b63abab9019fa0db4a3ab1824c5e5fa7171f14726001600160a01b0316906323b872dd906064016020604051808303815f875af11580156105bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105df9190611126565b506040818101518151878152602081018590526001600160401b03909116818301529051339185917fd5987d72b516fb12b1d31e6a7ab75f0c975e512aba9225ebbbb1b58c25cbb7a79181900360600190a3505092915050565b5f7f000000000000000000000000980b4424c007caf7a1f3670b48c8eaef7ebc3d446001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa158015610697573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bb919061117e565b602001516001600160401b0316905090565b3330146106ed576040516330cd747160e01b815260040160405180910390fd5b604051630441a3e760e41b8152600481018290525f60248201819052907f000000000000000000000000b63abab9019fa0db4a3ab1824c5e5fa7171f14726001600160a01b03169063441a3e70906044016020604051808303815f875af115801561075a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077e9190611245565b60405163095ea7b360e01b81529091506001600160a01b037f0000000000000000000000005501e1fa81be1c3f49225fa7668da0245d07db60169063095ea7b3906107ef907f000000000000000000000000b63abab9019fa0db4a3ab1824c5e5fa7171f147290859060040161125c565b6020604051808303815f875af115801561080b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082f9190611126565b5060405163f14faf6f60e01b8152600481018290527f000000000000000000000000b63abab9019fa0db4a3ab1824c5e5fa7171f14726001600160a01b03169063f14faf6f906024015f604051808303815f87803b15801561088f575f80fd5b505af11580156108a1573d5f803e3d5ffd5b505060408051858152602081018590527f3f2a7eec90b377537d640acdf78c4ffc072aec2431c1057ea33245c8f3255ce4935001905060405180910390a15050565b5f6108ed83610fd0565b90505f816020015182604001516109049190611275565b6001600160401b031690505f8190507f000000000000000000000000980b4424c007caf7a1f3670b48c8eaef7ebc3d446001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa92505050801561098e575060408051601f3d908101601f1916820190925261098b9181019061117e565b60015b156109fe57602081015160408501516001600160401b0391821691168110156109f75784602001516001600160401b031681116109d85784602001516001600160401b03166109da565b805b85604001516001600160401b03166109f291906110d9565b6109f9565b5f5b925050505b5f61271083836107d087606001516001600160801b0316610a1f9190611294565b610a299190611294565b610a3391906112ab565b610a3d91906112ab565b90505f6a0c097ce7bc90715b34b9f160241b8560800151600354610a6191906110d9565b610a6a87610f3d565b610a749190611294565b610a7e91906112ab565b90505f8286606001516001600160801b0316610a9a91906110d9565b905086811015610abd57604051633de57c2360e21b815260040160405180910390fd5b5f88815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201556060860151610b079086906001600160801b0316611294565b60025f828254610b1791906110d9565b909155505f9050610b296002856112ab565b90505f83610b3783876110d9565b610b419190611104565b90508115610ba157604051635922e25360e01b8152600481018390523090635922e253906024015f604051808303815f87803b158015610b7f575f80fd5b505af1925050508015610b90575060015b610ba157610b9e8282611104565b90505b8015610bb057610bb081610f79565b875160405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000b63abab9019fa0db4a3ab1824c5e5fa7171f1472169163a9059cbb91610bff9190879060040161125c565b6020604051808303815f875af1158015610c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3f9190611126565b50875160408051858152602081018890526001600160a01b03909216918c917fb9447a366f766b5feac87e6d186f8bd51e5cd2b1226ec8a58b31d0e1ba83e4a4910160405180910390a350505050505050505050565b5f610c9f82610fd0565b90505f610caa610639565b905081604001516001600160401b0316811015610cf6576040808301519051630f09f55b60e41b8152600481018390526001600160401b03909116602482015260440160405180910390fd5b5f6a0c097ce7bc90715b34b9f160241b8360800151600354610d1891906110d9565b610d2185610f3d565b610d2b9190611294565b610d3591906112ab565b5f85815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201559050610d7183610f3d565b60025f828254610d8191906110d9565b9091555050825160608401516001600160a01b037f000000000000000000000000b63abab9019fa0db4a3ab1824c5e5fa7171f1472169163a9059cbb91610dd29085906001600160801b0316611104565b6040518363ffffffff1660e01b8152600401610def92919061125c565b6020604051808303815f875af1158015610e0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2f9190611126565b5082516060840151604080516001600160801b039092168252602082018490526001600160a01b039092169186917fa5851b0172fdafd3dafe0e52ce051747548a4c642a2f22793c01faf228e13062910160405180910390a350505050565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082018190526003546a0c097ce7bc90715b34b9f160241b91610f19916110d9565b610f2283610f3d565b610f2c9190611294565b610f3691906112ab565b9392505050565b5f81602001518260400151610f529190611275565b6001600160401b031682606001516001600160801b0316610f739190611294565b92915050565b6002545f03610f9b578060045f828254610f939190611104565b909155505050565b600254610fb66a0c097ce7bc90715b34b9f160241b83611294565b610fc091906112ab565b60035f828254610f939190611104565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152505f8181526020818152604091829020825160a08101845281546001600160a01b038116808352600160a01b9091046001600160401b0390811694830194909452600183015493841694820194909452600160401b9092046001600160801b03166060830152600201546080820152903314611089576040516330cd747160e01b815260040160405180910390fd5b919050565b5f6020828403121561109e575f80fd5b5035919050565b5f80604083850312156110b6575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610f7357610f736110c5565b5f600182016110fd576110fd6110c5565b5060010190565b80820180821115610f7357610f736110c5565b80518015158114611089575f80fd5b5f60208284031215611136575f80fd5b610f3682611117565b80516001600160401b0381168114611089575f80fd5b80516001600160601b0381168114611089575f80fd5b805163ffffffff81168114611089575f80fd5b5f610100828403128015611190575f80fd5b5060405161010081016001600160401b03811182821017156111c057634e487b7160e01b5f52604160045260245ffd5b6040526111cc8361113f565b81526111da6020840161113f565b60208201526111eb60408401611155565b60408201526111fc6060840161113f565b606082015261120d60808401611155565b608082015261121e60a0840161116b565b60a082015260c0838101519082015261123960e08401611117565b60e08201529392505050565b5f60208284031215611255575f80fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6001600160401b038281168282160390811115610f7357610f736110c5565b8082028115828204841417610f7357610f736110c5565b5f826112c557634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212206efae6d7008736996f0110e0c304aea683c2cf78ccd7ab365b36e87dd2a468d564736f6c634300081a0033","recompiledBytecode":"0x608060405234801561000f575f80fd5b50600436106100e4575f3560e01c80630225d3cc146100e85780630361bf14146101045780631338736f14610117578063322e9f041461012a57806351e42ab5146101325780635922e2531461013b5780635f1c17c01461015057806361b8ce8c146101f857806396c82e57146102015780639886bf631461020a5780639dcedb6e14610214578063c98a295b14610227578063db006a7514610266578063eb72c8d814610279578063f060482914610282578063f2f4eb261461028b578063fb3d3df2146102b2578063fbfa77cf146102c5575b5f80fd5b6100f16107d081565b6040519081526020015b60405180910390f35b6100f161011236600461108e565b6102ec565b6100f16101253660046110a5565b6103c9565b6100f1610639565b6100f160035481565b61014e61014936600461108e565b6106cd565b005b6101b061015e36600461108e565b5f602081905290815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160401b039081169290811691600160401b9091046001600160801b03169085565b604080516001600160a01b039690961686526001600160401b03948516602087015292909316918401919091526001600160801b03166060830152608082015260a0016100fb565b6100f160015481565b6100f160025481565b6100f1620f424081565b61014e6102223660046110a5565b6108e3565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100fb565b61014e61027436600461108e565b610c95565b6100f160045481565b6100f16101f481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6100f16102c036600461108e565b610e8e565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082015281610362610639565b905081604001516001600160401b03168110156103bf5781602001516001600160401b031681116103a05781602001516001600160401b03166103a2565b805b82604001516001600160401b03166103ba91906110d9565b6103c1565b5f5b949350505050565b5f8215806103dd57506001600160801b0383115b156103fb5760405163f456040360e01b815260040160405180910390fd5b6101f482108061040d5750620f424082115b1561042b5760405163014b311560e31b815260040160405180910390fd5b5f610434610639565b600180549192505f610445836110ec565b909155506040805160a0810182523381526001600160401b03841660208201529193505f919081016104778685611104565b6001600160401b0390811682526001600160801b038089166020808501919091526003546040948501525f88815280825284902085518154928701518516600160a01b026001600160e01b03199093166001600160a01b0390911617919091178155928401516001840180546060870151909316600160401b026001600160c01b031990931691909316171790556080820151600290910155905061051b81610f3d565b60025f82825461052b9190611104565b90915550506004541561054b57600480545f90915561054981610f79565b505b6040516323b872dd60e01b8152336004820152306024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af11580156105bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105df9190611126565b506040818101518151878152602081018590526001600160401b03909116818301529051339185917fd5987d72b516fb12b1d31e6a7ab75f0c975e512aba9225ebbbb1b58c25cbb7a79181900360600190a3505092915050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa158015610697573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bb919061117e565b602001516001600160401b0316905090565b3330146106ed576040516330cd747160e01b815260040160405180910390fd5b604051630441a3e760e41b8152600481018290525f60248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063441a3e70906044016020604051808303815f875af115801561075a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077e9190611245565b60405163095ea7b360e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906107ef907f000000000000000000000000000000000000000000000000000000000000000090859060040161125c565b6020604051808303815f875af115801561080b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082f9190611126565b5060405163f14faf6f60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f14faf6f906024015f604051808303815f87803b15801561088f575f80fd5b505af11580156108a1573d5f803e3d5ffd5b505060408051858152602081018590527f3f2a7eec90b377537d640acdf78c4ffc072aec2431c1057ea33245c8f3255ce4935001905060405180910390a15050565b5f6108ed83610fd0565b90505f816020015182604001516109049190611275565b6001600160401b031690505f8190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa92505050801561098e575060408051601f3d908101601f1916820190925261098b9181019061117e565b60015b156109fe57602081015160408501516001600160401b0391821691168110156109f75784602001516001600160401b031681116109d85784602001516001600160401b03166109da565b805b85604001516001600160401b03166109f291906110d9565b6109f9565b5f5b925050505b5f61271083836107d087606001516001600160801b0316610a1f9190611294565b610a299190611294565b610a3391906112ab565b610a3d91906112ab565b90505f6a0c097ce7bc90715b34b9f160241b8560800151600354610a6191906110d9565b610a6a87610f3d565b610a749190611294565b610a7e91906112ab565b90505f8286606001516001600160801b0316610a9a91906110d9565b905086811015610abd57604051633de57c2360e21b815260040160405180910390fd5b5f88815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201556060860151610b079086906001600160801b0316611294565b60025f828254610b1791906110d9565b909155505f9050610b296002856112ab565b90505f83610b3783876110d9565b610b419190611104565b90508115610ba157604051635922e25360e01b8152600481018390523090635922e253906024015f604051808303815f87803b158015610b7f575f80fd5b505af1925050508015610b90575060015b610ba157610b9e8282611104565b90505b8015610bb057610bb081610f79565b875160405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91610bff9190879060040161125c565b6020604051808303815f875af1158015610c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3f9190611126565b50875160408051858152602081018890526001600160a01b03909216918c917fb9447a366f766b5feac87e6d186f8bd51e5cd2b1226ec8a58b31d0e1ba83e4a4910160405180910390a350505050505050505050565b5f610c9f82610fd0565b90505f610caa610639565b905081604001516001600160401b0316811015610cf6576040808301519051630f09f55b60e41b8152600481018390526001600160401b03909116602482015260440160405180910390fd5b5f6a0c097ce7bc90715b34b9f160241b8360800151600354610d1891906110d9565b610d2185610f3d565b610d2b9190611294565b610d3591906112ab565b5f85815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201559050610d7183610f3d565b60025f828254610d8191906110d9565b9091555050825160608401516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91610dd29085906001600160801b0316611104565b6040518363ffffffff1660e01b8152600401610def92919061125c565b6020604051808303815f875af1158015610e0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2f9190611126565b5082516060840151604080516001600160801b039092168252602082018490526001600160a01b039092169186917fa5851b0172fdafd3dafe0e52ce051747548a4c642a2f22793c01faf228e13062910160405180910390a350505050565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082018190526003546a0c097ce7bc90715b34b9f160241b91610f19916110d9565b610f2283610f3d565b610f2c9190611294565b610f3691906112ab565b9392505050565b5f81602001518260400151610f529190611275565b6001600160401b031682606001516001600160801b0316610f739190611294565b92915050565b6002545f03610f9b578060045f828254610f939190611104565b909155505050565b600254610fb66a0c097ce7bc90715b34b9f160241b83611294565b610fc091906112ab565b60035f828254610f939190611104565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152505f8181526020818152604091829020825160a08101845281546001600160a01b038116808352600160a01b9091046001600160401b0390811694830194909452600183015493841694820194909452600160401b9092046001600160801b03166060830152600201546080820152903314611089576040516330cd747160e01b815260040160405180910390fd5b919050565b5f6020828403121561109e575f80fd5b5035919050565b5f80604083850312156110b6575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610f7357610f736110c5565b5f600182016110fd576110fd6110c5565b5060010190565b80820180821115610f7357610f736110c5565b80518015158114611089575f80fd5b5f60208284031215611136575f80fd5b610f3682611117565b80516001600160401b0381168114611089575f80fd5b80516001600160601b0381168114611089575f80fd5b805163ffffffff81168114611089575f80fd5b5f610100828403128015611190575f80fd5b5060405161010081016001600160401b03811182821017156111c057634e487b7160e01b5f52604160045260245ffd5b6040526111cc8361113f565b81526111da6020840161113f565b60208201526111eb60408401611155565b60408201526111fc6060840161113f565b606082015261120d60808401611155565b608082015261121e60a0840161116b565b60a082015260c0838101519082015261123960e08401611117565b60e08201529392505050565b5f60208284031215611255575f80fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6001600160401b038281168282160390811115610f7357610f736110c5565b8082028115828204841417610f7357610f736110c5565b5f826112c557634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212206efae6d7008736996f0110e0c304aea683c2cf78ccd7ab365b36e87dd2a468d564736f6c634300081a0033","sourceMap":"1266:5191:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1443:46;;1485:4;1443:46;;;;;160:25:1;;;148:2;133:18;1443:46:0;;;;;;;;3088:210;;;;;;:::i;:::-;;:::i;3304:658::-;;;;;;:::i;:::-;;:::i;2754:85::-;;;:::i;1936:27::-;;;;;;5704:289;;;;;;:::i;:::-;;:::i;:::-;;1785:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1785:37:0;;;-1:-1:-1;;;1785:37:0;;;-1:-1:-1;;;;;1785:37:0;;;;;;;;-1:-1:-1;;;1785:37:0;;;-1:-1:-1;;;;;1785:37:0;;;;;;;;-1:-1:-1;;;;;1051:32:1;;;;1033:51;;-1:-1:-1;;;;;1120:31:1;;;1115:2;1100:18;;1093:59;1188:31;;;;1168:18;;;1161:59;;;;-1:-1:-1;;;;;1256:32:1;1251:2;1236:18;;1229:60;1276:3;1305:19;;1298:35;1020:3;1005:19;1785:37:0;778:561:1;1828:25:0;;;;;;1859:26;;;;;;1393:44;;1428:9;1393:44;;4580:1021;;;;;;:::i;:::-;;:::i;1653:28::-;;;;;;;;-1:-1:-1;;;;;1508:32:1;;;1490:51;;1478:2;1463:18;1653:28:0;1344:203:1;3968:402:0;;;;;;:::i;:::-;;:::i;2007:28::-;;;;;;1291:38;;1326:3;1291:38;;1574:32;;;;;2845:161;;;;;;:::i;:::-;;:::i;1612:35::-;;;;;3088:210;3140:7;3175:9;;;;;;;;;;;3159:25;;;;;;;;;-1:-1:-1;;;;;3159:25:0;;;;-1:-1:-1;;;3159:25:0;;-1:-1:-1;;;;;3159:25:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3159:25:0;;;-1:-1:-1;;;;;3159:25:0;;;;;;;;;;;;;;3140:7;3206:6;:4;:6::i;:::-;3194:18;;3234:1;:10;;;-1:-1:-1;;;;;3229:15:0;:1;:15;;:62;;3269:1;:7;;;-1:-1:-1;;;;;3265:11:0;:1;:11;:25;;3283:1;:7;;;-1:-1:-1;;;;;3265:25:0;;;;3279:1;3265:25;3251:1;:10;;;-1:-1:-1;;;;;3251:40:0;;;;;:::i;:::-;3229:62;;;3247:1;3229:62;3222:69;3088:210;-1:-1:-1;;;;3088:210:0:o;3304:658::-;3366:10;3392:11;;;:41;;-1:-1:-1;;;;;;3407:26:0;;3392:41;3388:60;;;3442:6;;-1:-1:-1;;;3442:6:0;;;;;;;;;;;3388:60;1326:3;3462:4;:15;:34;;;;1428:9;3481:4;:15;3462:34;3458:53;;;3505:6;;-1:-1:-1;;;3505:6:0;;;;;;;;;;;3458:53;3521:13;3537:6;:4;:6::i;:::-;3558;:8;;3521:22;;-1:-1:-1;3558:6:0;:8;;;:::i;:::-;;;;-1:-1:-1;3592:84:0;;;;;;;;3597:10;3592:84;;-1:-1:-1;;;;;3592:84:0;;;;;;3553:13;;-1:-1:-1;3576:13:0;;3592:84;;;3631:12;3639:4;3616:5;3631:12;:::i;:::-;-1:-1:-1;;;;;3592:84:0;;;;;-1:-1:-1;;;;;3592:84:0;;;;;;;;;;;3663:12;;3592:84;;;;;-1:-1:-1;3686:9:0;;;;;;;;;:13;;;;;;;;;;-1:-1:-1;;;3686:13:0;-1:-1:-1;;;;;;3686:13:0;;;-1:-1:-1;;;;;3686:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3686:13:0;-1:-1:-1;;;;;;3686:13:0;;;;;;;;;;;;;;;;;;;;3576:100;-1:-1:-1;3724:10:0;3576:100;3724:7;:10::i;:::-;3709:11;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;3748:13:0;;:18;3744:85;;3782:13;;;3770:9;3797:17;;;3816:10;3782:13;3816:7;:10::i;:::-;3768:61;3744:85;3838:53;;-1:-1:-1;;;3838:53:0;;3857:10;3838:53;;;2741:51:1;3877:4:0;2808:18:1;;;2801:60;2877:18;;;2870:34;;;3838:5:0;-1:-1:-1;;;;;3838:18:0;;;;2714::1;;3838:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3944:10:0;;;;;3906:49;;3492:25:1;;;3548:2;3533:18;;3526:34;;;-1:-1:-1;;;;;3596:31:1;;;3576:18;;;3569:59;3906:49:0;;3917:10;;3913:2;;3906:49;;;;;3480:2:1;3906:49:0;;;3378:584;;3304:658;;;;:::o;2754:85::-;2791:7;2809:4;-1:-1:-1;;;;;2809:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:27;;;-1:-1:-1;;;;;2802:34:0;;;2754:85;:::o;5704:289::-;5765:10;5787:4;5765:27;5761:50;;5801:10;;-1:-1:-1;;;5801:10:0;;;;;;;;;;;5761:50;5838:25;;-1:-1:-1;;;5838:25:0;;;;;5558::1;;;5821:14:0;5599:18:1;;;5592:34;;;5821:14:0;5838:5;-1:-1:-1;;;;;5838:14:0;;;;5531:18:1;;5838:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5873:45;;-1:-1:-1;;;5873:45:0;;5821:42;;-1:-1:-1;;;;;;5882:3:0;5873:21;;;;:45;;5903:5;;5821:42;;5873:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5928:20:0;;-1:-1:-1;;;5928:20:0;;;;;160:25:1;;;5928:5:0;-1:-1:-1;;;;;5928:12:0;;;;133:18:1;;5928:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5963:23:0;;;5558:25:1;;;5614:2;5599:18;;5592:34;;;5963:23:0;;-1:-1:-1;5531:18:1;;-1:-1:-1;5963:23:0;;;;;;;5751:242;5704:289;:::o;4580:1021::-;4646:13;4662:9;4668:2;4662:5;:9::i;:::-;4646:25;;4681:12;4709:1;:7;;;4696:1;:10;;;:20;;;;:::i;:::-;-1:-1:-1;;;;;4681:35:0;;;4726:12;4741:4;4726:19;;4759:4;-1:-1:-1;;;;;4759:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4759:12:0;;;;;;;;-1:-1:-1;;4759:12:0;;;;;;;;;;;;:::i;:::-;;;4755:198;;;4834:16;;;;4876:10;;;;-1:-1:-1;;;;;4822:28:0;;;;4871:15;;;;:62;;4911:1;:7;;;-1:-1:-1;;;;;4907:11:0;:1;:11;:25;;4925:1;:7;;;-1:-1:-1;;;;;4907:25:0;;;;4921:1;4907:25;4893:1;:10;;;-1:-1:-1;;;;;4893:40:0;;;;;:::i;:::-;4871:62;;;4889:1;4871:62;4864:69;;4808:136;4772:172;4755:198;4962:15;5032:6;5025:4;5018;1485;4988:1;:8;;;-1:-1:-1;;;;;4980:17:0;:35;;;;:::i;:::-;:42;;;;:::i;:::-;:49;;;;:::i;:::-;:58;;;;:::i;:::-;4962:76;;5048:13;-1:-1:-1;;;5093:1:0;:7;;;5078:12;;:22;;;;:::i;:::-;5064:10;5072:1;5064:7;:10::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;5048:59;;5117:11;5142:7;5131:1;:8;;;-1:-1:-1;;;;;5131:18:0;;;;;:::i;:::-;5117:32;;5169:6;5163:3;:12;5159:31;;;5184:6;;-1:-1:-1;;;5184:6:0;;;;;;;;;;;5159:31;5207:5;:9;;;;;;;;;;5200:16;;-1:-1:-1;;;;;;5200:16:0;;;;;;;;-1:-1:-1;;;;;;5200:16:0;;;;;;5249:8;;;;5241:24;;5261:4;;-1:-1:-1;;;;;5241:17:0;:24;:::i;:::-;5226:11;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;5275:15:0;;-1:-1:-1;5293:11:0;5303:1;5293:7;:11;:::i;:::-;5275:29;-1:-1:-1;5314:12:0;5349:5;5329:17;5275:29;5329:7;:17;:::i;:::-;:25;;;;:::i;:::-;5314:40;-1:-1:-1;5368:12:0;;5364:102;;5400:26;;-1:-1:-1;;;5400:26:0;;;;;160:25:1;;;5400:4:0;;:17;;133:18:1;;5400:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5396:60;;5438:15;5446:7;5438:15;;:::i;:::-;;;5396:60;5479:9;;5475:28;;5490:13;5498:4;5490:7;:13::i;:::-;5528:7;;5513:28;;-1:-1:-1;;;5513:28:0;;-1:-1:-1;;;;;5513:5:0;:14;;;;:28;;5528:7;5537:3;;5513:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5572:7:0;;5556:38;;;5558:25:1;;;5614:2;5599:18;;5592:34;;;-1:-1:-1;;;;;5556:38:0;;;;5568:2;;5556:38;;5531:18:1;5556:38:0;;;;;;;4636:965;;;;;;;;4580:1021;;:::o;3968:402::-;4015:13;4031:9;4037:2;4031:5;:9::i;:::-;4015:25;;4050:9;4062:6;:4;:6::i;:::-;4050:18;;4086:1;:10;;;-1:-1:-1;;;;;4082:14:0;:1;:14;4078:51;;;4118:10;;;;;4105:24;;-1:-1:-1;;;4105:24:0;;;;;7171:25:1;;;-1:-1:-1;;;;;7232:31:1;;;7212:18;;;7205:59;7144:18;;4105:24:0;;;;;;;4078:51;4139:13;-1:-1:-1;;;4184:1:0;:7;;;4169:12;;:22;;;;:::i;:::-;4155:10;4163:1;4155:7;:10::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;4215:5;:9;;;;;;;;;;4208:16;;-1:-1:-1;;;;;;4208:16:0;;;;;;;;-1:-1:-1;;;;;;4208:16:0;;;;;;4139:59;-1:-1:-1;4249:10:0;4257:1;4249:7;:10::i;:::-;4234:11;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;4284:7:0;;4293:8;;;;-1:-1:-1;;;;;4269:5:0;:14;;;;4293:16;;4304:5;;-1:-1:-1;;;;;4293:16:0;;:::i;:::-;4269:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4338:7:0;;4347:8;;;;4325:38;;;-1:-1:-1;;;;;7467:32:1;;;7449:51;;7531:2;7516:18;;7509:34;;;-1:-1:-1;;;;;4325:38:0;;;;4334:2;;4325:38;;7422:18:1;4325:38:0;;;;;;;4005:365;;;3968:402;:::o;2845:161::-;2895:7;2930:9;;;;;;;;;;;2914:25;;;;;;;;;-1:-1:-1;;;;;2914:25:0;;;;-1:-1:-1;;;2914:25:0;;-1:-1:-1;;;;;2914:25:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2914:25:0;;;-1:-1:-1;;;;;2914:25:0;;;;;;;;;;;;;;;;2970:12;;-1:-1:-1;;;1563:4:0;2970:22;;;:::i;:::-;2956:10;2964:1;2956:7;:10::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;2949:50;2845:161;-1:-1:-1;;;2845:161:0:o;6326:129::-;6380:7;6440:1;:7;;;6427:1;:10;;;:20;;;;:::i;:::-;-1:-1:-1;;;;;6406:42:0;6414:1;:8;;;-1:-1:-1;;;;;6406:17:0;:42;;;;:::i;:::-;6399:49;6326:129;-1:-1:-1;;6326:129:0:o;6153:167::-;6208:11;;6223:1;6208:16;6204:58;;6245:6;6228:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;6153:167:0:o;6204:58::-;6302:11;;6287:12;-1:-1:-1;;;6287:6:0;:12;:::i;:::-;:26;;;;:::i;:::-;6271:12;;:42;;;;;;;:::i;5999:148::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6077:5:0;:9;;;;;;;;;;;;6073:13;;;;;;;;;-1:-1:-1;;;;;6073:13:0;;;;;-1:-1:-1;;;6073:13:0;;;-1:-1:-1;;;;;6073:13:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6073:13:0;;;-1:-1:-1;;;;;6073:13:0;;;;;;;;;;;;;6111:10;6100:21;6096:44;;6130:10;;-1:-1:-1;;;6130:10:0;;;;;;;;;;;6096:44;5999:148;;;:::o;196:226:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;369:23:1;;196:226;-1:-1:-1;196:226:1:o;427:346::-;495:6;503;556:2;544:9;535:7;531:23;527:32;524:52;;;572:1;569;562:12;524:52;-1:-1:-1;;617:23:1;;;737:2;722:18;;;709:32;;-1:-1:-1;427:346:1:o;2004:127::-;2065:10;2060:3;2056:20;2053:1;2046:31;2096:4;2093:1;2086:15;2120:4;2117:1;2110:15;2136:128;2203:9;;;2224:11;;;2221:37;;;2238:18;;:::i;2269:135::-;2308:3;2329:17;;;2326:43;;2349:18;;:::i;:::-;-1:-1:-1;2396:1:1;2385:13;;2269:135::o;2409:125::-;2474:9;;;2495:10;;;2492:36;;;2508:18;;:::i;2915:164::-;2991:13;;3040;;3033:21;3023:32;;3013:60;;3069:1;3066;3059:12;3084:202;3151:6;3204:2;3192:9;3183:7;3179:23;3175:32;3172:52;;;3220:1;3217;3210:12;3172:52;3243:37;3270:9;3243:37;:::i;3639:175::-;3717:13;;-1:-1:-1;;;;;3759:30:1;;3749:41;;3739:69;;3804:1;3801;3794:12;3819:175;3897:13;;-1:-1:-1;;;;;3939:30:1;;3929:41;;3919:69;;3984:1;3981;3974:12;3999:167;4077:13;;4130:10;4119:22;;4109:33;;4099:61;;4156:1;4153;4146:12;4171:1200;4262:6;4322:3;4310:9;4301:7;4297:23;4293:33;4338:2;4335:22;;;4353:1;4350;4343:12;4335:22;-1:-1:-1;4402:2:1;4396:9;4444:3;4432:16;;-1:-1:-1;;;;;4463:34:1;;4499:22;;;4460:62;4457:185;;;4564:10;4559:3;4555:20;4552:1;4545:31;4599:4;4596:1;4589:15;4627:4;4624:1;4617:15;4457:185;4658:2;4651:22;4697:39;4726:9;4697:39;:::i;:::-;4689:6;4682:55;4770:48;4814:2;4803:9;4799:18;4770:48;:::i;:::-;4765:2;4757:6;4753:15;4746:73;4852:48;4896:2;4885:9;4881:18;4852:48;:::i;:::-;4847:2;4839:6;4835:15;4828:73;4934:48;4978:2;4967:9;4963:18;4934:48;:::i;:::-;4929:2;4921:6;4917:15;4910:73;5017:49;5061:3;5050:9;5046:19;5017:49;:::i;:::-;5011:3;5003:6;4999:16;4992:75;5101:49;5145:3;5134:9;5130:19;5101:49;:::i;:::-;5095:3;5083:16;;5076:75;5213:3;5198:19;;;5192:26;5234:16;;;5227:31;5292:47;5334:3;5319:19;;5292:47;:::i;:::-;5286:3;5274:16;;5267:73;5278:6;4171:1200;-1:-1:-1;;;4171:1200:1:o;5637:230::-;5707:6;5760:2;5748:9;5739:7;5735:23;5731:32;5728:52;;;5776:1;5773;5766:12;5728:52;-1:-1:-1;5821:16:1;;5637:230;-1:-1:-1;5637:230:1:o;5872:274::-;-1:-1:-1;;;;;6064:32:1;;;;6046:51;;6128:2;6113:18;;6106:34;6034:2;6019:18;;5872:274::o;6404:194::-;-1:-1:-1;;;;;6502:26:1;;;6474;;;6470:59;;6541:28;;6538:54;;;6572:18;;:::i;6603:168::-;6676:9;;;6707;;6724:15;;;6718:22;;6704:37;6694:71;;6745:18;;:::i;6776:217::-;6816:1;6842;6832:132;;6886:10;6881:3;6877:20;6874:1;6867:31;6921:4;6918:1;6911:15;6949:4;6946:1;6939:15;6832:132;-1:-1:-1;6978:9:1;;6776:217::o","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa26469706673582212206efae6d7008736996f0110e0c304aea683c2cf78ccd7ab365b36e87dd2a468d564736f6c634300081a0033","offset":4811}},"immutableReferences":{"91":[{"start":656,"length":32},{"start":1596,"length":32},{"start":2325,"length":32}],"94":[{"start":714,"length":32},{"start":1389,"length":32},{"start":1804,"length":32},{"start":1989,"length":32},{"start":2118,"length":32},{"start":3017,"length":32},{"start":3479,"length":32}],"96":[{"start":556,"length":32},{"start":1944,"length":32}]},"transformations":[{"id":"96","type":"replace","offset":556,"reason":"immutable"},{"id":"91","type":"replace","offset":656,"reason":"immutable"},{"id":"94","type":"replace","offset":714,"reason":"immutable"},{"id":"94","type":"replace","offset":1389,"reason":"immutable"},{"id":"91","type":"replace","offset":1596,"reason":"immutable"},{"id":"94","type":"replace","offset":1804,"reason":"immutable"},{"id":"96","type":"replace","offset":1944,"reason":"immutable"},{"id":"94","type":"replace","offset":1989,"reason":"immutable"},{"id":"94","type":"replace","offset":2118,"reason":"immutable"},{"id":"91","type":"replace","offset":2325,"reason":"immutable"},{"id":"94","type":"replace","offset":3017,"reason":"immutable"},{"id":"94","type":"replace","offset":3479,"reason":"immutable"}],"transformationValues":{"immutables":{"91":"0x000000000000000000000000980b4424c007caf7a1f3670b48c8eaef7ebc3d44","94":"0x000000000000000000000000b63abab9019fa0db4a3ab1824c5e5fa7171f1472","96":"0x0000000000000000000000005501e1fa81be1c3f49225fa7668da0245d07db60"}}},"deployment":{"transactionHash":"0x53a00a8bdd59b8763f1488c15aa88944b2e299ae8c549aefcd4c69607741e9d4","blockNumber":"12038743","transactionIndex":"36","deployer":"0xbC8744370bCb6D5AbF5dE8B4086ecfBB4C5629C3"},"sources":{"src/WheelBond.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\ninterface ICoreClock {\n    struct State {\n        uint64 settledThroughRound;\n        uint64 cumulativeWork;\n        uint96 cumulativeBlockUnits;\n        uint64 blockHeight;\n        uint96 blockProgress;\n        uint32 workPerThousandBlocks;\n        uint256 authorizationNonce;\n        bool paused;\n    }\n    function state() external view returns (State memory);\n}\ninterface IBurrowVault {\n    function sqk() external view returns (address);\n    function transfer(address to, uint256 v) external returns (bool);\n    function transferFrom(address f, address t, uint256 v) external returns (bool);\n    function withdraw(uint256 shares, uint256 minAssets) external returns (uint256);\n    function donate(uint256 amount) external;\n}\ninterface IApprove { function approve(address s, uint256 v) external returns (bool); }\n\n/// @title WheelBond\n/// @notice A bond whose calendar is a hamster. Maturity is measured in settled wheel work, so when\n///         the hamster sleeps, no bond ages. Holders lock bSQK; leaving early costs a penalty that\n///         shrinks as the wheel turns. Half the penalty goes to the bonds still locked, half is\n///         donated to the Burrow vault. There is no owner and no admin.\ncontract WheelBond {\n    uint256 public constant MIN_TERM = 500;            // blocks last-moment entries around a penalty\n    uint256 public constant MAX_TERM = 1_000_000;\n    uint256 public constant MAX_PENALTY_BPS = 2000;    // 20% on day zero, 0 at maturity\n    uint256 private constant ONE = 1e36;\n\n    ICoreClock public immutable core;\n    IBurrowVault public immutable vault;\n    address public immutable sqk;\n\n    struct Bond { address owner; uint64 start; uint64 maturity; uint128 shares; uint256 entry; }\n    mapping(uint256 => Bond) public bonds;\n    uint256 public nextId = 1;\n    uint256 public totalWeight;      // sum of shares x term over open bonds\n    uint256 public accPerWeight;     // bSQK per weight, scaled by ONE\n    uint256 public undistributed;    // penalty waiting for the next locked bond\n\n    error Term();\n    error Zero();\n    error NotOwner();\n    error NotMature(uint256 work, uint256 maturity);\n    error Slip();\n\n    event Locked(uint256 indexed id, address indexed owner, uint256 shares, uint256 startWork, uint256 maturityWork);\n    event Redeemed(uint256 indexed id, address indexed owner, uint256 shares, uint256 bonus);\n    event ExitedEarly(uint256 indexed id, address indexed owner, uint256 returned, uint256 penalty);\n    event Donated(uint256 shares, uint256 assets);\n\n    constructor(address core_, address vault_) {\n        core = ICoreClock(core_);\n        vault = IBurrowVault(vault_);\n        sqk = IBurrowVault(vault_).sqk();\n    }\n\n    function work() public view returns (uint256) { return core.state().cumulativeWork; }\n\n    function bonusOf(uint256 id) public view returns (uint256) {\n        Bond memory b = bonds[id];\n        return _weight(b) * (accPerWeight - b.entry) / ONE;\n    }\n\n    /// @return how much of the original term is still ahead, in work units\n    function remaining(uint256 id) public view returns (uint256) {\n        Bond memory b = bonds[id];\n        uint256 w = work();\n        return w >= b.maturity ? 0 : b.maturity - (w > b.start ? w : b.start);\n    }\n\n    function lock(uint256 shares, uint256 term) external returns (uint256 id) {\n        if (shares == 0 || shares > type(uint128).max) revert Zero();\n        if (term < MIN_TERM || term > MAX_TERM) revert Term();\n        uint256 start = work();\n        id = nextId++;\n        Bond memory b = Bond(msg.sender, uint64(start), uint64(start + term), uint128(shares), accPerWeight);\n        bonds[id] = b;\n        totalWeight += _weight(b);\n        if (undistributed != 0) { uint256 u = undistributed; undistributed = 0; _spread(u); }\n        vault.transferFrom(msg.sender, address(this), shares);\n        emit Locked(id, msg.sender, shares, start, b.maturity);\n    }\n\n    function redeem(uint256 id) external {\n        Bond memory b = _take(id);\n        uint256 w = work();\n        if (w < b.maturity) revert NotMature(w, b.maturity);\n        uint256 bonus = _weight(b) * (accPerWeight - b.entry) / ONE;\n        delete bonds[id];\n        totalWeight -= _weight(b);\n        vault.transfer(b.owner, b.shares + bonus);\n        emit Redeemed(id, b.owner, b.shares, bonus);\n    }\n\n    /// @notice Leave before maturity. Unclaimed bonus is forfeited. If the clock cannot be read the\n    ///         full penalty applies, so principal can always leave even if the core is upgraded away.\n    function exitEarly(uint256 id, uint256 minOut) external {\n        Bond memory b = _take(id);\n        uint256 term = b.maturity - b.start;\n        uint256 left = term;\n        try core.state() returns (ICoreClock.State memory s) {\n            uint256 w = s.cumulativeWork;\n            left = w >= b.maturity ? 0 : b.maturity - (w > b.start ? w : b.start);\n        } catch {}\n        uint256 penalty = uint256(b.shares) * MAX_PENALTY_BPS * left / term / 10_000;\n        uint256 bonus = _weight(b) * (accPerWeight - b.entry) / ONE;\n        uint256 out = b.shares - penalty;\n        if (out < minOut) revert Slip();\n        delete bonds[id];\n        totalWeight -= uint256(b.shares) * term;\n        uint256 toVault = penalty / 2;\n        uint256 kept = penalty - toVault + bonus;\n        if (toVault != 0) {\n            try this.donateShares(toVault) {} catch { kept += toVault; }\n        }\n        if (kept != 0) _spread(kept);\n        vault.transfer(b.owner, out);\n        emit ExitedEarly(id, b.owner, out, penalty);\n    }\n\n    /// @dev External so a vault without idle cash fails softly. Only callable by this contract.\n    function donateShares(uint256 shares) external {\n        if (msg.sender != address(this)) revert NotOwner();\n        uint256 assets = vault.withdraw(shares, 0);\n        IApprove(sqk).approve(address(vault), assets);\n        vault.donate(assets);\n        emit Donated(shares, assets);\n    }\n\n    function _take(uint256 id) private view returns (Bond memory b) {\n        b = bonds[id];\n        if (b.owner != msg.sender) revert NotOwner();\n    }\n\n    function _spread(uint256 amount) private {\n        if (totalWeight == 0) { undistributed += amount; return; }\n        accPerWeight += amount * ONE / totalWeight;\n    }\n\n    function _weight(Bond memory b) private pure returns (uint256) {\n        return uint256(b.shares) * (b.maturity - b.start);\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":"WheelBond","fullyQualifiedName":"src/WheelBond.sol:WheelBond"},"abi":[{"type":"constructor","inputs":[{"name":"core_","type":"address","internalType":"address"},{"name":"vault_","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"name":"NotMature","type":"error","inputs":[{"name":"work","type":"uint256","internalType":"uint256"},{"name":"maturity","type":"uint256","internalType":"uint256"}]},{"name":"NotOwner","type":"error","inputs":[]},{"name":"Slip","type":"error","inputs":[]},{"name":"Term","type":"error","inputs":[]},{"name":"Zero","type":"error","inputs":[]},{"name":"Donated","type":"event","inputs":[{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"assets","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"ExitedEarly","type":"event","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"returned","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"penalty","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Locked","type":"event","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"startWork","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maturityWork","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Redeemed","type":"event","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"bonus","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"MAX_PENALTY_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_TERM","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MIN_TERM","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"accPerWeight","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"bonds","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"start","type":"uint64","internalType":"uint64"},{"name":"maturity","type":"uint64","internalType":"uint64"},{"name":"shares","type":"uint128","internalType":"uint128"},{"name":"entry","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"bonusOf","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"core","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ICoreClock"}],"stateMutability":"view"},{"name":"donateShares","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"exitEarly","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"minOut","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"lock","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"term","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"nextId","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"redeem","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"remaining","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"sqk","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"totalWeight","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"undistributed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"vault","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBurrowVault"}],"stateMutability":"view"},{"name":"work","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"}],"metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"core_","type":"address"},{"internalType":"address","name":"vault_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"work","type":"uint256"},{"internalType":"uint256","name":"maturity","type":"uint256"}],"name":"NotMature","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"Slip","type":"error"},{"inputs":[],"name":"Term","type":"error"},{"inputs":[],"name":"Zero","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"}],"name":"Donated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"returned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"}],"name":"ExitedEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startWork","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maturityWork","type":"uint256"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"Redeemed","type":"event"},{"inputs":[],"name":"MAX_PENALTY_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TERM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_TERM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accPerWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bonds","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint64","name":"start","type":"uint64"},{"internalType":"uint64","name":"maturity","type":"uint64"},{"internalType":"uint128","name":"shares","type":"uint128"},{"internalType":"uint256","name":"entry","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"bonusOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"core","outputs":[{"internalType":"contract ICoreClock","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"donateShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"minOut","type":"uint256"}],"name":"exitEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"term","type":"uint256"}],"name":"lock","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"remaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sqk","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"undistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IBurrowVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"work","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"donateShares(uint256)":{"details":"External so a vault without idle cash fails softly. Only callable by this contract."},"remaining(uint256)":{"returns":{"_0":"how much of the original term is still ahead, in work units"}}},"title":"WheelBond","version":1},"userdoc":{"kind":"user","methods":{"exitEarly(uint256,uint256)":{"notice":"Leave before maturity. Unclaimed bonus is forfeited. If the clock cannot be read the         full penalty applies, so principal can always leave even if the core is upgraded away."}},"notice":"A bond whose calendar is a hamster. Maturity is measured in settled wheel work, so when         the hamster sleeps, no bond ages. Holders lock bSQK; leaving early costs a penalty that         shrinks as the wheel turns. Half the penalty goes to the bonds still locked, half is         donated to the Burrow vault. There is no owner and no admin.","version":1}},"settings":{"compilationTarget":{"src/WheelBond.sol":"WheelBond"},"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/WheelBond.sol":{"keccak256":"0x06bce4c5042267f7dd078a6987c959fc104ec210852df5180591d74b620e64f6","license":"MIT","urls":["bzz-raw://f86dd33d6197abff3b193e85084839cac6173e6642c0f5aedb02be9c2bcfcd89","dweb:/ipfs/Qmarp9oTXaPyp5t8FBouvoDk1f87dzxnG1ac5KyUz6Gdov"]}},"version":1},"storageLayout":{"types":{"t_uint64":{"label":"uint64","encoding":"inplace","numberOfBytes":"8"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_uint128":{"label":"uint128","encoding":"inplace","numberOfBytes":"16"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_struct(Bond)107_storage":{"label":"struct WheelBond.Bond","members":[{"slot":"0","type":"t_address","astId":98,"label":"owner","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"0","type":"t_uint64","astId":100,"label":"start","offset":20,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"1","type":"t_uint64","astId":102,"label":"maturity","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"1","type":"t_uint128","astId":104,"label":"shares","offset":8,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"2","type":"t_uint256","astId":106,"label":"entry","offset":0,"contract":"src/WheelBond.sol:WheelBond"}],"encoding":"inplace","numberOfBytes":"96"},"t_mapping(t_uint256,t_struct(Bond)107_storage)":{"key":"t_uint256","label":"mapping(uint256 => struct WheelBond.Bond)","value":"t_struct(Bond)107_storage","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_mapping(t_uint256,t_struct(Bond)107_storage)","astId":112,"label":"bonds","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"1","type":"t_uint256","astId":115,"label":"nextId","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"2","type":"t_uint256","astId":117,"label":"totalWeight","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"3","type":"t_uint256","astId":119,"label":"accPerWeight","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"4","type":"t_uint256","astId":121,"label":"undistributed","offset":0,"contract":"src/WheelBond.sol:WheelBond"}]},"transientStorageLayout":null,"userdoc":{"kind":"user","notice":"A bond whose calendar is a hamster. Maturity is measured in settled wheel work, so when         the hamster sleeps, no bond ages. Holders lock bSQK; leaving early costs a penalty that         shrinks as the wheel turns. Half the penalty goes to the bonds still locked, half is         donated to the Burrow vault. There is no owner and no admin.","methods":{"exitEarly(uint256,uint256)":{"notice":"Leave before maturity. Unclaimed bonus is forfeited. If the clock cannot be read the         full penalty applies, so principal can always leave even if the core is upgraded away."}},"version":1},"devdoc":{"kind":"dev","title":"WheelBond","methods":{"remaining(uint256)":{"returns":{"_0":"how much of the original term is still ahead, in work units"}},"donateShares(uint256)":{"details":"External so a vault without idle cash fails softly. Only callable by this contract."}},"version":1},"sourceIds":{"src/WheelBond.sol":{"id":0}},"additionalInput":null,"stdJsonInput":{"sources":{"src/WheelBond.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\ninterface ICoreClock {\n    struct State {\n        uint64 settledThroughRound;\n        uint64 cumulativeWork;\n        uint96 cumulativeBlockUnits;\n        uint64 blockHeight;\n        uint96 blockProgress;\n        uint32 workPerThousandBlocks;\n        uint256 authorizationNonce;\n        bool paused;\n    }\n    function state() external view returns (State memory);\n}\ninterface IBurrowVault {\n    function sqk() external view returns (address);\n    function transfer(address to, uint256 v) external returns (bool);\n    function transferFrom(address f, address t, uint256 v) external returns (bool);\n    function withdraw(uint256 shares, uint256 minAssets) external returns (uint256);\n    function donate(uint256 amount) external;\n}\ninterface IApprove { function approve(address s, uint256 v) external returns (bool); }\n\n/// @title WheelBond\n/// @notice A bond whose calendar is a hamster. Maturity is measured in settled wheel work, so when\n///         the hamster sleeps, no bond ages. Holders lock bSQK; leaving early costs a penalty that\n///         shrinks as the wheel turns. Half the penalty goes to the bonds still locked, half is\n///         donated to the Burrow vault. There is no owner and no admin.\ncontract WheelBond {\n    uint256 public constant MIN_TERM = 500;            // blocks last-moment entries around a penalty\n    uint256 public constant MAX_TERM = 1_000_000;\n    uint256 public constant MAX_PENALTY_BPS = 2000;    // 20% on day zero, 0 at maturity\n    uint256 private constant ONE = 1e36;\n\n    ICoreClock public immutable core;\n    IBurrowVault public immutable vault;\n    address public immutable sqk;\n\n    struct Bond { address owner; uint64 start; uint64 maturity; uint128 shares; uint256 entry; }\n    mapping(uint256 => Bond) public bonds;\n    uint256 public nextId = 1;\n    uint256 public totalWeight;      // sum of shares x term over open bonds\n    uint256 public accPerWeight;     // bSQK per weight, scaled by ONE\n    uint256 public undistributed;    // penalty waiting for the next locked bond\n\n    error Term();\n    error Zero();\n    error NotOwner();\n    error NotMature(uint256 work, uint256 maturity);\n    error Slip();\n\n    event Locked(uint256 indexed id, address indexed owner, uint256 shares, uint256 startWork, uint256 maturityWork);\n    event Redeemed(uint256 indexed id, address indexed owner, uint256 shares, uint256 bonus);\n    event ExitedEarly(uint256 indexed id, address indexed owner, uint256 returned, uint256 penalty);\n    event Donated(uint256 shares, uint256 assets);\n\n    constructor(address core_, address vault_) {\n        core = ICoreClock(core_);\n        vault = IBurrowVault(vault_);\n        sqk = IBurrowVault(vault_).sqk();\n    }\n\n    function work() public view returns (uint256) { return core.state().cumulativeWork; }\n\n    function bonusOf(uint256 id) public view returns (uint256) {\n        Bond memory b = bonds[id];\n        return _weight(b) * (accPerWeight - b.entry) / ONE;\n    }\n\n    /// @return how much of the original term is still ahead, in work units\n    function remaining(uint256 id) public view returns (uint256) {\n        Bond memory b = bonds[id];\n        uint256 w = work();\n        return w >= b.maturity ? 0 : b.maturity - (w > b.start ? w : b.start);\n    }\n\n    function lock(uint256 shares, uint256 term) external returns (uint256 id) {\n        if (shares == 0 || shares > type(uint128).max) revert Zero();\n        if (term < MIN_TERM || term > MAX_TERM) revert Term();\n        uint256 start = work();\n        id = nextId++;\n        Bond memory b = Bond(msg.sender, uint64(start), uint64(start + term), uint128(shares), accPerWeight);\n        bonds[id] = b;\n        totalWeight += _weight(b);\n        if (undistributed != 0) { uint256 u = undistributed; undistributed = 0; _spread(u); }\n        vault.transferFrom(msg.sender, address(this), shares);\n        emit Locked(id, msg.sender, shares, start, b.maturity);\n    }\n\n    function redeem(uint256 id) external {\n        Bond memory b = _take(id);\n        uint256 w = work();\n        if (w < b.maturity) revert NotMature(w, b.maturity);\n        uint256 bonus = _weight(b) * (accPerWeight - b.entry) / ONE;\n        delete bonds[id];\n        totalWeight -= _weight(b);\n        vault.transfer(b.owner, b.shares + bonus);\n        emit Redeemed(id, b.owner, b.shares, bonus);\n    }\n\n    /// @notice Leave before maturity. Unclaimed bonus is forfeited. If the clock cannot be read the\n    ///         full penalty applies, so principal can always leave even if the core is upgraded away.\n    function exitEarly(uint256 id, uint256 minOut) external {\n        Bond memory b = _take(id);\n        uint256 term = b.maturity - b.start;\n        uint256 left = term;\n        try core.state() returns (ICoreClock.State memory s) {\n            uint256 w = s.cumulativeWork;\n            left = w >= b.maturity ? 0 : b.maturity - (w > b.start ? w : b.start);\n        } catch {}\n        uint256 penalty = uint256(b.shares) * MAX_PENALTY_BPS * left / term / 10_000;\n        uint256 bonus = _weight(b) * (accPerWeight - b.entry) / ONE;\n        uint256 out = b.shares - penalty;\n        if (out < minOut) revert Slip();\n        delete bonds[id];\n        totalWeight -= uint256(b.shares) * term;\n        uint256 toVault = penalty / 2;\n        uint256 kept = penalty - toVault + bonus;\n        if (toVault != 0) {\n            try this.donateShares(toVault) {} catch { kept += toVault; }\n        }\n        if (kept != 0) _spread(kept);\n        vault.transfer(b.owner, out);\n        emit ExitedEarly(id, b.owner, out, penalty);\n    }\n\n    /// @dev External so a vault without idle cash fails softly. Only callable by this contract.\n    function donateShares(uint256 shares) external {\n        if (msg.sender != address(this)) revert NotOwner();\n        uint256 assets = vault.withdraw(shares, 0);\n        IApprove(sqk).approve(address(vault), assets);\n        vault.donate(assets);\n        emit Donated(shares, assets);\n    }\n\n    function _take(uint256 id) private view returns (Bond memory b) {\n        b = bonds[id];\n        if (b.owner != msg.sender) revert NotOwner();\n    }\n\n    function _spread(uint256 amount) private {\n        if (totalWeight == 0) { undistributed += amount; return; }\n        accPerWeight += amount * ONE / totalWeight;\n    }\n\n    function _weight(Bond memory b) private pure returns (uint256) {\n        return uint256(b.shares) * (b.maturity - b.start);\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/WheelBond.sol":{"id":0}},"contracts":{"src/WheelBond.sol":{"WheelBond":{"abi":[{"type":"constructor","inputs":[{"name":"core_","type":"address","internalType":"address"},{"name":"vault_","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"name":"NotMature","type":"error","inputs":[{"name":"work","type":"uint256","internalType":"uint256"},{"name":"maturity","type":"uint256","internalType":"uint256"}]},{"name":"NotOwner","type":"error","inputs":[]},{"name":"Slip","type":"error","inputs":[]},{"name":"Term","type":"error","inputs":[]},{"name":"Zero","type":"error","inputs":[]},{"name":"Donated","type":"event","inputs":[{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"assets","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"ExitedEarly","type":"event","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"returned","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"penalty","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Locked","type":"event","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"startWork","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maturityWork","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Redeemed","type":"event","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"bonus","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"MAX_PENALTY_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_TERM","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MIN_TERM","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"accPerWeight","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"bonds","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"start","type":"uint64","internalType":"uint64"},{"name":"maturity","type":"uint64","internalType":"uint64"},{"name":"shares","type":"uint128","internalType":"uint128"},{"name":"entry","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"bonusOf","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"core","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ICoreClock"}],"stateMutability":"view"},{"name":"donateShares","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"exitEarly","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"minOut","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"lock","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"term","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"nextId","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"redeem","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"remaining","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"sqk","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"totalWeight","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"undistributed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"vault","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBurrowVault"}],"stateMutability":"view"},{"name":"work","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"}],"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"core_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vault_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"work\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturity\",\"type\":\"uint256\"}],\"name\":\"NotMature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Slip\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Term\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Zero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"Donated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"returned\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"penalty\",\"type\":\"uint256\"}],\"name\":\"ExitedEarly\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startWork\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maturityWork\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"bonus\",\"type\":\"uint256\"}],\"name\":\"Redeemed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_PENALTY_BPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_TERM\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_TERM\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accPerWeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"start\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maturity\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"shares\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"entry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"bonusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract ICoreClock\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"donateShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minOut\",\"type\":\"uint256\"}],\"name\":\"exitEarly\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"term\",\"type\":\"uint256\"}],\"name\":\"lock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"remaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sqk\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalWeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"undistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IBurrowVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"work\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"donateShares(uint256)\":{\"details\":\"External so a vault without idle cash fails softly. Only callable by this contract.\"},\"remaining(uint256)\":{\"returns\":{\"_0\":\"how much of the original term is still ahead, in work units\"}}},\"title\":\"WheelBond\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"exitEarly(uint256,uint256)\":{\"notice\":\"Leave before maturity. Unclaimed bonus is forfeited. If the clock cannot be read the         full penalty applies, so principal can always leave even if the core is upgraded away.\"}},\"notice\":\"A bond whose calendar is a hamster. Maturity is measured in settled wheel work, so when         the hamster sleeps, no bond ages. Holders lock bSQK; leaving early costs a penalty that         shrinks as the wheel turns. Half the penalty goes to the bonds still locked, half is         donated to the Burrow vault. There is no owner and no admin.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WheelBond.sol\":\"WheelBond\"},\"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/WheelBond.sol\":{\"keccak256\":\"0x06bce4c5042267f7dd078a6987c959fc104ec210852df5180591d74b620e64f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f86dd33d6197abff3b193e85084839cac6173e6642c0f5aedb02be9c2bcfcd89\",\"dweb:/ipfs/Qmarp9oTXaPyp5t8FBouvoDk1f87dzxnG1ac5KyUz6Gdov\"]}},\"version\":1}","userdoc":{"kind":"user","notice":"A bond whose calendar is a hamster. Maturity is measured in settled wheel work, so when         the hamster sleeps, no bond ages. Holders lock bSQK; leaving early costs a penalty that         shrinks as the wheel turns. Half the penalty goes to the bonds still locked, half is         donated to the Burrow vault. There is no owner and no admin.","methods":{"exitEarly(uint256,uint256)":{"notice":"Leave before maturity. Unclaimed bonus is forfeited. If the clock cannot be read the         full penalty applies, so principal can always leave even if the core is upgraded away."}},"version":1},"devdoc":{"kind":"dev","title":"WheelBond","methods":{"remaining(uint256)":{"returns":{"_0":"how much of the original term is still ahead, in work units"}},"donateShares(uint256)":{"details":"External so a vault without idle cash fails softly. Only callable by this contract."}},"version":1},"storageLayout":{"types":{"t_uint64":{"label":"uint64","encoding":"inplace","numberOfBytes":"8"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_uint128":{"label":"uint128","encoding":"inplace","numberOfBytes":"16"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_struct(Bond)107_storage":{"label":"struct WheelBond.Bond","members":[{"slot":"0","type":"t_address","astId":98,"label":"owner","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"0","type":"t_uint64","astId":100,"label":"start","offset":20,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"1","type":"t_uint64","astId":102,"label":"maturity","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"1","type":"t_uint128","astId":104,"label":"shares","offset":8,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"2","type":"t_uint256","astId":106,"label":"entry","offset":0,"contract":"src/WheelBond.sol:WheelBond"}],"encoding":"inplace","numberOfBytes":"96"},"t_mapping(t_uint256,t_struct(Bond)107_storage)":{"key":"t_uint256","label":"mapping(uint256 => struct WheelBond.Bond)","value":"t_struct(Bond)107_storage","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_mapping(t_uint256,t_struct(Bond)107_storage)","astId":112,"label":"bonds","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"1","type":"t_uint256","astId":115,"label":"nextId","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"2","type":"t_uint256","astId":117,"label":"totalWeight","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"3","type":"t_uint256","astId":119,"label":"accPerWeight","offset":0,"contract":"src/WheelBond.sol:WheelBond"},{"slot":"4","type":"t_uint256","astId":121,"label":"undistributed","offset":0,"contract":"src/WheelBond.sol:WheelBond"}]},"transientStorageLayout":null,"evm":{"bytecode":{"object":"60e060405260018055348015610013575f80fd5b5060405161148d38038061148d833981016040819052610032916100d3565b6001600160a01b03808316608052811660a08190526040805163c98a295b60e01b8152905163c98a295b916004808201926020929091908290030181865afa158015610080573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a49190610104565b6001600160a01b031660c052506101249050565b80516001600160a01b03811681146100ce575f80fd5b919050565b5f80604083850312156100e4575f80fd5b6100ed836100b8565b91506100fb602084016100b8565b90509250929050565b5f60208284031215610114575f80fd5b61011d826100b8565b9392505050565b60805160a05160c05161130061018d5f395f818161022c015261079801525f81816102ca0152818161056d0152818161070c015281816107c50152818161084601528181610bc90152610d9701525f81816102900152818161063c015261091501526113005ff3fe608060405234801561000f575f80fd5b50600436106100e4575f3560e01c80630225d3cc146100e85780630361bf14146101045780631338736f14610117578063322e9f041461012a57806351e42ab5146101325780635922e2531461013b5780635f1c17c01461015057806361b8ce8c146101f857806396c82e57146102015780639886bf631461020a5780639dcedb6e14610214578063c98a295b14610227578063db006a7514610266578063eb72c8d814610279578063f060482914610282578063f2f4eb261461028b578063fb3d3df2146102b2578063fbfa77cf146102c5575b5f80fd5b6100f16107d081565b6040519081526020015b60405180910390f35b6100f161011236600461108e565b6102ec565b6100f16101253660046110a5565b6103c9565b6100f1610639565b6100f160035481565b61014e61014936600461108e565b6106cd565b005b6101b061015e36600461108e565b5f602081905290815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160401b039081169290811691600160401b9091046001600160801b03169085565b604080516001600160a01b039690961686526001600160401b03948516602087015292909316918401919091526001600160801b03166060830152608082015260a0016100fb565b6100f160015481565b6100f160025481565b6100f1620f424081565b61014e6102223660046110a5565b6108e3565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100fb565b61014e61027436600461108e565b610c95565b6100f160045481565b6100f16101f481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6100f16102c036600461108e565b610e8e565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082015281610362610639565b905081604001516001600160401b03168110156103bf5781602001516001600160401b031681116103a05781602001516001600160401b03166103a2565b805b82604001516001600160401b03166103ba91906110d9565b6103c1565b5f5b949350505050565b5f8215806103dd57506001600160801b0383115b156103fb5760405163f456040360e01b815260040160405180910390fd5b6101f482108061040d5750620f424082115b1561042b5760405163014b311560e31b815260040160405180910390fd5b5f610434610639565b600180549192505f610445836110ec565b909155506040805160a0810182523381526001600160401b03841660208201529193505f919081016104778685611104565b6001600160401b0390811682526001600160801b038089166020808501919091526003546040948501525f88815280825284902085518154928701518516600160a01b026001600160e01b03199093166001600160a01b0390911617919091178155928401516001840180546060870151909316600160401b026001600160c01b031990931691909316171790556080820151600290910155905061051b81610f3d565b60025f82825461052b9190611104565b90915550506004541561054b57600480545f90915561054981610f79565b505b6040516323b872dd60e01b8152336004820152306024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af11580156105bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105df9190611126565b506040818101518151878152602081018590526001600160401b03909116818301529051339185917fd5987d72b516fb12b1d31e6a7ab75f0c975e512aba9225ebbbb1b58c25cbb7a79181900360600190a3505092915050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa158015610697573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bb919061117e565b602001516001600160401b0316905090565b3330146106ed576040516330cd747160e01b815260040160405180910390fd5b604051630441a3e760e41b8152600481018290525f60248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063441a3e70906044016020604051808303815f875af115801561075a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077e9190611245565b60405163095ea7b360e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906107ef907f000000000000000000000000000000000000000000000000000000000000000090859060040161125c565b6020604051808303815f875af115801561080b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082f9190611126565b5060405163f14faf6f60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f14faf6f906024015f604051808303815f87803b15801561088f575f80fd5b505af11580156108a1573d5f803e3d5ffd5b505060408051858152602081018590527f3f2a7eec90b377537d640acdf78c4ffc072aec2431c1057ea33245c8f3255ce4935001905060405180910390a15050565b5f6108ed83610fd0565b90505f816020015182604001516109049190611275565b6001600160401b031690505f8190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa92505050801561098e575060408051601f3d908101601f1916820190925261098b9181019061117e565b60015b156109fe57602081015160408501516001600160401b0391821691168110156109f75784602001516001600160401b031681116109d85784602001516001600160401b03166109da565b805b85604001516001600160401b03166109f291906110d9565b6109f9565b5f5b925050505b5f61271083836107d087606001516001600160801b0316610a1f9190611294565b610a299190611294565b610a3391906112ab565b610a3d91906112ab565b90505f6a0c097ce7bc90715b34b9f160241b8560800151600354610a6191906110d9565b610a6a87610f3d565b610a749190611294565b610a7e91906112ab565b90505f8286606001516001600160801b0316610a9a91906110d9565b905086811015610abd57604051633de57c2360e21b815260040160405180910390fd5b5f88815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201556060860151610b079086906001600160801b0316611294565b60025f828254610b1791906110d9565b909155505f9050610b296002856112ab565b90505f83610b3783876110d9565b610b419190611104565b90508115610ba157604051635922e25360e01b8152600481018390523090635922e253906024015f604051808303815f87803b158015610b7f575f80fd5b505af1925050508015610b90575060015b610ba157610b9e8282611104565b90505b8015610bb057610bb081610f79565b875160405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91610bff9190879060040161125c565b6020604051808303815f875af1158015610c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3f9190611126565b50875160408051858152602081018890526001600160a01b03909216918c917fb9447a366f766b5feac87e6d186f8bd51e5cd2b1226ec8a58b31d0e1ba83e4a4910160405180910390a350505050505050505050565b5f610c9f82610fd0565b90505f610caa610639565b905081604001516001600160401b0316811015610cf6576040808301519051630f09f55b60e41b8152600481018390526001600160401b03909116602482015260440160405180910390fd5b5f6a0c097ce7bc90715b34b9f160241b8360800151600354610d1891906110d9565b610d2185610f3d565b610d2b9190611294565b610d3591906112ab565b5f85815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201559050610d7183610f3d565b60025f828254610d8191906110d9565b9091555050825160608401516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91610dd29085906001600160801b0316611104565b6040518363ffffffff1660e01b8152600401610def92919061125c565b6020604051808303815f875af1158015610e0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2f9190611126565b5082516060840151604080516001600160801b039092168252602082018490526001600160a01b039092169186917fa5851b0172fdafd3dafe0e52ce051747548a4c642a2f22793c01faf228e13062910160405180910390a350505050565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082018190526003546a0c097ce7bc90715b34b9f160241b91610f19916110d9565b610f2283610f3d565b610f2c9190611294565b610f3691906112ab565b9392505050565b5f81602001518260400151610f529190611275565b6001600160401b031682606001516001600160801b0316610f739190611294565b92915050565b6002545f03610f9b578060045f828254610f939190611104565b909155505050565b600254610fb66a0c097ce7bc90715b34b9f160241b83611294565b610fc091906112ab565b60035f828254610f939190611104565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152505f8181526020818152604091829020825160a08101845281546001600160a01b038116808352600160a01b9091046001600160401b0390811694830194909452600183015493841694820194909452600160401b9092046001600160801b03166060830152600201546080820152903314611089576040516330cd747160e01b815260040160405180910390fd5b919050565b5f6020828403121561109e575f80fd5b5035919050565b5f80604083850312156110b6575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610f7357610f736110c5565b5f600182016110fd576110fd6110c5565b5060010190565b80820180821115610f7357610f736110c5565b80518015158114611089575f80fd5b5f60208284031215611136575f80fd5b610f3682611117565b80516001600160401b0381168114611089575f80fd5b80516001600160601b0381168114611089575f80fd5b805163ffffffff81168114611089575f80fd5b5f610100828403128015611190575f80fd5b5060405161010081016001600160401b03811182821017156111c057634e487b7160e01b5f52604160045260245ffd5b6040526111cc8361113f565b81526111da6020840161113f565b60208201526111eb60408401611155565b60408201526111fc6060840161113f565b606082015261120d60808401611155565b608082015261121e60a0840161116b565b60a082015260c0838101519082015261123960e08401611117565b60e08201529392505050565b5f60208284031215611255575f80fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6001600160401b038281168282160390811115610f7357610f736110c5565b8082028115828204841417610f7357610f736110c5565b5f826112c557634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212206efae6d7008736996f0110e0c304aea683c2cf78ccd7ab365b36e87dd2a468d564736f6c634300081a0033","sourceMap":"1266:5191:0:-:0;;;1852:1;1828:25;;2584:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2637:24:0;;;;;2671:28;;;;;;2715:26;;;-1:-1:-1;;;2715:26:0;;;;:24;;:26;;;;;;;;;;;;;;;2671:28;2715:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2709:32:0;;;-1:-1:-1;1266:5191:0;;-1:-1:-1;1266:5191:0;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:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;494:208::-;564:6;617:2;605:9;596:7;592:23;588:32;585:52;;;633:1;630;623:12;585:52;656:40;686:9;656:40;:::i;:::-;646:50;494:208;-1:-1:-1;;;494:208:1:o;:::-;1266:5191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"608060405234801561000f575f80fd5b50600436106100e4575f3560e01c80630225d3cc146100e85780630361bf14146101045780631338736f14610117578063322e9f041461012a57806351e42ab5146101325780635922e2531461013b5780635f1c17c01461015057806361b8ce8c146101f857806396c82e57146102015780639886bf631461020a5780639dcedb6e14610214578063c98a295b14610227578063db006a7514610266578063eb72c8d814610279578063f060482914610282578063f2f4eb261461028b578063fb3d3df2146102b2578063fbfa77cf146102c5575b5f80fd5b6100f16107d081565b6040519081526020015b60405180910390f35b6100f161011236600461108e565b6102ec565b6100f16101253660046110a5565b6103c9565b6100f1610639565b6100f160035481565b61014e61014936600461108e565b6106cd565b005b6101b061015e36600461108e565b5f602081905290815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160401b039081169290811691600160401b9091046001600160801b03169085565b604080516001600160a01b039690961686526001600160401b03948516602087015292909316918401919091526001600160801b03166060830152608082015260a0016100fb565b6100f160015481565b6100f160025481565b6100f1620f424081565b61014e6102223660046110a5565b6108e3565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100fb565b61014e61027436600461108e565b610c95565b6100f160045481565b6100f16101f481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6100f16102c036600461108e565b610e8e565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082015281610362610639565b905081604001516001600160401b03168110156103bf5781602001516001600160401b031681116103a05781602001516001600160401b03166103a2565b805b82604001516001600160401b03166103ba91906110d9565b6103c1565b5f5b949350505050565b5f8215806103dd57506001600160801b0383115b156103fb5760405163f456040360e01b815260040160405180910390fd5b6101f482108061040d5750620f424082115b1561042b5760405163014b311560e31b815260040160405180910390fd5b5f610434610639565b600180549192505f610445836110ec565b909155506040805160a0810182523381526001600160401b03841660208201529193505f919081016104778685611104565b6001600160401b0390811682526001600160801b038089166020808501919091526003546040948501525f88815280825284902085518154928701518516600160a01b026001600160e01b03199093166001600160a01b0390911617919091178155928401516001840180546060870151909316600160401b026001600160c01b031990931691909316171790556080820151600290910155905061051b81610f3d565b60025f82825461052b9190611104565b90915550506004541561054b57600480545f90915561054981610f79565b505b6040516323b872dd60e01b8152336004820152306024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af11580156105bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105df9190611126565b506040818101518151878152602081018590526001600160401b03909116818301529051339185917fd5987d72b516fb12b1d31e6a7ab75f0c975e512aba9225ebbbb1b58c25cbb7a79181900360600190a3505092915050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa158015610697573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bb919061117e565b602001516001600160401b0316905090565b3330146106ed576040516330cd747160e01b815260040160405180910390fd5b604051630441a3e760e41b8152600481018290525f60248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063441a3e70906044016020604051808303815f875af115801561075a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077e9190611245565b60405163095ea7b360e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906107ef907f000000000000000000000000000000000000000000000000000000000000000090859060040161125c565b6020604051808303815f875af115801561080b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082f9190611126565b5060405163f14faf6f60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f14faf6f906024015f604051808303815f87803b15801561088f575f80fd5b505af11580156108a1573d5f803e3d5ffd5b505060408051858152602081018590527f3f2a7eec90b377537d640acdf78c4ffc072aec2431c1057ea33245c8f3255ce4935001905060405180910390a15050565b5f6108ed83610fd0565b90505f816020015182604001516109049190611275565b6001600160401b031690505f8190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c19d93fb6040518163ffffffff1660e01b815260040161010060405180830381865afa92505050801561098e575060408051601f3d908101601f1916820190925261098b9181019061117e565b60015b156109fe57602081015160408501516001600160401b0391821691168110156109f75784602001516001600160401b031681116109d85784602001516001600160401b03166109da565b805b85604001516001600160401b03166109f291906110d9565b6109f9565b5f5b925050505b5f61271083836107d087606001516001600160801b0316610a1f9190611294565b610a299190611294565b610a3391906112ab565b610a3d91906112ab565b90505f6a0c097ce7bc90715b34b9f160241b8560800151600354610a6191906110d9565b610a6a87610f3d565b610a749190611294565b610a7e91906112ab565b90505f8286606001516001600160801b0316610a9a91906110d9565b905086811015610abd57604051633de57c2360e21b815260040160405180910390fd5b5f88815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201556060860151610b079086906001600160801b0316611294565b60025f828254610b1791906110d9565b909155505f9050610b296002856112ab565b90505f83610b3783876110d9565b610b419190611104565b90508115610ba157604051635922e25360e01b8152600481018390523090635922e253906024015f604051808303815f87803b158015610b7f575f80fd5b505af1925050508015610b90575060015b610ba157610b9e8282611104565b90505b8015610bb057610bb081610f79565b875160405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91610bff9190879060040161125c565b6020604051808303815f875af1158015610c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3f9190611126565b50875160408051858152602081018890526001600160a01b03909216918c917fb9447a366f766b5feac87e6d186f8bd51e5cd2b1226ec8a58b31d0e1ba83e4a4910160405180910390a350505050505050505050565b5f610c9f82610fd0565b90505f610caa610639565b905081604001516001600160401b0316811015610cf6576040808301519051630f09f55b60e41b8152600481018390526001600160401b03909116602482015260440160405180910390fd5b5f6a0c097ce7bc90715b34b9f160241b8360800151600354610d1891906110d9565b610d2185610f3d565b610d2b9190611294565b610d3591906112ab565b5f85815260208190526040812080546001600160e01b03191681556001810180546001600160c01b0319169055600201559050610d7183610f3d565b60025f828254610d8191906110d9565b9091555050825160608401516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91610dd29085906001600160801b0316611104565b6040518363ffffffff1660e01b8152600401610def92919061125c565b6020604051808303815f875af1158015610e0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2f9190611126565b5082516060840151604080516001600160801b039092168252602082018490526001600160a01b039092169186917fa5851b0172fdafd3dafe0e52ce051747548a4c642a2f22793c01faf228e13062910160405180910390a350505050565b5f81815260208181526040808320815160a08101835281546001600160a01b0381168252600160a01b90046001600160401b0390811694820194909452600182015493841692810192909252600160401b9092046001600160801b03166060820152600290910154608082018190526003546a0c097ce7bc90715b34b9f160241b91610f19916110d9565b610f2283610f3d565b610f2c9190611294565b610f3691906112ab565b9392505050565b5f81602001518260400151610f529190611275565b6001600160401b031682606001516001600160801b0316610f739190611294565b92915050565b6002545f03610f9b578060045f828254610f939190611104565b909155505050565b600254610fb66a0c097ce7bc90715b34b9f160241b83611294565b610fc091906112ab565b60035f828254610f939190611104565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152505f8181526020818152604091829020825160a08101845281546001600160a01b038116808352600160a01b9091046001600160401b0390811694830194909452600183015493841694820194909452600160401b9092046001600160801b03166060830152600201546080820152903314611089576040516330cd747160e01b815260040160405180910390fd5b919050565b5f6020828403121561109e575f80fd5b5035919050565b5f80604083850312156110b6575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610f7357610f736110c5565b5f600182016110fd576110fd6110c5565b5060010190565b80820180821115610f7357610f736110c5565b80518015158114611089575f80fd5b5f60208284031215611136575f80fd5b610f3682611117565b80516001600160401b0381168114611089575f80fd5b80516001600160601b0381168114611089575f80fd5b805163ffffffff81168114611089575f80fd5b5f610100828403128015611190575f80fd5b5060405161010081016001600160401b03811182821017156111c057634e487b7160e01b5f52604160045260245ffd5b6040526111cc8361113f565b81526111da6020840161113f565b60208201526111eb60408401611155565b60408201526111fc6060840161113f565b606082015261120d60808401611155565b608082015261121e60a0840161116b565b60a082015260c0838101519082015261123960e08401611117565b60e08201529392505050565b5f60208284031215611255575f80fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6001600160401b038281168282160390811115610f7357610f736110c5565b8082028115828204841417610f7357610f736110c5565b5f826112c557634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212206efae6d7008736996f0110e0c304aea683c2cf78ccd7ab365b36e87dd2a468d564736f6c634300081a0033","sourceMap":"1266:5191:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1443:46;;1485:4;1443:46;;;;;160:25:1;;;148:2;133:18;1443:46:0;;;;;;;;3088:210;;;;;;:::i;:::-;;:::i;3304:658::-;;;;;;:::i;:::-;;:::i;2754:85::-;;;:::i;1936:27::-;;;;;;5704:289;;;;;;:::i;:::-;;:::i;:::-;;1785:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1785:37:0;;;-1:-1:-1;;;1785:37:0;;;-1:-1:-1;;;;;1785:37:0;;;;;;;;-1:-1:-1;;;1785:37:0;;;-1:-1:-1;;;;;1785:37:0;;;;;;;;-1:-1:-1;;;;;1051:32:1;;;;1033:51;;-1:-1:-1;;;;;1120:31:1;;;1115:2;1100:18;;1093:59;1188:31;;;;1168:18;;;1161:59;;;;-1:-1:-1;;;;;1256:32:1;1251:2;1236:18;;1229:60;1276:3;1305:19;;1298:35;1020:3;1005:19;1785:37:0;778:561:1;1828:25:0;;;;;;1859:26;;;;;;1393:44;;1428:9;1393:44;;4580:1021;;;;;;:::i;:::-;;:::i;1653:28::-;;;;;;;;-1:-1:-1;;;;;1508:32:1;;;1490:51;;1478:2;1463:18;1653:28:0;1344:203:1;3968:402:0;;;;;;:::i;:::-;;:::i;2007:28::-;;;;;;1291:38;;1326:3;1291:38;;1574:32;;;;;2845:161;;;;;;:::i;:::-;;:::i;1612:35::-;;;;;3088:210;3140:7;3175:9;;;;;;;;;;;3159:25;;;;;;;;;-1:-1:-1;;;;;3159:25:0;;;;-1:-1:-1;;;3159:25:0;;-1:-1:-1;;;;;3159:25:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3159:25:0;;;-1:-1:-1;;;;;3159:25:0;;;;;;;;;;;;;;3140:7;3206:6;:4;:6::i;:::-;3194:18;;3234:1;:10;;;-1:-1:-1;;;;;3229:15:0;:1;:15;;:62;;3269:1;:7;;;-1:-1:-1;;;;;3265:11:0;:1;:11;:25;;3283:1;:7;;;-1:-1:-1;;;;;3265:25:0;;;;3279:1;3265:25;3251:1;:10;;;-1:-1:-1;;;;;3251:40:0;;;;;:::i;:::-;3229:62;;;3247:1;3229:62;3222:69;3088:210;-1:-1:-1;;;;3088:210:0:o;3304:658::-;3366:10;3392:11;;;:41;;-1:-1:-1;;;;;;3407:26:0;;3392:41;3388:60;;;3442:6;;-1:-1:-1;;;3442:6:0;;;;;;;;;;;3388:60;1326:3;3462:4;:15;:34;;;;1428:9;3481:4;:15;3462:34;3458:53;;;3505:6;;-1:-1:-1;;;3505:6:0;;;;;;;;;;;3458:53;3521:13;3537:6;:4;:6::i;:::-;3558;:8;;3521:22;;-1:-1:-1;3558:6:0;:8;;;:::i;:::-;;;;-1:-1:-1;3592:84:0;;;;;;;;3597:10;3592:84;;-1:-1:-1;;;;;3592:84:0;;;;;;3553:13;;-1:-1:-1;3576:13:0;;3592:84;;;3631:12;3639:4;3616:5;3631:12;:::i;:::-;-1:-1:-1;;;;;3592:84:0;;;;;-1:-1:-1;;;;;3592:84:0;;;;;;;;;;;3663:12;;3592:84;;;;;-1:-1:-1;3686:9:0;;;;;;;;;:13;;;;;;;;;;-1:-1:-1;;;3686:13:0;-1:-1:-1;;;;;;3686:13:0;;;-1:-1:-1;;;;;3686:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3686:13:0;-1:-1:-1;;;;;;3686:13:0;;;;;;;;;;;;;;;;;;;;3576:100;-1:-1:-1;3724:10:0;3576:100;3724:7;:10::i;:::-;3709:11;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;3748:13:0;;:18;3744:85;;3782:13;;;3770:9;3797:17;;;3816:10;3782:13;3816:7;:10::i;:::-;3768:61;3744:85;3838:53;;-1:-1:-1;;;3838:53:0;;3857:10;3838:53;;;2741:51:1;3877:4:0;2808:18:1;;;2801:60;2877:18;;;2870:34;;;3838:5:0;-1:-1:-1;;;;;3838:18:0;;;;2714::1;;3838:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3944:10:0;;;;;3906:49;;3492:25:1;;;3548:2;3533:18;;3526:34;;;-1:-1:-1;;;;;3596:31:1;;;3576:18;;;3569:59;3906:49:0;;3917:10;;3913:2;;3906:49;;;;;3480:2:1;3906:49:0;;;3378:584;;3304:658;;;;:::o;2754:85::-;2791:7;2809:4;-1:-1:-1;;;;;2809:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:27;;;-1:-1:-1;;;;;2802:34:0;;;2754:85;:::o;5704:289::-;5765:10;5787:4;5765:27;5761:50;;5801:10;;-1:-1:-1;;;5801:10:0;;;;;;;;;;;5761:50;5838:25;;-1:-1:-1;;;5838:25:0;;;;;5558::1;;;5821:14:0;5599:18:1;;;5592:34;;;5821:14:0;5838:5;-1:-1:-1;;;;;5838:14:0;;;;5531:18:1;;5838:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5873:45;;-1:-1:-1;;;5873:45:0;;5821:42;;-1:-1:-1;;;;;;5882:3:0;5873:21;;;;:45;;5903:5;;5821:42;;5873:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5928:20:0;;-1:-1:-1;;;5928:20:0;;;;;160:25:1;;;5928:5:0;-1:-1:-1;;;;;5928:12:0;;;;133:18:1;;5928:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5963:23:0;;;5558:25:1;;;5614:2;5599:18;;5592:34;;;5963:23:0;;-1:-1:-1;5531:18:1;;-1:-1:-1;5963:23:0;;;;;;;5751:242;5704:289;:::o;4580:1021::-;4646:13;4662:9;4668:2;4662:5;:9::i;:::-;4646:25;;4681:12;4709:1;:7;;;4696:1;:10;;;:20;;;;:::i;:::-;-1:-1:-1;;;;;4681:35:0;;;4726:12;4741:4;4726:19;;4759:4;-1:-1:-1;;;;;4759:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4759:12:0;;;;;;;;-1:-1:-1;;4759:12:0;;;;;;;;;;;;:::i;:::-;;;4755:198;;;4834:16;;;;4876:10;;;;-1:-1:-1;;;;;4822:28:0;;;;4871:15;;;;:62;;4911:1;:7;;;-1:-1:-1;;;;;4907:11:0;:1;:11;:25;;4925:1;:7;;;-1:-1:-1;;;;;4907:25:0;;;;4921:1;4907:25;4893:1;:10;;;-1:-1:-1;;;;;4893:40:0;;;;;:::i;:::-;4871:62;;;4889:1;4871:62;4864:69;;4808:136;4772:172;4755:198;4962:15;5032:6;5025:4;5018;1485;4988:1;:8;;;-1:-1:-1;;;;;4980:17:0;:35;;;;:::i;:::-;:42;;;;:::i;:::-;:49;;;;:::i;:::-;:58;;;;:::i;:::-;4962:76;;5048:13;-1:-1:-1;;;5093:1:0;:7;;;5078:12;;:22;;;;:::i;:::-;5064:10;5072:1;5064:7;:10::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;5048:59;;5117:11;5142:7;5131:1;:8;;;-1:-1:-1;;;;;5131:18:0;;;;;:::i;:::-;5117:32;;5169:6;5163:3;:12;5159:31;;;5184:6;;-1:-1:-1;;;5184:6:0;;;;;;;;;;;5159:31;5207:5;:9;;;;;;;;;;5200:16;;-1:-1:-1;;;;;;5200:16:0;;;;;;;;-1:-1:-1;;;;;;5200:16:0;;;;;;5249:8;;;;5241:24;;5261:4;;-1:-1:-1;;;;;5241:17:0;:24;:::i;:::-;5226:11;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;5275:15:0;;-1:-1:-1;5293:11:0;5303:1;5293:7;:11;:::i;:::-;5275:29;-1:-1:-1;5314:12:0;5349:5;5329:17;5275:29;5329:7;:17;:::i;:::-;:25;;;;:::i;:::-;5314:40;-1:-1:-1;5368:12:0;;5364:102;;5400:26;;-1:-1:-1;;;5400:26:0;;;;;160:25:1;;;5400:4:0;;:17;;133:18:1;;5400:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5396:60;;5438:15;5446:7;5438:15;;:::i;:::-;;;5396:60;5479:9;;5475:28;;5490:13;5498:4;5490:7;:13::i;:::-;5528:7;;5513:28;;-1:-1:-1;;;5513:28:0;;-1:-1:-1;;;;;5513:5:0;:14;;;;:28;;5528:7;5537:3;;5513:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5572:7:0;;5556:38;;;5558:25:1;;;5614:2;5599:18;;5592:34;;;-1:-1:-1;;;;;5556:38:0;;;;5568:2;;5556:38;;5531:18:1;5556:38:0;;;;;;;4636:965;;;;;;;;4580:1021;;:::o;3968:402::-;4015:13;4031:9;4037:2;4031:5;:9::i;:::-;4015:25;;4050:9;4062:6;:4;:6::i;:::-;4050:18;;4086:1;:10;;;-1:-1:-1;;;;;4082:14:0;:1;:14;4078:51;;;4118:10;;;;;4105:24;;-1:-1:-1;;;4105:24:0;;;;;7171:25:1;;;-1:-1:-1;;;;;7232:31:1;;;7212:18;;;7205:59;7144:18;;4105:24:0;;;;;;;4078:51;4139:13;-1:-1:-1;;;4184:1:0;:7;;;4169:12;;:22;;;;:::i;:::-;4155:10;4163:1;4155:7;:10::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;4215:5;:9;;;;;;;;;;4208:16;;-1:-1:-1;;;;;;4208:16:0;;;;;;;;-1:-1:-1;;;;;;4208:16:0;;;;;;4139:59;-1:-1:-1;4249:10:0;4257:1;4249:7;:10::i;:::-;4234:11;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;4284:7:0;;4293:8;;;;-1:-1:-1;;;;;4269:5:0;:14;;;;4293:16;;4304:5;;-1:-1:-1;;;;;4293:16:0;;:::i;:::-;4269:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4338:7:0;;4347:8;;;;4325:38;;;-1:-1:-1;;;;;7467:32:1;;;7449:51;;7531:2;7516:18;;7509:34;;;-1:-1:-1;;;;;4325:38:0;;;;4334:2;;4325:38;;7422:18:1;4325:38:0;;;;;;;4005:365;;;3968:402;:::o;2845:161::-;2895:7;2930:9;;;;;;;;;;;2914:25;;;;;;;;;-1:-1:-1;;;;;2914:25:0;;;;-1:-1:-1;;;2914:25:0;;-1:-1:-1;;;;;2914:25:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2914:25:0;;;-1:-1:-1;;;;;2914:25:0;;;;;;;;;;;;;;;;2970:12;;-1:-1:-1;;;1563:4:0;2970:22;;;:::i;:::-;2956:10;2964:1;2956:7;:10::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;2949:50;2845:161;-1:-1:-1;;;2845:161:0:o;6326:129::-;6380:7;6440:1;:7;;;6427:1;:10;;;:20;;;;:::i;:::-;-1:-1:-1;;;;;6406:42:0;6414:1;:8;;;-1:-1:-1;;;;;6406:17:0;:42;;;;:::i;:::-;6399:49;6326:129;-1:-1:-1;;6326:129:0:o;6153:167::-;6208:11;;6223:1;6208:16;6204:58;;6245:6;6228:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;6153:167:0:o;6204:58::-;6302:11;;6287:12;-1:-1:-1;;;6287:6:0;:12;:::i;:::-;:26;;;;:::i;:::-;6271:12;;:42;;;;;;;:::i;5999:148::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6077:5:0;:9;;;;;;;;;;;;6073:13;;;;;;;;;-1:-1:-1;;;;;6073:13:0;;;;;-1:-1:-1;;;6073:13:0;;;-1:-1:-1;;;;;6073:13:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6073:13:0;;;-1:-1:-1;;;;;6073:13:0;;;;;;;;;;;;;6111:10;6100:21;6096:44;;6130:10;;-1:-1:-1;;;6130:10:0;;;;;;;;;;;6096:44;5999:148;;;:::o;196:226:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;369:23:1;;196:226;-1:-1:-1;196:226:1:o;427:346::-;495:6;503;556:2;544:9;535:7;531:23;527:32;524:52;;;572:1;569;562:12;524:52;-1:-1:-1;;617:23:1;;;737:2;722:18;;;709:32;;-1:-1:-1;427:346:1:o;2004:127::-;2065:10;2060:3;2056:20;2053:1;2046:31;2096:4;2093:1;2086:15;2120:4;2117:1;2110:15;2136:128;2203:9;;;2224:11;;;2221:37;;;2238:18;;:::i;2269:135::-;2308:3;2329:17;;;2326:43;;2349:18;;:::i;:::-;-1:-1:-1;2396:1:1;2385:13;;2269:135::o;2409:125::-;2474:9;;;2495:10;;;2492:36;;;2508:18;;:::i;2915:164::-;2991:13;;3040;;3033:21;3023:32;;3013:60;;3069:1;3066;3059:12;3084:202;3151:6;3204:2;3192:9;3183:7;3179:23;3175:32;3172:52;;;3220:1;3217;3210:12;3172:52;3243:37;3270:9;3243:37;:::i;3639:175::-;3717:13;;-1:-1:-1;;;;;3759:30:1;;3749:41;;3739:69;;3804:1;3801;3794:12;3819:175;3897:13;;-1:-1:-1;;;;;3939:30:1;;3929:41;;3919:69;;3984:1;3981;3974:12;3999:167;4077:13;;4130:10;4119:22;;4109:33;;4099:61;;4156:1;4153;4146:12;4171:1200;4262:6;4322:3;4310:9;4301:7;4297:23;4293:33;4338:2;4335:22;;;4353:1;4350;4343:12;4335:22;-1:-1:-1;4402:2:1;4396:9;4444:3;4432:16;;-1:-1:-1;;;;;4463:34:1;;4499:22;;;4460:62;4457:185;;;4564:10;4559:3;4555:20;4552:1;4545:31;4599:4;4596:1;4589:15;4627:4;4624:1;4617:15;4457:185;4658:2;4651:22;4697:39;4726:9;4697:39;:::i;:::-;4689:6;4682:55;4770:48;4814:2;4803:9;4799:18;4770:48;:::i;:::-;4765:2;4757:6;4753:15;4746:73;4852:48;4896:2;4885:9;4881:18;4852:48;:::i;:::-;4847:2;4839:6;4835:15;4828:73;4934:48;4978:2;4967:9;4963:18;4934:48;:::i;:::-;4929:2;4921:6;4917:15;4910:73;5017:49;5061:3;5050:9;5046:19;5017:49;:::i;:::-;5011:3;5003:6;4999:16;4992:75;5101:49;5145:3;5134:9;5130:19;5101:49;:::i;:::-;5095:3;5083:16;;5076:75;5213:3;5198:19;;;5192:26;5234:16;;;5227:31;5292:47;5334:3;5319:19;;5292:47;:::i;:::-;5286:3;5274:16;;5267:73;5278:6;4171:1200;-1:-1:-1;;;4171:1200:1:o;5637:230::-;5707:6;5760:2;5748:9;5739:7;5735:23;5731:32;5728:52;;;5776:1;5773;5766:12;5728:52;-1:-1:-1;5821:16:1;;5637:230;-1:-1:-1;5637:230:1:o;5872:274::-;-1:-1:-1;;;;;6064:32:1;;;;6046:51;;6128:2;6113:18;;6106:34;6034:2;6019:18;;5872:274::o;6404:194::-;-1:-1:-1;;;;;6502:26:1;;;6474;;;6470:59;;6541:28;;6538:54;;;6572:18;;:::i;6603:168::-;6676:9;;;6707;;6724:15;;;6718:22;;6704:37;6694:71;;6745:18;;:::i;6776:217::-;6816:1;6842;6832:132;;6886:10;6881:3;6877:20;6874:1;6867:31;6921:4;6918:1;6911:15;6949:4;6946:1;6939:15;6832:132;-1:-1:-1;6978:9:1;;6776:217::o","linkReferences":{},"immutableReferences":{"91":[{"start":656,"length":32},{"start":1596,"length":32},{"start":2325,"length":32}],"94":[{"start":714,"length":32},{"start":1389,"length":32},{"start":1804,"length":32},{"start":1989,"length":32},{"start":2118,"length":32},{"start":3017,"length":32},{"start":3479,"length":32}],"96":[{"start":556,"length":32},{"start":1944,"length":32}]}}}}}}},"signatures":{"function":[{"signature":"accPerWeight()","signatureHash4":"0x51e42ab5","signatureHash32":"0x51e42ab5e3869d1ef2a1096acf29c3d3999e0e908438ef8f35c88a3184fa88a0"},{"signature":"bonds(uint256)","signatureHash4":"0x5f1c17c0","signatureHash32":"0x5f1c17c05fcbb69d74f5f0d147068a3c7f5bb48e126c2c3b54bbed7a9799f0f0"},{"signature":"bonusOf(uint256)","signatureHash4":"0xfb3d3df2","signatureHash32":"0xfb3d3df2b38cf24bdec8a52ed449f0b2b9c67f20fc7ed8ad8c7519281cebd29f"},{"signature":"core()","signatureHash4":"0xf2f4eb26","signatureHash32":"0xf2f4eb266c1410ab85e588db2511aa954e60c3c01704b351499b55bcb681a087"},{"signature":"donateShares(uint256)","signatureHash4":"0x5922e253","signatureHash32":"0x5922e253f49882e397da2807b54193f457a6bf3af070f92a9f8b2cd88623c3aa"},{"signature":"exitEarly(uint256,uint256)","signatureHash4":"0x9dcedb6e","signatureHash32":"0x9dcedb6e0ec8de9e6cfb36aac70a76b34de3471037f9655cd8442f4079665908"},{"signature":"lock(uint256,uint256)","signatureHash4":"0x1338736f","signatureHash32":"0x1338736ffb57f9a181ec2863b26472a1ad1751c694a04d6282a03b98b9c91524"},{"signature":"MAX_PENALTY_BPS()","signatureHash4":"0x0225d3cc","signatureHash32":"0x0225d3cc4a06f7a889894fa315f29af025d2c14c3af9937cbc71acf39795701d"},{"signature":"MAX_TERM()","signatureHash4":"0x9886bf63","signatureHash32":"0x9886bf63fd9dcfd332efb65ce68d117c60d0b29967ca670e32909a914c1b710c"},{"signature":"MIN_TERM()","signatureHash4":"0xf0604829","signatureHash32":"0xf06048299dee4f1c774dfe06be7244b880661d03ace14867edfda0afbf64e466"},{"signature":"nextId()","signatureHash4":"0x61b8ce8c","signatureHash32":"0x61b8ce8c17cbc37bf42ef55bcb04dedad7564b0d311169dae4dbbc5320b547e9"},{"signature":"redeem(uint256)","signatureHash4":"0xdb006a75","signatureHash32":"0xdb006a751bed9eb2097bb87aa93452cb31329759b3b6c5518170a3d50e6e985d"},{"signature":"remaining(uint256)","signatureHash4":"0x0361bf14","signatureHash32":"0x0361bf147082ea57303396de2715e7ed04f1f15a123cdbdc216a2c6ebe24a441"},{"signature":"sqk()","signatureHash4":"0xc98a295b","signatureHash32":"0xc98a295b079f59c3de48974261b4eeca1437a2c7ae60e120e52f235190f4063c"},{"signature":"totalWeight()","signatureHash4":"0x96c82e57","signatureHash32":"0x96c82e577bcb8022d7412bf86297bd6445ea69305352a736341948876e43ccec"},{"signature":"undistributed()","signatureHash4":"0xeb72c8d8","signatureHash32":"0xeb72c8d85ffee5e57847a210539ac882ab96cb04b04a8226690ef82e1b93729e"},{"signature":"vault()","signatureHash4":"0xfbfa77cf","signatureHash32":"0xfbfa77cfa16f85c900b53d1065f840fd1fc574b2cd12cde1a86984206875ef23"},{"signature":"work()","signatureHash4":"0x322e9f04","signatureHash32":"0x322e9f046573582208531c628a7aeb7d8cd7ac40df3b45966091e47249499191"}],"event":[{"signature":"Donated(uint256,uint256)","signatureHash4":"0x3f2a7eec","signatureHash32":"0x3f2a7eec90b377537d640acdf78c4ffc072aec2431c1057ea33245c8f3255ce4"},{"signature":"ExitedEarly(uint256,address,uint256,uint256)","signatureHash4":"0xb9447a36","signatureHash32":"0xb9447a366f766b5feac87e6d186f8bd51e5cd2b1226ec8a58b31d0e1ba83e4a4"},{"signature":"Locked(uint256,address,uint256,uint256,uint256)","signatureHash4":"0xd5987d72","signatureHash32":"0xd5987d72b516fb12b1d31e6a7ab75f0c975e512aba9225ebbbb1b58c25cbb7a7"},{"signature":"Redeemed(uint256,address,uint256,uint256)","signatureHash4":"0xa5851b01","signatureHash32":"0xa5851b0172fdafd3dafe0e52ce051747548a4c642a2f22793c01faf228e13062"}],"error":[{"signature":"NotMature(uint256,uint256)","signatureHash4":"0xf09f55b0","signatureHash32":"0xf09f55b07c8d529265dbccb4ccf97cbf333fc31e1263f18a91dfa36343a89846"},{"signature":"NotOwner()","signatureHash4":"0x30cd7471","signatureHash32":"0x30cd74712f59d478562d48e2d35de830db72c60a63dd08ae59199eec990b5bc4"},{"signature":"Slip()","signatureHash4":"0xf795f08c","signatureHash32":"0xf795f08cb2166690e663d69cc082d351d3778d984f8d019e47ff28a9c2963811"},{"signature":"Term()","signatureHash4":"0x0a5988a8","signatureHash32":"0x0a5988a8184fa3e5f2087c734970d7e2b857ca24fc51e6aa9de182f131303c8a"},{"signature":"Zero()","signatureHash4":"0xf4560403","signatureHash32":"0xf4560403888256621a13abd81f4930ecb469c609f6317e1dd2ee34fe69293e1b"}]},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"match":"exact_match","chainId":"11155111","address":"0xF8Dec22b7bb63dfC7e671F86B427a466476D0d1b"}