diff --git a/README.md b/README.md index 855b62d..5021f6a 100644 --- a/README.md +++ b/README.md @@ -36,15 +36,14 @@ forge test MIT ## Addresses -
v3.2 | Name | Address | | -------------------- | ------------------------------------------ | | Meta Factory | [0xd703aaE79538628d27099B8c4f621bE4CCd142d5](https://contractscan.xyz/contract/0xd703aae79538628d27099b8c4f621be4ccd142d5) | -| Factory | [0x4600A1e70fB9e4C9A3feC6d9105f6807aDEACbe2](https://contractscan.xyz/contract/0x4600A1e70fB9e4C9A3feC6d9105f6807aDEACbe2) | -| Kernel | [0x97EBdCa9c606d493daD1bE10188Dd78cadB2a139](https://contractscan.xyz/contract/0x97EBdCa9c606d493daD1bE10188Dd78cadB2a139) | +| Factory | [0x7a1dBAB750f12a90EB1B60D2Ae3aD17D4D81EfFe](https://contractscan.xyz/contract/0x7a1dBAB750f12a90EB1B60D2Ae3aD17D4D81EfFe) | +| Kernel | [0xD830D15D3dc0C269F3dBAa0F3e8626d33CFdaBe1](https://contractscan.xyz/contract/0xD830D15D3dc0C269F3dBAa0F3e8626d33CFdaBe1) |
diff --git a/broadcast/DeployKernel.s.sol/11155111/run-1733880637.json b/broadcast/DeployKernel.s.sol/11155111/run-1733880637.json new file mode 100644 index 0000000..8ad8539 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/11155111/run-1733880637.json @@ -0,0 +1,124 @@ +{ + "transactions": [ + { + "hash": "0x74f1a4acf98cfae747d440e49b7d6a7453b96fd41eb646baa620b8f674de8f32", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x73c8d3d77471b334046ae8e80aea93c689ca0089", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6d34b6", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140806040523461020357602081615e3780380380916100208285610207565b83398101031261020357516001600160a01b038116810361020357306080524660a05260a0604051610053604082610207565b6006815260208101906512d95c9b995b60d21b825260405191610077604084610207565b60058352602083019164181719971960d91b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052604051602081019063deadbeef60e01b825260048152610101602482610207565b5190516001600160581b031981169190601582106101e3575b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b031916605885901c179055604051615bf8908161023f823960805181614742015260a05181614765015260c051816147d5015260e051816147fb015261010051816147210152610120518181816103b40152818161069d0152818161084301528181610a9f01528181610e1e01528181611136015281816112aa015281816113000152818161182d0152818161195d015281816125ac01526130090152f35b6001600160581b031960159290920360031b82901b161690505f8061011a565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761022a57604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001d575b36612eb75761001b612e86565b005b5f3560e01c8063112d3a7d1461020c578063150b7a02146102075780631626ba7e1461020257806319822f7c146101fd5780631f1b92e3146101f85780633659cfe6146101f35780633c3b752b146101ee57806352141cd9146101e957806357b3a5f4146101e45780636e6fa0c6146101df578063721e67f4146101da57806384b0196e146101d55780638dd7712f146101d057806390ef8862146101cb5780639198bdf5146101c65780639517e29f146101c15780639cfd7cff146101bc578063a65d69d4146101b7578063a71763a8146101b2578063adb610a3146101ad578063b8afe17d146101a8578063bc197c81146101a3578063c3e589781461019e578063d03c791414610199578063d691c96414610194578063e6f3d50a1461018f578063e9ae5c531461018a578063f1f7f0f914610185578063f23a6e6114610180578063f2dc691d1461017b5763fc9c5dec0361000e57611b12565b611af4565b611a9a565b611a64565b611936565b6117b8565b6116d6565b611689565b6115b6565b6114a5565b611439565b611407565b6112d9565b611295565b61123d565b61110f565b610ff8565b610ee9565b610dee565b610d50565b610cca565b610c6f565b610bbc565b610a1e565b610988565b61080d565b610665565b610380565b61031f565b6102c5565b61029f565b6001600160a01b0381160361022257565b5f80fd5b359061023182610211565b565b9181601f84011215610222578235916001600160401b038311610222576020838186019501011161022257565b6060600319820112610222576004359160243561027c81610211565b91604435906001600160401b0382116102225761029b91600401610233565b9091565b346102225760206102bb6102b236610260565b92919091611d65565b6040519015158152f35b34610222576080366003190112610222576102e1600435610211565b6102ec602435610211565b6064356001600160401b0381116102225761030b903690600401610233565b5050604051630a85bd0160e11b8152602090f35b34610222576040366003190112610222576004356024356001600160401b0381116102225760209161035861035e923690600401610233565b91611f2a565b6040516001600160e01b03199091168152f35b90816101209103126102225790565b6060366003190112610222576004356001600160401b038111610222576103ab903690600401610371565b602435604435917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632576103ef6020820135613228565b9092919084836001600160f81b0319861615610619575b826104119394613421565b9361043661042661042184611cf7565b6120ca565b946001600160f81b031916151590565b9384806105d8575b6105c957602001516001600160a01b031690819081156104d15760019261046f61048e925f525f60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b0361053c57826104e0575b50506104d157816104bb925b6104bf575b506040519081529081906020820190565b0390f35b3490349034903490335af1505f6104aa565b631a0a9b9f60e21b5f5260045ffd5b61053592506105319161051561050f6105096104fe61052a95611d2e565b9360608101906120f6565b90611b72565b90611cc1565b63ffffffff60e01b165f5260205260405f2090565b5460ff1690565b1590565b5f80610499565b82919291610596575b506104d15761050981606061055b9301906120f6565b638dd7712f60e01b916001600160e01b03199161057791611cc1565b160361058757816104bb926104a5565b63dbbb044b60e01b5f5260045ffd5b6105c3915061052a6105aa61053192611d2e565b61051561050f6105bd60608801886120f6565b90611b61565b5f610545565b633ab3447f60e11b5f5260045ffd5b50805163ffffffff1663ffffffff6106116106085f516020615bd85f395f51905f525463ffffffff9060c81c1690565b63ffffffff1690565b91161061043e565b5f516020615bd85f395f51905f525460581b9250610406565b6348f5c3ed60e01b5f5260045ffd5b6004359063ffffffff8216820361022257565b359063ffffffff8216820361022257565b602036600319011261022257610679610641565b61069a6106945f516020615bd85f395f51905f525460581b90565b60581c90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610803575b156107f95760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f916107ca575b50156106325760405163d68f602560e01b8152915f838061072f363433600485016121bd565b038183865af192831561079d575f936107a2575b5061074d9061363a565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061077990600483016121e2565b03925af1801561079d5761078957005b806107975f61001b93610fa1565b80610d22565b611f1f565b61074d9193506107c3903d805f833e6107bb8183610fa1565b81019061215b565b9290610743565b6107ec915060203d6020116107f2575b6107e48183610fa1565b810190612128565b5f610709565b503d6107da565b5061001b9061363a565b50303314156106cd565b60203660031901126102225760043561082581610211565b6108406106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061093c575b156109325760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f91610913575b50156106325760405163d68f602560e01b8152915f83806108d5363433600485016121bd565b038183865af192831561079d575f936108f3575b5061074d906121f3565b61074d91935061090c903d805f833e6107bb8183610fa1565b92906108e9565b61092c915060203d6020116107f2576107e48183610fa1565b5f6108af565b5061001b906121f3565b5030331415610873565b6001600160581b031981160361022257565b9181601f84011215610222578235916001600160401b038311610222576020808501948460051b01011161022257565b346102225760a0366003190112610222576004356109a581610946565b6024356109b181610211565b6044356001600160401b038111610222576109d0903690600401610233565b6064939193356001600160401b038111610222576109f2903690600401610233565b91608435956001600160401b03871161022257610a1661001b973690600401610958565b969095612339565b608036600319011261022257600435610a3681610946565b602435610a4281610211565b6044356001600160401b03811161022257610a61903690600401610233565b6064356001600160401b03811161022257610a80903690600401610233565b91610a9c6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ba0575b15610b915760405163ecd0596160e01b81526004808201526001600160a01b03919091169490602081602481895afa90811561079d575f91610b72575b50156106325760405163d68f602560e01b8152955f8780610b32363433600485016121bd565b0381838a5af196871561079d575f97610b52575b5061074d959697612482565b61074d969750610b6b903d805f833e6107bb8183610fa1565b9695610b46565b610b8b915060203d6020116107f2576107e48183610fa1565b5f610b0c565b50919361001b95939193612482565b5030331415610acf565b6001600160e01b031981160361022257565b34610222576020366003190112610222576104bb610bfd600435610bdf81610baa565b5f60408051610bed81610f2f565b8281528260208201520152611e57565b600160405191610c0c83610f2f565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b3461022257604036600319011261022257602060ff610cbe600435610c9381610946565b610ca860243591610ca383610baa565b611d2e565b9063ffffffff60e01b165f5260205260405f2090565b54166040519015158152f35b34610222576020366003190112610222576020610cff600435610cec81610211565b5f604051610cf981610f4f565b52613065565b60405190610d0c82610f4f565b546001600160a01b031690819052604051908152f35b5f91031261022257565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610222575f36600319011261022257610d8f610d9d610d6e613987565b604092919251938493600f60f81b855260e0602086015260e0850190610d2c565b908382036040850152610d2c565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610dd5575050500390f35b8251845285945060209384019390920191600101610dc7565b6040366003190112610222576004356001600160401b03811161022257610e19903690600401610371565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632575f908152602081905260409020546001600160a01b03169060609060018314159081610eb9575b610e8e610e87826060610e959401906120f6565b8091611b80565b9030613a6f565b5015610eaa57610ea157005b61001b91613a94565b63f21e646b60e01b5f5260045ffd5b9150610e95610e8e610e87610edf610ed7610e8760608801886120f6565b903489613a24565b9492505050610e73565b34610222575f36600319011261022257602063ffffffff5f516020615bd85f395f51905f525460c81c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610f4a57604052565b610f1b565b602081019081106001600160401b03821117610f4a57604052565b604081019081106001600160401b03821117610f4a57604052565b61012081019081106001600160401b03821117610f4a57604052565b90601f801991011681019081106001600160401b03821117610f4a57604052565b60405190610231604083610fa1565b6040519061023161012083610fa1565b6001600160401b038111610f4a5760051b60200190565b6080366003190112610222576004356001600160401b03811161022257611023903690600401610958565b602435916001600160401b038311610222573660238401121561022257826004013561104e81610fe1565b9361105c6040519586610fa1565b8185526024602086019260061b8201019036821161022257602401915b8183106110ce575050506044356001600160401b038111610222576110a2903690600401610958565b90606435946001600160401b038611610222576110c661001b963690600401610958565b959094612587565b60408336031261022257602060409182516110e881610f6a565b6110f186610654565b81528286013561110081610211565b83820152815201920191611079565b61111836610260565b6111336106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611233575b156112285760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f91611209575b50156106325760405163d68f602560e01b8152935f85806111c9363433600485016121bd565b038183885af194851561079d575f956111e9575b5061074d939495612754565b61074d949550611202903d805f833e6107bb8183610fa1565b94936111dd565b611222915060203d6020116107f2576107e48183610fa1565b5f6111a3565b509161001b93612754565b5030331415611166565b34610222575f366003190112610222576104bb60405161125e604082610fa1565b601681527535b2b93732b61730b23b30b731b2b2173b181719971960511b6020820152604051918291602083526020830190610d2c565b34610222575f366003190112610222576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6112e236610260565b6112fd6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113fd575b156113f25760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f916113d3575b50156106325760405163d68f602560e01b8152935f8580611393363433600485016121bd565b038183885af194851561079d575f956113b3575b5061074d939495612ac3565b61074d9495506113cc903d805f833e6107bb8183610fa1565b94936113a7565b6113ec915060203d6020116107f2576107e48183610fa1565b5f61136d565b509161001b93612ac3565b5030331415611330565b34610222575f36600319011261022257602063ffffffff5f516020615bd85f395f51905f525460a81c16604051908152f35b3461022257602036600319011261022257604061146960043561145b81610946565b611463612c6b565b50611cf7565b81519061147582610f6a565b5463ffffffff81168083526001600160a01b03602092831c81169383019384528451918252925190921690820152f35b346102225760a0366003190112610222576114c1600435610211565b6114cc602435610211565b6044356001600160401b038111610222576114eb903690600401610958565b50506064356001600160401b0381116102225761150c903690600401610958565b50506084356001600160401b0381116102225761152d903690600401610233565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a09092019201905f5b8181106115965750505090565b82516001600160501b031916845260209384019390920191600101611589565b34610222576020366003190112610222576115f56004356115d681610baa565b6060604080516115e581610f2f565b5f81525f60208201520152611e8d565b60016040519161160483610f2f565b805461ffff60f01b8160f01b168452828060a01b039060101c16602084015201906040519182602082549182815201915f5260205f20905f5b818110611666576104bb858761165581880382610fa1565b604082015260405191829182611541565b825460501b6001600160501b03191684526020909301926001928301920161163d565b346102225760203660031901126102225760206102bb600435612c83565b9060406003198301126102225760043591602435906001600160401b0382116102225761029b91600401610233565b6116df366116a7565b90916001600160a01b036116f233613065565b54169182156117a95760609060018414159485611792575b6117149293614306565b92611782575b50506040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061175357505050500390f35b919360019193955060206117728192603f198a82030186528851610d2c565b9601920192018594939192611744565b61178b91613a94565b5f8061171a565b61171492506117a23634876139cb565b925061170a565b63710c949760e01b5f5260045ffd5b6060366003190112610222576004356117d081610946565b6024356001600160401b038111610222576117ef903690600401610233565b6044356001600160401b0381116102225761180e903690600401610233565b9061182a6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061192c575b1561191f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169390602081602481885afa90811561079d575f91611900575b50156106325760405163d68f602560e01b8152945f86806118c0363433600485016121bd565b038183895af195861561079d575f966118e0575b5061074d949596612d5b565b61074d9596506118f9903d805f833e6107bb8183610fa1565b95946118d4565b611919915060203d6020116107f2576107e48183610fa1565b5f61189a565b5091909261001b94612d5b565b503033141561185d565b61193f366116a7565b61195a6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611a5a575b15611a4f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169190602081602481865afa90811561079d575f91611a30575b50156106325760405163d68f602560e01b8152925f84806119f0363433600485016121bd565b038183875af193841561079d575f94611a10575b5061074d929394612d70565b61074d939450611a29903d805f833e6107bb8183610fa1565b9392611a04565b611a49915060203d6020116107f2576107e48183610fa1565b5f6119ca565b509061001b92612d70565b503033141561198d565b34610222575f3660031901126102225760205f516020615bd85f395f51905f525460581b604051906001600160581b0319168152f35b346102225760a036600319011261022257611ab6600435610211565b611ac1602435610211565b6084356001600160401b03811161022257611ae0903690600401610233565b505060405163f23a6e6160e01b8152602090f35b346102225760203660031901126102225760206102bb600435612d7b565b34610222576040366003190112610222576004356001600160401b03811161022257611b59611b476020923690600401610371565b60243590611b5482610211565b612d88565b604051908152f35b906008116102225760040190600490565b906004116102225790600490565b909291928360041161022257831161022257600401916003190190565b906020116102225790602090565b90929192836020116102225783116102225760200191601f190190565b906018116102225760040190601490565b906014116102225790601490565b909291928360011161022257831161022257600101915f190190565b906009116102225760010190600890565b909291928360091161022257831161022257600901916008190190565b906016116102225790601690565b906016116102225760020190601490565b909291928360161161022257831161022257601601916015190190565b906002116102225790600290565b909291928360141161022257831161022257601401916013190190565b90602c116102225760180190601490565b90939293848311610222578411610222578101920390565b356001600160e01b0319811692919060048210611cdc575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85060205260405f2090565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85160205260405f2090565b90929060018103611db457506001600160a01b0392611dae9250611d9e915060581b600160581b600160f81b0316600160f81b17611cf7565b5460201c6001600160a01b031690565b16151590565b60028103611df457506001600160a01b0392611dae9250611de89150611ddb908416613065565b546001600160a01b031690565b6001600160a01b031690565b600303611e3457611e15611e1061050f600193611e2395611b72565b611e57565b01546001600160a01b031690565b6001600160a01b0390811691161490565b5050505f90565b359060208110611e49575090565b5f199060200360031b1b1690565b63ffffffff60e01b165f527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b60205260405f2090565b63ffffffff60e01b165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85260205260405f2090565b908160209103126102225751611ed881610baa565b90565b908060209392818452848401375f828201840152601f01601f1916010190565b611ed8949260609260018060a01b0316825260208201528160408201520191611edb565b6040513d5f823e3d90fd5b91611f349161309d565b919080836001600160f81b03198416156120aa575b6020811015918261206d575b82612057575b506001600160a01b039050611f75611de8611d9e86611cf7565b16156104d1576001600160f81b03198316600160f81b0361200a5790611fa26020949392611fc0966131ce565b604051637aa8f17760e11b8152958694859384933360048601611efb565b039160581c6001600160a01b03165afa90811561079d575f91611fe1575090565b611ed8915060203d602011612003575b611ffb8183610fa1565b810190611ec3565b503d611ff1565b929160081b93600160f11b61203861202b61202488611e8d565b5460f01b90565b6001600160f01b03191690565b1661204857611ed894339061311a565b635b71057960e01b5f5260045ffd5b819295506120659350611bab565b925f80611f5b565b91507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a6120a361209d8385611b9d565b90611e3b565b1491611f55565b92506120c45f516020615bd85f395f51905f525460581b90565b92611f49565b906040516120d781610f6a565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561022257018035906001600160401b0382116102225760200191813603831361022257565b90816020910312610222575180151581036102225790565b6001600160401b038111610f4a57601f01601f191660200190565b602081830312610222578051906001600160401b038211610222570181601f820112156102225780519061218e82612140565b9261219c6040519485610fa1565b8284526020838301011161022257815f9260208093018386015e8301015290565b611ed8939260609260018060a01b03168252602082015281604082015201905f611edb565b906020611ed8928181520190610d2c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2565b1561224d57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b5f516020615bd85f395f51905f52805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b5f52603260045260245ffd5b908210156122e45761029b9160051b8101906120f6565b6122b9565b908092918237015f815290565b60405190612305602083610fa1565b5f8252565b3d15612334573d9061231b82612140565b916123296040519384610fa1565b82523d5f602084013e565b606090565b949392919096959661237c6001600160581b03196123756123685f516020615bd85f395f51905f525460581b90565b6001600160581b03191690565b1615612246565b6001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061246a575b61245b57856123b5612402976136ff565b6123d66123c0610fc2565b60018152925b6001600160a01b03166020840152565b5f516020615bd85f395f51905f52805463ffffffff60a81b1916600160a81b179055613765565b613765565b5f5b81811061241057505050565b5f8061241d8385876122cd565b9061242d604051809381936122e9565b039082305af161243b61230a565b501561244957600101612404565b636534eae560e11b5f5260045260245ffd5b6361c4e91b60e11b5f5260045ffd5b506001600160f81b03198616600160f91b14156123a4565b94939291906001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061252d575b61245b576124bc866136ff565b6001600160a01b036124d0611d9e88611cf7565b16156124df575b505050505050565b612522956123fd6125055f516020615bd85f395f51905f525463ffffffff9060a81c1690565b926123c660405194612518604087610fa1565b63ffffffff168552565b5f80808080806124d7565b506001600160f81b03198616600160f91b14156124af565b9060405161255281610f2f565b82546001600160a01b03908116825260019390930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946125a96106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806126f9575b156126ea5760405163ecd0596160e01b81526004808201526001600160a01b039190911695906020816024818a5afa90811561079d575f916126cb575b50156106325760405163d68f602560e01b8152965f888061263f363433600485016121bd565b0381838b5af197881561079d575f986126ab575b5061265f969798613b0d565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061268b90600483016121e2565b03925af1801561079d5761269d575b50565b806107975f61023193610fa1565b61265f9798506126c4903d805f833e6107bb8183610fa1565b9796612653565b6126e4915060203d6020116107f2576107e48183610fa1565b5f612619565b50919390929461023196613b0d565b50303314156125dc565b916020611ed8938181520191611edb565b356bffffffffffffffffffffffff19811692919060148210612734575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b60018103612894575060581b600160581b600160f81b0316600160f81b179061278961277f83611cf7565b5463ffffffff1690565b5f516020615bd85f395f51905f525460a81c63ffffffff169063ffffffff80831691161461287c575b5061281b6127f4611de86127ee6127e86127e15f516020615bd85f395f51905f525463ffffffff9060a81c1690565b9786611bd9565b90612714565b60601c90565b61280b6127ff610fc2565b63ffffffff9096168652565b6001600160a01b03166020850152565b6128556014820135820191603481013581019060548101350194601486013593603460148401359301916034601483013592019087613765565b60048114612863575b505050565b61050f6128769160346102319501611b72565b90613f51565b61288e9060010163ffffffff16612288565b5f6127b2565b600281036128f05750916128e1610231936128c6611de86127ee6127e860148801358801966034890135890198611bd9565b928391601482013591603401906001600160a01b0316613ec0565b60346014830135920190613d02565b90919060038103612970575061296b611de861295b610231958461295660186127ee97013582016127ee603884013584019961292f61050f8787611b72565b90612950611de86129408989611bc8565b6018880135976038019691612714565b91613b7a565b611bc8565b6018860135956038019491612714565b613d02565b9060048203612a04576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b03925af192831561079d575f516020615b985f395f51905f52936129f0575b50604080519182526001600160a01b03909216602082015290819081015b0390a1565b806107975f6129fe93610fa1565b5f6129cd565b60058203612a41576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b60068203612a7e576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b631092ef5760e11b5f5260045ffd5b929192612a9982612140565b91612aa76040519384610fa1565b829481845281830111610222578281602093845f960137010152565b60018103612aec575061269a92919060581b600160581b600160f81b0316600160f81b176141a5565b60028103612b09575061269a9291906001600160a01b0316614122565b60038103612b34575050612b2e8280612b2861050f61269a9686611b72565b93611b80565b91614074565b909160048203612bc657612b936129cd915f516020615bb85f395f51905f5295612b6c5f516020615bd85f395f51905f525460581b90565b612b78611d9e82611cf7565b6001600160a01b03888116911614612b99575b503691612a8d565b83613fb6565b612ba5612bc091611cf7565b8054640100000000600160c01b031916640100000000179055565b5f612b8b565b60058203612c4c575f516020615bd85f395f51905f525460581b5b612bee61209d8684611b9d565b906001600160f81b03198116600160f91b14612c24575b5050612b936129cd915f516020615bb85f395f51905f52953691612a8d565b60081b6001600160e01b03191614612c3d575f80612c05565b6313002bdd60e31b5f5260045ffd5b60068203612a7e575f516020615bd85f395f51905f525460581b612be1565b60405190612c7882610f6a565b5f6020838281520152565b612c97818060081b918160301b9160501b90565b929091906001600160f81b03198116600160f81b14159081612d47575b81612d32575b81612d19575b50611e345760ff60f81b16600160f81b8114159081612d0f575b50612d09576001600160e01b031916612d04576001600160501b031916612d0057600190565b5f90565b505f90565b50505f90565b905015155f612cda565b6001600160f81b031916607f60f91b141590505f612cc0565b6001600160f81b031980821614159150612cba565b6001600160f81b0319811615159150612cb4565b91612d6b916102319594936141a5565b614525565b9061269a9291614306565b60071115612d0057600190565b612e4490612e8090612da36001600160a01b03823516611de8565b90612e526020820135612e44612dc5612dbf60408601866120f6565b906145b7565b93612dd6612dbf60608301836120f6565b90608081013560a082013590612df8612dbf60c08501359460e08101906120f6565b93604051988997602089019b8c94919260e0969399989794919961010087019a60018060a01b03168752602087015260408601526060850152608084015260a083015260c08201520152565b03601f198101835282610fa1565b51902060408051602081019283526001600160a01b03909516908501525f6060850152929182906080820190565b51902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b612ed3612ece5f356001600160e01b031916611e57565b612545565b80516001600160a01b0390612ee9908216611de8565b16156130565780516060906001600160a01b0390612f08908216611de8565b16600181141580613045575b15612ff95750508051612f33906001600160a01b0316369034906139cb565b60408201516001600160f81b03191680612fb957506020820151612f5f906001600160a01b03166145c2565b92905b15612fb157516001600160a01b03169060018214158281612f9c575b50612f8c575b825160208401f35b612f9591613a94565b5f80612f84565b6001600160a01b03908116141590505f612f7e565b825160208401fd5b6001600160f81b031990811603612fea576020820151612fe3906001600160a01b03163690613a4a565b9290612f62565b632d6a6bb760e01b5f5260045ffd5b6001600160a01b0303612f3357337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612f33576348f5c3ed60e01b5f5260045ffd5b506001600160a01b03811415612f14565b631cd4b64760e21b5f5260045ffd5b6001600160a01b03165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b9182358060f81c805f146130e157806001146130d4576002146130be575f80fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b505060015f9301915f190190565b9092608092611ed89694835260018060a01b0316602083015260408201528160608201520191611edb565b61313365ffffffffffff939561313f9795878585614604565b969295919890986146f3565b50911642109081156131bc575b506131a85761316061318a916020976131ce565b60405163392dffaf60e01b8152978896879586959193916001600160e01b031916600487016130ef565b03916001600160a01b03165afa90811561079d575f91611fe1575090565b506001600160e01b03199695505050505050565b65ffffffffffff91501642115f61314c565b60405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c83835260408201526040815261320d606082610fa1565b519020901561321f57611ed890614831565b611ed89061471f565b90818060081b9160ff839260f01c1660021461324057565b6001600160d81b031983169150565b9080601f8301121561022257816020611ed893359101612a8d565b9190916101208184031261022257613280610fd1565b9261328a82610226565b84526020820135602085015260408201356001600160401b03811161022257816132b591840161324f565b604085015260608201356001600160401b03811161022257816132d991840161324f565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b038111610222578161331b91840161324f565b60e08501526101008201356001600160401b0381116102225761333e920161324f565b610100830152565b90816020910312610222575190565b80516001600160a01b03168252611ed891602082015160208201526101006133d66133a661339460408601516101206040870152610120860190610d2c565b60608601518582036060870152610d2c565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610d2c565b92015190610100818403910152610d2c565b939291613405906040928652606060208701526060860190613355565b930152565b929190613405602091604086526040860190613355565b9290925f92613430368261326a565b9161343f6101008301836120f6565b918193835f93602082101580613605575b6135c6575b5050506001600160f81b031916600160f81b145b61359f575b506001600160f81b03198616600160f81b03613505575050604051639700320360e01b815293602092859283915f9183916134ac916004840161340a565b039260581c6001600160a01b03165af190811561079d57611ed8925f926134d4575b50614c98565b6134f791925060203d6020116134fe575b6134ef8183610fa1565b810190613346565b905f6134ce565b503d6134e5565b909460081b93909291600160f01b61352261202b61202488611e8d565b16613590575f61354261353c60209661356c99858a614ab9565b94614c98565b604051630ccab7a160e01b8152979096889586948593926001600160e01b031916600485016133e8565b03926001600160a01b03165af190811561079d57611ed8925f926134d45750614c98565b6314b9743f60e01b5f5260045ffd5b916135ac939550866148a6565b9193916135ba368284612a8d565b6101008401525f61346e565b9195509250829196506135d99350611bab565b90916135e6368385612a8d565b6101008501526134696135fc6001923390612d88565b95905f80613455565b507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a61363461209d8484611b9d565b14613450565b5f516020615bd85f395f51905f5254600a63ffffffff8260a81c16019063ffffffff82116136eb5763ffffffff838116921682116136dc576136849060c81c63ffffffff16610608565b10156105c9575f516020615bd85f395f51905f52805463ffffffff60c81b60c893841b1663ffffffff60c81b1990911617908190559081901c63ffffffff9081169160a81c1681116136d35750565b61023190612288565b63e60fd64760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88918060581c6001600160581b0360a81b5f516020615bd85f395f51905f525416175f516020615bd85f395f51905f5255604051906001600160581b0319168152a1565b92949093919361377761277f85611cf7565b5f516020615bd85f395f51905f525460a81c63ffffffff169063ffffffff80831691161461396f575b506020810180516001600160a01b031615613966575b5f516020615bd85f395f51905f525460a81c63ffffffff1663ffffffff6137e4610608855163ffffffff1690565b91161480159061393a575b6105c95761383d61384a9261380387611cf7565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b915f196001600160a01b03841601613929575b5050506001600160f81b03198116600160f81b036139065760581c6001600160a01b031690813b15610222576040516306d61fe760e41b8152925f91849182916138ab919060048401612703565b038183855af190811561079d575f516020615b985f395f51905f52926129eb926138f2575b5060408051600181526001600160a01b03909216602083015290918291820190565b806107975f61390093610fa1565b5f6138d0565b91506001600160f81b03198216600160f91b0361245b576102319160081b614e80565b61393292613d02565b5f808061385d565b5061394761277f86611cf7565b63ffffffff61395d610608855163ffffffff1690565b911610156137ef565b600181526137b6565b6139819060010163ffffffff16612288565b5f6137a0565b60409081516139968382610fa1565b600681526512d95c9b995b60d21b6020820152916139b681519182610fa1565b6005815264181719971960d91b602082015290565b916139f2925f8080946040519687958694859363d68f602560e01b85523360048601611efb565b03926001600160a01b03165af190811561079d575f91613a10575090565b611ed891503d805f833e6107bb8183610fa1565b5f92836139f295936040519687958694859363d68f602560e01b85523360048601611efb565b5f9060405192808385378338925af4913d82523d5f602084013e60203d830101604052565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b6001600160a01b0316803b1561022257604051630b9dfbed60e11b815260206004820152915f918391829084908290613ad1906024830190610d2c565b03925af1801561079d57613ae25750565b5f61023191610fa1565b8051156122e45760200190565b80518210156122e45760209160051b010190565b909593919492965f5b87811015613b6657600190613b608a89613b4c8489613b45828060051b8c013595613b4087610946565b613af9565b51946122cd565b90613b58868d8d6122cd565b949093613765565b01613b16565b509650505050505050565b90156122e45790565b9293929091906001600160a01b03821615613cf3575b613b9990611e57565b93613bc5613bb8613baa8684613b71565b356001600160f81b03191690565b6001600160f81b03191690565b936001600160f81b03198516613ccb576001600160a01b03841691613bec91908190611be7565b823b1561022257613c16925f92836040518096819582946306d61fe760e41b845260048401612703565b03925af194851561079d57613c7a613c9a9360019361023198613cb7575b5060408051600381526001600160a01b03881660208201525f516020615b985f395f51905f529190a15b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107975f613cc593610fa1565b5f613c34565b50909390506001600160f81b031980841603612fea576001613c9a91613c7a61023196613c5e565b6001600160a01b039150613b90565b6001600160a01b0316919082158015613eb6575b61285e5760405163d60b347f60e01b8152306004820152602081602481875afa90811561079d575f91613e97575b50613ddb579080613d5492611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613d7f919060048401612703565b038183855af190811561079d575f516020615b985f395f51905f52926129eb92613dc7575b505b60408051600481526001600160a01b03909216602083015290918291820190565b806107975f613dd593610fa1565b5f613da4565b81151580613e78575b613e02575b50506129eb5f516020615b985f395f51905f5291613da6565b9080613e0d92611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613e38919060048401612703565b038183855af190811561079d575f516020615b985f395f51905f52926129eb92613e64575b5091613de9565b806107975f613e7293610fa1565b5f613e5d565b506001600160f81b031980613e90613baa8585613b71565b1614613de4565b613eb0915060203d6020116107f2576107e48183610fa1565b5f613d44565b5060018314613d16565b92613ecb908461518c565b81613f1a5750505f80916040518260208201916306d61fe760e41b8352613f0481612e4460248201604090602081525f60208201520190565b51926001600160a01b03165af15061269a61230a565b6001600160a01b039092169190823b156102225761268b925f92836040518096819582946306d61fe760e41b845260048401612703565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091613f8382610ca883611d2e565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b91907f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3905a905f8060405193614016856140086020820196638a91b0e360e01b88526020602484018181520190610d2c565b03601f198101875286610fa1565b60405193614025602086610fa1565b828552602085019583908a905f368a375193f1913d908161406c575b815f9293523e604080516001600160a01b0390951685528115156020860152909390819081016129eb565b5f9150614041565b6140819093929193611e57565b80546001600160a01b031981168255600190910180546001600160a01b039092169490929091906001600160f81b0319605883901b16156140d1575b505081546001600160a81b03191690915550565b6140ef926140e0913691612a8d565b906001600160a01b0316613fb6565b50805460408051600381526001600160a01b0390921660208301525f516020615bb85f395f51905f5291a15f80806140bd565b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205260409081902080546001600160a01b0319811690915590921694935f516020615bb85f395f51905f52936141959161418f91369190612a8d565b82613fb6565b50815190600282526020820152a1565b9291906141d56141c35f516020615bd85f395f51905f525460581b90565b6001600160581b031980871691161490565b612c3d576141e5611d9e85611cf7565b936142066141f282611cf7565b8054640100000000600160c01b0319169055565b6001600160f81b03198116600160f81b0361424957916138d061418f6129eb935f516020615bb85f395f51905f529560018060a01b039060581c16933691612a8d565b91506001600160f81b03198216600160f91b0361245b576102319160081b615212565b6040805190919061427d8382610fa1565b6001815291601f1901825f5b82811061429557505050565b806060602080938501015201614289565b906142b082610fe1565b6142bd6040519182610fa1565b82815280926142ce601f1991610fe1565b01905f5b8281106142de57505050565b8060606020809385010152016142d2565b906040611ed8925f81528160208201520190610d2c565b600881901b9291906001600160f81b03198116600160f81b0361439957509061432e9161542e565b90916001600160f81b031981166143495750611ed891615546565b6001600160f81b031916600160f81b0361436657611ed89161549a565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b9293926001600160f81b031981166144515750906143b6916153b0565b916143bf61426c565b956001600160f81b031981166143ec57506143d9936153f8565b6143e283613aec565b5261269a82613aec565b6001600160f81b031916600160f81b0361436657614409936153d1565b61441284613aec565b52610231577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129eb61444484613aec565b51604051918291826142ef565b909391906001600160f81b0319908116036143665761447b6144819161447561426c565b95615388565b91613a6f565b61448d85939293613aec565b526001600160f81b03198116600160f81b036144d85750156144ab57565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129eb61444484613aec565b6001600160f81b031916614366576102315760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b9091906001600160a01b0316801580156145ad575b61285e5781156122e4575f516020615bb85f395f51905f52926129eb926001600160f81b0319823581161461458d575b505060408051600481526001600160a01b03909216602083015290918291820190565b61459e8161418f926145a594611be7565b3691612a8d565b505f8061456a565b506001811461453a565b816040519182372090565b5f809160405136810160405236838237604051601481016040523360601b90528260143601925af190604051903d82523d5f602084013e60203d830101604052565b9491848461468592969593966040519061461d82610f85565b5f82525f602083015260408201995f8b5261467f606084019a8b925f84525f60808701525f60a0870152606060c087015261467060e08701915f83526101008801955f87529063ffffffff60e01b169052565b6001600160a01b039091169052565b526155d1565b60ff8061469e614698613baa8786613b71565b60f81c90565b16036146e4576146cd6146b8846146c8956146dd94611be7565b9490955163ffffffff60e01b1690565b611e8d565b5460101c6001600160a01b031690565b9351929190565b63b32eeb6960e01b5f5260045ffd5b8065ffffffffffff8260a01c16918215600114614711575b60d01c92565b65ffffffffffff925061470b565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156147aa575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f000000000000000000000000000000000000000000000000000000000000000060408201524660608201523060808201522061478d565b60a061483b613987565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015260408201525f6060820152306080820152206719010000000000005f52601a52603a526042601820905f603a52565b9190939293601481019160141161022257803560601c928291906148c8612c6b565b602081019586525f516020615bd85f395f51905f525490919060a81c63ffffffff1663ffffffff8116835295516001600160a01b03169761490985806120f6565b614912916145b7565b9860348501996149228b886120f6565b61492b916145b7565b90605487019961493b8b8a6120f6565b614944916145b7565b604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505602082019081526001600160581b03198a169282019290925263ffffffff9390931660608401526001600160a01b0395909516608083015260a082019290925260c081019290925260e08083019190915281526149c861010082610fa1565b519020905f1461050961029b98614a29609498614a4297614a0a6128769761050f97614a49576149f790614831565b614a0460748d01856120f6565b9161583f565b9e614a20614a1884806120f6565b9290946120f6565b9390928a613765565b614a3c614a36828b6120f6565b906159de565b886120f6565b01906120f6565b614a529061471f565b6149f7565b80548210156122e4575f5260205f2001905f90565b356001600160c01b0319811692919060088210614a87575050565b6001600160c01b031960089290920360031b82901b16169150565b604090611ed8939281528160208201520190613355565b93929190935f926001614acb83611e8d565b015f5b8154811015614c5b57614afc614af4614ae78385614a57565b90549060031b1c60501b90565b908160501c90565b939095614b18614b12614698613baa8585613b71565b60ff1690565b808403614c2d5750908181614b51614b45614b3f614b3984614b6f98611c03565b90614a6c565b60c01c90565b6001600160401b031690565b600901918c610100614b6761459e868686611c14565b910152611ca9565b939093955b600160f01b1615614b8c575b50600101939193614ace565b604051633894f6e760e11b81529196906020908390815f81614bbc8f6001600160e01b03198d1660048401614aa2565b03926001600160a01b03165af191821561079d575f92614c0d575b506001600160a01b038216614bf957600191614bf291614c98565b9590614b80565b631f24c1fb60e11b5f52600487905260245ffd5b614c2691925060203d81116134fe576134ef8183610fa1565b905f614bd7565b9196909491831115614c4857630760bdcf60e11b5f5260045ffd5b614c506122f6565b6101008b0152614b74565b505091929460ff80614c73614698613baa8789613b71565b16036146e457610100614c9061459e856146cd96611ed898611be7565b910152611e8d565b908082186001600160a01b031615606083811b838501821b9081149184901b141717600114614cc8575050600190565b65ffffffffffff60a01b8216916001600160d01b03198082169083168415614d48575b65ffffffffffff60a01b84168015614d38575b858110908618028086189514614d27575b81811190821802189160018060a01b03911716171790565b65ffffffffffff60a01b9450614d0f565b5065ffffffffffff60a01b614cfe565b65ffffffffffff60a01b9450614ceb565b903590601e198136030182121561022257018035906001600160401b03821161022257602001918160051b3603831361022257565b8054905f815581614d9d575050565b5f5260205f20908101905b818110614db3575050565b5f8155600101614da8565b356001600160501b0319811692919060168210614dd9575050565b6001600160501b031960169290920360031b82901b16169150565b805468010000000000000000811015610f4a57614e1691600182018155614a57565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701015f815290565b356001600160f01b0319811692919060028210614e65575050565b6001600160f01b031960029290920360031b82901b16169150565b9190614e8c9080614d59565b9260fe84118015615184575b615175576001614ea782611e8d565b015461515c575b5f1984015f5b81811061501e575090614f73614f6c8387614f0c614f5d614f4461202b614f3e614f3887614f8f9e9f8e614f33614f9d9f8f90611de86127ee6127e8614efe614f049489896122cd565b90611c3f565b9a8b91611e8d565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6122cd565b90611c6d565b90614e4a565b614f4d88611e8d565b9060f01c61ffff19825416179055565b6001600160a01b0316966122cd565b8091611c50565b6040519586939092906001600160e01b03191660208501614e35565b03601f198101845283610fa1565b803b15610222575f614fc392604051809481926306d61fe760e41b8352600483016121e2565b038183855af190811561079d575f516020615b985f395f51905f52926129eb9261500a575b5060408051600681526001600160a01b03909216602083015290918291820190565b806107975f61501893610fa1565b5f614fe8565b6150b990615064600161503086611e8d565b0161505e61505161504b615045868d8c6122cd565b90611c31565b90614dbe565b6001600160501b03191690565b90614df4565b61507e611de8611de86127ee6127e8614efe868d8c6122cd565b61508c614f6c838a896122cd565b604051949185916150ab916001600160e01b03198a1660208501614e35565b03601f198101855284610fa1565b803b15610222576040516306d61fe760e41b8152925f9184918290849082906150e590600483016121e2565b03925af191821561079d57600192615148575b505f516020615b985f395f51905f5261513f61511e6127ee6127e8614efe868d8c6122cd565b60408051600581526001600160a01b03909216602083015290918291820190565b0390a101614eb4565b806107975f61515693610fa1565b5f6150f8565b615170600161516a83611e8d565b01614d8e565b614eae565b63b62d956d60e01b5f5260045ffd5b508315614e98565b5f516020615b985f395f51905f52916040916001600160a01b03821615615209575b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205284902080546001600160a01b03191693909216929092179055815190600282526020820152a1565b600191506151ae565b91908035019160208301923561522782611e8d565b92600184019060018254018303615379575f5b82548110156152ce57805f516020615bb85f395f51905f526152c5896152a3612e4461418f8b615287888d615278614af48f60019e614ae791614a57565b90508c8060a01b0316976122cd565b6040519485939092906001600160e01b03191660208501614e35565b5060408051600581526001600160a01b03909216602083015290918291820190565b0390a10161523a565b5094614f8f9150916153156102319594614f7361531a956152f3600161516a85611e8d565b875461530a9060101c6001600160a01b0316611de8565b945f198101916122cd565b613fb6565b5080545f516020615bb85f395f51905f5290615366906153459060101c6001600160a01b0316611de8565b60408051600681526001600160a01b03909216602083015290918291820190565b0390a180546001600160b01b0319169055565b63013dcc8d60e31b5f5260045ffd5b9160138211156153a357823560601c92601401916013190190565b63ba597e7e5f526004601cfd5b9060338111156153a357813560601c92601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af115615425573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b918235826020118160401c176153a357830160208101938135938461545257505050565b01601f190190835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c176153a3578061545a57505050565b91906154a5816142a6565b925f5b8281106154b457505050565b806154de60019260051b8401358401604081013581019060208235920190602081013590356153d1565b6154e88389613af9565b52156154f5575b016154a8565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb761553e6155238389613af9565b51604051918291858352604060208401526040830190610d2c565b0390a16154ef565b9190615551816142a6565b925f5b82811061556057505050565b8061558a60019260051b8401358401604081013581019060208235920190602081013590356153f8565b6155948288613af9565b5261559f8187613af9565b5001615554565b9092608092611ed89594835260018060a01b0316602083015260408201528160608201520190610d2c565b91606083019060016156266155ed845163ffffffff60e01b1690565b6001600160e01b0319165f9081527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f8526020526040902090565b01805493905f5b85811061563d5750505050505050565b61564d614af4614ae78385614a57565b6001600160a01b031660a0890190815260808901949091615676906001600160f01b0319168652565b615690615689614698613baa8985613b71565b60ff168a52565b61569e614b128a5160ff1690565b80840361580d57508581816156c3614b45614b3f614b396157189b9c6156eb98611c03565b8c60c06156de61459e60208401948086526009018688611c14565b9101525160090191611ca9565b949094955b51600160f11b9061570a906001600160f01b03191661202b565b166001600160f01b03191690565b15615727575b5060010161562d565b5161573a906001600160a01b0316611de8565b6020615760615753615753895163ffffffff60e01b1690565b6001600160e01b03191690565b60e08a01516101008b015160c08c015160405163184dfdbb60e11b815295869490938593849361579f9390926001600160a01b031690600486016155a6565b03915afa90811561079d575f916157ef575b506001600160a01b0381166157db57906001916157d360408a01918251614c98565b90529061571e565b631f24c1fb60e11b5f52600482905260245ffd5b615807915060203d81116134fe576134ef8183610fa1565b5f6157b1565b90949083111561582657630760bdcf60e11b5f5260045ffd5b61571890615835365f88612a8d565b60c08b01526156f0565b5f516020615bd85f395f51905f52545f9493929060581b6001600160f81b03198116600160f81b036158fa579161589f9391615880611de860209560581c90565b9160405195869485938493637aa8f17760e11b85523060048601611efb565b03915afa90811561079d575f916158db575b505b6001600160e01b0319166374eca2c160e11b016158cc57565b6362467c7760e11b5f5260045ffd5b6158f4915060203d60201161200357611ffb8183610fa1565b5f6158b1565b9094509091906001600160f81b03198116600160f91b0361245b576020916159289160081b95843088614604565b60405163392dffaf60e01b8152929792958694938593849361595b93909230906001600160e01b031916600487016130ef565b03916001600160a01b03165afa90811561079d575f9161597c575b506158b3565b615995915060203d60201161200357611ffb8183610fa1565b5f615976565b156159a257565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b6159eb61050f8383611b72565b9060048310156159fa57505050565b602c8310615b8957615a15611de86127ee6127e88685611bc8565b602c8201358201602c604c820191013591604c840135840194615a4f615a41613bb8613baa8787613b71565b6001600160f81b0319161590565b80615af9575b94615a9661296b95611de895615a9b956102319b956127ee9a615aab575b615a86611de86127ee6127e88a8a611c98565b916001600160a01b031690613b7a565b611c98565b602c86013595604c019491612714565b615af4606c8701358701615aee602c604c830192013580615ad5611de86127ee6127e88488611bd9565b93615ae9856001600160a01b038a1661518c565b611c7b565b91613d02565b615a73565b5091939092956040519163ecd0596160e01b835260208380615b2360048201906002602083019252565b03816001600160a01b0389165afa92831561079d57610231986127ee9761296b97611de897615a9b97615a96955f91615b6a575b50959a50959b5095509550955050615a55565b615b83915060203d6020116107f2576107e48183610fa1565b5f615b57565b50506004610231911461599b56fed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0xe5", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x54b5333f15307fe97e116fcf2df457d09ed8fbce21af32ad2c5424df91575d74", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x0024e61085a682d03a9f75b04d1da57556b25f54", + "function": null, + "arguments": [ + "0x73c8D3d77471b334046aE8e80AEA93C689ca0089" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x57eaa", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61044238819003918201601f19168301916001600160401b03831184841017607757808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103b6908161008c823960805181818160c60152818161021d01526102d80152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816348aac39214610250575080635c60da1b146102085763ea6d13ac1461003d575f80fd5b6100463661033f565b60405161006c602080838181019587898837878201908382015203018084520182610394565b519020905f92604051927fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358501523060581b845260ff84538060158501526055842094341591863b156101eb5750506001906101e6575f38818034895af1156101d9575b836040525f60605215610157575b6040516001600160a01b0385168152602090f35b9180825f9493859483378101838152039082855af13d156101d4573d67ffffffffffffffff81116101c0576040519061019a601f8201601f191660200183610394565b81525f60203d92013e5b156101b1575f8080610143565b63487e630960e11b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b6101a4565b63b12d13eb5f526004601cfd5b610135565b91509450605f602134f593846101355763301164255f526004601cfd5b3461024c575f36600319011261024c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461024c57806102826020806102653661033f565b908084889499019889378201908382015203018084520182610394565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040525f60605260ff5f536035523060601b600152601552602060555f205f6035526040519060018060a01b03168152f35b90604060031983011261024c5760043567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060243590565b90601f8019910116810190811067ffffffffffffffff8211176101c0576040525600000000000000000000000073c8d3d77471b334046ae8e80aea93c689ca0089", + "nonce": "0xe6", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x04442f8a72f32d50e532cc5f345f0d014e313e175a23b5556e4511bfc819d813", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x0024e61085A682d03A9f75B04D1dA57556b25f54", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0xfa0a", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000000024e61085a682d03a9f75b04d1da57556b25f540000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe7", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xaf12d2", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x74f1a4acf98cfae747d440e49b7d6a7453b96fd41eb646baa620b8f674de8f32", + "transactionIndex": "0x32", + "blockHash": "0x2117c0f8dfcaecaa919ba7d32dbce43a9c6b88a25e472315b8b0809a2f90ec0c", + "blockNumber": "0x6eafb7", + "gasUsed": "0x4f1028", + "effectiveGasPrice": "0x2684701d4", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xb30d39", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x54b5333f15307fe97e116fcf2df457d09ed8fbce21af32ad2c5424df91575d74", + "transactionIndex": "0x33", + "blockHash": "0x2117c0f8dfcaecaa919ba7d32dbce43a9c6b88a25e472315b8b0809a2f90ec0c", + "blockNumber": "0x6eafb7", + "gasUsed": "0x3fa67", + "effectiveGasPrice": "0x2684701d4", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xb3c240", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x04442f8a72f32d50e532cc5f345f0d014e313e175a23b5556e4511bfc819d813", + "transactionIndex": "0x34", + "blockHash": "0x2117c0f8dfcaecaa919ba7d32dbce43a9c6b88a25e472315b8b0809a2f90ec0c", + "blockNumber": "0x6eafb7", + "gasUsed": "0xb507", + "effectiveGasPrice": "0x2684701d4", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1733880637, + "chain": 11155111, + "commit": "340fd10" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/11155111/run-1733885191.json b/broadcast/DeployKernel.s.sol/11155111/run-1733885191.json new file mode 100644 index 0000000..c85de15 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/11155111/run-1733885191.json @@ -0,0 +1,124 @@ +{ + "transactions": [ + { + "hash": "0x74f1a4acf98cfae747d440e49b7d6a7453b96fd41eb646baa620b8f674de8f32", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x73c8d3d77471b334046ae8e80aea93c689ca0089", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6d34b6", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140806040523461020357602081615e3780380380916100208285610207565b83398101031261020357516001600160a01b038116810361020357306080524660a05260a0604051610053604082610207565b6006815260208101906512d95c9b995b60d21b825260405191610077604084610207565b60058352602083019164181719971960d91b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052604051602081019063deadbeef60e01b825260048152610101602482610207565b5190516001600160581b031981169190601582106101e3575b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b031916605885901c179055604051615bf8908161023f823960805181614742015260a05181614765015260c051816147d5015260e051816147fb015261010051816147210152610120518181816103b40152818161069d0152818161084301528181610a9f01528181610e1e01528181611136015281816112aa015281816113000152818161182d0152818161195d015281816125ac01526130090152f35b6001600160581b031960159290920360031b82901b161690505f8061011a565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761022a57604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001d575b36612eb75761001b612e86565b005b5f3560e01c8063112d3a7d1461020c578063150b7a02146102075780631626ba7e1461020257806319822f7c146101fd5780631f1b92e3146101f85780633659cfe6146101f35780633c3b752b146101ee57806352141cd9146101e957806357b3a5f4146101e45780636e6fa0c6146101df578063721e67f4146101da57806384b0196e146101d55780638dd7712f146101d057806390ef8862146101cb5780639198bdf5146101c65780639517e29f146101c15780639cfd7cff146101bc578063a65d69d4146101b7578063a71763a8146101b2578063adb610a3146101ad578063b8afe17d146101a8578063bc197c81146101a3578063c3e589781461019e578063d03c791414610199578063d691c96414610194578063e6f3d50a1461018f578063e9ae5c531461018a578063f1f7f0f914610185578063f23a6e6114610180578063f2dc691d1461017b5763fc9c5dec0361000e57611b12565b611af4565b611a9a565b611a64565b611936565b6117b8565b6116d6565b611689565b6115b6565b6114a5565b611439565b611407565b6112d9565b611295565b61123d565b61110f565b610ff8565b610ee9565b610dee565b610d50565b610cca565b610c6f565b610bbc565b610a1e565b610988565b61080d565b610665565b610380565b61031f565b6102c5565b61029f565b6001600160a01b0381160361022257565b5f80fd5b359061023182610211565b565b9181601f84011215610222578235916001600160401b038311610222576020838186019501011161022257565b6060600319820112610222576004359160243561027c81610211565b91604435906001600160401b0382116102225761029b91600401610233565b9091565b346102225760206102bb6102b236610260565b92919091611d65565b6040519015158152f35b34610222576080366003190112610222576102e1600435610211565b6102ec602435610211565b6064356001600160401b0381116102225761030b903690600401610233565b5050604051630a85bd0160e11b8152602090f35b34610222576040366003190112610222576004356024356001600160401b0381116102225760209161035861035e923690600401610233565b91611f2a565b6040516001600160e01b03199091168152f35b90816101209103126102225790565b6060366003190112610222576004356001600160401b038111610222576103ab903690600401610371565b602435604435917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632576103ef6020820135613228565b9092919084836001600160f81b0319861615610619575b826104119394613421565b9361043661042661042184611cf7565b6120ca565b946001600160f81b031916151590565b9384806105d8575b6105c957602001516001600160a01b031690819081156104d15760019261046f61048e925f525f60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b0361053c57826104e0575b50506104d157816104bb925b6104bf575b506040519081529081906020820190565b0390f35b3490349034903490335af1505f6104aa565b631a0a9b9f60e21b5f5260045ffd5b61053592506105319161051561050f6105096104fe61052a95611d2e565b9360608101906120f6565b90611b72565b90611cc1565b63ffffffff60e01b165f5260205260405f2090565b5460ff1690565b1590565b5f80610499565b82919291610596575b506104d15761050981606061055b9301906120f6565b638dd7712f60e01b916001600160e01b03199161057791611cc1565b160361058757816104bb926104a5565b63dbbb044b60e01b5f5260045ffd5b6105c3915061052a6105aa61053192611d2e565b61051561050f6105bd60608801886120f6565b90611b61565b5f610545565b633ab3447f60e11b5f5260045ffd5b50805163ffffffff1663ffffffff6106116106085f516020615bd85f395f51905f525463ffffffff9060c81c1690565b63ffffffff1690565b91161061043e565b5f516020615bd85f395f51905f525460581b9250610406565b6348f5c3ed60e01b5f5260045ffd5b6004359063ffffffff8216820361022257565b359063ffffffff8216820361022257565b602036600319011261022257610679610641565b61069a6106945f516020615bd85f395f51905f525460581b90565b60581c90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610803575b156107f95760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f916107ca575b50156106325760405163d68f602560e01b8152915f838061072f363433600485016121bd565b038183865af192831561079d575f936107a2575b5061074d9061363a565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061077990600483016121e2565b03925af1801561079d5761078957005b806107975f61001b93610fa1565b80610d22565b611f1f565b61074d9193506107c3903d805f833e6107bb8183610fa1565b81019061215b565b9290610743565b6107ec915060203d6020116107f2575b6107e48183610fa1565b810190612128565b5f610709565b503d6107da565b5061001b9061363a565b50303314156106cd565b60203660031901126102225760043561082581610211565b6108406106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061093c575b156109325760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f91610913575b50156106325760405163d68f602560e01b8152915f83806108d5363433600485016121bd565b038183865af192831561079d575f936108f3575b5061074d906121f3565b61074d91935061090c903d805f833e6107bb8183610fa1565b92906108e9565b61092c915060203d6020116107f2576107e48183610fa1565b5f6108af565b5061001b906121f3565b5030331415610873565b6001600160581b031981160361022257565b9181601f84011215610222578235916001600160401b038311610222576020808501948460051b01011161022257565b346102225760a0366003190112610222576004356109a581610946565b6024356109b181610211565b6044356001600160401b038111610222576109d0903690600401610233565b6064939193356001600160401b038111610222576109f2903690600401610233565b91608435956001600160401b03871161022257610a1661001b973690600401610958565b969095612339565b608036600319011261022257600435610a3681610946565b602435610a4281610211565b6044356001600160401b03811161022257610a61903690600401610233565b6064356001600160401b03811161022257610a80903690600401610233565b91610a9c6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ba0575b15610b915760405163ecd0596160e01b81526004808201526001600160a01b03919091169490602081602481895afa90811561079d575f91610b72575b50156106325760405163d68f602560e01b8152955f8780610b32363433600485016121bd565b0381838a5af196871561079d575f97610b52575b5061074d959697612482565b61074d969750610b6b903d805f833e6107bb8183610fa1565b9695610b46565b610b8b915060203d6020116107f2576107e48183610fa1565b5f610b0c565b50919361001b95939193612482565b5030331415610acf565b6001600160e01b031981160361022257565b34610222576020366003190112610222576104bb610bfd600435610bdf81610baa565b5f60408051610bed81610f2f565b8281528260208201520152611e57565b600160405191610c0c83610f2f565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b3461022257604036600319011261022257602060ff610cbe600435610c9381610946565b610ca860243591610ca383610baa565b611d2e565b9063ffffffff60e01b165f5260205260405f2090565b54166040519015158152f35b34610222576020366003190112610222576020610cff600435610cec81610211565b5f604051610cf981610f4f565b52613065565b60405190610d0c82610f4f565b546001600160a01b031690819052604051908152f35b5f91031261022257565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610222575f36600319011261022257610d8f610d9d610d6e613987565b604092919251938493600f60f81b855260e0602086015260e0850190610d2c565b908382036040850152610d2c565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610dd5575050500390f35b8251845285945060209384019390920191600101610dc7565b6040366003190112610222576004356001600160401b03811161022257610e19903690600401610371565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632575f908152602081905260409020546001600160a01b03169060609060018314159081610eb9575b610e8e610e87826060610e959401906120f6565b8091611b80565b9030613a6f565b5015610eaa57610ea157005b61001b91613a94565b63f21e646b60e01b5f5260045ffd5b9150610e95610e8e610e87610edf610ed7610e8760608801886120f6565b903489613a24565b9492505050610e73565b34610222575f36600319011261022257602063ffffffff5f516020615bd85f395f51905f525460c81c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610f4a57604052565b610f1b565b602081019081106001600160401b03821117610f4a57604052565b604081019081106001600160401b03821117610f4a57604052565b61012081019081106001600160401b03821117610f4a57604052565b90601f801991011681019081106001600160401b03821117610f4a57604052565b60405190610231604083610fa1565b6040519061023161012083610fa1565b6001600160401b038111610f4a5760051b60200190565b6080366003190112610222576004356001600160401b03811161022257611023903690600401610958565b602435916001600160401b038311610222573660238401121561022257826004013561104e81610fe1565b9361105c6040519586610fa1565b8185526024602086019260061b8201019036821161022257602401915b8183106110ce575050506044356001600160401b038111610222576110a2903690600401610958565b90606435946001600160401b038611610222576110c661001b963690600401610958565b959094612587565b60408336031261022257602060409182516110e881610f6a565b6110f186610654565b81528286013561110081610211565b83820152815201920191611079565b61111836610260565b6111336106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611233575b156112285760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f91611209575b50156106325760405163d68f602560e01b8152935f85806111c9363433600485016121bd565b038183885af194851561079d575f956111e9575b5061074d939495612754565b61074d949550611202903d805f833e6107bb8183610fa1565b94936111dd565b611222915060203d6020116107f2576107e48183610fa1565b5f6111a3565b509161001b93612754565b5030331415611166565b34610222575f366003190112610222576104bb60405161125e604082610fa1565b601681527535b2b93732b61730b23b30b731b2b2173b181719971960511b6020820152604051918291602083526020830190610d2c565b34610222575f366003190112610222576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6112e236610260565b6112fd6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113fd575b156113f25760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f916113d3575b50156106325760405163d68f602560e01b8152935f8580611393363433600485016121bd565b038183885af194851561079d575f956113b3575b5061074d939495612ac3565b61074d9495506113cc903d805f833e6107bb8183610fa1565b94936113a7565b6113ec915060203d6020116107f2576107e48183610fa1565b5f61136d565b509161001b93612ac3565b5030331415611330565b34610222575f36600319011261022257602063ffffffff5f516020615bd85f395f51905f525460a81c16604051908152f35b3461022257602036600319011261022257604061146960043561145b81610946565b611463612c6b565b50611cf7565b81519061147582610f6a565b5463ffffffff81168083526001600160a01b03602092831c81169383019384528451918252925190921690820152f35b346102225760a0366003190112610222576114c1600435610211565b6114cc602435610211565b6044356001600160401b038111610222576114eb903690600401610958565b50506064356001600160401b0381116102225761150c903690600401610958565b50506084356001600160401b0381116102225761152d903690600401610233565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a09092019201905f5b8181106115965750505090565b82516001600160501b031916845260209384019390920191600101611589565b34610222576020366003190112610222576115f56004356115d681610baa565b6060604080516115e581610f2f565b5f81525f60208201520152611e8d565b60016040519161160483610f2f565b805461ffff60f01b8160f01b168452828060a01b039060101c16602084015201906040519182602082549182815201915f5260205f20905f5b818110611666576104bb858761165581880382610fa1565b604082015260405191829182611541565b825460501b6001600160501b03191684526020909301926001928301920161163d565b346102225760203660031901126102225760206102bb600435612c83565b9060406003198301126102225760043591602435906001600160401b0382116102225761029b91600401610233565b6116df366116a7565b90916001600160a01b036116f233613065565b54169182156117a95760609060018414159485611792575b6117149293614306565b92611782575b50506040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061175357505050500390f35b919360019193955060206117728192603f198a82030186528851610d2c565b9601920192018594939192611744565b61178b91613a94565b5f8061171a565b61171492506117a23634876139cb565b925061170a565b63710c949760e01b5f5260045ffd5b6060366003190112610222576004356117d081610946565b6024356001600160401b038111610222576117ef903690600401610233565b6044356001600160401b0381116102225761180e903690600401610233565b9061182a6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061192c575b1561191f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169390602081602481885afa90811561079d575f91611900575b50156106325760405163d68f602560e01b8152945f86806118c0363433600485016121bd565b038183895af195861561079d575f966118e0575b5061074d949596612d5b565b61074d9596506118f9903d805f833e6107bb8183610fa1565b95946118d4565b611919915060203d6020116107f2576107e48183610fa1565b5f61189a565b5091909261001b94612d5b565b503033141561185d565b61193f366116a7565b61195a6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611a5a575b15611a4f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169190602081602481865afa90811561079d575f91611a30575b50156106325760405163d68f602560e01b8152925f84806119f0363433600485016121bd565b038183875af193841561079d575f94611a10575b5061074d929394612d70565b61074d939450611a29903d805f833e6107bb8183610fa1565b9392611a04565b611a49915060203d6020116107f2576107e48183610fa1565b5f6119ca565b509061001b92612d70565b503033141561198d565b34610222575f3660031901126102225760205f516020615bd85f395f51905f525460581b604051906001600160581b0319168152f35b346102225760a036600319011261022257611ab6600435610211565b611ac1602435610211565b6084356001600160401b03811161022257611ae0903690600401610233565b505060405163f23a6e6160e01b8152602090f35b346102225760203660031901126102225760206102bb600435612d7b565b34610222576040366003190112610222576004356001600160401b03811161022257611b59611b476020923690600401610371565b60243590611b5482610211565b612d88565b604051908152f35b906008116102225760040190600490565b906004116102225790600490565b909291928360041161022257831161022257600401916003190190565b906020116102225790602090565b90929192836020116102225783116102225760200191601f190190565b906018116102225760040190601490565b906014116102225790601490565b909291928360011161022257831161022257600101915f190190565b906009116102225760010190600890565b909291928360091161022257831161022257600901916008190190565b906016116102225790601690565b906016116102225760020190601490565b909291928360161161022257831161022257601601916015190190565b906002116102225790600290565b909291928360141161022257831161022257601401916013190190565b90602c116102225760180190601490565b90939293848311610222578411610222578101920390565b356001600160e01b0319811692919060048210611cdc575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85060205260405f2090565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85160205260405f2090565b90929060018103611db457506001600160a01b0392611dae9250611d9e915060581b600160581b600160f81b0316600160f81b17611cf7565b5460201c6001600160a01b031690565b16151590565b60028103611df457506001600160a01b0392611dae9250611de89150611ddb908416613065565b546001600160a01b031690565b6001600160a01b031690565b600303611e3457611e15611e1061050f600193611e2395611b72565b611e57565b01546001600160a01b031690565b6001600160a01b0390811691161490565b5050505f90565b359060208110611e49575090565b5f199060200360031b1b1690565b63ffffffff60e01b165f527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b60205260405f2090565b63ffffffff60e01b165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85260205260405f2090565b908160209103126102225751611ed881610baa565b90565b908060209392818452848401375f828201840152601f01601f1916010190565b611ed8949260609260018060a01b0316825260208201528160408201520191611edb565b6040513d5f823e3d90fd5b91611f349161309d565b919080836001600160f81b03198416156120aa575b6020811015918261206d575b82612057575b506001600160a01b039050611f75611de8611d9e86611cf7565b16156104d1576001600160f81b03198316600160f81b0361200a5790611fa26020949392611fc0966131ce565b604051637aa8f17760e11b8152958694859384933360048601611efb565b039160581c6001600160a01b03165afa90811561079d575f91611fe1575090565b611ed8915060203d602011612003575b611ffb8183610fa1565b810190611ec3565b503d611ff1565b929160081b93600160f11b61203861202b61202488611e8d565b5460f01b90565b6001600160f01b03191690565b1661204857611ed894339061311a565b635b71057960e01b5f5260045ffd5b819295506120659350611bab565b925f80611f5b565b91507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a6120a361209d8385611b9d565b90611e3b565b1491611f55565b92506120c45f516020615bd85f395f51905f525460581b90565b92611f49565b906040516120d781610f6a565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561022257018035906001600160401b0382116102225760200191813603831361022257565b90816020910312610222575180151581036102225790565b6001600160401b038111610f4a57601f01601f191660200190565b602081830312610222578051906001600160401b038211610222570181601f820112156102225780519061218e82612140565b9261219c6040519485610fa1565b8284526020838301011161022257815f9260208093018386015e8301015290565b611ed8939260609260018060a01b03168252602082015281604082015201905f611edb565b906020611ed8928181520190610d2c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2565b1561224d57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b5f516020615bd85f395f51905f52805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b5f52603260045260245ffd5b908210156122e45761029b9160051b8101906120f6565b6122b9565b908092918237015f815290565b60405190612305602083610fa1565b5f8252565b3d15612334573d9061231b82612140565b916123296040519384610fa1565b82523d5f602084013e565b606090565b949392919096959661237c6001600160581b03196123756123685f516020615bd85f395f51905f525460581b90565b6001600160581b03191690565b1615612246565b6001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061246a575b61245b57856123b5612402976136ff565b6123d66123c0610fc2565b60018152925b6001600160a01b03166020840152565b5f516020615bd85f395f51905f52805463ffffffff60a81b1916600160a81b179055613765565b613765565b5f5b81811061241057505050565b5f8061241d8385876122cd565b9061242d604051809381936122e9565b039082305af161243b61230a565b501561244957600101612404565b636534eae560e11b5f5260045260245ffd5b6361c4e91b60e11b5f5260045ffd5b506001600160f81b03198616600160f91b14156123a4565b94939291906001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061252d575b61245b576124bc866136ff565b6001600160a01b036124d0611d9e88611cf7565b16156124df575b505050505050565b612522956123fd6125055f516020615bd85f395f51905f525463ffffffff9060a81c1690565b926123c660405194612518604087610fa1565b63ffffffff168552565b5f80808080806124d7565b506001600160f81b03198616600160f91b14156124af565b9060405161255281610f2f565b82546001600160a01b03908116825260019390930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946125a96106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806126f9575b156126ea5760405163ecd0596160e01b81526004808201526001600160a01b039190911695906020816024818a5afa90811561079d575f916126cb575b50156106325760405163d68f602560e01b8152965f888061263f363433600485016121bd565b0381838b5af197881561079d575f986126ab575b5061265f969798613b0d565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061268b90600483016121e2565b03925af1801561079d5761269d575b50565b806107975f61023193610fa1565b61265f9798506126c4903d805f833e6107bb8183610fa1565b9796612653565b6126e4915060203d6020116107f2576107e48183610fa1565b5f612619565b50919390929461023196613b0d565b50303314156125dc565b916020611ed8938181520191611edb565b356bffffffffffffffffffffffff19811692919060148210612734575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b60018103612894575060581b600160581b600160f81b0316600160f81b179061278961277f83611cf7565b5463ffffffff1690565b5f516020615bd85f395f51905f525460a81c63ffffffff169063ffffffff80831691161461287c575b5061281b6127f4611de86127ee6127e86127e15f516020615bd85f395f51905f525463ffffffff9060a81c1690565b9786611bd9565b90612714565b60601c90565b61280b6127ff610fc2565b63ffffffff9096168652565b6001600160a01b03166020850152565b6128556014820135820191603481013581019060548101350194601486013593603460148401359301916034601483013592019087613765565b60048114612863575b505050565b61050f6128769160346102319501611b72565b90613f51565b61288e9060010163ffffffff16612288565b5f6127b2565b600281036128f05750916128e1610231936128c6611de86127ee6127e860148801358801966034890135890198611bd9565b928391601482013591603401906001600160a01b0316613ec0565b60346014830135920190613d02565b90919060038103612970575061296b611de861295b610231958461295660186127ee97013582016127ee603884013584019961292f61050f8787611b72565b90612950611de86129408989611bc8565b6018880135976038019691612714565b91613b7a565b611bc8565b6018860135956038019491612714565b613d02565b9060048203612a04576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b03925af192831561079d575f516020615b985f395f51905f52936129f0575b50604080519182526001600160a01b03909216602082015290819081015b0390a1565b806107975f6129fe93610fa1565b5f6129cd565b60058203612a41576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b60068203612a7e576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b631092ef5760e11b5f5260045ffd5b929192612a9982612140565b91612aa76040519384610fa1565b829481845281830111610222578281602093845f960137010152565b60018103612aec575061269a92919060581b600160581b600160f81b0316600160f81b176141a5565b60028103612b09575061269a9291906001600160a01b0316614122565b60038103612b34575050612b2e8280612b2861050f61269a9686611b72565b93611b80565b91614074565b909160048203612bc657612b936129cd915f516020615bb85f395f51905f5295612b6c5f516020615bd85f395f51905f525460581b90565b612b78611d9e82611cf7565b6001600160a01b03888116911614612b99575b503691612a8d565b83613fb6565b612ba5612bc091611cf7565b8054640100000000600160c01b031916640100000000179055565b5f612b8b565b60058203612c4c575f516020615bd85f395f51905f525460581b5b612bee61209d8684611b9d565b906001600160f81b03198116600160f91b14612c24575b5050612b936129cd915f516020615bb85f395f51905f52953691612a8d565b60081b6001600160e01b03191614612c3d575f80612c05565b6313002bdd60e31b5f5260045ffd5b60068203612a7e575f516020615bd85f395f51905f525460581b612be1565b60405190612c7882610f6a565b5f6020838281520152565b612c97818060081b918160301b9160501b90565b929091906001600160f81b03198116600160f81b14159081612d47575b81612d32575b81612d19575b50611e345760ff60f81b16600160f81b8114159081612d0f575b50612d09576001600160e01b031916612d04576001600160501b031916612d0057600190565b5f90565b505f90565b50505f90565b905015155f612cda565b6001600160f81b031916607f60f91b141590505f612cc0565b6001600160f81b031980821614159150612cba565b6001600160f81b0319811615159150612cb4565b91612d6b916102319594936141a5565b614525565b9061269a9291614306565b60071115612d0057600190565b612e4490612e8090612da36001600160a01b03823516611de8565b90612e526020820135612e44612dc5612dbf60408601866120f6565b906145b7565b93612dd6612dbf60608301836120f6565b90608081013560a082013590612df8612dbf60c08501359460e08101906120f6565b93604051988997602089019b8c94919260e0969399989794919961010087019a60018060a01b03168752602087015260408601526060850152608084015260a083015260c08201520152565b03601f198101835282610fa1565b51902060408051602081019283526001600160a01b03909516908501525f6060850152929182906080820190565b51902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b612ed3612ece5f356001600160e01b031916611e57565b612545565b80516001600160a01b0390612ee9908216611de8565b16156130565780516060906001600160a01b0390612f08908216611de8565b16600181141580613045575b15612ff95750508051612f33906001600160a01b0316369034906139cb565b60408201516001600160f81b03191680612fb957506020820151612f5f906001600160a01b03166145c2565b92905b15612fb157516001600160a01b03169060018214158281612f9c575b50612f8c575b825160208401f35b612f9591613a94565b5f80612f84565b6001600160a01b03908116141590505f612f7e565b825160208401fd5b6001600160f81b031990811603612fea576020820151612fe3906001600160a01b03163690613a4a565b9290612f62565b632d6a6bb760e01b5f5260045ffd5b6001600160a01b0303612f3357337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612f33576348f5c3ed60e01b5f5260045ffd5b506001600160a01b03811415612f14565b631cd4b64760e21b5f5260045ffd5b6001600160a01b03165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b9182358060f81c805f146130e157806001146130d4576002146130be575f80fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b505060015f9301915f190190565b9092608092611ed89694835260018060a01b0316602083015260408201528160608201520191611edb565b61313365ffffffffffff939561313f9795878585614604565b969295919890986146f3565b50911642109081156131bc575b506131a85761316061318a916020976131ce565b60405163392dffaf60e01b8152978896879586959193916001600160e01b031916600487016130ef565b03916001600160a01b03165afa90811561079d575f91611fe1575090565b506001600160e01b03199695505050505050565b65ffffffffffff91501642115f61314c565b60405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c83835260408201526040815261320d606082610fa1565b519020901561321f57611ed890614831565b611ed89061471f565b90818060081b9160ff839260f01c1660021461324057565b6001600160d81b031983169150565b9080601f8301121561022257816020611ed893359101612a8d565b9190916101208184031261022257613280610fd1565b9261328a82610226565b84526020820135602085015260408201356001600160401b03811161022257816132b591840161324f565b604085015260608201356001600160401b03811161022257816132d991840161324f565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b038111610222578161331b91840161324f565b60e08501526101008201356001600160401b0381116102225761333e920161324f565b610100830152565b90816020910312610222575190565b80516001600160a01b03168252611ed891602082015160208201526101006133d66133a661339460408601516101206040870152610120860190610d2c565b60608601518582036060870152610d2c565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610d2c565b92015190610100818403910152610d2c565b939291613405906040928652606060208701526060860190613355565b930152565b929190613405602091604086526040860190613355565b9290925f92613430368261326a565b9161343f6101008301836120f6565b918193835f93602082101580613605575b6135c6575b5050506001600160f81b031916600160f81b145b61359f575b506001600160f81b03198616600160f81b03613505575050604051639700320360e01b815293602092859283915f9183916134ac916004840161340a565b039260581c6001600160a01b03165af190811561079d57611ed8925f926134d4575b50614c98565b6134f791925060203d6020116134fe575b6134ef8183610fa1565b810190613346565b905f6134ce565b503d6134e5565b909460081b93909291600160f01b61352261202b61202488611e8d565b16613590575f61354261353c60209661356c99858a614ab9565b94614c98565b604051630ccab7a160e01b8152979096889586948593926001600160e01b031916600485016133e8565b03926001600160a01b03165af190811561079d57611ed8925f926134d45750614c98565b6314b9743f60e01b5f5260045ffd5b916135ac939550866148a6565b9193916135ba368284612a8d565b6101008401525f61346e565b9195509250829196506135d99350611bab565b90916135e6368385612a8d565b6101008501526134696135fc6001923390612d88565b95905f80613455565b507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a61363461209d8484611b9d565b14613450565b5f516020615bd85f395f51905f5254600a63ffffffff8260a81c16019063ffffffff82116136eb5763ffffffff838116921682116136dc576136849060c81c63ffffffff16610608565b10156105c9575f516020615bd85f395f51905f52805463ffffffff60c81b60c893841b1663ffffffff60c81b1990911617908190559081901c63ffffffff9081169160a81c1681116136d35750565b61023190612288565b63e60fd64760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88918060581c6001600160581b0360a81b5f516020615bd85f395f51905f525416175f516020615bd85f395f51905f5255604051906001600160581b0319168152a1565b92949093919361377761277f85611cf7565b5f516020615bd85f395f51905f525460a81c63ffffffff169063ffffffff80831691161461396f575b506020810180516001600160a01b031615613966575b5f516020615bd85f395f51905f525460a81c63ffffffff1663ffffffff6137e4610608855163ffffffff1690565b91161480159061393a575b6105c95761383d61384a9261380387611cf7565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b915f196001600160a01b03841601613929575b5050506001600160f81b03198116600160f81b036139065760581c6001600160a01b031690813b15610222576040516306d61fe760e41b8152925f91849182916138ab919060048401612703565b038183855af190811561079d575f516020615b985f395f51905f52926129eb926138f2575b5060408051600181526001600160a01b03909216602083015290918291820190565b806107975f61390093610fa1565b5f6138d0565b91506001600160f81b03198216600160f91b0361245b576102319160081b614e80565b61393292613d02565b5f808061385d565b5061394761277f86611cf7565b63ffffffff61395d610608855163ffffffff1690565b911610156137ef565b600181526137b6565b6139819060010163ffffffff16612288565b5f6137a0565b60409081516139968382610fa1565b600681526512d95c9b995b60d21b6020820152916139b681519182610fa1565b6005815264181719971960d91b602082015290565b916139f2925f8080946040519687958694859363d68f602560e01b85523360048601611efb565b03926001600160a01b03165af190811561079d575f91613a10575090565b611ed891503d805f833e6107bb8183610fa1565b5f92836139f295936040519687958694859363d68f602560e01b85523360048601611efb565b5f9060405192808385378338925af4913d82523d5f602084013e60203d830101604052565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b6001600160a01b0316803b1561022257604051630b9dfbed60e11b815260206004820152915f918391829084908290613ad1906024830190610d2c565b03925af1801561079d57613ae25750565b5f61023191610fa1565b8051156122e45760200190565b80518210156122e45760209160051b010190565b909593919492965f5b87811015613b6657600190613b608a89613b4c8489613b45828060051b8c013595613b4087610946565b613af9565b51946122cd565b90613b58868d8d6122cd565b949093613765565b01613b16565b509650505050505050565b90156122e45790565b9293929091906001600160a01b03821615613cf3575b613b9990611e57565b93613bc5613bb8613baa8684613b71565b356001600160f81b03191690565b6001600160f81b03191690565b936001600160f81b03198516613ccb576001600160a01b03841691613bec91908190611be7565b823b1561022257613c16925f92836040518096819582946306d61fe760e41b845260048401612703565b03925af194851561079d57613c7a613c9a9360019361023198613cb7575b5060408051600381526001600160a01b03881660208201525f516020615b985f395f51905f529190a15b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107975f613cc593610fa1565b5f613c34565b50909390506001600160f81b031980841603612fea576001613c9a91613c7a61023196613c5e565b6001600160a01b039150613b90565b6001600160a01b0316919082158015613eb6575b61285e5760405163d60b347f60e01b8152306004820152602081602481875afa90811561079d575f91613e97575b50613ddb579080613d5492611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613d7f919060048401612703565b038183855af190811561079d575f516020615b985f395f51905f52926129eb92613dc7575b505b60408051600481526001600160a01b03909216602083015290918291820190565b806107975f613dd593610fa1565b5f613da4565b81151580613e78575b613e02575b50506129eb5f516020615b985f395f51905f5291613da6565b9080613e0d92611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613e38919060048401612703565b038183855af190811561079d575f516020615b985f395f51905f52926129eb92613e64575b5091613de9565b806107975f613e7293610fa1565b5f613e5d565b506001600160f81b031980613e90613baa8585613b71565b1614613de4565b613eb0915060203d6020116107f2576107e48183610fa1565b5f613d44565b5060018314613d16565b92613ecb908461518c565b81613f1a5750505f80916040518260208201916306d61fe760e41b8352613f0481612e4460248201604090602081525f60208201520190565b51926001600160a01b03165af15061269a61230a565b6001600160a01b039092169190823b156102225761268b925f92836040518096819582946306d61fe760e41b845260048401612703565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091613f8382610ca883611d2e565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b91907f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3905a905f8060405193614016856140086020820196638a91b0e360e01b88526020602484018181520190610d2c565b03601f198101875286610fa1565b60405193614025602086610fa1565b828552602085019583908a905f368a375193f1913d908161406c575b815f9293523e604080516001600160a01b0390951685528115156020860152909390819081016129eb565b5f9150614041565b6140819093929193611e57565b80546001600160a01b031981168255600190910180546001600160a01b039092169490929091906001600160f81b0319605883901b16156140d1575b505081546001600160a81b03191690915550565b6140ef926140e0913691612a8d565b906001600160a01b0316613fb6565b50805460408051600381526001600160a01b0390921660208301525f516020615bb85f395f51905f5291a15f80806140bd565b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205260409081902080546001600160a01b0319811690915590921694935f516020615bb85f395f51905f52936141959161418f91369190612a8d565b82613fb6565b50815190600282526020820152a1565b9291906141d56141c35f516020615bd85f395f51905f525460581b90565b6001600160581b031980871691161490565b612c3d576141e5611d9e85611cf7565b936142066141f282611cf7565b8054640100000000600160c01b0319169055565b6001600160f81b03198116600160f81b0361424957916138d061418f6129eb935f516020615bb85f395f51905f529560018060a01b039060581c16933691612a8d565b91506001600160f81b03198216600160f91b0361245b576102319160081b615212565b6040805190919061427d8382610fa1565b6001815291601f1901825f5b82811061429557505050565b806060602080938501015201614289565b906142b082610fe1565b6142bd6040519182610fa1565b82815280926142ce601f1991610fe1565b01905f5b8281106142de57505050565b8060606020809385010152016142d2565b906040611ed8925f81528160208201520190610d2c565b600881901b9291906001600160f81b03198116600160f81b0361439957509061432e9161542e565b90916001600160f81b031981166143495750611ed891615546565b6001600160f81b031916600160f81b0361436657611ed89161549a565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b9293926001600160f81b031981166144515750906143b6916153b0565b916143bf61426c565b956001600160f81b031981166143ec57506143d9936153f8565b6143e283613aec565b5261269a82613aec565b6001600160f81b031916600160f81b0361436657614409936153d1565b61441284613aec565b52610231577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129eb61444484613aec565b51604051918291826142ef565b909391906001600160f81b0319908116036143665761447b6144819161447561426c565b95615388565b91613a6f565b61448d85939293613aec565b526001600160f81b03198116600160f81b036144d85750156144ab57565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129eb61444484613aec565b6001600160f81b031916614366576102315760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b9091906001600160a01b0316801580156145ad575b61285e5781156122e4575f516020615bb85f395f51905f52926129eb926001600160f81b0319823581161461458d575b505060408051600481526001600160a01b03909216602083015290918291820190565b61459e8161418f926145a594611be7565b3691612a8d565b505f8061456a565b506001811461453a565b816040519182372090565b5f809160405136810160405236838237604051601481016040523360601b90528260143601925af190604051903d82523d5f602084013e60203d830101604052565b9491848461468592969593966040519061461d82610f85565b5f82525f602083015260408201995f8b5261467f606084019a8b925f84525f60808701525f60a0870152606060c087015261467060e08701915f83526101008801955f87529063ffffffff60e01b169052565b6001600160a01b039091169052565b526155d1565b60ff8061469e614698613baa8786613b71565b60f81c90565b16036146e4576146cd6146b8846146c8956146dd94611be7565b9490955163ffffffff60e01b1690565b611e8d565b5460101c6001600160a01b031690565b9351929190565b63b32eeb6960e01b5f5260045ffd5b8065ffffffffffff8260a01c16918215600114614711575b60d01c92565b65ffffffffffff925061470b565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156147aa575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f000000000000000000000000000000000000000000000000000000000000000060408201524660608201523060808201522061478d565b60a061483b613987565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015260408201525f6060820152306080820152206719010000000000005f52601a52603a526042601820905f603a52565b9190939293601481019160141161022257803560601c928291906148c8612c6b565b602081019586525f516020615bd85f395f51905f525490919060a81c63ffffffff1663ffffffff8116835295516001600160a01b03169761490985806120f6565b614912916145b7565b9860348501996149228b886120f6565b61492b916145b7565b90605487019961493b8b8a6120f6565b614944916145b7565b604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505602082019081526001600160581b03198a169282019290925263ffffffff9390931660608401526001600160a01b0395909516608083015260a082019290925260c081019290925260e08083019190915281526149c861010082610fa1565b519020905f1461050961029b98614a29609498614a4297614a0a6128769761050f97614a49576149f790614831565b614a0460748d01856120f6565b9161583f565b9e614a20614a1884806120f6565b9290946120f6565b9390928a613765565b614a3c614a36828b6120f6565b906159de565b886120f6565b01906120f6565b614a529061471f565b6149f7565b80548210156122e4575f5260205f2001905f90565b356001600160c01b0319811692919060088210614a87575050565b6001600160c01b031960089290920360031b82901b16169150565b604090611ed8939281528160208201520190613355565b93929190935f926001614acb83611e8d565b015f5b8154811015614c5b57614afc614af4614ae78385614a57565b90549060031b1c60501b90565b908160501c90565b939095614b18614b12614698613baa8585613b71565b60ff1690565b808403614c2d5750908181614b51614b45614b3f614b3984614b6f98611c03565b90614a6c565b60c01c90565b6001600160401b031690565b600901918c610100614b6761459e868686611c14565b910152611ca9565b939093955b600160f01b1615614b8c575b50600101939193614ace565b604051633894f6e760e11b81529196906020908390815f81614bbc8f6001600160e01b03198d1660048401614aa2565b03926001600160a01b03165af191821561079d575f92614c0d575b506001600160a01b038216614bf957600191614bf291614c98565b9590614b80565b631f24c1fb60e11b5f52600487905260245ffd5b614c2691925060203d81116134fe576134ef8183610fa1565b905f614bd7565b9196909491831115614c4857630760bdcf60e11b5f5260045ffd5b614c506122f6565b6101008b0152614b74565b505091929460ff80614c73614698613baa8789613b71565b16036146e457610100614c9061459e856146cd96611ed898611be7565b910152611e8d565b908082186001600160a01b031615606083811b838501821b9081149184901b141717600114614cc8575050600190565b65ffffffffffff60a01b8216916001600160d01b03198082169083168415614d48575b65ffffffffffff60a01b84168015614d38575b858110908618028086189514614d27575b81811190821802189160018060a01b03911716171790565b65ffffffffffff60a01b9450614d0f565b5065ffffffffffff60a01b614cfe565b65ffffffffffff60a01b9450614ceb565b903590601e198136030182121561022257018035906001600160401b03821161022257602001918160051b3603831361022257565b8054905f815581614d9d575050565b5f5260205f20908101905b818110614db3575050565b5f8155600101614da8565b356001600160501b0319811692919060168210614dd9575050565b6001600160501b031960169290920360031b82901b16169150565b805468010000000000000000811015610f4a57614e1691600182018155614a57565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701015f815290565b356001600160f01b0319811692919060028210614e65575050565b6001600160f01b031960029290920360031b82901b16169150565b9190614e8c9080614d59565b9260fe84118015615184575b615175576001614ea782611e8d565b015461515c575b5f1984015f5b81811061501e575090614f73614f6c8387614f0c614f5d614f4461202b614f3e614f3887614f8f9e9f8e614f33614f9d9f8f90611de86127ee6127e8614efe614f049489896122cd565b90611c3f565b9a8b91611e8d565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6122cd565b90611c6d565b90614e4a565b614f4d88611e8d565b9060f01c61ffff19825416179055565b6001600160a01b0316966122cd565b8091611c50565b6040519586939092906001600160e01b03191660208501614e35565b03601f198101845283610fa1565b803b15610222575f614fc392604051809481926306d61fe760e41b8352600483016121e2565b038183855af190811561079d575f516020615b985f395f51905f52926129eb9261500a575b5060408051600681526001600160a01b03909216602083015290918291820190565b806107975f61501893610fa1565b5f614fe8565b6150b990615064600161503086611e8d565b0161505e61505161504b615045868d8c6122cd565b90611c31565b90614dbe565b6001600160501b03191690565b90614df4565b61507e611de8611de86127ee6127e8614efe868d8c6122cd565b61508c614f6c838a896122cd565b604051949185916150ab916001600160e01b03198a1660208501614e35565b03601f198101855284610fa1565b803b15610222576040516306d61fe760e41b8152925f9184918290849082906150e590600483016121e2565b03925af191821561079d57600192615148575b505f516020615b985f395f51905f5261513f61511e6127ee6127e8614efe868d8c6122cd565b60408051600581526001600160a01b03909216602083015290918291820190565b0390a101614eb4565b806107975f61515693610fa1565b5f6150f8565b615170600161516a83611e8d565b01614d8e565b614eae565b63b62d956d60e01b5f5260045ffd5b508315614e98565b5f516020615b985f395f51905f52916040916001600160a01b03821615615209575b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205284902080546001600160a01b03191693909216929092179055815190600282526020820152a1565b600191506151ae565b91908035019160208301923561522782611e8d565b92600184019060018254018303615379575f5b82548110156152ce57805f516020615bb85f395f51905f526152c5896152a3612e4461418f8b615287888d615278614af48f60019e614ae791614a57565b90508c8060a01b0316976122cd565b6040519485939092906001600160e01b03191660208501614e35565b5060408051600581526001600160a01b03909216602083015290918291820190565b0390a10161523a565b5094614f8f9150916153156102319594614f7361531a956152f3600161516a85611e8d565b875461530a9060101c6001600160a01b0316611de8565b945f198101916122cd565b613fb6565b5080545f516020615bb85f395f51905f5290615366906153459060101c6001600160a01b0316611de8565b60408051600681526001600160a01b03909216602083015290918291820190565b0390a180546001600160b01b0319169055565b63013dcc8d60e31b5f5260045ffd5b9160138211156153a357823560601c92601401916013190190565b63ba597e7e5f526004601cfd5b9060338111156153a357813560601c92601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af115615425573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b918235826020118160401c176153a357830160208101938135938461545257505050565b01601f190190835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c176153a3578061545a57505050565b91906154a5816142a6565b925f5b8281106154b457505050565b806154de60019260051b8401358401604081013581019060208235920190602081013590356153d1565b6154e88389613af9565b52156154f5575b016154a8565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb761553e6155238389613af9565b51604051918291858352604060208401526040830190610d2c565b0390a16154ef565b9190615551816142a6565b925f5b82811061556057505050565b8061558a60019260051b8401358401604081013581019060208235920190602081013590356153f8565b6155948288613af9565b5261559f8187613af9565b5001615554565b9092608092611ed89594835260018060a01b0316602083015260408201528160608201520190610d2c565b91606083019060016156266155ed845163ffffffff60e01b1690565b6001600160e01b0319165f9081527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f8526020526040902090565b01805493905f5b85811061563d5750505050505050565b61564d614af4614ae78385614a57565b6001600160a01b031660a0890190815260808901949091615676906001600160f01b0319168652565b615690615689614698613baa8985613b71565b60ff168a52565b61569e614b128a5160ff1690565b80840361580d57508581816156c3614b45614b3f614b396157189b9c6156eb98611c03565b8c60c06156de61459e60208401948086526009018688611c14565b9101525160090191611ca9565b949094955b51600160f11b9061570a906001600160f01b03191661202b565b166001600160f01b03191690565b15615727575b5060010161562d565b5161573a906001600160a01b0316611de8565b6020615760615753615753895163ffffffff60e01b1690565b6001600160e01b03191690565b60e08a01516101008b015160c08c015160405163184dfdbb60e11b815295869490938593849361579f9390926001600160a01b031690600486016155a6565b03915afa90811561079d575f916157ef575b506001600160a01b0381166157db57906001916157d360408a01918251614c98565b90529061571e565b631f24c1fb60e11b5f52600482905260245ffd5b615807915060203d81116134fe576134ef8183610fa1565b5f6157b1565b90949083111561582657630760bdcf60e11b5f5260045ffd5b61571890615835365f88612a8d565b60c08b01526156f0565b5f516020615bd85f395f51905f52545f9493929060581b6001600160f81b03198116600160f81b036158fa579161589f9391615880611de860209560581c90565b9160405195869485938493637aa8f17760e11b85523060048601611efb565b03915afa90811561079d575f916158db575b505b6001600160e01b0319166374eca2c160e11b016158cc57565b6362467c7760e11b5f5260045ffd5b6158f4915060203d60201161200357611ffb8183610fa1565b5f6158b1565b9094509091906001600160f81b03198116600160f91b0361245b576020916159289160081b95843088614604565b60405163392dffaf60e01b8152929792958694938593849361595b93909230906001600160e01b031916600487016130ef565b03916001600160a01b03165afa90811561079d575f9161597c575b506158b3565b615995915060203d60201161200357611ffb8183610fa1565b5f615976565b156159a257565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b6159eb61050f8383611b72565b9060048310156159fa57505050565b602c8310615b8957615a15611de86127ee6127e88685611bc8565b602c8201358201602c604c820191013591604c840135840194615a4f615a41613bb8613baa8787613b71565b6001600160f81b0319161590565b80615af9575b94615a9661296b95611de895615a9b956102319b956127ee9a615aab575b615a86611de86127ee6127e88a8a611c98565b916001600160a01b031690613b7a565b611c98565b602c86013595604c019491612714565b615af4606c8701358701615aee602c604c830192013580615ad5611de86127ee6127e88488611bd9565b93615ae9856001600160a01b038a1661518c565b611c7b565b91613d02565b615a73565b5091939092956040519163ecd0596160e01b835260208380615b2360048201906002602083019252565b03816001600160a01b0389165afa92831561079d57610231986127ee9761296b97611de897615a9b97615a96955f91615b6a575b50959a50959b5095509550955050615a55565b615b83915060203d6020116107f2576107e48183610fa1565b5f615b57565b50506004610231911461599b56fed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0xe5", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x54b5333f15307fe97e116fcf2df457d09ed8fbce21af32ad2c5424df91575d74", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x0024e61085a682d03a9f75b04d1da57556b25f54", + "function": null, + "arguments": [ + "0x73c8D3d77471b334046aE8e80AEA93C689ca0089" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x57eaa", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61044238819003918201601f19168301916001600160401b03831184841017607757808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103b6908161008c823960805181818160c60152818161021d01526102d80152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816348aac39214610250575080635c60da1b146102085763ea6d13ac1461003d575f80fd5b6100463661033f565b60405161006c602080838181019587898837878201908382015203018084520182610394565b519020905f92604051927fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358501523060581b845260ff84538060158501526055842094341591863b156101eb5750506001906101e6575f38818034895af1156101d9575b836040525f60605215610157575b6040516001600160a01b0385168152602090f35b9180825f9493859483378101838152039082855af13d156101d4573d67ffffffffffffffff81116101c0576040519061019a601f8201601f191660200183610394565b81525f60203d92013e5b156101b1575f8080610143565b63487e630960e11b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b6101a4565b63b12d13eb5f526004601cfd5b610135565b91509450605f602134f593846101355763301164255f526004601cfd5b3461024c575f36600319011261024c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461024c57806102826020806102653661033f565b908084889499019889378201908382015203018084520182610394565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040525f60605260ff5f536035523060601b600152601552602060555f205f6035526040519060018060a01b03168152f35b90604060031983011261024c5760043567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060243590565b90601f8019910116810190811067ffffffffffffffff8211176101c0576040525600000000000000000000000073c8d3d77471b334046ae8e80aea93c689ca0089", + "nonce": "0xe6", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x04442f8a72f32d50e532cc5f345f0d014e313e175a23b5556e4511bfc819d813", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x0024e61085A682d03A9f75B04D1dA57556b25f54", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0xfa0a", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000000024e61085a682d03a9f75b04d1da57556b25f540000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe7", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xaf12d2", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x74f1a4acf98cfae747d440e49b7d6a7453b96fd41eb646baa620b8f674de8f32", + "transactionIndex": "0x32", + "blockHash": "0x2117c0f8dfcaecaa919ba7d32dbce43a9c6b88a25e472315b8b0809a2f90ec0c", + "blockNumber": "0x6eafb7", + "gasUsed": "0x4f1028", + "effectiveGasPrice": "0x2684701d4", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xb30d39", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x54b5333f15307fe97e116fcf2df457d09ed8fbce21af32ad2c5424df91575d74", + "transactionIndex": "0x33", + "blockHash": "0x2117c0f8dfcaecaa919ba7d32dbce43a9c6b88a25e472315b8b0809a2f90ec0c", + "blockNumber": "0x6eafb7", + "gasUsed": "0x3fa67", + "effectiveGasPrice": "0x2684701d4", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xb3c240", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x04442f8a72f32d50e532cc5f345f0d014e313e175a23b5556e4511bfc819d813", + "transactionIndex": "0x34", + "blockHash": "0x2117c0f8dfcaecaa919ba7d32dbce43a9c6b88a25e472315b8b0809a2f90ec0c", + "blockNumber": "0x6eafb7", + "gasUsed": "0xb507", + "effectiveGasPrice": "0x2684701d4", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1733885191, + "chain": 11155111, + "commit": "340fd10" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/11155111/run-1733885257.json b/broadcast/DeployKernel.s.sol/11155111/run-1733885257.json new file mode 100644 index 0000000..ba36b09 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/11155111/run-1733885257.json @@ -0,0 +1,124 @@ +{ + "transactions": [ + { + "hash": "0x74f1a4acf98cfae747d440e49b7d6a7453b96fd41eb646baa620b8f674de8f32", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x73c8d3d77471b334046ae8e80aea93c689ca0089", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6d34b6", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140806040523461020357602081615e3780380380916100208285610207565b83398101031261020357516001600160a01b038116810361020357306080524660a05260a0604051610053604082610207565b6006815260208101906512d95c9b995b60d21b825260405191610077604084610207565b60058352602083019164181719971960d91b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052604051602081019063deadbeef60e01b825260048152610101602482610207565b5190516001600160581b031981169190601582106101e3575b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b031916605885901c179055604051615bf8908161023f823960805181614742015260a05181614765015260c051816147d5015260e051816147fb015261010051816147210152610120518181816103b40152818161069d0152818161084301528181610a9f01528181610e1e01528181611136015281816112aa015281816113000152818161182d0152818161195d015281816125ac01526130090152f35b6001600160581b031960159290920360031b82901b161690505f8061011a565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761022a57604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001d575b36612eb75761001b612e86565b005b5f3560e01c8063112d3a7d1461020c578063150b7a02146102075780631626ba7e1461020257806319822f7c146101fd5780631f1b92e3146101f85780633659cfe6146101f35780633c3b752b146101ee57806352141cd9146101e957806357b3a5f4146101e45780636e6fa0c6146101df578063721e67f4146101da57806384b0196e146101d55780638dd7712f146101d057806390ef8862146101cb5780639198bdf5146101c65780639517e29f146101c15780639cfd7cff146101bc578063a65d69d4146101b7578063a71763a8146101b2578063adb610a3146101ad578063b8afe17d146101a8578063bc197c81146101a3578063c3e589781461019e578063d03c791414610199578063d691c96414610194578063e6f3d50a1461018f578063e9ae5c531461018a578063f1f7f0f914610185578063f23a6e6114610180578063f2dc691d1461017b5763fc9c5dec0361000e57611b12565b611af4565b611a9a565b611a64565b611936565b6117b8565b6116d6565b611689565b6115b6565b6114a5565b611439565b611407565b6112d9565b611295565b61123d565b61110f565b610ff8565b610ee9565b610dee565b610d50565b610cca565b610c6f565b610bbc565b610a1e565b610988565b61080d565b610665565b610380565b61031f565b6102c5565b61029f565b6001600160a01b0381160361022257565b5f80fd5b359061023182610211565b565b9181601f84011215610222578235916001600160401b038311610222576020838186019501011161022257565b6060600319820112610222576004359160243561027c81610211565b91604435906001600160401b0382116102225761029b91600401610233565b9091565b346102225760206102bb6102b236610260565b92919091611d65565b6040519015158152f35b34610222576080366003190112610222576102e1600435610211565b6102ec602435610211565b6064356001600160401b0381116102225761030b903690600401610233565b5050604051630a85bd0160e11b8152602090f35b34610222576040366003190112610222576004356024356001600160401b0381116102225760209161035861035e923690600401610233565b91611f2a565b6040516001600160e01b03199091168152f35b90816101209103126102225790565b6060366003190112610222576004356001600160401b038111610222576103ab903690600401610371565b602435604435917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632576103ef6020820135613228565b9092919084836001600160f81b0319861615610619575b826104119394613421565b9361043661042661042184611cf7565b6120ca565b946001600160f81b031916151590565b9384806105d8575b6105c957602001516001600160a01b031690819081156104d15760019261046f61048e925f525f60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b0361053c57826104e0575b50506104d157816104bb925b6104bf575b506040519081529081906020820190565b0390f35b3490349034903490335af1505f6104aa565b631a0a9b9f60e21b5f5260045ffd5b61053592506105319161051561050f6105096104fe61052a95611d2e565b9360608101906120f6565b90611b72565b90611cc1565b63ffffffff60e01b165f5260205260405f2090565b5460ff1690565b1590565b5f80610499565b82919291610596575b506104d15761050981606061055b9301906120f6565b638dd7712f60e01b916001600160e01b03199161057791611cc1565b160361058757816104bb926104a5565b63dbbb044b60e01b5f5260045ffd5b6105c3915061052a6105aa61053192611d2e565b61051561050f6105bd60608801886120f6565b90611b61565b5f610545565b633ab3447f60e11b5f5260045ffd5b50805163ffffffff1663ffffffff6106116106085f516020615bd85f395f51905f525463ffffffff9060c81c1690565b63ffffffff1690565b91161061043e565b5f516020615bd85f395f51905f525460581b9250610406565b6348f5c3ed60e01b5f5260045ffd5b6004359063ffffffff8216820361022257565b359063ffffffff8216820361022257565b602036600319011261022257610679610641565b61069a6106945f516020615bd85f395f51905f525460581b90565b60581c90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610803575b156107f95760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f916107ca575b50156106325760405163d68f602560e01b8152915f838061072f363433600485016121bd565b038183865af192831561079d575f936107a2575b5061074d9061363a565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061077990600483016121e2565b03925af1801561079d5761078957005b806107975f61001b93610fa1565b80610d22565b611f1f565b61074d9193506107c3903d805f833e6107bb8183610fa1565b81019061215b565b9290610743565b6107ec915060203d6020116107f2575b6107e48183610fa1565b810190612128565b5f610709565b503d6107da565b5061001b9061363a565b50303314156106cd565b60203660031901126102225760043561082581610211565b6108406106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061093c575b156109325760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f91610913575b50156106325760405163d68f602560e01b8152915f83806108d5363433600485016121bd565b038183865af192831561079d575f936108f3575b5061074d906121f3565b61074d91935061090c903d805f833e6107bb8183610fa1565b92906108e9565b61092c915060203d6020116107f2576107e48183610fa1565b5f6108af565b5061001b906121f3565b5030331415610873565b6001600160581b031981160361022257565b9181601f84011215610222578235916001600160401b038311610222576020808501948460051b01011161022257565b346102225760a0366003190112610222576004356109a581610946565b6024356109b181610211565b6044356001600160401b038111610222576109d0903690600401610233565b6064939193356001600160401b038111610222576109f2903690600401610233565b91608435956001600160401b03871161022257610a1661001b973690600401610958565b969095612339565b608036600319011261022257600435610a3681610946565b602435610a4281610211565b6044356001600160401b03811161022257610a61903690600401610233565b6064356001600160401b03811161022257610a80903690600401610233565b91610a9c6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ba0575b15610b915760405163ecd0596160e01b81526004808201526001600160a01b03919091169490602081602481895afa90811561079d575f91610b72575b50156106325760405163d68f602560e01b8152955f8780610b32363433600485016121bd565b0381838a5af196871561079d575f97610b52575b5061074d959697612482565b61074d969750610b6b903d805f833e6107bb8183610fa1565b9695610b46565b610b8b915060203d6020116107f2576107e48183610fa1565b5f610b0c565b50919361001b95939193612482565b5030331415610acf565b6001600160e01b031981160361022257565b34610222576020366003190112610222576104bb610bfd600435610bdf81610baa565b5f60408051610bed81610f2f565b8281528260208201520152611e57565b600160405191610c0c83610f2f565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b3461022257604036600319011261022257602060ff610cbe600435610c9381610946565b610ca860243591610ca383610baa565b611d2e565b9063ffffffff60e01b165f5260205260405f2090565b54166040519015158152f35b34610222576020366003190112610222576020610cff600435610cec81610211565b5f604051610cf981610f4f565b52613065565b60405190610d0c82610f4f565b546001600160a01b031690819052604051908152f35b5f91031261022257565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610222575f36600319011261022257610d8f610d9d610d6e613987565b604092919251938493600f60f81b855260e0602086015260e0850190610d2c565b908382036040850152610d2c565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610dd5575050500390f35b8251845285945060209384019390920191600101610dc7565b6040366003190112610222576004356001600160401b03811161022257610e19903690600401610371565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632575f908152602081905260409020546001600160a01b03169060609060018314159081610eb9575b610e8e610e87826060610e959401906120f6565b8091611b80565b9030613a6f565b5015610eaa57610ea157005b61001b91613a94565b63f21e646b60e01b5f5260045ffd5b9150610e95610e8e610e87610edf610ed7610e8760608801886120f6565b903489613a24565b9492505050610e73565b34610222575f36600319011261022257602063ffffffff5f516020615bd85f395f51905f525460c81c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610f4a57604052565b610f1b565b602081019081106001600160401b03821117610f4a57604052565b604081019081106001600160401b03821117610f4a57604052565b61012081019081106001600160401b03821117610f4a57604052565b90601f801991011681019081106001600160401b03821117610f4a57604052565b60405190610231604083610fa1565b6040519061023161012083610fa1565b6001600160401b038111610f4a5760051b60200190565b6080366003190112610222576004356001600160401b03811161022257611023903690600401610958565b602435916001600160401b038311610222573660238401121561022257826004013561104e81610fe1565b9361105c6040519586610fa1565b8185526024602086019260061b8201019036821161022257602401915b8183106110ce575050506044356001600160401b038111610222576110a2903690600401610958565b90606435946001600160401b038611610222576110c661001b963690600401610958565b959094612587565b60408336031261022257602060409182516110e881610f6a565b6110f186610654565b81528286013561110081610211565b83820152815201920191611079565b61111836610260565b6111336106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611233575b156112285760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f91611209575b50156106325760405163d68f602560e01b8152935f85806111c9363433600485016121bd565b038183885af194851561079d575f956111e9575b5061074d939495612754565b61074d949550611202903d805f833e6107bb8183610fa1565b94936111dd565b611222915060203d6020116107f2576107e48183610fa1565b5f6111a3565b509161001b93612754565b5030331415611166565b34610222575f366003190112610222576104bb60405161125e604082610fa1565b601681527535b2b93732b61730b23b30b731b2b2173b181719971960511b6020820152604051918291602083526020830190610d2c565b34610222575f366003190112610222576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6112e236610260565b6112fd6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113fd575b156113f25760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f916113d3575b50156106325760405163d68f602560e01b8152935f8580611393363433600485016121bd565b038183885af194851561079d575f956113b3575b5061074d939495612ac3565b61074d9495506113cc903d805f833e6107bb8183610fa1565b94936113a7565b6113ec915060203d6020116107f2576107e48183610fa1565b5f61136d565b509161001b93612ac3565b5030331415611330565b34610222575f36600319011261022257602063ffffffff5f516020615bd85f395f51905f525460a81c16604051908152f35b3461022257602036600319011261022257604061146960043561145b81610946565b611463612c6b565b50611cf7565b81519061147582610f6a565b5463ffffffff81168083526001600160a01b03602092831c81169383019384528451918252925190921690820152f35b346102225760a0366003190112610222576114c1600435610211565b6114cc602435610211565b6044356001600160401b038111610222576114eb903690600401610958565b50506064356001600160401b0381116102225761150c903690600401610958565b50506084356001600160401b0381116102225761152d903690600401610233565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a09092019201905f5b8181106115965750505090565b82516001600160501b031916845260209384019390920191600101611589565b34610222576020366003190112610222576115f56004356115d681610baa565b6060604080516115e581610f2f565b5f81525f60208201520152611e8d565b60016040519161160483610f2f565b805461ffff60f01b8160f01b168452828060a01b039060101c16602084015201906040519182602082549182815201915f5260205f20905f5b818110611666576104bb858761165581880382610fa1565b604082015260405191829182611541565b825460501b6001600160501b03191684526020909301926001928301920161163d565b346102225760203660031901126102225760206102bb600435612c83565b9060406003198301126102225760043591602435906001600160401b0382116102225761029b91600401610233565b6116df366116a7565b90916001600160a01b036116f233613065565b54169182156117a95760609060018414159485611792575b6117149293614306565b92611782575b50506040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061175357505050500390f35b919360019193955060206117728192603f198a82030186528851610d2c565b9601920192018594939192611744565b61178b91613a94565b5f8061171a565b61171492506117a23634876139cb565b925061170a565b63710c949760e01b5f5260045ffd5b6060366003190112610222576004356117d081610946565b6024356001600160401b038111610222576117ef903690600401610233565b6044356001600160401b0381116102225761180e903690600401610233565b9061182a6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061192c575b1561191f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169390602081602481885afa90811561079d575f91611900575b50156106325760405163d68f602560e01b8152945f86806118c0363433600485016121bd565b038183895af195861561079d575f966118e0575b5061074d949596612d5b565b61074d9596506118f9903d805f833e6107bb8183610fa1565b95946118d4565b611919915060203d6020116107f2576107e48183610fa1565b5f61189a565b5091909261001b94612d5b565b503033141561185d565b61193f366116a7565b61195a6106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611a5a575b15611a4f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169190602081602481865afa90811561079d575f91611a30575b50156106325760405163d68f602560e01b8152925f84806119f0363433600485016121bd565b038183875af193841561079d575f94611a10575b5061074d929394612d70565b61074d939450611a29903d805f833e6107bb8183610fa1565b9392611a04565b611a49915060203d6020116107f2576107e48183610fa1565b5f6119ca565b509061001b92612d70565b503033141561198d565b34610222575f3660031901126102225760205f516020615bd85f395f51905f525460581b604051906001600160581b0319168152f35b346102225760a036600319011261022257611ab6600435610211565b611ac1602435610211565b6084356001600160401b03811161022257611ae0903690600401610233565b505060405163f23a6e6160e01b8152602090f35b346102225760203660031901126102225760206102bb600435612d7b565b34610222576040366003190112610222576004356001600160401b03811161022257611b59611b476020923690600401610371565b60243590611b5482610211565b612d88565b604051908152f35b906008116102225760040190600490565b906004116102225790600490565b909291928360041161022257831161022257600401916003190190565b906020116102225790602090565b90929192836020116102225783116102225760200191601f190190565b906018116102225760040190601490565b906014116102225790601490565b909291928360011161022257831161022257600101915f190190565b906009116102225760010190600890565b909291928360091161022257831161022257600901916008190190565b906016116102225790601690565b906016116102225760020190601490565b909291928360161161022257831161022257601601916015190190565b906002116102225790600290565b909291928360141161022257831161022257601401916013190190565b90602c116102225760180190601490565b90939293848311610222578411610222578101920390565b356001600160e01b0319811692919060048210611cdc575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85060205260405f2090565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85160205260405f2090565b90929060018103611db457506001600160a01b0392611dae9250611d9e915060581b600160581b600160f81b0316600160f81b17611cf7565b5460201c6001600160a01b031690565b16151590565b60028103611df457506001600160a01b0392611dae9250611de89150611ddb908416613065565b546001600160a01b031690565b6001600160a01b031690565b600303611e3457611e15611e1061050f600193611e2395611b72565b611e57565b01546001600160a01b031690565b6001600160a01b0390811691161490565b5050505f90565b359060208110611e49575090565b5f199060200360031b1b1690565b63ffffffff60e01b165f527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b60205260405f2090565b63ffffffff60e01b165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85260205260405f2090565b908160209103126102225751611ed881610baa565b90565b908060209392818452848401375f828201840152601f01601f1916010190565b611ed8949260609260018060a01b0316825260208201528160408201520191611edb565b6040513d5f823e3d90fd5b91611f349161309d565b919080836001600160f81b03198416156120aa575b6020811015918261206d575b82612057575b506001600160a01b039050611f75611de8611d9e86611cf7565b16156104d1576001600160f81b03198316600160f81b0361200a5790611fa26020949392611fc0966131ce565b604051637aa8f17760e11b8152958694859384933360048601611efb565b039160581c6001600160a01b03165afa90811561079d575f91611fe1575090565b611ed8915060203d602011612003575b611ffb8183610fa1565b810190611ec3565b503d611ff1565b929160081b93600160f11b61203861202b61202488611e8d565b5460f01b90565b6001600160f01b03191690565b1661204857611ed894339061311a565b635b71057960e01b5f5260045ffd5b819295506120659350611bab565b925f80611f5b565b91507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a6120a361209d8385611b9d565b90611e3b565b1491611f55565b92506120c45f516020615bd85f395f51905f525460581b90565b92611f49565b906040516120d781610f6a565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561022257018035906001600160401b0382116102225760200191813603831361022257565b90816020910312610222575180151581036102225790565b6001600160401b038111610f4a57601f01601f191660200190565b602081830312610222578051906001600160401b038211610222570181601f820112156102225780519061218e82612140565b9261219c6040519485610fa1565b8284526020838301011161022257815f9260208093018386015e8301015290565b611ed8939260609260018060a01b03168252602082015281604082015201905f611edb565b906020611ed8928181520190610d2c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2565b1561224d57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b5f516020615bd85f395f51905f52805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b5f52603260045260245ffd5b908210156122e45761029b9160051b8101906120f6565b6122b9565b908092918237015f815290565b60405190612305602083610fa1565b5f8252565b3d15612334573d9061231b82612140565b916123296040519384610fa1565b82523d5f602084013e565b606090565b949392919096959661237c6001600160581b03196123756123685f516020615bd85f395f51905f525460581b90565b6001600160581b03191690565b1615612246565b6001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061246a575b61245b57856123b5612402976136ff565b6123d66123c0610fc2565b60018152925b6001600160a01b03166020840152565b5f516020615bd85f395f51905f52805463ffffffff60a81b1916600160a81b179055613765565b613765565b5f5b81811061241057505050565b5f8061241d8385876122cd565b9061242d604051809381936122e9565b039082305af161243b61230a565b501561244957600101612404565b636534eae560e11b5f5260045260245ffd5b6361c4e91b60e11b5f5260045ffd5b506001600160f81b03198616600160f91b14156123a4565b94939291906001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061252d575b61245b576124bc866136ff565b6001600160a01b036124d0611d9e88611cf7565b16156124df575b505050505050565b612522956123fd6125055f516020615bd85f395f51905f525463ffffffff9060a81c1690565b926123c660405194612518604087610fa1565b63ffffffff168552565b5f80808080806124d7565b506001600160f81b03198616600160f91b14156124af565b9060405161255281610f2f565b82546001600160a01b03908116825260019390930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946125a96106945f516020615bd85f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806126f9575b156126ea5760405163ecd0596160e01b81526004808201526001600160a01b039190911695906020816024818a5afa90811561079d575f916126cb575b50156106325760405163d68f602560e01b8152965f888061263f363433600485016121bd565b0381838b5af197881561079d575f986126ab575b5061265f969798613b0d565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061268b90600483016121e2565b03925af1801561079d5761269d575b50565b806107975f61023193610fa1565b61265f9798506126c4903d805f833e6107bb8183610fa1565b9796612653565b6126e4915060203d6020116107f2576107e48183610fa1565b5f612619565b50919390929461023196613b0d565b50303314156125dc565b916020611ed8938181520191611edb565b356bffffffffffffffffffffffff19811692919060148210612734575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b60018103612894575060581b600160581b600160f81b0316600160f81b179061278961277f83611cf7565b5463ffffffff1690565b5f516020615bd85f395f51905f525460a81c63ffffffff169063ffffffff80831691161461287c575b5061281b6127f4611de86127ee6127e86127e15f516020615bd85f395f51905f525463ffffffff9060a81c1690565b9786611bd9565b90612714565b60601c90565b61280b6127ff610fc2565b63ffffffff9096168652565b6001600160a01b03166020850152565b6128556014820135820191603481013581019060548101350194601486013593603460148401359301916034601483013592019087613765565b60048114612863575b505050565b61050f6128769160346102319501611b72565b90613f51565b61288e9060010163ffffffff16612288565b5f6127b2565b600281036128f05750916128e1610231936128c6611de86127ee6127e860148801358801966034890135890198611bd9565b928391601482013591603401906001600160a01b0316613ec0565b60346014830135920190613d02565b90919060038103612970575061296b611de861295b610231958461295660186127ee97013582016127ee603884013584019961292f61050f8787611b72565b90612950611de86129408989611bc8565b6018880135976038019691612714565b91613b7a565b611bc8565b6018860135956038019491612714565b613d02565b9060048203612a04576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b03925af192831561079d575f516020615b985f395f51905f52936129f0575b50604080519182526001600160a01b03909216602082015290819081015b0390a1565b806107975f6129fe93610fa1565b5f6129cd565b60058203612a41576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b60068203612a7e576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b631092ef5760e11b5f5260045ffd5b929192612a9982612140565b91612aa76040519384610fa1565b829481845281830111610222578281602093845f960137010152565b60018103612aec575061269a92919060581b600160581b600160f81b0316600160f81b176141a5565b60028103612b09575061269a9291906001600160a01b0316614122565b60038103612b34575050612b2e8280612b2861050f61269a9686611b72565b93611b80565b91614074565b909160048203612bc657612b936129cd915f516020615bb85f395f51905f5295612b6c5f516020615bd85f395f51905f525460581b90565b612b78611d9e82611cf7565b6001600160a01b03888116911614612b99575b503691612a8d565b83613fb6565b612ba5612bc091611cf7565b8054640100000000600160c01b031916640100000000179055565b5f612b8b565b60058203612c4c575f516020615bd85f395f51905f525460581b5b612bee61209d8684611b9d565b906001600160f81b03198116600160f91b14612c24575b5050612b936129cd915f516020615bb85f395f51905f52953691612a8d565b60081b6001600160e01b03191614612c3d575f80612c05565b6313002bdd60e31b5f5260045ffd5b60068203612a7e575f516020615bd85f395f51905f525460581b612be1565b60405190612c7882610f6a565b5f6020838281520152565b612c97818060081b918160301b9160501b90565b929091906001600160f81b03198116600160f81b14159081612d47575b81612d32575b81612d19575b50611e345760ff60f81b16600160f81b8114159081612d0f575b50612d09576001600160e01b031916612d04576001600160501b031916612d0057600190565b5f90565b505f90565b50505f90565b905015155f612cda565b6001600160f81b031916607f60f91b141590505f612cc0565b6001600160f81b031980821614159150612cba565b6001600160f81b0319811615159150612cb4565b91612d6b916102319594936141a5565b614525565b9061269a9291614306565b60071115612d0057600190565b612e4490612e8090612da36001600160a01b03823516611de8565b90612e526020820135612e44612dc5612dbf60408601866120f6565b906145b7565b93612dd6612dbf60608301836120f6565b90608081013560a082013590612df8612dbf60c08501359460e08101906120f6565b93604051988997602089019b8c94919260e0969399989794919961010087019a60018060a01b03168752602087015260408601526060850152608084015260a083015260c08201520152565b03601f198101835282610fa1565b51902060408051602081019283526001600160a01b03909516908501525f6060850152929182906080820190565b51902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b612ed3612ece5f356001600160e01b031916611e57565b612545565b80516001600160a01b0390612ee9908216611de8565b16156130565780516060906001600160a01b0390612f08908216611de8565b16600181141580613045575b15612ff95750508051612f33906001600160a01b0316369034906139cb565b60408201516001600160f81b03191680612fb957506020820151612f5f906001600160a01b03166145c2565b92905b15612fb157516001600160a01b03169060018214158281612f9c575b50612f8c575b825160208401f35b612f9591613a94565b5f80612f84565b6001600160a01b03908116141590505f612f7e565b825160208401fd5b6001600160f81b031990811603612fea576020820151612fe3906001600160a01b03163690613a4a565b9290612f62565b632d6a6bb760e01b5f5260045ffd5b6001600160a01b0303612f3357337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612f33576348f5c3ed60e01b5f5260045ffd5b506001600160a01b03811415612f14565b631cd4b64760e21b5f5260045ffd5b6001600160a01b03165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b9182358060f81c805f146130e157806001146130d4576002146130be575f80fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b505060015f9301915f190190565b9092608092611ed89694835260018060a01b0316602083015260408201528160608201520191611edb565b61313365ffffffffffff939561313f9795878585614604565b969295919890986146f3565b50911642109081156131bc575b506131a85761316061318a916020976131ce565b60405163392dffaf60e01b8152978896879586959193916001600160e01b031916600487016130ef565b03916001600160a01b03165afa90811561079d575f91611fe1575090565b506001600160e01b03199695505050505050565b65ffffffffffff91501642115f61314c565b60405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c83835260408201526040815261320d606082610fa1565b519020901561321f57611ed890614831565b611ed89061471f565b90818060081b9160ff839260f01c1660021461324057565b6001600160d81b031983169150565b9080601f8301121561022257816020611ed893359101612a8d565b9190916101208184031261022257613280610fd1565b9261328a82610226565b84526020820135602085015260408201356001600160401b03811161022257816132b591840161324f565b604085015260608201356001600160401b03811161022257816132d991840161324f565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b038111610222578161331b91840161324f565b60e08501526101008201356001600160401b0381116102225761333e920161324f565b610100830152565b90816020910312610222575190565b80516001600160a01b03168252611ed891602082015160208201526101006133d66133a661339460408601516101206040870152610120860190610d2c565b60608601518582036060870152610d2c565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610d2c565b92015190610100818403910152610d2c565b939291613405906040928652606060208701526060860190613355565b930152565b929190613405602091604086526040860190613355565b9290925f92613430368261326a565b9161343f6101008301836120f6565b918193835f93602082101580613605575b6135c6575b5050506001600160f81b031916600160f81b145b61359f575b506001600160f81b03198616600160f81b03613505575050604051639700320360e01b815293602092859283915f9183916134ac916004840161340a565b039260581c6001600160a01b03165af190811561079d57611ed8925f926134d4575b50614c98565b6134f791925060203d6020116134fe575b6134ef8183610fa1565b810190613346565b905f6134ce565b503d6134e5565b909460081b93909291600160f01b61352261202b61202488611e8d565b16613590575f61354261353c60209661356c99858a614ab9565b94614c98565b604051630ccab7a160e01b8152979096889586948593926001600160e01b031916600485016133e8565b03926001600160a01b03165af190811561079d57611ed8925f926134d45750614c98565b6314b9743f60e01b5f5260045ffd5b916135ac939550866148a6565b9193916135ba368284612a8d565b6101008401525f61346e565b9195509250829196506135d99350611bab565b90916135e6368385612a8d565b6101008501526134696135fc6001923390612d88565b95905f80613455565b507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a61363461209d8484611b9d565b14613450565b5f516020615bd85f395f51905f5254600a63ffffffff8260a81c16019063ffffffff82116136eb5763ffffffff838116921682116136dc576136849060c81c63ffffffff16610608565b10156105c9575f516020615bd85f395f51905f52805463ffffffff60c81b60c893841b1663ffffffff60c81b1990911617908190559081901c63ffffffff9081169160a81c1681116136d35750565b61023190612288565b63e60fd64760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88918060581c6001600160581b0360a81b5f516020615bd85f395f51905f525416175f516020615bd85f395f51905f5255604051906001600160581b0319168152a1565b92949093919361377761277f85611cf7565b5f516020615bd85f395f51905f525460a81c63ffffffff169063ffffffff80831691161461396f575b506020810180516001600160a01b031615613966575b5f516020615bd85f395f51905f525460a81c63ffffffff1663ffffffff6137e4610608855163ffffffff1690565b91161480159061393a575b6105c95761383d61384a9261380387611cf7565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b915f196001600160a01b03841601613929575b5050506001600160f81b03198116600160f81b036139065760581c6001600160a01b031690813b15610222576040516306d61fe760e41b8152925f91849182916138ab919060048401612703565b038183855af190811561079d575f516020615b985f395f51905f52926129eb926138f2575b5060408051600181526001600160a01b03909216602083015290918291820190565b806107975f61390093610fa1565b5f6138d0565b91506001600160f81b03198216600160f91b0361245b576102319160081b614e80565b61393292613d02565b5f808061385d565b5061394761277f86611cf7565b63ffffffff61395d610608855163ffffffff1690565b911610156137ef565b600181526137b6565b6139819060010163ffffffff16612288565b5f6137a0565b60409081516139968382610fa1565b600681526512d95c9b995b60d21b6020820152916139b681519182610fa1565b6005815264181719971960d91b602082015290565b916139f2925f8080946040519687958694859363d68f602560e01b85523360048601611efb565b03926001600160a01b03165af190811561079d575f91613a10575090565b611ed891503d805f833e6107bb8183610fa1565b5f92836139f295936040519687958694859363d68f602560e01b85523360048601611efb565b5f9060405192808385378338925af4913d82523d5f602084013e60203d830101604052565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b6001600160a01b0316803b1561022257604051630b9dfbed60e11b815260206004820152915f918391829084908290613ad1906024830190610d2c565b03925af1801561079d57613ae25750565b5f61023191610fa1565b8051156122e45760200190565b80518210156122e45760209160051b010190565b909593919492965f5b87811015613b6657600190613b608a89613b4c8489613b45828060051b8c013595613b4087610946565b613af9565b51946122cd565b90613b58868d8d6122cd565b949093613765565b01613b16565b509650505050505050565b90156122e45790565b9293929091906001600160a01b03821615613cf3575b613b9990611e57565b93613bc5613bb8613baa8684613b71565b356001600160f81b03191690565b6001600160f81b03191690565b936001600160f81b03198516613ccb576001600160a01b03841691613bec91908190611be7565b823b1561022257613c16925f92836040518096819582946306d61fe760e41b845260048401612703565b03925af194851561079d57613c7a613c9a9360019361023198613cb7575b5060408051600381526001600160a01b03881660208201525f516020615b985f395f51905f529190a15b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107975f613cc593610fa1565b5f613c34565b50909390506001600160f81b031980841603612fea576001613c9a91613c7a61023196613c5e565b6001600160a01b039150613b90565b6001600160a01b0316919082158015613eb6575b61285e5760405163d60b347f60e01b8152306004820152602081602481875afa90811561079d575f91613e97575b50613ddb579080613d5492611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613d7f919060048401612703565b038183855af190811561079d575f516020615b985f395f51905f52926129eb92613dc7575b505b60408051600481526001600160a01b03909216602083015290918291820190565b806107975f613dd593610fa1565b5f613da4565b81151580613e78575b613e02575b50506129eb5f516020615b985f395f51905f5291613da6565b9080613e0d92611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613e38919060048401612703565b038183855af190811561079d575f516020615b985f395f51905f52926129eb92613e64575b5091613de9565b806107975f613e7293610fa1565b5f613e5d565b506001600160f81b031980613e90613baa8585613b71565b1614613de4565b613eb0915060203d6020116107f2576107e48183610fa1565b5f613d44565b5060018314613d16565b92613ecb908461518c565b81613f1a5750505f80916040518260208201916306d61fe760e41b8352613f0481612e4460248201604090602081525f60208201520190565b51926001600160a01b03165af15061269a61230a565b6001600160a01b039092169190823b156102225761268b925f92836040518096819582946306d61fe760e41b845260048401612703565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091613f8382610ca883611d2e565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b91907f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3905a905f8060405193614016856140086020820196638a91b0e360e01b88526020602484018181520190610d2c565b03601f198101875286610fa1565b60405193614025602086610fa1565b828552602085019583908a905f368a375193f1913d908161406c575b815f9293523e604080516001600160a01b0390951685528115156020860152909390819081016129eb565b5f9150614041565b6140819093929193611e57565b80546001600160a01b031981168255600190910180546001600160a01b039092169490929091906001600160f81b0319605883901b16156140d1575b505081546001600160a81b03191690915550565b6140ef926140e0913691612a8d565b906001600160a01b0316613fb6565b50805460408051600381526001600160a01b0390921660208301525f516020615bb85f395f51905f5291a15f80806140bd565b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205260409081902080546001600160a01b0319811690915590921694935f516020615bb85f395f51905f52936141959161418f91369190612a8d565b82613fb6565b50815190600282526020820152a1565b9291906141d56141c35f516020615bd85f395f51905f525460581b90565b6001600160581b031980871691161490565b612c3d576141e5611d9e85611cf7565b936142066141f282611cf7565b8054640100000000600160c01b0319169055565b6001600160f81b03198116600160f81b0361424957916138d061418f6129eb935f516020615bb85f395f51905f529560018060a01b039060581c16933691612a8d565b91506001600160f81b03198216600160f91b0361245b576102319160081b615212565b6040805190919061427d8382610fa1565b6001815291601f1901825f5b82811061429557505050565b806060602080938501015201614289565b906142b082610fe1565b6142bd6040519182610fa1565b82815280926142ce601f1991610fe1565b01905f5b8281106142de57505050565b8060606020809385010152016142d2565b906040611ed8925f81528160208201520190610d2c565b600881901b9291906001600160f81b03198116600160f81b0361439957509061432e9161542e565b90916001600160f81b031981166143495750611ed891615546565b6001600160f81b031916600160f81b0361436657611ed89161549a565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b9293926001600160f81b031981166144515750906143b6916153b0565b916143bf61426c565b956001600160f81b031981166143ec57506143d9936153f8565b6143e283613aec565b5261269a82613aec565b6001600160f81b031916600160f81b0361436657614409936153d1565b61441284613aec565b52610231577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129eb61444484613aec565b51604051918291826142ef565b909391906001600160f81b0319908116036143665761447b6144819161447561426c565b95615388565b91613a6f565b61448d85939293613aec565b526001600160f81b03198116600160f81b036144d85750156144ab57565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129eb61444484613aec565b6001600160f81b031916614366576102315760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b9091906001600160a01b0316801580156145ad575b61285e5781156122e4575f516020615bb85f395f51905f52926129eb926001600160f81b0319823581161461458d575b505060408051600481526001600160a01b03909216602083015290918291820190565b61459e8161418f926145a594611be7565b3691612a8d565b505f8061456a565b506001811461453a565b816040519182372090565b5f809160405136810160405236838237604051601481016040523360601b90528260143601925af190604051903d82523d5f602084013e60203d830101604052565b9491848461468592969593966040519061461d82610f85565b5f82525f602083015260408201995f8b5261467f606084019a8b925f84525f60808701525f60a0870152606060c087015261467060e08701915f83526101008801955f87529063ffffffff60e01b169052565b6001600160a01b039091169052565b526155d1565b60ff8061469e614698613baa8786613b71565b60f81c90565b16036146e4576146cd6146b8846146c8956146dd94611be7565b9490955163ffffffff60e01b1690565b611e8d565b5460101c6001600160a01b031690565b9351929190565b63b32eeb6960e01b5f5260045ffd5b8065ffffffffffff8260a01c16918215600114614711575b60d01c92565b65ffffffffffff925061470b565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156147aa575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f000000000000000000000000000000000000000000000000000000000000000060408201524660608201523060808201522061478d565b60a061483b613987565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015260408201525f6060820152306080820152206719010000000000005f52601a52603a526042601820905f603a52565b9190939293601481019160141161022257803560601c928291906148c8612c6b565b602081019586525f516020615bd85f395f51905f525490919060a81c63ffffffff1663ffffffff8116835295516001600160a01b03169761490985806120f6565b614912916145b7565b9860348501996149228b886120f6565b61492b916145b7565b90605487019961493b8b8a6120f6565b614944916145b7565b604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505602082019081526001600160581b03198a169282019290925263ffffffff9390931660608401526001600160a01b0395909516608083015260a082019290925260c081019290925260e08083019190915281526149c861010082610fa1565b519020905f1461050961029b98614a29609498614a4297614a0a6128769761050f97614a49576149f790614831565b614a0460748d01856120f6565b9161583f565b9e614a20614a1884806120f6565b9290946120f6565b9390928a613765565b614a3c614a36828b6120f6565b906159de565b886120f6565b01906120f6565b614a529061471f565b6149f7565b80548210156122e4575f5260205f2001905f90565b356001600160c01b0319811692919060088210614a87575050565b6001600160c01b031960089290920360031b82901b16169150565b604090611ed8939281528160208201520190613355565b93929190935f926001614acb83611e8d565b015f5b8154811015614c5b57614afc614af4614ae78385614a57565b90549060031b1c60501b90565b908160501c90565b939095614b18614b12614698613baa8585613b71565b60ff1690565b808403614c2d5750908181614b51614b45614b3f614b3984614b6f98611c03565b90614a6c565b60c01c90565b6001600160401b031690565b600901918c610100614b6761459e868686611c14565b910152611ca9565b939093955b600160f01b1615614b8c575b50600101939193614ace565b604051633894f6e760e11b81529196906020908390815f81614bbc8f6001600160e01b03198d1660048401614aa2565b03926001600160a01b03165af191821561079d575f92614c0d575b506001600160a01b038216614bf957600191614bf291614c98565b9590614b80565b631f24c1fb60e11b5f52600487905260245ffd5b614c2691925060203d81116134fe576134ef8183610fa1565b905f614bd7565b9196909491831115614c4857630760bdcf60e11b5f5260045ffd5b614c506122f6565b6101008b0152614b74565b505091929460ff80614c73614698613baa8789613b71565b16036146e457610100614c9061459e856146cd96611ed898611be7565b910152611e8d565b908082186001600160a01b031615606083811b838501821b9081149184901b141717600114614cc8575050600190565b65ffffffffffff60a01b8216916001600160d01b03198082169083168415614d48575b65ffffffffffff60a01b84168015614d38575b858110908618028086189514614d27575b81811190821802189160018060a01b03911716171790565b65ffffffffffff60a01b9450614d0f565b5065ffffffffffff60a01b614cfe565b65ffffffffffff60a01b9450614ceb565b903590601e198136030182121561022257018035906001600160401b03821161022257602001918160051b3603831361022257565b8054905f815581614d9d575050565b5f5260205f20908101905b818110614db3575050565b5f8155600101614da8565b356001600160501b0319811692919060168210614dd9575050565b6001600160501b031960169290920360031b82901b16169150565b805468010000000000000000811015610f4a57614e1691600182018155614a57565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701015f815290565b356001600160f01b0319811692919060028210614e65575050565b6001600160f01b031960029290920360031b82901b16169150565b9190614e8c9080614d59565b9260fe84118015615184575b615175576001614ea782611e8d565b015461515c575b5f1984015f5b81811061501e575090614f73614f6c8387614f0c614f5d614f4461202b614f3e614f3887614f8f9e9f8e614f33614f9d9f8f90611de86127ee6127e8614efe614f049489896122cd565b90611c3f565b9a8b91611e8d565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6122cd565b90611c6d565b90614e4a565b614f4d88611e8d565b9060f01c61ffff19825416179055565b6001600160a01b0316966122cd565b8091611c50565b6040519586939092906001600160e01b03191660208501614e35565b03601f198101845283610fa1565b803b15610222575f614fc392604051809481926306d61fe760e41b8352600483016121e2565b038183855af190811561079d575f516020615b985f395f51905f52926129eb9261500a575b5060408051600681526001600160a01b03909216602083015290918291820190565b806107975f61501893610fa1565b5f614fe8565b6150b990615064600161503086611e8d565b0161505e61505161504b615045868d8c6122cd565b90611c31565b90614dbe565b6001600160501b03191690565b90614df4565b61507e611de8611de86127ee6127e8614efe868d8c6122cd565b61508c614f6c838a896122cd565b604051949185916150ab916001600160e01b03198a1660208501614e35565b03601f198101855284610fa1565b803b15610222576040516306d61fe760e41b8152925f9184918290849082906150e590600483016121e2565b03925af191821561079d57600192615148575b505f516020615b985f395f51905f5261513f61511e6127ee6127e8614efe868d8c6122cd565b60408051600581526001600160a01b03909216602083015290918291820190565b0390a101614eb4565b806107975f61515693610fa1565b5f6150f8565b615170600161516a83611e8d565b01614d8e565b614eae565b63b62d956d60e01b5f5260045ffd5b508315614e98565b5f516020615b985f395f51905f52916040916001600160a01b03821615615209575b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205284902080546001600160a01b03191693909216929092179055815190600282526020820152a1565b600191506151ae565b91908035019160208301923561522782611e8d565b92600184019060018254018303615379575f5b82548110156152ce57805f516020615bb85f395f51905f526152c5896152a3612e4461418f8b615287888d615278614af48f60019e614ae791614a57565b90508c8060a01b0316976122cd565b6040519485939092906001600160e01b03191660208501614e35565b5060408051600581526001600160a01b03909216602083015290918291820190565b0390a10161523a565b5094614f8f9150916153156102319594614f7361531a956152f3600161516a85611e8d565b875461530a9060101c6001600160a01b0316611de8565b945f198101916122cd565b613fb6565b5080545f516020615bb85f395f51905f5290615366906153459060101c6001600160a01b0316611de8565b60408051600681526001600160a01b03909216602083015290918291820190565b0390a180546001600160b01b0319169055565b63013dcc8d60e31b5f5260045ffd5b9160138211156153a357823560601c92601401916013190190565b63ba597e7e5f526004601cfd5b9060338111156153a357813560601c92601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af115615425573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b918235826020118160401c176153a357830160208101938135938461545257505050565b01601f190190835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c176153a3578061545a57505050565b91906154a5816142a6565b925f5b8281106154b457505050565b806154de60019260051b8401358401604081013581019060208235920190602081013590356153d1565b6154e88389613af9565b52156154f5575b016154a8565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb761553e6155238389613af9565b51604051918291858352604060208401526040830190610d2c565b0390a16154ef565b9190615551816142a6565b925f5b82811061556057505050565b8061558a60019260051b8401358401604081013581019060208235920190602081013590356153f8565b6155948288613af9565b5261559f8187613af9565b5001615554565b9092608092611ed89594835260018060a01b0316602083015260408201528160608201520190610d2c565b91606083019060016156266155ed845163ffffffff60e01b1690565b6001600160e01b0319165f9081527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f8526020526040902090565b01805493905f5b85811061563d5750505050505050565b61564d614af4614ae78385614a57565b6001600160a01b031660a0890190815260808901949091615676906001600160f01b0319168652565b615690615689614698613baa8985613b71565b60ff168a52565b61569e614b128a5160ff1690565b80840361580d57508581816156c3614b45614b3f614b396157189b9c6156eb98611c03565b8c60c06156de61459e60208401948086526009018688611c14565b9101525160090191611ca9565b949094955b51600160f11b9061570a906001600160f01b03191661202b565b166001600160f01b03191690565b15615727575b5060010161562d565b5161573a906001600160a01b0316611de8565b6020615760615753615753895163ffffffff60e01b1690565b6001600160e01b03191690565b60e08a01516101008b015160c08c015160405163184dfdbb60e11b815295869490938593849361579f9390926001600160a01b031690600486016155a6565b03915afa90811561079d575f916157ef575b506001600160a01b0381166157db57906001916157d360408a01918251614c98565b90529061571e565b631f24c1fb60e11b5f52600482905260245ffd5b615807915060203d81116134fe576134ef8183610fa1565b5f6157b1565b90949083111561582657630760bdcf60e11b5f5260045ffd5b61571890615835365f88612a8d565b60c08b01526156f0565b5f516020615bd85f395f51905f52545f9493929060581b6001600160f81b03198116600160f81b036158fa579161589f9391615880611de860209560581c90565b9160405195869485938493637aa8f17760e11b85523060048601611efb565b03915afa90811561079d575f916158db575b505b6001600160e01b0319166374eca2c160e11b016158cc57565b6362467c7760e11b5f5260045ffd5b6158f4915060203d60201161200357611ffb8183610fa1565b5f6158b1565b9094509091906001600160f81b03198116600160f91b0361245b576020916159289160081b95843088614604565b60405163392dffaf60e01b8152929792958694938593849361595b93909230906001600160e01b031916600487016130ef565b03916001600160a01b03165afa90811561079d575f9161597c575b506158b3565b615995915060203d60201161200357611ffb8183610fa1565b5f615976565b156159a257565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b6159eb61050f8383611b72565b9060048310156159fa57505050565b602c8310615b8957615a15611de86127ee6127e88685611bc8565b602c8201358201602c604c820191013591604c840135840194615a4f615a41613bb8613baa8787613b71565b6001600160f81b0319161590565b80615af9575b94615a9661296b95611de895615a9b956102319b956127ee9a615aab575b615a86611de86127ee6127e88a8a611c98565b916001600160a01b031690613b7a565b611c98565b602c86013595604c019491612714565b615af4606c8701358701615aee602c604c830192013580615ad5611de86127ee6127e88488611bd9565b93615ae9856001600160a01b038a1661518c565b611c7b565b91613d02565b615a73565b5091939092956040519163ecd0596160e01b835260208380615b2360048201906002602083019252565b03816001600160a01b0389165afa92831561079d57610231986127ee9761296b97611de897615a9b97615a96955f91615b6a575b50959a50959b5095509550955050615a55565b615b83915060203d6020116107f2576107e48183610fa1565b5f615b57565b50506004610231911461599b56fed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0xe5", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x54b5333f15307fe97e116fcf2df457d09ed8fbce21af32ad2c5424df91575d74", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x0024e61085a682d03a9f75b04d1da57556b25f54", + "function": null, + "arguments": [ + "0x73c8D3d77471b334046aE8e80AEA93C689ca0089" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x57eaa", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61044238819003918201601f19168301916001600160401b03831184841017607757808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103b6908161008c823960805181818160c60152818161021d01526102d80152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816348aac39214610250575080635c60da1b146102085763ea6d13ac1461003d575f80fd5b6100463661033f565b60405161006c602080838181019587898837878201908382015203018084520182610394565b519020905f92604051927fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358501523060581b845260ff84538060158501526055842094341591863b156101eb5750506001906101e6575f38818034895af1156101d9575b836040525f60605215610157575b6040516001600160a01b0385168152602090f35b9180825f9493859483378101838152039082855af13d156101d4573d67ffffffffffffffff81116101c0576040519061019a601f8201601f191660200183610394565b81525f60203d92013e5b156101b1575f8080610143565b63487e630960e11b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b6101a4565b63b12d13eb5f526004601cfd5b610135565b91509450605f602134f593846101355763301164255f526004601cfd5b3461024c575f36600319011261024c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461024c57806102826020806102653661033f565b908084889499019889378201908382015203018084520182610394565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040525f60605260ff5f536035523060601b600152601552602060555f205f6035526040519060018060a01b03168152f35b90604060031983011261024c5760043567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060243590565b90601f8019910116810190811067ffffffffffffffff8211176101c0576040525600000000000000000000000073c8d3d77471b334046ae8e80aea93c689ca0089", + "nonce": "0xe6", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x04442f8a72f32d50e532cc5f345f0d014e313e175a23b5556e4511bfc819d813", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x0024e61085A682d03A9f75B04D1dA57556b25f54", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0xfa0a", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000000024e61085a682d03a9f75b04d1da57556b25f540000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe7", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xaf12d2", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x74f1a4acf98cfae747d440e49b7d6a7453b96fd41eb646baa620b8f674de8f32", + "transactionIndex": "0x32", + "blockHash": "0x2117c0f8dfcaecaa919ba7d32dbce43a9c6b88a25e472315b8b0809a2f90ec0c", + "blockNumber": "0x6eafb7", + "gasUsed": "0x4f1028", + "effectiveGasPrice": "0x2684701d4", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xb30d39", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x54b5333f15307fe97e116fcf2df457d09ed8fbce21af32ad2c5424df91575d74", + "transactionIndex": "0x33", + "blockHash": "0x2117c0f8dfcaecaa919ba7d32dbce43a9c6b88a25e472315b8b0809a2f90ec0c", + "blockNumber": "0x6eafb7", + "gasUsed": "0x3fa67", + "effectiveGasPrice": "0x2684701d4", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xb3c240", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x04442f8a72f32d50e532cc5f345f0d014e313e175a23b5556e4511bfc819d813", + "transactionIndex": "0x34", + "blockHash": "0x2117c0f8dfcaecaa919ba7d32dbce43a9c6b88a25e472315b8b0809a2f90ec0c", + "blockNumber": "0x6eafb7", + "gasUsed": "0xb507", + "effectiveGasPrice": "0x2684701d4", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1733885257, + "chain": 11155111, + "commit": "340fd10" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/11155111/run-1733940034.json b/broadcast/DeployKernel.s.sol/11155111/run-1733940034.json new file mode 100644 index 0000000..9d52ba7 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/11155111/run-1733940034.json @@ -0,0 +1,124 @@ +{ + "transactions": [ + { + "hash": "0xe04a1ae67377ff45975933b4dee7b41a4c8de161b1e53b0f2aaa5db1b7117b44", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xd830d15d3dc0c269f3dbaa0f3e8626d33cfdabe1", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x73b8af", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140806040523461020357602081615e4a80380380916100208285610207565b83398101031261020357516001600160a01b038116810361020357306080524660a05260a0604051610053604082610207565b6006815260208101906512d95c9b995b60d21b825260405191610077604084610207565b60058352602083019164181719971960d91b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052604051602081019063deadbeef60e01b825260048152610101602482610207565b5190516001600160581b031981169190601582106101e3575b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b031916605885901c179055604051615c0b908161023f82396080518161472c015260a0518161474f015260c051816147bf015260e051816147e50152610100518161470b0152610120518181816103b40152818161069d0152818161084301528181610a9f01528181610e1e01528181611136015281816112aa015281816113000152818161182d0152818161195d015281816125ac0152612ff30152f35b6001600160581b031960159290920360031b82901b161690505f8061011a565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761022a57604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001d575b36612ea15761001b612e70565b005b5f3560e01c8063112d3a7d1461020c578063150b7a02146102075780631626ba7e1461020257806319822f7c146101fd5780631f1b92e3146101f85780633659cfe6146101f35780633c3b752b146101ee57806352141cd9146101e957806357b3a5f4146101e45780636e6fa0c6146101df578063721e67f4146101da57806384b0196e146101d55780638dd7712f146101d057806390ef8862146101cb5780639198bdf5146101c65780639517e29f146101c15780639cfd7cff146101bc578063a65d69d4146101b7578063a71763a8146101b2578063adb610a3146101ad578063b8afe17d146101a8578063bc197c81146101a3578063c3e589781461019e578063d03c791414610199578063d691c96414610194578063e6f3d50a1461018f578063e9ae5c531461018a578063f1f7f0f914610185578063f23a6e6114610180578063f2dc691d1461017b5763fc9c5dec0361000e57611b12565b611af4565b611a9a565b611a64565b611936565b6117b8565b6116d6565b611689565b6115b6565b6114a5565b611439565b611407565b6112d9565b611295565b61123d565b61110f565b610ff8565b610ee9565b610dee565b610d50565b610cca565b610c6f565b610bbc565b610a1e565b610988565b61080d565b610665565b610380565b61031f565b6102c5565b61029f565b6001600160a01b0381160361022257565b5f80fd5b359061023182610211565b565b9181601f84011215610222578235916001600160401b038311610222576020838186019501011161022257565b6060600319820112610222576004359160243561027c81610211565b91604435906001600160401b0382116102225761029b91600401610233565b9091565b346102225760206102bb6102b236610260565b92919091611d65565b6040519015158152f35b34610222576080366003190112610222576102e1600435610211565b6102ec602435610211565b6064356001600160401b0381116102225761030b903690600401610233565b5050604051630a85bd0160e11b8152602090f35b34610222576040366003190112610222576004356024356001600160401b0381116102225760209161035861035e923690600401610233565b91611f2a565b6040516001600160e01b03199091168152f35b90816101209103126102225790565b6060366003190112610222576004356001600160401b038111610222576103ab903690600401610371565b602435604435917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632576103ef6020820135613212565b9092919084836001600160f81b0319861615610619575b82610411939461340b565b9361043661042661042184611cf7565b6120ca565b946001600160f81b031916151590565b9384806105d8575b6105c957602001516001600160a01b031690819081156104d15760019261046f61048e925f525f60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b0361053c57826104e0575b50506104d157816104bb925b6104bf575b506040519081529081906020820190565b0390f35b3490349034903490335af1505f6104aa565b631a0a9b9f60e21b5f5260045ffd5b61053592506105319161051561050f6105096104fe61052a95611d2e565b9360608101906120f6565b90611b72565b90611cc1565b63ffffffff60e01b165f5260205260405f2090565b5460ff1690565b1590565b5f80610499565b82919291610596575b506104d15761050981606061055b9301906120f6565b638dd7712f60e01b916001600160e01b03199161057791611cc1565b160361058757816104bb926104a5565b63dbbb044b60e01b5f5260045ffd5b6105c3915061052a6105aa61053192611d2e565b61051561050f6105bd60608801886120f6565b90611b61565b5f610545565b633ab3447f60e11b5f5260045ffd5b50805163ffffffff1663ffffffff6106116106085f516020615beb5f395f51905f525463ffffffff9060c81c1690565b63ffffffff1690565b91161061043e565b5f516020615beb5f395f51905f525460581b9250610406565b6348f5c3ed60e01b5f5260045ffd5b6004359063ffffffff8216820361022257565b359063ffffffff8216820361022257565b602036600319011261022257610679610641565b61069a6106945f516020615beb5f395f51905f525460581b90565b60581c90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610803575b156107f95760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f916107ca575b50156106325760405163d68f602560e01b8152915f838061072f363433600485016121bd565b038183865af192831561079d575f936107a2575b5061074d90613624565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061077990600483016121e2565b03925af1801561079d5761078957005b806107975f61001b93610fa1565b80610d22565b611f1f565b61074d9193506107c3903d805f833e6107bb8183610fa1565b81019061215b565b9290610743565b6107ec915060203d6020116107f2575b6107e48183610fa1565b810190612128565b5f610709565b503d6107da565b5061001b90613624565b50303314156106cd565b60203660031901126102225760043561082581610211565b6108406106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061093c575b156109325760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f91610913575b50156106325760405163d68f602560e01b8152915f83806108d5363433600485016121bd565b038183865af192831561079d575f936108f3575b5061074d906121f3565b61074d91935061090c903d805f833e6107bb8183610fa1565b92906108e9565b61092c915060203d6020116107f2576107e48183610fa1565b5f6108af565b5061001b906121f3565b5030331415610873565b6001600160581b031981160361022257565b9181601f84011215610222578235916001600160401b038311610222576020808501948460051b01011161022257565b346102225760a0366003190112610222576004356109a581610946565b6024356109b181610211565b6044356001600160401b038111610222576109d0903690600401610233565b6064939193356001600160401b038111610222576109f2903690600401610233565b91608435956001600160401b03871161022257610a1661001b973690600401610958565b969095612339565b608036600319011261022257600435610a3681610946565b602435610a4281610211565b6044356001600160401b03811161022257610a61903690600401610233565b6064356001600160401b03811161022257610a80903690600401610233565b91610a9c6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ba0575b15610b915760405163ecd0596160e01b81526004808201526001600160a01b03919091169490602081602481895afa90811561079d575f91610b72575b50156106325760405163d68f602560e01b8152955f8780610b32363433600485016121bd565b0381838a5af196871561079d575f97610b52575b5061074d959697612482565b61074d969750610b6b903d805f833e6107bb8183610fa1565b9695610b46565b610b8b915060203d6020116107f2576107e48183610fa1565b5f610b0c565b50919361001b95939193612482565b5030331415610acf565b6001600160e01b031981160361022257565b34610222576020366003190112610222576104bb610bfd600435610bdf81610baa565b5f60408051610bed81610f2f565b8281528260208201520152611e57565b600160405191610c0c83610f2f565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b3461022257604036600319011261022257602060ff610cbe600435610c9381610946565b610ca860243591610ca383610baa565b611d2e565b9063ffffffff60e01b165f5260205260405f2090565b54166040519015158152f35b34610222576020366003190112610222576020610cff600435610cec81610211565b5f604051610cf981610f4f565b5261304f565b60405190610d0c82610f4f565b546001600160a01b031690819052604051908152f35b5f91031261022257565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610222575f36600319011261022257610d8f610d9d610d6e613971565b604092919251938493600f60f81b855260e0602086015260e0850190610d2c565b908382036040850152610d2c565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610dd5575050500390f35b8251845285945060209384019390920191600101610dc7565b6040366003190112610222576004356001600160401b03811161022257610e19903690600401610371565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632575f908152602081905260409020546001600160a01b03169060609060018314159081610eb9575b610e8e610e87826060610e959401906120f6565b8091611b80565b9030613a59565b5015610eaa57610ea157005b61001b91613a7e565b63f21e646b60e01b5f5260045ffd5b9150610e95610e8e610e87610edf610ed7610e8760608801886120f6565b903489613a0e565b9492505050610e73565b34610222575f36600319011261022257602063ffffffff5f516020615beb5f395f51905f525460c81c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610f4a57604052565b610f1b565b602081019081106001600160401b03821117610f4a57604052565b604081019081106001600160401b03821117610f4a57604052565b61012081019081106001600160401b03821117610f4a57604052565b90601f801991011681019081106001600160401b03821117610f4a57604052565b60405190610231604083610fa1565b6040519061023161012083610fa1565b6001600160401b038111610f4a5760051b60200190565b6080366003190112610222576004356001600160401b03811161022257611023903690600401610958565b602435916001600160401b038311610222573660238401121561022257826004013561104e81610fe1565b9361105c6040519586610fa1565b8185526024602086019260061b8201019036821161022257602401915b8183106110ce575050506044356001600160401b038111610222576110a2903690600401610958565b90606435946001600160401b038611610222576110c661001b963690600401610958565b959094612587565b60408336031261022257602060409182516110e881610f6a565b6110f186610654565b81528286013561110081610211565b83820152815201920191611079565b61111836610260565b6111336106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611233575b156112285760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f91611209575b50156106325760405163d68f602560e01b8152935f85806111c9363433600485016121bd565b038183885af194851561079d575f956111e9575b5061074d939495612754565b61074d949550611202903d805f833e6107bb8183610fa1565b94936111dd565b611222915060203d6020116107f2576107e48183610fa1565b5f6111a3565b509161001b93612754565b5030331415611166565b34610222575f366003190112610222576104bb60405161125e604082610fa1565b601681527535b2b93732b61730b23b30b731b2b2173b181719971960511b6020820152604051918291602083526020830190610d2c565b34610222575f366003190112610222576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6112e236610260565b6112fd6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113fd575b156113f25760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f916113d3575b50156106325760405163d68f602560e01b8152935f8580611393363433600485016121bd565b038183885af194851561079d575f956113b3575b5061074d939495612aad565b61074d9495506113cc903d805f833e6107bb8183610fa1565b94936113a7565b6113ec915060203d6020116107f2576107e48183610fa1565b5f61136d565b509161001b93612aad565b5030331415611330565b34610222575f36600319011261022257602063ffffffff5f516020615beb5f395f51905f525460a81c16604051908152f35b3461022257602036600319011261022257604061146960043561145b81610946565b611463612c55565b50611cf7565b81519061147582610f6a565b5463ffffffff81168083526001600160a01b03602092831c81169383019384528451918252925190921690820152f35b346102225760a0366003190112610222576114c1600435610211565b6114cc602435610211565b6044356001600160401b038111610222576114eb903690600401610958565b50506064356001600160401b0381116102225761150c903690600401610958565b50506084356001600160401b0381116102225761152d903690600401610233565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a09092019201905f5b8181106115965750505090565b82516001600160501b031916845260209384019390920191600101611589565b34610222576020366003190112610222576115f56004356115d681610baa565b6060604080516115e581610f2f565b5f81525f60208201520152611e8d565b60016040519161160483610f2f565b805461ffff60f01b8160f01b168452828060a01b039060101c16602084015201906040519182602082549182815201915f5260205f20905f5b818110611666576104bb858761165581880382610fa1565b604082015260405191829182611541565b825460501b6001600160501b03191684526020909301926001928301920161163d565b346102225760203660031901126102225760206102bb600435612c6d565b9060406003198301126102225760043591602435906001600160401b0382116102225761029b91600401610233565b6116df366116a7565b90916001600160a01b036116f23361304f565b54169182156117a95760609060018414159485611792575b61171492936142f0565b92611782575b50506040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061175357505050500390f35b919360019193955060206117728192603f198a82030186528851610d2c565b9601920192018594939192611744565b61178b91613a7e565b5f8061171a565b61171492506117a23634876139b5565b925061170a565b63710c949760e01b5f5260045ffd5b6060366003190112610222576004356117d081610946565b6024356001600160401b038111610222576117ef903690600401610233565b6044356001600160401b0381116102225761180e903690600401610233565b9061182a6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061192c575b1561191f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169390602081602481885afa90811561079d575f91611900575b50156106325760405163d68f602560e01b8152945f86806118c0363433600485016121bd565b038183895af195861561079d575f966118e0575b5061074d949596612d45565b61074d9596506118f9903d805f833e6107bb8183610fa1565b95946118d4565b611919915060203d6020116107f2576107e48183610fa1565b5f61189a565b5091909261001b94612d45565b503033141561185d565b61193f366116a7565b61195a6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611a5a575b15611a4f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169190602081602481865afa90811561079d575f91611a30575b50156106325760405163d68f602560e01b8152925f84806119f0363433600485016121bd565b038183875af193841561079d575f94611a10575b5061074d929394612d5a565b61074d939450611a29903d805f833e6107bb8183610fa1565b9392611a04565b611a49915060203d6020116107f2576107e48183610fa1565b5f6119ca565b509061001b92612d5a565b503033141561198d565b34610222575f3660031901126102225760205f516020615beb5f395f51905f525460581b604051906001600160581b0319168152f35b346102225760a036600319011261022257611ab6600435610211565b611ac1602435610211565b6084356001600160401b03811161022257611ae0903690600401610233565b505060405163f23a6e6160e01b8152602090f35b346102225760203660031901126102225760206102bb600435612d65565b34610222576040366003190112610222576004356001600160401b03811161022257611b59611b476020923690600401610371565b60243590611b5482610211565b612d72565b604051908152f35b906008116102225760040190600490565b906004116102225790600490565b909291928360041161022257831161022257600401916003190190565b906020116102225790602090565b90929192836020116102225783116102225760200191601f190190565b906018116102225760040190601490565b906014116102225790601490565b909291928360011161022257831161022257600101915f190190565b906009116102225760010190600890565b909291928360091161022257831161022257600901916008190190565b906016116102225790601690565b906016116102225760020190601490565b909291928360161161022257831161022257601601916015190190565b906002116102225790600290565b909291928360141161022257831161022257601401916013190190565b90602c116102225760180190601490565b90939293848311610222578411610222578101920390565b356001600160e01b0319811692919060048210611cdc575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85060205260405f2090565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85160205260405f2090565b90929060018103611db457506001600160a01b0392611dae9250611d9e915060581b600160581b600160f81b0316600160f81b17611cf7565b5460201c6001600160a01b031690565b16151590565b60028103611df457506001600160a01b0392611dae9250611de89150611ddb90841661304f565b546001600160a01b031690565b6001600160a01b031690565b600303611e3457611e15611e1061050f600193611e2395611b72565b611e57565b01546001600160a01b031690565b6001600160a01b0390811691161490565b5050505f90565b359060208110611e49575090565b5f199060200360031b1b1690565b63ffffffff60e01b165f527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b60205260405f2090565b63ffffffff60e01b165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85260205260405f2090565b908160209103126102225751611ed881610baa565b90565b908060209392818452848401375f828201840152601f01601f1916010190565b611ed8949260609260018060a01b0316825260208201528160408201520191611edb565b6040513d5f823e3d90fd5b91611f3491613087565b919080836001600160f81b03198416156120aa575b6020811015918261206d575b82612057575b506001600160a01b039050611f75611de8611d9e86611cf7565b16156104d1576001600160f81b03198316600160f81b0361200a5790611fa26020949392611fc0966131b8565b604051637aa8f17760e11b8152958694859384933360048601611efb565b039160581c6001600160a01b03165afa90811561079d575f91611fe1575090565b611ed8915060203d602011612003575b611ffb8183610fa1565b810190611ec3565b503d611ff1565b929160081b93600160f11b61203861202b61202488611e8d565b5460f01b90565b6001600160f01b03191690565b1661204857611ed8943390613104565b635b71057960e01b5f5260045ffd5b819295506120659350611bab565b925f80611f5b565b91507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a6120a361209d8385611b9d565b90611e3b565b1491611f55565b92506120c45f516020615beb5f395f51905f525460581b90565b92611f49565b906040516120d781610f6a565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561022257018035906001600160401b0382116102225760200191813603831361022257565b90816020910312610222575180151581036102225790565b6001600160401b038111610f4a57601f01601f191660200190565b602081830312610222578051906001600160401b038211610222570181601f820112156102225780519061218e82612140565b9261219c6040519485610fa1565b8284526020838301011161022257815f9260208093018386015e8301015290565b611ed8939260609260018060a01b03168252602082015281604082015201905f611edb565b906020611ed8928181520190610d2c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2565b1561224d57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b5f516020615beb5f395f51905f52805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b5f52603260045260245ffd5b908210156122e45761029b9160051b8101906120f6565b6122b9565b908092918237015f815290565b60405190612305602083610fa1565b5f8252565b3d15612334573d9061231b82612140565b916123296040519384610fa1565b82523d5f602084013e565b606090565b949392919096959661237c6001600160581b03196123756123685f516020615beb5f395f51905f525460581b90565b6001600160581b03191690565b1615612246565b6001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061246a575b61245b57856123b5612402976136e9565b6123d66123c0610fc2565b60018152925b6001600160a01b03166020840152565b5f516020615beb5f395f51905f52805463ffffffff60a81b1916600160a81b17905561374f565b61374f565b5f5b81811061241057505050565b5f8061241d8385876122cd565b9061242d604051809381936122e9565b039082305af161243b61230a565b501561244957600101612404565b636534eae560e11b5f5260045260245ffd5b6361c4e91b60e11b5f5260045ffd5b506001600160f81b03198616600160f91b14156123a4565b94939291906001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061252d575b61245b576124bc866136e9565b6001600160a01b036124d0611d9e88611cf7565b16156124df575b505050505050565b612522956123fd6125055f516020615beb5f395f51905f525463ffffffff9060a81c1690565b926123c660405194612518604087610fa1565b63ffffffff168552565b5f80808080806124d7565b506001600160f81b03198616600160f91b14156124af565b9060405161255281610f2f565b82546001600160a01b03908116825260019390930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946125a96106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806126f9575b156126ea5760405163ecd0596160e01b81526004808201526001600160a01b039190911695906020816024818a5afa90811561079d575f916126cb575b50156106325760405163d68f602560e01b8152965f888061263f363433600485016121bd565b0381838b5af197881561079d575f986126ab575b5061265f969798613af7565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061268b90600483016121e2565b03925af1801561079d5761269d575b50565b806107975f61023193610fa1565b61265f9798506126c4903d805f833e6107bb8183610fa1565b9796612653565b6126e4915060203d6020116107f2576107e48183610fa1565b5f612619565b50919390929461023196613af7565b50303314156125dc565b916020611ed8938181520191611edb565b356bffffffffffffffffffffffff19811692919060148210612734575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b9091906001810361289957509060549060581b600160581b600160f81b0316600160f81b179161279061278684611cf7565b5463ffffffff1690565b5f516020615beb5f395f51905f525460a81c63ffffffff169063ffffffff808316911614612881575b506128226127fb611de86127f56127ef6127e85f516020615beb5f395f51905f525463ffffffff9060a81c1690565b9886611bd9565b90612714565b60601c90565b612812612806610fc2565b63ffffffff9097168752565b6001600160a01b03166020860152565b61284d601482019461283486806120f6565b61284460348694939401896120f6565b9390928861374f565b0191600461285b84836120f6565b905014612868575b505050565b61050f6105096102319461287b936120f6565b90613f3b565b6128939060010163ffffffff16612288565b5f6127b9565b600281036128ee5750610231926034826128e16128c6611de86127f56127ef60146128e899019786611bd9565b80966128d286806120f6565b916001600160a01b0316613eaa565b01906120f6565b91613cec565b9091906003810361295957506128e8906038612951611de86127f56127ef6102319861294b60188a01978a612939611de86127f56127ef8761293361050f8288611b72565b95611bc8565b6129438b806120f6565b939092613b64565b88611bc8565b9301906120f6565b9091600482036129ee576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b03925af192831561079d575f516020615bab5f395f51905f52936129da575b50604080519182526001600160a01b03909216602082015290819081015b0390a1565b806107975f6129e893610fa1565b5f6129b7565b60058203612a2b576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b60068203612a68576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b631092ef5760e11b5f5260045ffd5b929192612a8382612140565b91612a916040519384610fa1565b829481845281830111610222578281602093845f960137010152565b60018103612ad6575061269a92919060581b600160581b600160f81b0316600160f81b1761418f565b60028103612af3575061269a9291906001600160a01b031661410c565b60038103612b1e575050612b188280612b1261050f61269a9686611b72565b93611b80565b9161405e565b909160048203612bb057612b7d6129b7915f516020615bcb5f395f51905f5295612b565f516020615beb5f395f51905f525460581b90565b612b62611d9e82611cf7565b6001600160a01b03888116911614612b83575b503691612a77565b83613fa0565b612b8f612baa91611cf7565b8054640100000000600160c01b031916640100000000179055565b5f612b75565b60058203612c36575f516020615beb5f395f51905f525460581b5b612bd861209d8684611b9d565b906001600160f81b03198116600160f91b14612c0e575b5050612b7d6129b7915f516020615bcb5f395f51905f52953691612a77565b60081b6001600160e01b03191614612c27575f80612bef565b6313002bdd60e31b5f5260045ffd5b60068203612a68575f516020615beb5f395f51905f525460581b612bcb565b60405190612c6282610f6a565b5f6020838281520152565b612c81818060081b918160301b9160501b90565b929091906001600160f81b03198116600160f81b14159081612d31575b81612d1c575b81612d03575b50611e345760ff60f81b16600160f81b8114159081612cf9575b50612cf3576001600160e01b031916612cee576001600160501b031916612cea57600190565b5f90565b505f90565b50505f90565b905015155f612cc4565b6001600160f81b031916607f60f91b141590505f612caa565b6001600160f81b031980821614159150612ca4565b6001600160f81b0319811615159150612c9e565b91612d559161023195949361418f565b61450f565b9061269a92916142f0565b60071115612cea57600190565b612e2e90612e6a90612d8d6001600160a01b03823516611de8565b90612e3c6020820135612e2e612daf612da960408601866120f6565b906145a1565b93612dc0612da960608301836120f6565b90608081013560a082013590612de2612da960c08501359460e08101906120f6565b93604051988997602089019b8c94919260e0969399989794919961010087019a60018060a01b03168752602087015260408601526060850152608084015260a083015260c08201520152565b03601f198101835282610fa1565b51902060408051602081019283526001600160a01b03909516908501525f6060850152929182906080820190565b51902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b612ebd612eb85f356001600160e01b031916611e57565b612545565b80516001600160a01b0390612ed3908216611de8565b16156130405780516060906001600160a01b0390612ef2908216611de8565b1660018114158061302f575b15612fe35750508051612f1d906001600160a01b0316369034906139b5565b60408201516001600160f81b03191680612fa357506020820151612f49906001600160a01b03166145ac565b92905b15612f9b57516001600160a01b03169060018214158281612f86575b50612f76575b825160208401f35b612f7f91613a7e565b5f80612f6e565b6001600160a01b03908116141590505f612f68565b825160208401fd5b6001600160f81b031990811603612fd4576020820151612fcd906001600160a01b03163690613a34565b9290612f4c565b632d6a6bb760e01b5f5260045ffd5b6001600160a01b0303612f1d57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612f1d576348f5c3ed60e01b5f5260045ffd5b506001600160a01b03811415612efe565b631cd4b64760e21b5f5260045ffd5b6001600160a01b03165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b9182358060f81c805f146130cb57806001146130be576002146130a8575f80fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b505060015f9301915f190190565b9092608092611ed89694835260018060a01b0316602083015260408201528160608201520191611edb565b61311d65ffffffffffff939561312997958785856145ee565b969295919890986146dd565b50911642109081156131a6575b506131925761314a613174916020976131b8565b60405163392dffaf60e01b8152978896879586959193916001600160e01b031916600487016130d9565b03916001600160a01b03165afa90811561079d575f91611fe1575090565b506001600160e01b03199695505050505050565b65ffffffffffff91501642115f613136565b60405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8383526040820152604081526131f7606082610fa1565b519020901561320957611ed89061481b565b611ed890614709565b90818060081b9160ff839260f01c1660021461322a57565b6001600160d81b031983169150565b9080601f8301121561022257816020611ed893359101612a77565b919091610120818403126102225761326a610fd1565b9261327482610226565b84526020820135602085015260408201356001600160401b038111610222578161329f918401613239565b604085015260608201356001600160401b03811161022257816132c3918401613239565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b0381116102225781613305918401613239565b60e08501526101008201356001600160401b038111610222576133289201613239565b610100830152565b90816020910312610222575190565b80516001600160a01b03168252611ed891602082015160208201526101006133c061339061337e60408601516101206040870152610120860190610d2c565b60608601518582036060870152610d2c565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610d2c565b92015190610100818403910152610d2c565b9392916133ef90604092865260606020870152606086019061333f565b930152565b9291906133ef60209160408652604086019061333f565b9290925f9261341a3682613254565b916134296101008301836120f6565b918193835f936020821015806135ef575b6135b0575b5050506001600160f81b031916600160f81b145b613589575b506001600160f81b03198616600160f81b036134ef575050604051639700320360e01b815293602092859283915f91839161349691600484016133f4565b039260581c6001600160a01b03165af190811561079d57611ed8925f926134be575b50614c75565b6134e191925060203d6020116134e8575b6134d98183610fa1565b810190613330565b905f6134b8565b503d6134cf565b909460081b93909291600160f01b61350c61202b61202488611e8d565b1661357a575f61352c61352660209661355699858a614a96565b94614c75565b604051630ccab7a160e01b8152979096889586948593926001600160e01b031916600485016133d2565b03926001600160a01b03165af190811561079d57611ed8925f926134be5750614c75565b6314b9743f60e01b5f5260045ffd5b9161359693955086614890565b9193916135a4368284612a77565b6101008401525f613458565b9195509250829196506135c39350611bab565b90916135d0368385612a77565b6101008501526134536135e66001923390612d72565b95905f8061343f565b507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a61361e61209d8484611b9d565b1461343a565b5f516020615beb5f395f51905f5254600a63ffffffff8260a81c16019063ffffffff82116136d55763ffffffff838116921682116136c65761366e9060c81c63ffffffff16610608565b10156105c9575f516020615beb5f395f51905f52805463ffffffff60c81b60c893841b1663ffffffff60c81b1990911617908190559081901c63ffffffff9081169160a81c1681116136bd5750565b61023190612288565b63e60fd64760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88918060581c6001600160581b0360a81b5f516020615beb5f395f51905f525416175f516020615beb5f395f51905f5255604051906001600160581b0319168152a1565b92949093919361376161278685611cf7565b5f516020615beb5f395f51905f525460a81c63ffffffff169063ffffffff808316911614613959575b506020810180516001600160a01b031615613950575b5f516020615beb5f395f51905f525460a81c63ffffffff1663ffffffff6137ce610608855163ffffffff1690565b911614801590613924575b6105c957613827613834926137ed87611cf7565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b915f196001600160a01b03841601613913575b5050506001600160f81b03198116600160f81b036138f05760581c6001600160a01b031690813b15610222576040516306d61fe760e41b8152925f9184918291613895919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d5926138dc575b5060408051600181526001600160a01b03909216602083015290918291820190565b806107975f6138ea93610fa1565b5f6138ba565b91506001600160f81b03198216600160f91b0361245b576102319160081b614e5d565b61391c92613cec565b5f8080613847565b5061393161278686611cf7565b63ffffffff613947610608855163ffffffff1690565b911610156137d9565b600181526137a0565b61396b9060010163ffffffff16612288565b5f61378a565b60409081516139808382610fa1565b600681526512d95c9b995b60d21b6020820152916139a081519182610fa1565b6005815264181719971960d91b602082015290565b916139dc925f8080946040519687958694859363d68f602560e01b85523360048601611efb565b03926001600160a01b03165af190811561079d575f916139fa575090565b611ed891503d805f833e6107bb8183610fa1565b5f92836139dc95936040519687958694859363d68f602560e01b85523360048601611efb565b5f9060405192808385378338925af4913d82523d5f602084013e60203d830101604052565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b6001600160a01b0316803b1561022257604051630b9dfbed60e11b815260206004820152915f918391829084908290613abb906024830190610d2c565b03925af1801561079d57613acc5750565b5f61023191610fa1565b8051156122e45760200190565b80518210156122e45760209160051b010190565b909593919492965f5b87811015613b5057600190613b4a8a89613b368489613b2f828060051b8c013595613b2a87610946565b613ae3565b51946122cd565b90613b42868d8d6122cd565b94909361374f565b01613b00565b509650505050505050565b90156122e45790565b9293929091906001600160a01b03821615613cdd575b613b8390611e57565b93613baf613ba2613b948684613b5b565b356001600160f81b03191690565b6001600160f81b03191690565b936001600160f81b03198516613cb5576001600160a01b03841691613bd691908190611be7565b823b1561022257613c00925f92836040518096819582946306d61fe760e41b845260048401612703565b03925af194851561079d57613c64613c849360019361023198613ca1575b5060408051600381526001600160a01b03881660208201525f516020615bab5f395f51905f529190a15b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107975f613caf93610fa1565b5f613c1e565b50909390506001600160f81b031980841603612fd4576001613c8491613c6461023196613c48565b6001600160a01b039150613b7a565b6001600160a01b0316919082158015613ea0575b6128635760405163d60b347f60e01b8152306004820152602081602481875afa90811561079d575f91613e81575b50613dc5579080613d3e92611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613d69919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592613db1575b505b60408051600481526001600160a01b03909216602083015290918291820190565b806107975f613dbf93610fa1565b5f613d8e565b81151580613e62575b613dec575b50506129d55f516020615bab5f395f51905f5291613d90565b9080613df792611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613e22919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592613e4e575b5091613dd3565b806107975f613e5c93610fa1565b5f613e47565b506001600160f81b031980613e7a613b948585613b5b565b1614613dce565b613e9a915060203d6020116107f2576107e48183610fa1565b5f613d2e565b5060018314613d00565b92613eb59084615169565b81613f045750505f80916040518260208201916306d61fe760e41b8352613eee81612e2e60248201604090602081525f60208201520190565b51926001600160a01b03165af15061269a61230a565b6001600160a01b039092169190823b156102225761268b925f92836040518096819582946306d61fe760e41b845260048401612703565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091613f6d82610ca883611d2e565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b91907f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3905a905f806040519361400085613ff26020820196638a91b0e360e01b88526020602484018181520190610d2c565b03601f198101875286610fa1565b6040519361400f602086610fa1565b828552602085019583908a905f368a375193f1913d9081614056575b815f9293523e604080516001600160a01b0390951685528115156020860152909390819081016129d5565b5f915061402b565b61406b9093929193611e57565b80546001600160a01b031981168255600190910180546001600160a01b039092169490929091906001600160f81b0319605883901b16156140bb575b505081546001600160a81b03191690915550565b6140d9926140ca913691612a77565b906001600160a01b0316613fa0565b50805460408051600381526001600160a01b0390921660208301525f516020615bcb5f395f51905f5291a15f80806140a7565b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205260409081902080546001600160a01b0319811690915590921694935f516020615bcb5f395f51905f529361417f9161417991369190612a77565b82613fa0565b50815190600282526020820152a1565b9291906141bf6141ad5f516020615beb5f395f51905f525460581b90565b6001600160581b031980871691161490565b612c27576141cf611d9e85611cf7565b936141f06141dc82611cf7565b8054640100000000600160c01b0319169055565b6001600160f81b03198116600160f81b0361423357916138ba6141796129d5935f516020615bcb5f395f51905f529560018060a01b039060581c16933691612a77565b91506001600160f81b03198216600160f91b0361245b576102319160081b6151ef565b604080519091906142678382610fa1565b6001815291601f1901825f5b82811061427f57505050565b806060602080938501015201614273565b9061429a82610fe1565b6142a76040519182610fa1565b82815280926142b8601f1991610fe1565b01905f5b8281106142c857505050565b8060606020809385010152016142bc565b906040611ed8925f81528160208201520190610d2c565b600881901b9291906001600160f81b03198116600160f81b036143835750906143189161542d565b90916001600160f81b031981166143335750611ed891615545565b6001600160f81b031916600160f81b0361435057611ed891615499565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b9293926001600160f81b0319811661443b5750906143a0916153af565b916143a9614256565b956001600160f81b031981166143d657506143c3936153f7565b6143cc83613ad6565b5261269a82613ad6565b6001600160f81b031916600160f81b03614350576143f3936153d0565b6143fc84613ad6565b52610231577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129d561442e84613ad6565b51604051918291826142d9565b909391906001600160f81b0319908116036143505761446561446b9161445f614256565b95615387565b91613a59565b61447785939293613ad6565b526001600160f81b03198116600160f81b036144c257501561449557565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129d561442e84613ad6565b6001600160f81b031916614350576102315760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b9091906001600160a01b031680158015614597575b6128635781156122e4575f516020615bcb5f395f51905f52926129d5926001600160f81b03198235811614614577575b505060408051600481526001600160a01b03909216602083015290918291820190565b614588816141799261458f94611be7565b3691612a77565b505f80614554565b5060018114614524565b816040519182372090565b5f809160405136810160405236838237604051601481016040523360601b90528260143601925af190604051903d82523d5f602084013e60203d830101604052565b9491848461466f92969593966040519061460782610f85565b5f82525f602083015260408201995f8b52614669606084019a8b925f84525f60808701525f60a0870152606060c087015261465a60e08701915f83526101008801955f87529063ffffffff60e01b169052565b6001600160a01b039091169052565b526155d0565b60ff80614688614682613b948786613b5b565b60f81c90565b16036146ce576146b76146a2846146b2956146c794611be7565b9490955163ffffffff60e01b1690565b611e8d565b5460101c6001600160a01b031690565b9351929190565b63b32eeb6960e01b5f5260045ffd5b8065ffffffffffff8260a01c169182156001146146fb575b60d01c92565b65ffffffffffff92506146f5565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615614794575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220614777565b60a0614825613971565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015260408201525f6060820152306080820152206719010000000000005f52601a52603a526042601820905f603a52565b9190939293601481019160141161022257803560601c928291906148b2612c55565b602081018690525f516020615beb5f395f51905f525460a81c63ffffffff168082526001600160a01b03909616979091906148ed85806120f6565b6148f6916145a1565b9860348501996149068b886120f6565b61490f916145a1565b90605487019961491f8b8a6120f6565b614928916145a1565b604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505602082019081526001600160581b03198a169282019290925263ffffffff9390931660608401526001600160a01b0395909516608083015260a082019290925260c081019290925260e08083019190915281526149ac61010082610fa1565b519020905f1461050961029b98614a0d6094986128e1976149ee61287b9761050f97614a26576149db9061481b565b6149e860748d01856120f6565b9161583e565b9e614a046149fc84806120f6565b9290946120f6565b9390928a61374f565b614a20614a1a828b6120f6565b906159dd565b886120f6565b614a2f90614709565b6149db565b80548210156122e4575f5260205f2001905f90565b356001600160c01b0319811692919060088210614a64575050565b6001600160c01b031960089290920360031b82901b16169150565b604090611ed893928152816020820152019061333f565b93929190935f926001614aa883611e8d565b015f5b8154811015614c3857614ad9614ad1614ac48385614a34565b90549060031b1c60501b90565b908160501c90565b939095614af5614aef614682613b948585613b5b565b60ff1690565b808403614c0a5750908181614b2e614b22614b1c614b1684614b4c98611c03565b90614a49565b60c01c90565b6001600160401b031690565b600901918c610100614b44614588868686611c14565b910152611ca9565b939093955b600160f01b1615614b69575b50600101939193614aab565b604051633894f6e760e11b81529196906020908390815f81614b998f6001600160e01b03198d1660048401614a7f565b03926001600160a01b03165af191821561079d575f92614bea575b506001600160a01b038216614bd657600191614bcf91614c75565b9590614b5d565b631f24c1fb60e11b5f52600487905260245ffd5b614c0391925060203d81116134e8576134d98183610fa1565b905f614bb4565b9196909491831115614c2557630760bdcf60e11b5f5260045ffd5b614c2d6122f6565b6101008b0152614b51565b505091929460ff80614c50614682613b948789613b5b565b16036146ce57610100614c6d614588856146b796611ed898611be7565b910152611e8d565b908082186001600160a01b031615606083811b838501821b9081149184901b141717600114614ca5575050600190565b65ffffffffffff60a01b8216916001600160d01b03198082169083168415614d25575b65ffffffffffff60a01b84168015614d15575b858110908618028086189514614d04575b81811190821802189160018060a01b03911716171790565b65ffffffffffff60a01b9450614cec565b5065ffffffffffff60a01b614cdb565b65ffffffffffff60a01b9450614cc8565b903590601e198136030182121561022257018035906001600160401b03821161022257602001918160051b3603831361022257565b8054905f815581614d7a575050565b5f5260205f20908101905b818110614d90575050565b5f8155600101614d85565b356001600160501b0319811692919060168210614db6575050565b6001600160501b031960169290920360031b82901b16169150565b805468010000000000000000811015610f4a57614df391600182018155614a34565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701015f815290565b356001600160f01b0319811692919060028210614e42575050565b6001600160f01b031960029290920360031b82901b16169150565b9190614e699080614d36565b9260fe84118015615161575b615152576001614e8482611e8d565b0154615139575b5f1984015f5b818110614ffb575090614f50614f498387614ee9614f3a614f2161202b614f1b614f1587614f6c9e9f8e614f10614f7a9f8f90611de86127f56127ef614edb614ee19489896122cd565b90611c3f565b9a8b91611e8d565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6122cd565b90611c6d565b90614e27565b614f2a88611e8d565b9060f01c61ffff19825416179055565b6001600160a01b0316966122cd565b8091611c50565b6040519586939092906001600160e01b03191660208501614e12565b03601f198101845283610fa1565b803b15610222575f614fa092604051809481926306d61fe760e41b8352600483016121e2565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592614fe7575b5060408051600681526001600160a01b03909216602083015290918291820190565b806107975f614ff593610fa1565b5f614fc5565b61509690615041600161500d86611e8d565b0161503b61502e615028615022868d8c6122cd565b90611c31565b90614d9b565b6001600160501b03191690565b90614dd1565b61505b611de8611de86127f56127ef614edb868d8c6122cd565b615069614f49838a896122cd565b60405194918591615088916001600160e01b03198a1660208501614e12565b03601f198101855284610fa1565b803b15610222576040516306d61fe760e41b8152925f9184918290849082906150c290600483016121e2565b03925af191821561079d57600192615125575b505f516020615bab5f395f51905f5261511c6150fb6127f56127ef614edb868d8c6122cd565b60408051600581526001600160a01b03909216602083015290918291820190565b0390a101614e91565b806107975f61513393610fa1565b5f6150d5565b61514d600161514783611e8d565b01614d6b565b614e8b565b63b62d956d60e01b5f5260045ffd5b508315614e75565b5f516020615bab5f395f51905f52916040916001600160a01b038216156151e6575b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205284902080546001600160a01b03191693909216929092179055815190600282526020820152a1565b6001915061518b565b91906151fa83611e8d565b916152058280614d36565b9190506001840191600183540103615378575f5b82548110156152b657805f516020615bcb5f395f51905f526152ad8661528b612e2e6141798c61526f88615269615259614ad18f60019e614ac491614a34565b90508c8060a01b03169780614d36565b906122cd565b6040519485939092906001600160e01b03191660208501614e12565b5060408051600581526001600160a01b03909216602083015290918291820190565b0390a101615219565b509361531991506102319392615314614f6c926152d7600161514783611e8d565b8554614f50906152f29060101c6001600160a01b0316611de8565b936153096153008280614d36565b91909280614d36565b5f19019290506122cd565b613fa0565b5080545f516020615bcb5f395f51905f5290615365906153449060101c6001600160a01b0316611de8565b60408051600681526001600160a01b03909216602083015290918291820190565b0390a180546001600160b01b0319169055565b63013dcc8d60e31b5f5260045ffd5b9160138211156153a257823560601c92601401916013190190565b63ba597e7e5f526004601cfd5b9060338111156153a257813560601c92601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af115615424573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b918235826020118160401c176153a257830160208101938135938461545157505050565b01601f190190835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c176153a2578061545957505050565b91906154a481614290565b925f5b8281106154b357505050565b806154dd60019260051b8401358401604081013581019060208235920190602081013590356153d0565b6154e78389613ae3565b52156154f4575b016154a7565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb761553d6155228389613ae3565b51604051918291858352604060208401526040830190610d2c565b0390a16154ee565b919061555081614290565b925f5b82811061555f57505050565b8061558960019260051b8401358401604081013581019060208235920190602081013590356153f7565b6155938288613ae3565b5261559e8187613ae3565b5001615553565b9092608092611ed89594835260018060a01b0316602083015260408201528160608201520190610d2c565b91606083019060016156256155ec845163ffffffff60e01b1690565b6001600160e01b0319165f9081527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f8526020526040902090565b01805493905f5b85811061563c5750505050505050565b61564c614ad1614ac48385614a34565b6001600160a01b031660a0890190815260808901949091615675906001600160f01b0319168652565b61568f615688614682613b948985613b5b565b60ff168a52565b61569d614aef8a5160ff1690565b80840361580c57508581816156c2614b22614b1c614b166157179b9c6156ea98611c03565b8c60c06156dd61458860208401948086526009018688611c14565b9101525160090191611ca9565b949094955b51600160f11b90615709906001600160f01b03191661202b565b166001600160f01b03191690565b15615726575b5060010161562c565b51615739906001600160a01b0316611de8565b602061575f615752615752895163ffffffff60e01b1690565b6001600160e01b03191690565b60e08a01516101008b015160c08c015160405163184dfdbb60e11b815295869490938593849361579e9390926001600160a01b031690600486016155a5565b03915afa90811561079d575f916157ee575b506001600160a01b0381166157da57906001916157d260408a01918251614c75565b90529061571d565b631f24c1fb60e11b5f52600482905260245ffd5b615806915060203d81116134e8576134d98183610fa1565b5f6157b0565b90949083111561582557630760bdcf60e11b5f5260045ffd5b61571790615834365f88612a77565b60c08b01526156ef565b5f516020615beb5f395f51905f52545f9493929060581b6001600160f81b03198116600160f81b036158f9579161589e939161587f611de860209560581c90565b9160405195869485938493637aa8f17760e11b85523060048601611efb565b03915afa90811561079d575f916158da575b505b6001600160e01b0319166374eca2c160e11b016158cb57565b6362467c7760e11b5f5260045ffd5b6158f3915060203d60201161200357611ffb8183610fa1565b5f6158b0565b9094509091906001600160f81b03198116600160f91b0361245b576020916159279160081b958430886145ee565b60405163392dffaf60e01b8152929792958694938593849361595a93909230906001600160e01b031916600487016130d9565b03916001600160a01b03165afa90811561079d575f9161597b575b506158b2565b615994915060203d60201161200357611ffb8183610fa1565b5f615975565b156159a157565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b6159ea61050f8383611b72565b9160048110156159f957505050565b602c8110615b9b57602c820190615a19611de86127f56127ef8487611bc8565b615a43615a35613ba2613b94615a2f87806120f6565b90613b5b565b6001600160f81b0319161590565b80615af6575b611de86127f56127ef85615a9e6102319a87615a82611de86127f56127ef8f9d6128e89f9e8f604c9f6129519f615aa4575b5050611c98565b615a8c8b806120f6565b9390926001600160a01b031690613b64565b88611c98565b6128e8615ae8615aef93606c860190615ae3615ad2611de86127f56127ef615acc87876120f6565b90611bd9565b9586906001600160a01b0316615169565b6120f6565b8091611c7b565b8f87615a7b565b5060405163ecd0596160e01b81526002600482015290949291906020816024816001600160a01b038a165afa93841561079d576127f56127ef84615a9e611de8948b615a82611de86127f56102319f8f9c6128e89f9d8f604c9f936129519f946127ef955f91615b7c575b509f50505050505050505097509a5050959650505050615a49565b615b95915060203d6020116107f2576107e48183610fa1565b5f615b61565b6102319250600491501461599a56fed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0xe8", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa6dcb7aa5bb9f6b4ac81d9b57713014e394187d96198afdd8b87710e075bdfe9", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x7a1dbab750f12a90eb1b60d2ae3ad17d4d81effe", + "function": null, + "arguments": [ + "0xD830D15D3dc0C269F3dBAa0F3e8626d33CFdaBe1" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5d17a", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61044238819003918201601f19168301916001600160401b03831184841017607757808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103b6908161008c823960805181818160c60152818161021d01526102d80152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816348aac39214610250575080635c60da1b146102085763ea6d13ac1461003d575f80fd5b6100463661033f565b60405161006c602080838181019587898837878201908382015203018084520182610394565b519020905f92604051927fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358501523060581b845260ff84538060158501526055842094341591863b156101eb5750506001906101e6575f38818034895af1156101d9575b836040525f60605215610157575b6040516001600160a01b0385168152602090f35b9180825f9493859483378101838152039082855af13d156101d4573d67ffffffffffffffff81116101c0576040519061019a601f8201601f191660200183610394565b81525f60203d92013e5b156101b1575f8080610143565b63487e630960e11b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b6101a4565b63b12d13eb5f526004601cfd5b610135565b91509450605f602134f593846101355763301164255f526004601cfd5b3461024c575f36600319011261024c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461024c57806102826020806102653661033f565b908084889499019889378201908382015203018084520182610394565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040525f60605260ff5f536035523060601b600152601552602060555f205f6035526040519060018060a01b03168152f35b90604060031983011261024c5760043567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060243590565b90601f8019910116810190811067ffffffffffffffff8211176101c05760405256000000000000000000000000d830d15d3dc0c269f3dbaa0f3e8626d33cfdabe1", + "nonce": "0xe9", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x38643c5b23787d908c62e32c302cf1b6b34207af19e90d508811a4ab42e565cf", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x7a1dBAB750f12a90EB1B60D2Ae3aD17D4D81EfFe", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000007a1dbab750f12a90eb1b60d2ae3ad17d4d81effe0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xea", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1ed4931", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe04a1ae67377ff45975933b4dee7b41a4c8de161b1e53b0f2aaa5db1b7117b44", + "transactionIndex": "0x136", + "blockHash": "0x50ede33c5fb46d966f0b18314740be22805bade7a1b6814d40e7205809bcc1a6", + "blockNumber": "0x6ec1ec", + "gasUsed": "0x4f2032", + "effectiveGasPrice": "0x1ff2d899e", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xd830d15d3dc0c269f3dbaa0f3e8626d33cfdabe1" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1f143a4", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xa6dcb7aa5bb9f6b4ac81d9b57713014e394187d96198afdd8b87710e075bdfe9", + "transactionIndex": "0x137", + "blockHash": "0x50ede33c5fb46d966f0b18314740be22805bade7a1b6814d40e7205809bcc1a6", + "blockNumber": "0x6ec1ec", + "gasUsed": "0x3fa73", + "effectiveGasPrice": "0x1ff2d899e", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x7a1dbab750f12a90eb1b60d2ae3ad17d4d81effe" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1f1f8b7", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x38643c5b23787d908c62e32c302cf1b6b34207af19e90d508811a4ab42e565cf", + "transactionIndex": "0x138", + "blockHash": "0x50ede33c5fb46d966f0b18314740be22805bade7a1b6814d40e7205809bcc1a6", + "blockNumber": "0x6ec1ec", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x1ff2d899e", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1733940034, + "chain": 11155111, + "commit": "0ff92c6" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/11155111/run-latest.json b/broadcast/DeployKernel.s.sol/11155111/run-latest.json index bb459f3..9d52ba7 100644 --- a/broadcast/DeployKernel.s.sol/11155111/run-latest.json +++ b/broadcast/DeployKernel.s.sol/11155111/run-latest.json @@ -1,10 +1,10 @@ { "transactions": [ { - "hash": "0x47be68e002906a800851804d2f520ab6374cda01a940d973245dbbfe7f10a8d4", + "hash": "0xe04a1ae67377ff45975933b4dee7b41a4c8de161b1e53b0f2aaa5db1b7117b44", "transactionType": "CREATE2", "contractName": "Kernel", - "contractAddress": "0x97ebdca9c606d493dad1be10188dd78cadb2a139", + "contractAddress": "0xd830d15d3dc0c269f3dbaa0f3e8626d33cfdabe1", "function": null, "arguments": [ "0x0000000071727De22E5E9d8BAf0edAc6f37da032" @@ -12,53 +12,53 @@ "transaction": { "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x733196", + "gas": "0x73b8af", "value": "0x0", - "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140806040523461020357602081615ddd80380380916100208285610207565b83398101031261020357516001600160a01b038116810361020357306080524660a05260a0604051610053604082610207565b6006815260208101906512d95c9b995b60d21b825260405191610077604084610207565b60058352602083019164181719971960d91b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052604051602081019063deadbeef60e01b825260048152610101602482610207565b5190516001600160581b031981169190601582106101e3575b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b031916605885901c179055604051615b9e908161023f8239608051816147a9015260a051816147cc015260c0518161483c015260e05181614862015261010051816147880152610120518181816103b40152818161069d0152818161084301528181610a9f01528181610e1e01528181611136015281816112aa015281816113000152818161182d0152818161195d015281816125ac01526130090152f35b6001600160581b031960159290920360031b82901b161690505f8061011a565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761022a57604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001d575b36612eb75761001b612e86565b005b5f3560e01c8063112d3a7d1461020c578063150b7a02146102075780631626ba7e1461020257806319822f7c146101fd5780631f1b92e3146101f85780633659cfe6146101f35780633c3b752b146101ee57806352141cd9146101e957806357b3a5f4146101e45780636e6fa0c6146101df578063721e67f4146101da57806384b0196e146101d55780638dd7712f146101d057806390ef8862146101cb5780639198bdf5146101c65780639517e29f146101c15780639cfd7cff146101bc578063a65d69d4146101b7578063a71763a8146101b2578063adb610a3146101ad578063b8afe17d146101a8578063bc197c81146101a3578063c3e589781461019e578063d03c791414610199578063d691c96414610194578063e6f3d50a1461018f578063e9ae5c531461018a578063f1f7f0f914610185578063f23a6e6114610180578063f2dc691d1461017b5763fc9c5dec0361000e57611b12565b611af4565b611a9a565b611a64565b611936565b6117b8565b6116d6565b611689565b6115b6565b6114a5565b611439565b611407565b6112d9565b611295565b61123d565b61110f565b610ff8565b610ee9565b610dee565b610d50565b610cca565b610c6f565b610bbc565b610a1e565b610988565b61080d565b610665565b610380565b61031f565b6102c5565b61029f565b6001600160a01b0381160361022257565b5f80fd5b359061023182610211565b565b9181601f84011215610222578235916001600160401b038311610222576020838186019501011161022257565b6060600319820112610222576004359160243561027c81610211565b91604435906001600160401b0382116102225761029b91600401610233565b9091565b346102225760206102bb6102b236610260565b92919091611d65565b6040519015158152f35b34610222576080366003190112610222576102e1600435610211565b6102ec602435610211565b6064356001600160401b0381116102225761030b903690600401610233565b5050604051630a85bd0160e11b8152602090f35b34610222576040366003190112610222576004356024356001600160401b0381116102225760209161035861035e923690600401610233565b91611f2a565b6040516001600160e01b03199091168152f35b90816101209103126102225790565b6060366003190112610222576004356001600160401b038111610222576103ab903690600401610371565b602435604435917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632576103ef6020820135613294565b9092919084836001600160f81b0319861615610619575b82610411939461348d565b9361043661042661042184611cf7565b6120ca565b946001600160f81b031916151590565b9384806105d8575b6105c957602001516001600160a01b031690819081156104d15760019261046f61048e925f525f60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b0361053c57826104e0575b50506104d157816104bb925b6104bf575b506040519081529081906020820190565b0390f35b3490349034903490335af1505f6104aa565b631a0a9b9f60e21b5f5260045ffd5b61053592506105319161051561050f6105096104fe61052a95611d2e565b9360608101906120f6565b90611b72565b90611cc1565b63ffffffff60e01b165f5260205260405f2090565b5460ff1690565b1590565b5f80610499565b82919291610596575b506104d15761050981606061055b9301906120f6565b638dd7712f60e01b916001600160e01b03199161057791611cc1565b160361058757816104bb926104a5565b63dbbb044b60e01b5f5260045ffd5b6105c3915061052a6105aa61053192611d2e565b61051561050f6105bd60608801886120f6565b90611b61565b5f610545565b633ab3447f60e11b5f5260045ffd5b50805163ffffffff1663ffffffff6106116106085f516020615b7e5f395f51905f525463ffffffff9060c81c1690565b63ffffffff1690565b91161061043e565b5f516020615b7e5f395f51905f525460581b9250610406565b6348f5c3ed60e01b5f5260045ffd5b6004359063ffffffff8216820361022257565b359063ffffffff8216820361022257565b602036600319011261022257610679610641565b61069a6106945f516020615b7e5f395f51905f525460581b90565b60581c90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610803575b156107f95760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f916107ca575b50156106325760405163d68f602560e01b8152915f838061072f363433600485016121bd565b038183865af192831561079d575f936107a2575b5061074d906136a1565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061077990600483016121e2565b03925af1801561079d5761078957005b806107975f61001b93610fa1565b80610d22565b611f1f565b61074d9193506107c3903d805f833e6107bb8183610fa1565b81019061215b565b9290610743565b6107ec915060203d6020116107f2575b6107e48183610fa1565b810190612128565b5f610709565b503d6107da565b5061001b906136a1565b50303314156106cd565b60203660031901126102225760043561082581610211565b6108406106945f516020615b7e5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061093c575b156109325760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f91610913575b50156106325760405163d68f602560e01b8152915f83806108d5363433600485016121bd565b038183865af192831561079d575f936108f3575b5061074d906121f3565b61074d91935061090c903d805f833e6107bb8183610fa1565b92906108e9565b61092c915060203d6020116107f2576107e48183610fa1565b5f6108af565b5061001b906121f3565b5030331415610873565b6001600160581b031981160361022257565b9181601f84011215610222578235916001600160401b038311610222576020808501948460051b01011161022257565b346102225760a0366003190112610222576004356109a581610946565b6024356109b181610211565b6044356001600160401b038111610222576109d0903690600401610233565b6064939193356001600160401b038111610222576109f2903690600401610233565b91608435956001600160401b03871161022257610a1661001b973690600401610958565b969095612339565b608036600319011261022257600435610a3681610946565b602435610a4281610211565b6044356001600160401b03811161022257610a61903690600401610233565b6064356001600160401b03811161022257610a80903690600401610233565b91610a9c6106945f516020615b7e5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ba0575b15610b915760405163ecd0596160e01b81526004808201526001600160a01b03919091169490602081602481895afa90811561079d575f91610b72575b50156106325760405163d68f602560e01b8152955f8780610b32363433600485016121bd565b0381838a5af196871561079d575f97610b52575b5061074d959697612482565b61074d969750610b6b903d805f833e6107bb8183610fa1565b9695610b46565b610b8b915060203d6020116107f2576107e48183610fa1565b5f610b0c565b50919361001b95939193612482565b5030331415610acf565b6001600160e01b031981160361022257565b34610222576020366003190112610222576104bb610bfd600435610bdf81610baa565b5f60408051610bed81610f2f565b8281528260208201520152611e57565b600160405191610c0c83610f2f565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b3461022257604036600319011261022257602060ff610cbe600435610c9381610946565b610ca860243591610ca383610baa565b611d2e565b9063ffffffff60e01b165f5260205260405f2090565b54166040519015158152f35b34610222576020366003190112610222576020610cff600435610cec81610211565b5f604051610cf981610f4f565b52613065565b60405190610d0c82610f4f565b546001600160a01b031690819052604051908152f35b5f91031261022257565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610222575f36600319011261022257610d8f610d9d610d6e6139ee565b604092919251938493600f60f81b855260e0602086015260e0850190610d2c565b908382036040850152610d2c565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610dd5575050500390f35b8251845285945060209384019390920191600101610dc7565b6040366003190112610222576004356001600160401b03811161022257610e19903690600401610371565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632575f908152602081905260409020546001600160a01b03169060609060018314159081610eb9575b610e8e610e87826060610e959401906120f6565b8091611b80565b9030613ad6565b5015610eaa57610ea157005b61001b91613afb565b63f21e646b60e01b5f5260045ffd5b9150610e95610e8e610e87610edf610ed7610e8760608801886120f6565b903489613a8b565b9492505050610e73565b34610222575f36600319011261022257602063ffffffff5f516020615b7e5f395f51905f525460c81c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610f4a57604052565b610f1b565b602081019081106001600160401b03821117610f4a57604052565b604081019081106001600160401b03821117610f4a57604052565b61012081019081106001600160401b03821117610f4a57604052565b90601f801991011681019081106001600160401b03821117610f4a57604052565b60405190610231604083610fa1565b6040519061023161012083610fa1565b6001600160401b038111610f4a5760051b60200190565b6080366003190112610222576004356001600160401b03811161022257611023903690600401610958565b602435916001600160401b038311610222573660238401121561022257826004013561104e81610fe1565b9361105c6040519586610fa1565b8185526024602086019260061b8201019036821161022257602401915b8183106110ce575050506044356001600160401b038111610222576110a2903690600401610958565b90606435946001600160401b038611610222576110c661001b963690600401610958565b959094612587565b60408336031261022257602060409182516110e881610f6a565b6110f186610654565b81528286013561110081610211565b83820152815201920191611079565b61111836610260565b6111336106945f516020615b7e5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611233575b156112285760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f91611209575b50156106325760405163d68f602560e01b8152935f85806111c9363433600485016121bd565b038183885af194851561079d575f956111e9575b5061074d939495612754565b61074d949550611202903d805f833e6107bb8183610fa1565b94936111dd565b611222915060203d6020116107f2576107e48183610fa1565b5f6111a3565b509161001b93612754565b5030331415611166565b34610222575f366003190112610222576104bb60405161125e604082610fa1565b601681527535b2b93732b61730b23b30b731b2b2173b181719971960511b6020820152604051918291602083526020830190610d2c565b34610222575f366003190112610222576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6112e236610260565b6112fd6106945f516020615b7e5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113fd575b156113f25760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f916113d3575b50156106325760405163d68f602560e01b8152935f8580611393363433600485016121bd565b038183885af194851561079d575f956113b3575b5061074d939495612ac3565b61074d9495506113cc903d805f833e6107bb8183610fa1565b94936113a7565b6113ec915060203d6020116107f2576107e48183610fa1565b5f61136d565b509161001b93612ac3565b5030331415611330565b34610222575f36600319011261022257602063ffffffff5f516020615b7e5f395f51905f525460a81c16604051908152f35b3461022257602036600319011261022257604061146960043561145b81610946565b611463612c6b565b50611cf7565b81519061147582610f6a565b5463ffffffff81168083526001600160a01b03602092831c81169383019384528451918252925190921690820152f35b346102225760a0366003190112610222576114c1600435610211565b6114cc602435610211565b6044356001600160401b038111610222576114eb903690600401610958565b50506064356001600160401b0381116102225761150c903690600401610958565b50506084356001600160401b0381116102225761152d903690600401610233565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a09092019201905f5b8181106115965750505090565b82516001600160501b031916845260209384019390920191600101611589565b34610222576020366003190112610222576115f56004356115d681610baa565b6060604080516115e581610f2f565b5f81525f60208201520152611e8d565b60016040519161160483610f2f565b805461ffff60f01b8160f01b168452828060a01b039060101c16602084015201906040519182602082549182815201915f5260205f20905f5b818110611666576104bb858761165581880382610fa1565b604082015260405191829182611541565b825460501b6001600160501b03191684526020909301926001928301920161163d565b346102225760203660031901126102225760206102bb600435612c83565b9060406003198301126102225760043591602435906001600160401b0382116102225761029b91600401610233565b6116df366116a7565b90916001600160a01b036116f233613065565b54169182156117a95760609060018414159485611792575b611714929361436d565b92611782575b50506040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061175357505050500390f35b919360019193955060206117728192603f198a82030186528851610d2c565b9601920192018594939192611744565b61178b91613afb565b5f8061171a565b61171492506117a2363487613a32565b925061170a565b63710c949760e01b5f5260045ffd5b6060366003190112610222576004356117d081610946565b6024356001600160401b038111610222576117ef903690600401610233565b6044356001600160401b0381116102225761180e903690600401610233565b9061182a6106945f516020615b7e5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061192c575b1561191f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169390602081602481885afa90811561079d575f91611900575b50156106325760405163d68f602560e01b8152945f86806118c0363433600485016121bd565b038183895af195861561079d575f966118e0575b5061074d949596612d5b565b61074d9596506118f9903d805f833e6107bb8183610fa1565b95946118d4565b611919915060203d6020116107f2576107e48183610fa1565b5f61189a565b5091909261001b94612d5b565b503033141561185d565b61193f366116a7565b61195a6106945f516020615b7e5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611a5a575b15611a4f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169190602081602481865afa90811561079d575f91611a30575b50156106325760405163d68f602560e01b8152925f84806119f0363433600485016121bd565b038183875af193841561079d575f94611a10575b5061074d929394612d70565b61074d939450611a29903d805f833e6107bb8183610fa1565b9392611a04565b611a49915060203d6020116107f2576107e48183610fa1565b5f6119ca565b509061001b92612d70565b503033141561198d565b34610222575f3660031901126102225760205f516020615b7e5f395f51905f525460581b604051906001600160581b0319168152f35b346102225760a036600319011261022257611ab6600435610211565b611ac1602435610211565b6084356001600160401b03811161022257611ae0903690600401610233565b505060405163f23a6e6160e01b8152602090f35b346102225760203660031901126102225760206102bb600435612d7b565b34610222576040366003190112610222576004356001600160401b03811161022257611b59611b476020923690600401610371565b60243590611b5482610211565b612d88565b604051908152f35b906008116102225760040190600490565b906004116102225790600490565b909291928360041161022257831161022257600401916003190190565b906020116102225790602090565b90929192836020116102225783116102225760200191601f190190565b906018116102225760040190601490565b906014116102225790601490565b909291928360011161022257831161022257600101915f190190565b906009116102225760010190600890565b909291928360091161022257831161022257600901916008190190565b906016116102225790601690565b906016116102225760020190601490565b909291928360161161022257831161022257601601916015190190565b906002116102225790600290565b909291928360141161022257831161022257601401916013190190565b90602c116102225760180190601490565b90939293848311610222578411610222578101920390565b356001600160e01b0319811692919060048210611cdc575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85060205260405f2090565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85160205260405f2090565b90929060018103611db457506001600160a01b0392611dae9250611d9e915060581b600160581b600160f81b0316600160f81b17611cf7565b5460201c6001600160a01b031690565b16151590565b60028103611df457506001600160a01b0392611dae9250611de89150611ddb908416613065565b546001600160a01b031690565b6001600160a01b031690565b600303611e3457611e15611e1061050f600193611e2395611b72565b611e57565b01546001600160a01b031690565b6001600160a01b0390811691161490565b5050505f90565b359060208110611e49575090565b5f199060200360031b1b1690565b63ffffffff60e01b165f527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b60205260405f2090565b63ffffffff60e01b165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85260205260405f2090565b908160209103126102225751611ed881610baa565b90565b908060209392818452848401375f828201840152601f01601f1916010190565b611ed8949260609260018060a01b0316825260208201528160408201520191611edb565b6040513d5f823e3d90fd5b91611f349161309d565b919080836001600160f81b03198416156120aa575b6020811015918261206d575b82612057575b506001600160a01b039050611f75611de8611d9e86611cf7565b16156104d1576001600160f81b03198316600160f81b0361200a5790611fa26020949392611fc0966131ce565b604051637aa8f17760e11b8152958694859384933360048601611efb565b039160581c6001600160a01b03165afa90811561079d575f91611fe1575090565b611ed8915060203d602011612003575b611ffb8183610fa1565b810190611ec3565b503d611ff1565b929160081b93600160f11b61203861202b61202488611e8d565b5460f01b90565b6001600160f01b03191690565b1661204857611ed894339061311a565b635b71057960e01b5f5260045ffd5b819295506120659350611bab565b925f80611f5b565b91507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a6120a361209d8385611b9d565b90611e3b565b1491611f55565b92506120c45f516020615b7e5f395f51905f525460581b90565b92611f49565b906040516120d781610f6a565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561022257018035906001600160401b0382116102225760200191813603831361022257565b90816020910312610222575180151581036102225790565b6001600160401b038111610f4a57601f01601f191660200190565b602081830312610222578051906001600160401b038211610222570181601f820112156102225780519061218e82612140565b9261219c6040519485610fa1565b8284526020838301011161022257815f9260208093018386015e8301015290565b611ed8939260609260018060a01b03168252602082015281604082015201905f611edb565b906020611ed8928181520190610d2c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2565b1561224d57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b5f516020615b7e5f395f51905f52805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b5f52603260045260245ffd5b908210156122e45761029b9160051b8101906120f6565b6122b9565b908092918237015f815290565b60405190612305602083610fa1565b5f8252565b3d15612334573d9061231b82612140565b916123296040519384610fa1565b82523d5f602084013e565b606090565b949392919096959661237c6001600160581b03196123756123685f516020615b7e5f395f51905f525460581b90565b6001600160581b03191690565b1615612246565b6001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061246a575b61245b57856123b561240297613766565b6123d66123c0610fc2565b60018152925b6001600160a01b03166020840152565b5f516020615b7e5f395f51905f52805463ffffffff60a81b1916600160a81b1790556137cc565b6137cc565b5f5b81811061241057505050565b5f8061241d8385876122cd565b9061242d604051809381936122e9565b039082305af161243b61230a565b501561244957600101612404565b636534eae560e11b5f5260045260245ffd5b6361c4e91b60e11b5f5260045ffd5b506001600160f81b03198616600160f91b14156123a4565b94939291906001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061252d575b61245b576124bc86613766565b6001600160a01b036124d0611d9e88611cf7565b16156124df575b505050505050565b612522956123fd6125055f516020615b7e5f395f51905f525463ffffffff9060a81c1690565b926123c660405194612518604087610fa1565b63ffffffff168552565b5f80808080806124d7565b506001600160f81b03198616600160f91b14156124af565b9060405161255281610f2f565b82546001600160a01b03908116825260019390930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946125a96106945f516020615b7e5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806126f9575b156126ea5760405163ecd0596160e01b81526004808201526001600160a01b039190911695906020816024818a5afa90811561079d575f916126cb575b50156106325760405163d68f602560e01b8152965f888061263f363433600485016121bd565b0381838b5af197881561079d575f986126ab575b5061265f969798613b74565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061268b90600483016121e2565b03925af1801561079d5761269d575b50565b806107975f61023193610fa1565b61265f9798506126c4903d805f833e6107bb8183610fa1565b9796612653565b6126e4915060203d6020116107f2576107e48183610fa1565b5f612619565b50919390929461023196613b74565b50303314156125dc565b916020611ed8938181520191611edb565b356bffffffffffffffffffffffff19811692919060148210612734575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b60018103612894575060581b600160581b600160f81b0316600160f81b179061278961277f83611cf7565b5463ffffffff1690565b5f516020615b7e5f395f51905f525460a81c63ffffffff169063ffffffff80831691161461287c575b5061281b6127f4611de86127ee6127e86127e15f516020615b7e5f395f51905f525463ffffffff9060a81c1690565b9786611bd9565b90612714565b60601c90565b61280b6127ff610fc2565b63ffffffff9096168652565b6001600160a01b03166020850152565b61285560148201358201916034810135810190605481013501946014860135936034601484013593019160346014830135920190876137cc565b60048114612863575b505050565b61050f6128769160346102319501611b72565b90613fb8565b61288e9060010163ffffffff16612288565b5f6127b2565b600281036128f05750916128e1610231936128c6611de86127ee6127e860148801358801966034890135890198611bd9565b928391601482013591603401906001600160a01b0316613f27565b60346014830135920190613d69565b90919060038103612970575061296b611de861295b610231958461295660186127ee97013582016127ee603884013584019961292f61050f8787611b72565b90612950611de86129408989611bc8565b6018880135976038019691612714565b91613be1565b611bc8565b6018860135956038019491612714565b613d69565b9060048203612a04576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b03925af192831561079d575f516020615b3e5f395f51905f52936129f0575b50604080519182526001600160a01b03909216602082015290819081015b0390a1565b806107975f6129fe93610fa1565b5f6129cd565b60058203612a41576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b60068203612a7e576001600160a01b03831693843b15610222576129ae945f92836040518098819582946306d61fe760e41b845260048401612703565b631092ef5760e11b5f5260045ffd5b929192612a9982612140565b91612aa76040519384610fa1565b829481845281830111610222578281602093845f960137010152565b60018103612aec575061269a92919060581b600160581b600160f81b0316600160f81b1761420c565b60028103612b09575061269a9291906001600160a01b0316614189565b60038103612b34575050612b2e8280612b2861050f61269a9686611b72565b93611b80565b916140db565b909160048203612bc657612b936129cd915f516020615b5e5f395f51905f5295612b6c5f516020615b7e5f395f51905f525460581b90565b612b78611d9e82611cf7565b6001600160a01b03888116911614612b99575b503691612a8d565b8361401d565b612ba5612bc091611cf7565b8054640100000000600160c01b031916640100000000179055565b5f612b8b565b60058203612c4c575f516020615b7e5f395f51905f525460581b5b612bee61209d8684611b9d565b906001600160f81b03198116600160f91b14612c24575b5050612b936129cd915f516020615b5e5f395f51905f52953691612a8d565b60081b6001600160e01b03191614612c3d575f80612c05565b6313002bdd60e31b5f5260045ffd5b60068203612a7e575f516020615b7e5f395f51905f525460581b612be1565b60405190612c7882610f6a565b5f6020838281520152565b612c97818060081b918160301b9160501b90565b929091906001600160f81b03198116600160f81b14159081612d47575b81612d32575b81612d19575b50611e345760ff60f81b16600160f81b8114159081612d0f575b50612d09576001600160e01b031916612d04576001600160501b031916612d0057600190565b5f90565b505f90565b50505f90565b905015155f612cda565b6001600160f81b031916607f60f91b141590505f612cc0565b6001600160f81b031980821614159150612cba565b6001600160f81b0319811615159150612cb4565b91612d6b9161023195949361420c565b61458c565b9061269a929161436d565b60071115612d0057600190565b612e4490612e8090612da36001600160a01b03823516611de8565b90612e526020820135612e44612dc5612dbf60408601866120f6565b9061461e565b93612dd6612dbf60608301836120f6565b90608081013560a082013590612df8612dbf60c08501359460e08101906120f6565b93604051988997602089019b8c94919260e0969399989794919961010087019a60018060a01b03168752602087015260408601526060850152608084015260a083015260c08201520152565b03601f198101835282610fa1565b51902060408051602081019283526001600160a01b03909516908501525f6060850152929182906080820190565b51902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b612ed3612ece5f356001600160e01b031916611e57565b612545565b80516001600160a01b0390612ee9908216611de8565b16156130565780516060906001600160a01b0390612f08908216611de8565b16600181141580613045575b15612ff95750508051612f33906001600160a01b031636903490613a32565b60408201516001600160f81b03191680612fb957506020820151612f5f906001600160a01b0316614629565b92905b15612fb157516001600160a01b03169060018214158281612f9c575b50612f8c575b825160208401f35b612f9591613afb565b5f80612f84565b6001600160a01b03908116141590505f612f7e565b825160208401fd5b6001600160f81b031990811603612fea576020820151612fe3906001600160a01b03163690613ab1565b9290612f62565b632d6a6bb760e01b5f5260045ffd5b6001600160a01b0303612f3357337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612f33576348f5c3ed60e01b5f5260045ffd5b506001600160a01b03811415612f14565b631cd4b64760e21b5f5260045ffd5b6001600160a01b03165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b9182358060f81c805f146130e157806001146130d4576002146130be575f80fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b505060015f9301915f190190565b9092608092611ed89694835260018060a01b0316602083015260408201528160608201520191611edb565b61313365ffffffffffff939561313f979587858561466b565b9692959198909861475a565b50911642109081156131bc575b506131a85761316061318a916020976131ce565b60405163392dffaf60e01b8152978896879586959193916001600160e01b031916600487016130ef565b03916001600160a01b03165afa90811561079d575f91611fe1575090565b506001600160e01b03199695505050505050565b65ffffffffffff91501642115f61314c565b60405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c83835260408201526040815261320d606082610fa1565b519020901561328b5760a06132206139ee565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015260408201525f6060820152306080820152206719010000000000005f52601a52603a5260426018205f603a5290565b611ed890614786565b90818060081b9160ff839260f01c166002146132ac57565b6001600160d81b031983169150565b9080601f8301121561022257816020611ed893359101612a8d565b91909161012081840312610222576132ec610fd1565b926132f682610226565b84526020820135602085015260408201356001600160401b03811161022257816133219184016132bb565b604085015260608201356001600160401b03811161022257816133459184016132bb565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b03811161022257816133879184016132bb565b60e08501526101008201356001600160401b038111610222576133aa92016132bb565b610100830152565b90816020910312610222575190565b80516001600160a01b03168252611ed8916020820151602082015261010061344261341261340060408601516101206040870152610120860190610d2c565b60608601518582036060870152610d2c565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610d2c565b92015190610100818403910152610d2c565b9392916134719060409286526060602087015260608601906133c1565b930152565b9291906134716020916040865260408601906133c1565b919290925f9261349d36836132d6565b916101008101916134ae83836120f6565b929093848460208110159182613669575b5050613634575b50506001600160f81b031916600160f81b145b61360e575b6001600160f81b03198616600160f81b03613574575050604051639700320360e01b815293602092859283915f91839161351b9160048401613476565b039260581c6001600160a01b03165af190811561079d57611ed8925f92613543575b50614c74565b61356691925060203d60201161356d575b61355e8183610fa1565b8101906133b2565b905f61353d565b503d613554565b909460081b93909291600160f01b61359161202b61202488611e8d565b166135ff575f6135b16135ab6020966135db99858a614a95565b94614c74565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501613454565b03926001600160a01b03165af190811561079d57611ed8925f926135435750614c74565b6314b9743f60e01b5f5260045ffd5b9061361b92945085614898565b919391613629368284612a8d565b6101008401526134de565b6134d9929650613661945081935061364f90613656926120f6565b8091611bab565b939093923390612d88565b94905f6134c6565b7f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a92506136999161209d91611b9d565b145f806134bf565b5f516020615b7e5f395f51905f5254600a63ffffffff8260a81c16019063ffffffff82116137525763ffffffff83811692168211613743576136eb9060c81c63ffffffff16610608565b10156105c9575f516020615b7e5f395f51905f52805463ffffffff60c81b60c893841b1663ffffffff60c81b1990911617908190559081901c63ffffffff9081169160a81c16811161373a5750565b61023190612288565b63e60fd64760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88918060581c6001600160581b0360a81b5f516020615b7e5f395f51905f525416175f516020615b7e5f395f51905f5255604051906001600160581b0319168152a1565b9294909391936137de61277f85611cf7565b5f516020615b7e5f395f51905f525460a81c63ffffffff169063ffffffff8083169116146139d6575b506020810180516001600160a01b0316156139cd575b5f516020615b7e5f395f51905f525460a81c63ffffffff1663ffffffff61384b610608855163ffffffff1690565b9116148015906139a1575b6105c9576138a46138b19261386a87611cf7565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b915f196001600160a01b03841601613990575b5050506001600160f81b03198116600160f81b0361396d5760581c6001600160a01b031690813b15610222576040516306d61fe760e41b8152925f9184918291613912919060048401612703565b038183855af190811561079d575f516020615b3e5f395f51905f52926129eb92613959575b5060408051600181526001600160a01b03909216602083015290918291820190565b806107975f61396793610fa1565b5f613937565b91506001600160f81b03198216600160f91b0361245b576102319160081b614e27565b61399992613d69565b5f80806138c4565b506139ae61277f86611cf7565b63ffffffff6139c4610608855163ffffffff1690565b91161015613856565b6001815261381d565b6139e89060010163ffffffff16612288565b5f613807565b60409081516139fd8382610fa1565b600681526512d95c9b995b60d21b602082015291613a1d81519182610fa1565b6005815264181719971960d91b602082015290565b91613a59925f8080946040519687958694859363d68f602560e01b85523360048601611efb565b03926001600160a01b03165af190811561079d575f91613a77575090565b611ed891503d805f833e6107bb8183610fa1565b5f9283613a5995936040519687958694859363d68f602560e01b85523360048601611efb565b5f9060405192808385378338925af4913d82523d5f602084013e60203d830101604052565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b6001600160a01b0316803b1561022257604051630b9dfbed60e11b815260206004820152915f918391829084908290613b38906024830190610d2c565b03925af1801561079d57613b495750565b5f61023191610fa1565b8051156122e45760200190565b80518210156122e45760209160051b010190565b909593919492965f5b87811015613bcd57600190613bc78a89613bb38489613bac828060051b8c013595613ba787610946565b613b60565b51946122cd565b90613bbf868d8d6122cd565b9490936137cc565b01613b7d565b509650505050505050565b90156122e45790565b9293929091906001600160a01b03821615613d5a575b613c0090611e57565b93613c2c613c1f613c118684613bd8565b356001600160f81b03191690565b6001600160f81b03191690565b936001600160f81b03198516613d32576001600160a01b03841691613c5391908190611be7565b823b1561022257613c7d925f92836040518096819582946306d61fe760e41b845260048401612703565b03925af194851561079d57613ce1613d019360019361023198613d1e575b5060408051600381526001600160a01b03881660208201525f516020615b3e5f395f51905f529190a15b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107975f613d2c93610fa1565b5f613c9b565b50909390506001600160f81b031980841603612fea576001613d0191613ce161023196613cc5565b6001600160a01b039150613bf7565b6001600160a01b0316919082158015613f1d575b61285e5760405163d60b347f60e01b8152306004820152602081602481875afa90811561079d575f91613efe575b50613e42579080613dbb92611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613de6919060048401612703565b038183855af190811561079d575f516020615b3e5f395f51905f52926129eb92613e2e575b505b60408051600481526001600160a01b03909216602083015290918291820190565b806107975f613e3c93610fa1565b5f613e0b565b81151580613edf575b613e69575b50506129eb5f516020615b3e5f395f51905f5291613e0d565b9080613e7492611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613e9f919060048401612703565b038183855af190811561079d575f516020615b3e5f395f51905f52926129eb92613ecb575b5091613e50565b806107975f613ed993610fa1565b5f613ec4565b506001600160f81b031980613ef7613c118585613bd8565b1614613e4b565b613f17915060203d6020116107f2576107e48183610fa1565b5f613dab565b5060018314613d7d565b92613f329084615132565b81613f815750505f80916040518260208201916306d61fe760e41b8352613f6b81612e4460248201604090602081525f60208201520190565b51926001600160a01b03165af15061269a61230a565b6001600160a01b039092169190823b156102225761268b925f92836040518096819582946306d61fe760e41b845260048401612703565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091613fea82610ca883611d2e565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b91907f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3905a905f806040519361407d8561406f6020820196638a91b0e360e01b88526020602484018181520190610d2c565b03601f198101875286610fa1565b6040519361408c602086610fa1565b828552602085019583908a905f368a375193f1913d90816140d3575b815f9293523e604080516001600160a01b0390951685528115156020860152909390819081016129eb565b5f91506140a8565b6140e89093929193611e57565b80546001600160a01b031981168255600190910180546001600160a01b039092169490929091906001600160f81b0319605883901b1615614138575b505081546001600160a81b03191690915550565b61415692614147913691612a8d565b906001600160a01b031661401d565b50805460408051600381526001600160a01b0390921660208301525f516020615b5e5f395f51905f5291a15f8080614124565b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205260409081902080546001600160a01b0319811690915590921694935f516020615b5e5f395f51905f52936141fc916141f691369190612a8d565b8261401d565b50815190600282526020820152a1565b92919061423c61422a5f516020615b7e5f395f51905f525460581b90565b6001600160581b031980871691161490565b612c3d5761424c611d9e85611cf7565b9361426d61425982611cf7565b8054640100000000600160c01b0319169055565b6001600160f81b03198116600160f81b036142b057916139376141f66129eb935f516020615b5e5f395f51905f529560018060a01b039060581c16933691612a8d565b91506001600160f81b03198216600160f91b0361245b576102319160081b6151b8565b604080519091906142e48382610fa1565b6001815291601f1901825f5b8281106142fc57505050565b8060606020809385010152016142f0565b9061431782610fe1565b6143246040519182610fa1565b8281528092614335601f1991610fe1565b01905f5b82811061434557505050565b806060602080938501015201614339565b906040611ed8925f81528160208201520190610d2c565b600881901b9291906001600160f81b03198116600160f81b03614400575090614395916153d4565b90916001600160f81b031981166143b05750611ed8916154ec565b6001600160f81b031916600160f81b036143cd57611ed891615440565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b9293926001600160f81b031981166144b857509061441d91615356565b916144266142d3565b956001600160f81b0319811661445357506144409361539e565b61444983613b53565b5261269a82613b53565b6001600160f81b031916600160f81b036143cd5761447093615377565b61447984613b53565b52610231577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129eb6144ab84613b53565b5160405191829182614356565b909391906001600160f81b0319908116036143cd576144e26144e8916144dc6142d3565b9561532e565b91613ad6565b6144f485939293613b53565b526001600160f81b03198116600160f81b0361453f57501561451257565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129eb6144ab84613b53565b6001600160f81b0319166143cd576102315760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b9091906001600160a01b031680158015614614575b61285e5781156122e4575f516020615b5e5f395f51905f52926129eb926001600160f81b031982358116146145f4575b505060408051600481526001600160a01b03909216602083015290918291820190565b614605816141f69261460c94611be7565b3691612a8d565b505f806145d1565b50600181146145a1565b816040519182372090565b5f809160405136810160405236838237604051601481016040523360601b90528260143601925af190604051903d82523d5f602084013e60203d830101604052565b949184846146ec92969593966040519061468482610f85565b5f82525f602083015260408201995f8b526146e6606084019a8b925f84525f60808701525f60a0870152606060c08701526146d760e08701915f83526101008801955f87529063ffffffff60e01b169052565b6001600160a01b039091169052565b52615577565b60ff806147056146ff613c118786613bd8565b60f81c90565b160361474b5761473461471f8461472f9561474494611be7565b9490955163ffffffff60e01b1690565b611e8d565b5460101c6001600160a01b031690565b9351929190565b63b32eeb6960e01b5f5260045ffd5b8065ffffffffffff8260a01c16918215600114614778575b60d01c92565b65ffffffffffff9250614772565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615614811575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206147f4565b6148a0612c6b565b926148ab9083611bd9565b6148b491612714565b60601c602084018190525f516020615b7e5f395f51905f525460a81c63ffffffff168085526034601485810135860182810197605488013588018085019690840135959194808a01358a018086013595910193013591889161491736858e612a8d565b80519060200120913661492b908888612a8d565b805190602001203661493e908b8d612a8d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906149ca61010082610fa1565b5190206149d690614786565b607489013589016014810135906034016149ef926157e5565b986149fa94886137cc565b614a048183615984565b614a0d91611b72565b614a1691611cc1565b614a1f91613fb8565b609481013501909160348201916014013590565b80548210156122e4575f5260205f2001905f90565b356001600160c01b0319811692919060088210614a63575050565b6001600160c01b031960089290920360031b82901b16169150565b604090611ed89392815281602082015201906133c1565b93929190935f926001614aa783611e8d565b015f5b8154811015614c3757614ad8614ad0614ac38385614a33565b90549060031b1c60501b90565b908160501c90565b939095614af4614aee6146ff613c118585613bd8565b60ff1690565b808403614c095750908181614b2d614b21614b1b614b1584614b4b98611c03565b90614a48565b60c01c90565b6001600160401b031690565b600901918c610100614b43614605868686611c14565b910152611ca9565b939093955b600160f01b1615614b68575b50600101939193614aaa565b604051633894f6e760e11b81529196906020908390815f81614b988f6001600160e01b03198d1660048401614a7e565b03926001600160a01b03165af191821561079d575f92614be9575b506001600160a01b038216614bd557600191614bce91614c74565b9590614b5c565b631f24c1fb60e11b5f52600487905260245ffd5b614c0291925060203d811161356d5761355e8183610fa1565b905f614bb3565b9196909491831115614c2457630760bdcf60e11b5f5260045ffd5b614c2c6122f6565b6101008b0152614b50565b505091929460ff80614c4f6146ff613c118789613bd8565b160361474b57610100614c6c6146058561473496611ed898611be7565b910152611e8d565b908082186001600160a01b031615606083811b838501821b9081149184901b141717600114614ca4575050600190565b65ffffffffffff60a01b8216916001600160d01b03198082169083168415614d24575b65ffffffffffff60a01b84168015614d14575b858110908618028086189514614d03575b81811190821802189160018060a01b03911716171790565b65ffffffffffff60a01b9450614ceb565b5065ffffffffffff60a01b614cda565b65ffffffffffff60a01b9450614cc7565b8054905f815581614d44575050565b5f5260205f20908101905b818110614d5a575050565b5f8155600101614d4f565b356001600160501b0319811692919060168210614d80575050565b6001600160501b031960169290920360031b82901b16169150565b805468010000000000000000811015610f4a57614dbd91600182018155614a33565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701015f815290565b356001600160f01b0319811692919060028210614e0c575050565b6001600160f01b031960029290920360031b82901b16169150565b91908035016020810190359260fe8411801561512a575b61511b576001614e4d82611e8d565b0154615102575b5f1984015f5b818110614fc4575090614f19614f128387614eb2614f03614eea61202b614ee4614ede87614f359e9f8e614ed9614f439f8f90611de86127ee6127e8614ea4614eaa9489896122cd565b90611c3f565b9a8b91611e8d565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6122cd565b90611c6d565b90614df1565b614ef388611e8d565b9060f01c61ffff19825416179055565b6001600160a01b0316966122cd565b8091611c50565b6040519586939092906001600160e01b03191660208501614ddc565b03601f198101845283610fa1565b803b15610222575f614f6992604051809481926306d61fe760e41b8352600483016121e2565b038183855af190811561079d575f516020615b3e5f395f51905f52926129eb92614fb0575b5060408051600681526001600160a01b03909216602083015290918291820190565b806107975f614fbe93610fa1565b5f614f8e565b61505f9061500a6001614fd686611e8d565b01615004614ff7614ff1614feb868d8c6122cd565b90611c31565b90614d65565b6001600160501b03191690565b90614d9b565b615024611de8611de86127ee6127e8614ea4868d8c6122cd565b615032614f12838a896122cd565b60405194918591615051916001600160e01b03198a1660208501614ddc565b03601f198101855284610fa1565b803b15610222576040516306d61fe760e41b8152925f91849182908490829061508b90600483016121e2565b03925af191821561079d576001926150ee575b505f516020615b3e5f395f51905f526150e56150c46127ee6127e8614ea4868d8c6122cd565b60408051600581526001600160a01b03909216602083015290918291820190565b0390a101614e5a565b806107975f6150fc93610fa1565b5f61509e565b615116600161511083611e8d565b01614d35565b614e54565b63b62d956d60e01b5f5260045ffd5b508315614e3e565b5f516020615b3e5f395f51905f52916040916001600160a01b038216156151af575b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205284902080546001600160a01b03191693909216929092179055815190600282526020820152a1565b60019150615154565b9190803501916020830192356151cd82611e8d565b9260018401906001825401830361531f575f5b825481101561527457805f516020615b5e5f395f51905f5261526b89615249612e446141f68b61522d888d61521e614ad08f60019e614ac391614a33565b90508c8060a01b0316976122cd565b6040519485939092906001600160e01b03191660208501614ddc565b5060408051600581526001600160a01b03909216602083015290918291820190565b0390a1016151e0565b5094614f359150916152bb6102319594614f196152c095615299600161511085611e8d565b87546152b09060101c6001600160a01b0316611de8565b945f198101916122cd565b61401d565b5080545f516020615b5e5f395f51905f529061530c906152eb9060101c6001600160a01b0316611de8565b60408051600681526001600160a01b03909216602083015290918291820190565b0390a180546001600160b01b0319169055565b63013dcc8d60e31b5f5260045ffd5b91601382111561534957823560601c92601401916013190190565b63ba597e7e5f526004601cfd5b90603381111561534957813560601c92601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af1156153cb573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b918235826020118160401c176153495783016020810193813593846153f857505050565b01601f190190835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c17615349578061540057505050565b919061544b8161430d565b925f5b82811061545a57505050565b8061548460019260051b840135840160408101358101906020823592019060208101359035615377565b61548e8389613b60565b521561549b575b0161544e565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76154e46154c98389613b60565b51604051918291858352604060208401526040830190610d2c565b0390a1615495565b91906154f78161430d565b925f5b82811061550657505050565b8061553060019260051b84013584016040810135810190602082359201906020810135903561539e565b61553a8288613b60565b526155458187613b60565b50016154fa565b9092608092611ed89594835260018060a01b0316602083015260408201528160608201520190610d2c565b91606083019060016155cc615593845163ffffffff60e01b1690565b6001600160e01b0319165f9081527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f8526020526040902090565b01805493905f5b8581106155e35750505050505050565b6155f3614ad0614ac38385614a33565b6001600160a01b031660a089019081526080890194909161561c906001600160f01b0319168652565b61563661562f6146ff613c118985613bd8565b60ff168a52565b615644614aee8a5160ff1690565b8084036157b35750858181615669614b21614b1b614b156156be9b9c61569198611c03565b8c60c061568461460560208401948086526009018688611c14565b9101525160090191611ca9565b949094955b51600160f11b906156b0906001600160f01b03191661202b565b166001600160f01b03191690565b156156cd575b506001016155d3565b516156e0906001600160a01b0316611de8565b60206157066156f96156f9895163ffffffff60e01b1690565b6001600160e01b03191690565b60e08a01516101008b015160c08c015160405163184dfdbb60e11b81529586949093859384936157459390926001600160a01b0316906004860161554c565b03915afa90811561079d575f91615795575b506001600160a01b038116615781579060019161577960408a01918251614c74565b9052906156c4565b631f24c1fb60e11b5f52600482905260245ffd5b6157ad915060203d811161356d5761355e8183610fa1565b5f615757565b9094908311156157cc57630760bdcf60e11b5f5260045ffd5b6156be906157db365f88612a8d565b60c08b0152615696565b5f516020615b7e5f395f51905f52545f9493929060581b6001600160f81b03198116600160f81b036158a057916158459391615826611de860209560581c90565b9160405195869485938493637aa8f17760e11b85523060048601611efb565b03915afa90811561079d575f91615881575b505b6001600160e01b0319166374eca2c160e11b0161587257565b6362467c7760e11b5f5260045ffd5b61589a915060203d60201161200357611ffb8183610fa1565b5f615857565b9094509091906001600160f81b03198116600160f91b0361245b576020916158ce9160081b9584308861466b565b60405163392dffaf60e01b8152929792958694938593849361590193909230906001600160e01b031916600487016130ef565b03916001600160a01b03165afa90811561079d575f91615922575b50615859565b61593b915060203d60201161200357611ffb8183610fa1565b5f61591c565b1561594857565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b61599161050f8383611b72565b9060048310156159a057505050565b602c8310615b2f576159bb611de86127ee6127e88685611bc8565b602c8201358201602c604c820191013591604c8401358401946159f56159e7613c1f613c118787613bd8565b6001600160f81b0319161590565b80615a9f575b94615a3c61296b95611de895615a41956102319b956127ee9a615a51575b615a2c611de86127ee6127e88a8a611c98565b916001600160a01b031690613be1565b611c98565b602c86013595604c019491612714565b615a9a606c8701358701615a94602c604c830192013580615a7b611de86127ee6127e88488611bd9565b93615a8f856001600160a01b038a16615132565b611c7b565b91613d69565b615a19565b5091939092956040519163ecd0596160e01b835260208380615ac960048201906002602083019252565b03816001600160a01b0389165afa92831561079d57610231986127ee9761296b97611de897615a4197615a3c955f91615b10575b50959a50959b50955095509550506159fb565b615b29915060203d6020116107f2576107e48183610fa1565b5f615afd565b50506004610231911461594156fed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", - "nonce": "0xe2", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140806040523461020357602081615e4a80380380916100208285610207565b83398101031261020357516001600160a01b038116810361020357306080524660a05260a0604051610053604082610207565b6006815260208101906512d95c9b995b60d21b825260405191610077604084610207565b60058352602083019164181719971960d91b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052604051602081019063deadbeef60e01b825260048152610101602482610207565b5190516001600160581b031981169190601582106101e3575b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b031916605885901c179055604051615c0b908161023f82396080518161472c015260a0518161474f015260c051816147bf015260e051816147e50152610100518161470b0152610120518181816103b40152818161069d0152818161084301528181610a9f01528181610e1e01528181611136015281816112aa015281816113000152818161182d0152818161195d015281816125ac0152612ff30152f35b6001600160581b031960159290920360031b82901b161690505f8061011a565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761022a57604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001d575b36612ea15761001b612e70565b005b5f3560e01c8063112d3a7d1461020c578063150b7a02146102075780631626ba7e1461020257806319822f7c146101fd5780631f1b92e3146101f85780633659cfe6146101f35780633c3b752b146101ee57806352141cd9146101e957806357b3a5f4146101e45780636e6fa0c6146101df578063721e67f4146101da57806384b0196e146101d55780638dd7712f146101d057806390ef8862146101cb5780639198bdf5146101c65780639517e29f146101c15780639cfd7cff146101bc578063a65d69d4146101b7578063a71763a8146101b2578063adb610a3146101ad578063b8afe17d146101a8578063bc197c81146101a3578063c3e589781461019e578063d03c791414610199578063d691c96414610194578063e6f3d50a1461018f578063e9ae5c531461018a578063f1f7f0f914610185578063f23a6e6114610180578063f2dc691d1461017b5763fc9c5dec0361000e57611b12565b611af4565b611a9a565b611a64565b611936565b6117b8565b6116d6565b611689565b6115b6565b6114a5565b611439565b611407565b6112d9565b611295565b61123d565b61110f565b610ff8565b610ee9565b610dee565b610d50565b610cca565b610c6f565b610bbc565b610a1e565b610988565b61080d565b610665565b610380565b61031f565b6102c5565b61029f565b6001600160a01b0381160361022257565b5f80fd5b359061023182610211565b565b9181601f84011215610222578235916001600160401b038311610222576020838186019501011161022257565b6060600319820112610222576004359160243561027c81610211565b91604435906001600160401b0382116102225761029b91600401610233565b9091565b346102225760206102bb6102b236610260565b92919091611d65565b6040519015158152f35b34610222576080366003190112610222576102e1600435610211565b6102ec602435610211565b6064356001600160401b0381116102225761030b903690600401610233565b5050604051630a85bd0160e11b8152602090f35b34610222576040366003190112610222576004356024356001600160401b0381116102225760209161035861035e923690600401610233565b91611f2a565b6040516001600160e01b03199091168152f35b90816101209103126102225790565b6060366003190112610222576004356001600160401b038111610222576103ab903690600401610371565b602435604435917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632576103ef6020820135613212565b9092919084836001600160f81b0319861615610619575b82610411939461340b565b9361043661042661042184611cf7565b6120ca565b946001600160f81b031916151590565b9384806105d8575b6105c957602001516001600160a01b031690819081156104d15760019261046f61048e925f525f60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b0361053c57826104e0575b50506104d157816104bb925b6104bf575b506040519081529081906020820190565b0390f35b3490349034903490335af1505f6104aa565b631a0a9b9f60e21b5f5260045ffd5b61053592506105319161051561050f6105096104fe61052a95611d2e565b9360608101906120f6565b90611b72565b90611cc1565b63ffffffff60e01b165f5260205260405f2090565b5460ff1690565b1590565b5f80610499565b82919291610596575b506104d15761050981606061055b9301906120f6565b638dd7712f60e01b916001600160e01b03199161057791611cc1565b160361058757816104bb926104a5565b63dbbb044b60e01b5f5260045ffd5b6105c3915061052a6105aa61053192611d2e565b61051561050f6105bd60608801886120f6565b90611b61565b5f610545565b633ab3447f60e11b5f5260045ffd5b50805163ffffffff1663ffffffff6106116106085f516020615beb5f395f51905f525463ffffffff9060c81c1690565b63ffffffff1690565b91161061043e565b5f516020615beb5f395f51905f525460581b9250610406565b6348f5c3ed60e01b5f5260045ffd5b6004359063ffffffff8216820361022257565b359063ffffffff8216820361022257565b602036600319011261022257610679610641565b61069a6106945f516020615beb5f395f51905f525460581b90565b60581c90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610803575b156107f95760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f916107ca575b50156106325760405163d68f602560e01b8152915f838061072f363433600485016121bd565b038183865af192831561079d575f936107a2575b5061074d90613624565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061077990600483016121e2565b03925af1801561079d5761078957005b806107975f61001b93610fa1565b80610d22565b611f1f565b61074d9193506107c3903d805f833e6107bb8183610fa1565b81019061215b565b9290610743565b6107ec915060203d6020116107f2575b6107e48183610fa1565b810190612128565b5f610709565b503d6107da565b5061001b90613624565b50303314156106cd565b60203660031901126102225760043561082581610211565b6108406106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061093c575b156109325760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f91610913575b50156106325760405163d68f602560e01b8152915f83806108d5363433600485016121bd565b038183865af192831561079d575f936108f3575b5061074d906121f3565b61074d91935061090c903d805f833e6107bb8183610fa1565b92906108e9565b61092c915060203d6020116107f2576107e48183610fa1565b5f6108af565b5061001b906121f3565b5030331415610873565b6001600160581b031981160361022257565b9181601f84011215610222578235916001600160401b038311610222576020808501948460051b01011161022257565b346102225760a0366003190112610222576004356109a581610946565b6024356109b181610211565b6044356001600160401b038111610222576109d0903690600401610233565b6064939193356001600160401b038111610222576109f2903690600401610233565b91608435956001600160401b03871161022257610a1661001b973690600401610958565b969095612339565b608036600319011261022257600435610a3681610946565b602435610a4281610211565b6044356001600160401b03811161022257610a61903690600401610233565b6064356001600160401b03811161022257610a80903690600401610233565b91610a9c6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ba0575b15610b915760405163ecd0596160e01b81526004808201526001600160a01b03919091169490602081602481895afa90811561079d575f91610b72575b50156106325760405163d68f602560e01b8152955f8780610b32363433600485016121bd565b0381838a5af196871561079d575f97610b52575b5061074d959697612482565b61074d969750610b6b903d805f833e6107bb8183610fa1565b9695610b46565b610b8b915060203d6020116107f2576107e48183610fa1565b5f610b0c565b50919361001b95939193612482565b5030331415610acf565b6001600160e01b031981160361022257565b34610222576020366003190112610222576104bb610bfd600435610bdf81610baa565b5f60408051610bed81610f2f565b8281528260208201520152611e57565b600160405191610c0c83610f2f565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b3461022257604036600319011261022257602060ff610cbe600435610c9381610946565b610ca860243591610ca383610baa565b611d2e565b9063ffffffff60e01b165f5260205260405f2090565b54166040519015158152f35b34610222576020366003190112610222576020610cff600435610cec81610211565b5f604051610cf981610f4f565b5261304f565b60405190610d0c82610f4f565b546001600160a01b031690819052604051908152f35b5f91031261022257565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610222575f36600319011261022257610d8f610d9d610d6e613971565b604092919251938493600f60f81b855260e0602086015260e0850190610d2c565b908382036040850152610d2c565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610dd5575050500390f35b8251845285945060209384019390920191600101610dc7565b6040366003190112610222576004356001600160401b03811161022257610e19903690600401610371565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632575f908152602081905260409020546001600160a01b03169060609060018314159081610eb9575b610e8e610e87826060610e959401906120f6565b8091611b80565b9030613a59565b5015610eaa57610ea157005b61001b91613a7e565b63f21e646b60e01b5f5260045ffd5b9150610e95610e8e610e87610edf610ed7610e8760608801886120f6565b903489613a0e565b9492505050610e73565b34610222575f36600319011261022257602063ffffffff5f516020615beb5f395f51905f525460c81c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610f4a57604052565b610f1b565b602081019081106001600160401b03821117610f4a57604052565b604081019081106001600160401b03821117610f4a57604052565b61012081019081106001600160401b03821117610f4a57604052565b90601f801991011681019081106001600160401b03821117610f4a57604052565b60405190610231604083610fa1565b6040519061023161012083610fa1565b6001600160401b038111610f4a5760051b60200190565b6080366003190112610222576004356001600160401b03811161022257611023903690600401610958565b602435916001600160401b038311610222573660238401121561022257826004013561104e81610fe1565b9361105c6040519586610fa1565b8185526024602086019260061b8201019036821161022257602401915b8183106110ce575050506044356001600160401b038111610222576110a2903690600401610958565b90606435946001600160401b038611610222576110c661001b963690600401610958565b959094612587565b60408336031261022257602060409182516110e881610f6a565b6110f186610654565b81528286013561110081610211565b83820152815201920191611079565b61111836610260565b6111336106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611233575b156112285760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f91611209575b50156106325760405163d68f602560e01b8152935f85806111c9363433600485016121bd565b038183885af194851561079d575f956111e9575b5061074d939495612754565b61074d949550611202903d805f833e6107bb8183610fa1565b94936111dd565b611222915060203d6020116107f2576107e48183610fa1565b5f6111a3565b509161001b93612754565b5030331415611166565b34610222575f366003190112610222576104bb60405161125e604082610fa1565b601681527535b2b93732b61730b23b30b731b2b2173b181719971960511b6020820152604051918291602083526020830190610d2c565b34610222575f366003190112610222576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6112e236610260565b6112fd6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113fd575b156113f25760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f916113d3575b50156106325760405163d68f602560e01b8152935f8580611393363433600485016121bd565b038183885af194851561079d575f956113b3575b5061074d939495612aad565b61074d9495506113cc903d805f833e6107bb8183610fa1565b94936113a7565b6113ec915060203d6020116107f2576107e48183610fa1565b5f61136d565b509161001b93612aad565b5030331415611330565b34610222575f36600319011261022257602063ffffffff5f516020615beb5f395f51905f525460a81c16604051908152f35b3461022257602036600319011261022257604061146960043561145b81610946565b611463612c55565b50611cf7565b81519061147582610f6a565b5463ffffffff81168083526001600160a01b03602092831c81169383019384528451918252925190921690820152f35b346102225760a0366003190112610222576114c1600435610211565b6114cc602435610211565b6044356001600160401b038111610222576114eb903690600401610958565b50506064356001600160401b0381116102225761150c903690600401610958565b50506084356001600160401b0381116102225761152d903690600401610233565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a09092019201905f5b8181106115965750505090565b82516001600160501b031916845260209384019390920191600101611589565b34610222576020366003190112610222576115f56004356115d681610baa565b6060604080516115e581610f2f565b5f81525f60208201520152611e8d565b60016040519161160483610f2f565b805461ffff60f01b8160f01b168452828060a01b039060101c16602084015201906040519182602082549182815201915f5260205f20905f5b818110611666576104bb858761165581880382610fa1565b604082015260405191829182611541565b825460501b6001600160501b03191684526020909301926001928301920161163d565b346102225760203660031901126102225760206102bb600435612c6d565b9060406003198301126102225760043591602435906001600160401b0382116102225761029b91600401610233565b6116df366116a7565b90916001600160a01b036116f23361304f565b54169182156117a95760609060018414159485611792575b61171492936142f0565b92611782575b50506040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061175357505050500390f35b919360019193955060206117728192603f198a82030186528851610d2c565b9601920192018594939192611744565b61178b91613a7e565b5f8061171a565b61171492506117a23634876139b5565b925061170a565b63710c949760e01b5f5260045ffd5b6060366003190112610222576004356117d081610946565b6024356001600160401b038111610222576117ef903690600401610233565b6044356001600160401b0381116102225761180e903690600401610233565b9061182a6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061192c575b1561191f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169390602081602481885afa90811561079d575f91611900575b50156106325760405163d68f602560e01b8152945f86806118c0363433600485016121bd565b038183895af195861561079d575f966118e0575b5061074d949596612d45565b61074d9596506118f9903d805f833e6107bb8183610fa1565b95946118d4565b611919915060203d6020116107f2576107e48183610fa1565b5f61189a565b5091909261001b94612d45565b503033141561185d565b61193f366116a7565b61195a6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611a5a575b15611a4f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169190602081602481865afa90811561079d575f91611a30575b50156106325760405163d68f602560e01b8152925f84806119f0363433600485016121bd565b038183875af193841561079d575f94611a10575b5061074d929394612d5a565b61074d939450611a29903d805f833e6107bb8183610fa1565b9392611a04565b611a49915060203d6020116107f2576107e48183610fa1565b5f6119ca565b509061001b92612d5a565b503033141561198d565b34610222575f3660031901126102225760205f516020615beb5f395f51905f525460581b604051906001600160581b0319168152f35b346102225760a036600319011261022257611ab6600435610211565b611ac1602435610211565b6084356001600160401b03811161022257611ae0903690600401610233565b505060405163f23a6e6160e01b8152602090f35b346102225760203660031901126102225760206102bb600435612d65565b34610222576040366003190112610222576004356001600160401b03811161022257611b59611b476020923690600401610371565b60243590611b5482610211565b612d72565b604051908152f35b906008116102225760040190600490565b906004116102225790600490565b909291928360041161022257831161022257600401916003190190565b906020116102225790602090565b90929192836020116102225783116102225760200191601f190190565b906018116102225760040190601490565b906014116102225790601490565b909291928360011161022257831161022257600101915f190190565b906009116102225760010190600890565b909291928360091161022257831161022257600901916008190190565b906016116102225790601690565b906016116102225760020190601490565b909291928360161161022257831161022257601601916015190190565b906002116102225790600290565b909291928360141161022257831161022257601401916013190190565b90602c116102225760180190601490565b90939293848311610222578411610222578101920390565b356001600160e01b0319811692919060048210611cdc575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85060205260405f2090565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85160205260405f2090565b90929060018103611db457506001600160a01b0392611dae9250611d9e915060581b600160581b600160f81b0316600160f81b17611cf7565b5460201c6001600160a01b031690565b16151590565b60028103611df457506001600160a01b0392611dae9250611de89150611ddb90841661304f565b546001600160a01b031690565b6001600160a01b031690565b600303611e3457611e15611e1061050f600193611e2395611b72565b611e57565b01546001600160a01b031690565b6001600160a01b0390811691161490565b5050505f90565b359060208110611e49575090565b5f199060200360031b1b1690565b63ffffffff60e01b165f527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b60205260405f2090565b63ffffffff60e01b165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85260205260405f2090565b908160209103126102225751611ed881610baa565b90565b908060209392818452848401375f828201840152601f01601f1916010190565b611ed8949260609260018060a01b0316825260208201528160408201520191611edb565b6040513d5f823e3d90fd5b91611f3491613087565b919080836001600160f81b03198416156120aa575b6020811015918261206d575b82612057575b506001600160a01b039050611f75611de8611d9e86611cf7565b16156104d1576001600160f81b03198316600160f81b0361200a5790611fa26020949392611fc0966131b8565b604051637aa8f17760e11b8152958694859384933360048601611efb565b039160581c6001600160a01b03165afa90811561079d575f91611fe1575090565b611ed8915060203d602011612003575b611ffb8183610fa1565b810190611ec3565b503d611ff1565b929160081b93600160f11b61203861202b61202488611e8d565b5460f01b90565b6001600160f01b03191690565b1661204857611ed8943390613104565b635b71057960e01b5f5260045ffd5b819295506120659350611bab565b925f80611f5b565b91507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a6120a361209d8385611b9d565b90611e3b565b1491611f55565b92506120c45f516020615beb5f395f51905f525460581b90565b92611f49565b906040516120d781610f6a565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561022257018035906001600160401b0382116102225760200191813603831361022257565b90816020910312610222575180151581036102225790565b6001600160401b038111610f4a57601f01601f191660200190565b602081830312610222578051906001600160401b038211610222570181601f820112156102225780519061218e82612140565b9261219c6040519485610fa1565b8284526020838301011161022257815f9260208093018386015e8301015290565b611ed8939260609260018060a01b03168252602082015281604082015201905f611edb565b906020611ed8928181520190610d2c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2565b1561224d57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b5f516020615beb5f395f51905f52805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b5f52603260045260245ffd5b908210156122e45761029b9160051b8101906120f6565b6122b9565b908092918237015f815290565b60405190612305602083610fa1565b5f8252565b3d15612334573d9061231b82612140565b916123296040519384610fa1565b82523d5f602084013e565b606090565b949392919096959661237c6001600160581b03196123756123685f516020615beb5f395f51905f525460581b90565b6001600160581b03191690565b1615612246565b6001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061246a575b61245b57856123b5612402976136e9565b6123d66123c0610fc2565b60018152925b6001600160a01b03166020840152565b5f516020615beb5f395f51905f52805463ffffffff60a81b1916600160a81b17905561374f565b61374f565b5f5b81811061241057505050565b5f8061241d8385876122cd565b9061242d604051809381936122e9565b039082305af161243b61230a565b501561244957600101612404565b636534eae560e11b5f5260045260245ffd5b6361c4e91b60e11b5f5260045ffd5b506001600160f81b03198616600160f91b14156123a4565b94939291906001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061252d575b61245b576124bc866136e9565b6001600160a01b036124d0611d9e88611cf7565b16156124df575b505050505050565b612522956123fd6125055f516020615beb5f395f51905f525463ffffffff9060a81c1690565b926123c660405194612518604087610fa1565b63ffffffff168552565b5f80808080806124d7565b506001600160f81b03198616600160f91b14156124af565b9060405161255281610f2f565b82546001600160a01b03908116825260019390930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946125a96106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806126f9575b156126ea5760405163ecd0596160e01b81526004808201526001600160a01b039190911695906020816024818a5afa90811561079d575f916126cb575b50156106325760405163d68f602560e01b8152965f888061263f363433600485016121bd565b0381838b5af197881561079d575f986126ab575b5061265f969798613af7565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061268b90600483016121e2565b03925af1801561079d5761269d575b50565b806107975f61023193610fa1565b61265f9798506126c4903d805f833e6107bb8183610fa1565b9796612653565b6126e4915060203d6020116107f2576107e48183610fa1565b5f612619565b50919390929461023196613af7565b50303314156125dc565b916020611ed8938181520191611edb565b356bffffffffffffffffffffffff19811692919060148210612734575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b9091906001810361289957509060549060581b600160581b600160f81b0316600160f81b179161279061278684611cf7565b5463ffffffff1690565b5f516020615beb5f395f51905f525460a81c63ffffffff169063ffffffff808316911614612881575b506128226127fb611de86127f56127ef6127e85f516020615beb5f395f51905f525463ffffffff9060a81c1690565b9886611bd9565b90612714565b60601c90565b612812612806610fc2565b63ffffffff9097168752565b6001600160a01b03166020860152565b61284d601482019461283486806120f6565b61284460348694939401896120f6565b9390928861374f565b0191600461285b84836120f6565b905014612868575b505050565b61050f6105096102319461287b936120f6565b90613f3b565b6128939060010163ffffffff16612288565b5f6127b9565b600281036128ee5750610231926034826128e16128c6611de86127f56127ef60146128e899019786611bd9565b80966128d286806120f6565b916001600160a01b0316613eaa565b01906120f6565b91613cec565b9091906003810361295957506128e8906038612951611de86127f56127ef6102319861294b60188a01978a612939611de86127f56127ef8761293361050f8288611b72565b95611bc8565b6129438b806120f6565b939092613b64565b88611bc8565b9301906120f6565b9091600482036129ee576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b03925af192831561079d575f516020615bab5f395f51905f52936129da575b50604080519182526001600160a01b03909216602082015290819081015b0390a1565b806107975f6129e893610fa1565b5f6129b7565b60058203612a2b576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b60068203612a68576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b631092ef5760e11b5f5260045ffd5b929192612a8382612140565b91612a916040519384610fa1565b829481845281830111610222578281602093845f960137010152565b60018103612ad6575061269a92919060581b600160581b600160f81b0316600160f81b1761418f565b60028103612af3575061269a9291906001600160a01b031661410c565b60038103612b1e575050612b188280612b1261050f61269a9686611b72565b93611b80565b9161405e565b909160048203612bb057612b7d6129b7915f516020615bcb5f395f51905f5295612b565f516020615beb5f395f51905f525460581b90565b612b62611d9e82611cf7565b6001600160a01b03888116911614612b83575b503691612a77565b83613fa0565b612b8f612baa91611cf7565b8054640100000000600160c01b031916640100000000179055565b5f612b75565b60058203612c36575f516020615beb5f395f51905f525460581b5b612bd861209d8684611b9d565b906001600160f81b03198116600160f91b14612c0e575b5050612b7d6129b7915f516020615bcb5f395f51905f52953691612a77565b60081b6001600160e01b03191614612c27575f80612bef565b6313002bdd60e31b5f5260045ffd5b60068203612a68575f516020615beb5f395f51905f525460581b612bcb565b60405190612c6282610f6a565b5f6020838281520152565b612c81818060081b918160301b9160501b90565b929091906001600160f81b03198116600160f81b14159081612d31575b81612d1c575b81612d03575b50611e345760ff60f81b16600160f81b8114159081612cf9575b50612cf3576001600160e01b031916612cee576001600160501b031916612cea57600190565b5f90565b505f90565b50505f90565b905015155f612cc4565b6001600160f81b031916607f60f91b141590505f612caa565b6001600160f81b031980821614159150612ca4565b6001600160f81b0319811615159150612c9e565b91612d559161023195949361418f565b61450f565b9061269a92916142f0565b60071115612cea57600190565b612e2e90612e6a90612d8d6001600160a01b03823516611de8565b90612e3c6020820135612e2e612daf612da960408601866120f6565b906145a1565b93612dc0612da960608301836120f6565b90608081013560a082013590612de2612da960c08501359460e08101906120f6565b93604051988997602089019b8c94919260e0969399989794919961010087019a60018060a01b03168752602087015260408601526060850152608084015260a083015260c08201520152565b03601f198101835282610fa1565b51902060408051602081019283526001600160a01b03909516908501525f6060850152929182906080820190565b51902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b612ebd612eb85f356001600160e01b031916611e57565b612545565b80516001600160a01b0390612ed3908216611de8565b16156130405780516060906001600160a01b0390612ef2908216611de8565b1660018114158061302f575b15612fe35750508051612f1d906001600160a01b0316369034906139b5565b60408201516001600160f81b03191680612fa357506020820151612f49906001600160a01b03166145ac565b92905b15612f9b57516001600160a01b03169060018214158281612f86575b50612f76575b825160208401f35b612f7f91613a7e565b5f80612f6e565b6001600160a01b03908116141590505f612f68565b825160208401fd5b6001600160f81b031990811603612fd4576020820151612fcd906001600160a01b03163690613a34565b9290612f4c565b632d6a6bb760e01b5f5260045ffd5b6001600160a01b0303612f1d57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612f1d576348f5c3ed60e01b5f5260045ffd5b506001600160a01b03811415612efe565b631cd4b64760e21b5f5260045ffd5b6001600160a01b03165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b9182358060f81c805f146130cb57806001146130be576002146130a8575f80fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b505060015f9301915f190190565b9092608092611ed89694835260018060a01b0316602083015260408201528160608201520191611edb565b61311d65ffffffffffff939561312997958785856145ee565b969295919890986146dd565b50911642109081156131a6575b506131925761314a613174916020976131b8565b60405163392dffaf60e01b8152978896879586959193916001600160e01b031916600487016130d9565b03916001600160a01b03165afa90811561079d575f91611fe1575090565b506001600160e01b03199695505050505050565b65ffffffffffff91501642115f613136565b60405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8383526040820152604081526131f7606082610fa1565b519020901561320957611ed89061481b565b611ed890614709565b90818060081b9160ff839260f01c1660021461322a57565b6001600160d81b031983169150565b9080601f8301121561022257816020611ed893359101612a77565b919091610120818403126102225761326a610fd1565b9261327482610226565b84526020820135602085015260408201356001600160401b038111610222578161329f918401613239565b604085015260608201356001600160401b03811161022257816132c3918401613239565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b0381116102225781613305918401613239565b60e08501526101008201356001600160401b038111610222576133289201613239565b610100830152565b90816020910312610222575190565b80516001600160a01b03168252611ed891602082015160208201526101006133c061339061337e60408601516101206040870152610120860190610d2c565b60608601518582036060870152610d2c565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610d2c565b92015190610100818403910152610d2c565b9392916133ef90604092865260606020870152606086019061333f565b930152565b9291906133ef60209160408652604086019061333f565b9290925f9261341a3682613254565b916134296101008301836120f6565b918193835f936020821015806135ef575b6135b0575b5050506001600160f81b031916600160f81b145b613589575b506001600160f81b03198616600160f81b036134ef575050604051639700320360e01b815293602092859283915f91839161349691600484016133f4565b039260581c6001600160a01b03165af190811561079d57611ed8925f926134be575b50614c75565b6134e191925060203d6020116134e8575b6134d98183610fa1565b810190613330565b905f6134b8565b503d6134cf565b909460081b93909291600160f01b61350c61202b61202488611e8d565b1661357a575f61352c61352660209661355699858a614a96565b94614c75565b604051630ccab7a160e01b8152979096889586948593926001600160e01b031916600485016133d2565b03926001600160a01b03165af190811561079d57611ed8925f926134be5750614c75565b6314b9743f60e01b5f5260045ffd5b9161359693955086614890565b9193916135a4368284612a77565b6101008401525f613458565b9195509250829196506135c39350611bab565b90916135d0368385612a77565b6101008501526134536135e66001923390612d72565b95905f8061343f565b507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a61361e61209d8484611b9d565b1461343a565b5f516020615beb5f395f51905f5254600a63ffffffff8260a81c16019063ffffffff82116136d55763ffffffff838116921682116136c65761366e9060c81c63ffffffff16610608565b10156105c9575f516020615beb5f395f51905f52805463ffffffff60c81b60c893841b1663ffffffff60c81b1990911617908190559081901c63ffffffff9081169160a81c1681116136bd5750565b61023190612288565b63e60fd64760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88918060581c6001600160581b0360a81b5f516020615beb5f395f51905f525416175f516020615beb5f395f51905f5255604051906001600160581b0319168152a1565b92949093919361376161278685611cf7565b5f516020615beb5f395f51905f525460a81c63ffffffff169063ffffffff808316911614613959575b506020810180516001600160a01b031615613950575b5f516020615beb5f395f51905f525460a81c63ffffffff1663ffffffff6137ce610608855163ffffffff1690565b911614801590613924575b6105c957613827613834926137ed87611cf7565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b915f196001600160a01b03841601613913575b5050506001600160f81b03198116600160f81b036138f05760581c6001600160a01b031690813b15610222576040516306d61fe760e41b8152925f9184918291613895919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d5926138dc575b5060408051600181526001600160a01b03909216602083015290918291820190565b806107975f6138ea93610fa1565b5f6138ba565b91506001600160f81b03198216600160f91b0361245b576102319160081b614e5d565b61391c92613cec565b5f8080613847565b5061393161278686611cf7565b63ffffffff613947610608855163ffffffff1690565b911610156137d9565b600181526137a0565b61396b9060010163ffffffff16612288565b5f61378a565b60409081516139808382610fa1565b600681526512d95c9b995b60d21b6020820152916139a081519182610fa1565b6005815264181719971960d91b602082015290565b916139dc925f8080946040519687958694859363d68f602560e01b85523360048601611efb565b03926001600160a01b03165af190811561079d575f916139fa575090565b611ed891503d805f833e6107bb8183610fa1565b5f92836139dc95936040519687958694859363d68f602560e01b85523360048601611efb565b5f9060405192808385378338925af4913d82523d5f602084013e60203d830101604052565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b6001600160a01b0316803b1561022257604051630b9dfbed60e11b815260206004820152915f918391829084908290613abb906024830190610d2c565b03925af1801561079d57613acc5750565b5f61023191610fa1565b8051156122e45760200190565b80518210156122e45760209160051b010190565b909593919492965f5b87811015613b5057600190613b4a8a89613b368489613b2f828060051b8c013595613b2a87610946565b613ae3565b51946122cd565b90613b42868d8d6122cd565b94909361374f565b01613b00565b509650505050505050565b90156122e45790565b9293929091906001600160a01b03821615613cdd575b613b8390611e57565b93613baf613ba2613b948684613b5b565b356001600160f81b03191690565b6001600160f81b03191690565b936001600160f81b03198516613cb5576001600160a01b03841691613bd691908190611be7565b823b1561022257613c00925f92836040518096819582946306d61fe760e41b845260048401612703565b03925af194851561079d57613c64613c849360019361023198613ca1575b5060408051600381526001600160a01b03881660208201525f516020615bab5f395f51905f529190a15b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107975f613caf93610fa1565b5f613c1e565b50909390506001600160f81b031980841603612fd4576001613c8491613c6461023196613c48565b6001600160a01b039150613b7a565b6001600160a01b0316919082158015613ea0575b6128635760405163d60b347f60e01b8152306004820152602081602481875afa90811561079d575f91613e81575b50613dc5579080613d3e92611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613d69919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592613db1575b505b60408051600481526001600160a01b03909216602083015290918291820190565b806107975f613dbf93610fa1565b5f613d8e565b81151580613e62575b613dec575b50506129d55f516020615bab5f395f51905f5291613d90565b9080613df792611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613e22919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592613e4e575b5091613dd3565b806107975f613e5c93610fa1565b5f613e47565b506001600160f81b031980613e7a613b948585613b5b565b1614613dce565b613e9a915060203d6020116107f2576107e48183610fa1565b5f613d2e565b5060018314613d00565b92613eb59084615169565b81613f045750505f80916040518260208201916306d61fe760e41b8352613eee81612e2e60248201604090602081525f60208201520190565b51926001600160a01b03165af15061269a61230a565b6001600160a01b039092169190823b156102225761268b925f92836040518096819582946306d61fe760e41b845260048401612703565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091613f6d82610ca883611d2e565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b91907f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3905a905f806040519361400085613ff26020820196638a91b0e360e01b88526020602484018181520190610d2c565b03601f198101875286610fa1565b6040519361400f602086610fa1565b828552602085019583908a905f368a375193f1913d9081614056575b815f9293523e604080516001600160a01b0390951685528115156020860152909390819081016129d5565b5f915061402b565b61406b9093929193611e57565b80546001600160a01b031981168255600190910180546001600160a01b039092169490929091906001600160f81b0319605883901b16156140bb575b505081546001600160a81b03191690915550565b6140d9926140ca913691612a77565b906001600160a01b0316613fa0565b50805460408051600381526001600160a01b0390921660208301525f516020615bcb5f395f51905f5291a15f80806140a7565b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205260409081902080546001600160a01b0319811690915590921694935f516020615bcb5f395f51905f529361417f9161417991369190612a77565b82613fa0565b50815190600282526020820152a1565b9291906141bf6141ad5f516020615beb5f395f51905f525460581b90565b6001600160581b031980871691161490565b612c27576141cf611d9e85611cf7565b936141f06141dc82611cf7565b8054640100000000600160c01b0319169055565b6001600160f81b03198116600160f81b0361423357916138ba6141796129d5935f516020615bcb5f395f51905f529560018060a01b039060581c16933691612a77565b91506001600160f81b03198216600160f91b0361245b576102319160081b6151ef565b604080519091906142678382610fa1565b6001815291601f1901825f5b82811061427f57505050565b806060602080938501015201614273565b9061429a82610fe1565b6142a76040519182610fa1565b82815280926142b8601f1991610fe1565b01905f5b8281106142c857505050565b8060606020809385010152016142bc565b906040611ed8925f81528160208201520190610d2c565b600881901b9291906001600160f81b03198116600160f81b036143835750906143189161542d565b90916001600160f81b031981166143335750611ed891615545565b6001600160f81b031916600160f81b0361435057611ed891615499565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b9293926001600160f81b0319811661443b5750906143a0916153af565b916143a9614256565b956001600160f81b031981166143d657506143c3936153f7565b6143cc83613ad6565b5261269a82613ad6565b6001600160f81b031916600160f81b03614350576143f3936153d0565b6143fc84613ad6565b52610231577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129d561442e84613ad6565b51604051918291826142d9565b909391906001600160f81b0319908116036143505761446561446b9161445f614256565b95615387565b91613a59565b61447785939293613ad6565b526001600160f81b03198116600160f81b036144c257501561449557565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129d561442e84613ad6565b6001600160f81b031916614350576102315760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b9091906001600160a01b031680158015614597575b6128635781156122e4575f516020615bcb5f395f51905f52926129d5926001600160f81b03198235811614614577575b505060408051600481526001600160a01b03909216602083015290918291820190565b614588816141799261458f94611be7565b3691612a77565b505f80614554565b5060018114614524565b816040519182372090565b5f809160405136810160405236838237604051601481016040523360601b90528260143601925af190604051903d82523d5f602084013e60203d830101604052565b9491848461466f92969593966040519061460782610f85565b5f82525f602083015260408201995f8b52614669606084019a8b925f84525f60808701525f60a0870152606060c087015261465a60e08701915f83526101008801955f87529063ffffffff60e01b169052565b6001600160a01b039091169052565b526155d0565b60ff80614688614682613b948786613b5b565b60f81c90565b16036146ce576146b76146a2846146b2956146c794611be7565b9490955163ffffffff60e01b1690565b611e8d565b5460101c6001600160a01b031690565b9351929190565b63b32eeb6960e01b5f5260045ffd5b8065ffffffffffff8260a01c169182156001146146fb575b60d01c92565b65ffffffffffff92506146f5565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615614794575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220614777565b60a0614825613971565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015260408201525f6060820152306080820152206719010000000000005f52601a52603a526042601820905f603a52565b9190939293601481019160141161022257803560601c928291906148b2612c55565b602081018690525f516020615beb5f395f51905f525460a81c63ffffffff168082526001600160a01b03909616979091906148ed85806120f6565b6148f6916145a1565b9860348501996149068b886120f6565b61490f916145a1565b90605487019961491f8b8a6120f6565b614928916145a1565b604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505602082019081526001600160581b03198a169282019290925263ffffffff9390931660608401526001600160a01b0395909516608083015260a082019290925260c081019290925260e08083019190915281526149ac61010082610fa1565b519020905f1461050961029b98614a0d6094986128e1976149ee61287b9761050f97614a26576149db9061481b565b6149e860748d01856120f6565b9161583e565b9e614a046149fc84806120f6565b9290946120f6565b9390928a61374f565b614a20614a1a828b6120f6565b906159dd565b886120f6565b614a2f90614709565b6149db565b80548210156122e4575f5260205f2001905f90565b356001600160c01b0319811692919060088210614a64575050565b6001600160c01b031960089290920360031b82901b16169150565b604090611ed893928152816020820152019061333f565b93929190935f926001614aa883611e8d565b015f5b8154811015614c3857614ad9614ad1614ac48385614a34565b90549060031b1c60501b90565b908160501c90565b939095614af5614aef614682613b948585613b5b565b60ff1690565b808403614c0a5750908181614b2e614b22614b1c614b1684614b4c98611c03565b90614a49565b60c01c90565b6001600160401b031690565b600901918c610100614b44614588868686611c14565b910152611ca9565b939093955b600160f01b1615614b69575b50600101939193614aab565b604051633894f6e760e11b81529196906020908390815f81614b998f6001600160e01b03198d1660048401614a7f565b03926001600160a01b03165af191821561079d575f92614bea575b506001600160a01b038216614bd657600191614bcf91614c75565b9590614b5d565b631f24c1fb60e11b5f52600487905260245ffd5b614c0391925060203d81116134e8576134d98183610fa1565b905f614bb4565b9196909491831115614c2557630760bdcf60e11b5f5260045ffd5b614c2d6122f6565b6101008b0152614b51565b505091929460ff80614c50614682613b948789613b5b565b16036146ce57610100614c6d614588856146b796611ed898611be7565b910152611e8d565b908082186001600160a01b031615606083811b838501821b9081149184901b141717600114614ca5575050600190565b65ffffffffffff60a01b8216916001600160d01b03198082169083168415614d25575b65ffffffffffff60a01b84168015614d15575b858110908618028086189514614d04575b81811190821802189160018060a01b03911716171790565b65ffffffffffff60a01b9450614cec565b5065ffffffffffff60a01b614cdb565b65ffffffffffff60a01b9450614cc8565b903590601e198136030182121561022257018035906001600160401b03821161022257602001918160051b3603831361022257565b8054905f815581614d7a575050565b5f5260205f20908101905b818110614d90575050565b5f8155600101614d85565b356001600160501b0319811692919060168210614db6575050565b6001600160501b031960169290920360031b82901b16169150565b805468010000000000000000811015610f4a57614df391600182018155614a34565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701015f815290565b356001600160f01b0319811692919060028210614e42575050565b6001600160f01b031960029290920360031b82901b16169150565b9190614e699080614d36565b9260fe84118015615161575b615152576001614e8482611e8d565b0154615139575b5f1984015f5b818110614ffb575090614f50614f498387614ee9614f3a614f2161202b614f1b614f1587614f6c9e9f8e614f10614f7a9f8f90611de86127f56127ef614edb614ee19489896122cd565b90611c3f565b9a8b91611e8d565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6122cd565b90611c6d565b90614e27565b614f2a88611e8d565b9060f01c61ffff19825416179055565b6001600160a01b0316966122cd565b8091611c50565b6040519586939092906001600160e01b03191660208501614e12565b03601f198101845283610fa1565b803b15610222575f614fa092604051809481926306d61fe760e41b8352600483016121e2565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592614fe7575b5060408051600681526001600160a01b03909216602083015290918291820190565b806107975f614ff593610fa1565b5f614fc5565b61509690615041600161500d86611e8d565b0161503b61502e615028615022868d8c6122cd565b90611c31565b90614d9b565b6001600160501b03191690565b90614dd1565b61505b611de8611de86127f56127ef614edb868d8c6122cd565b615069614f49838a896122cd565b60405194918591615088916001600160e01b03198a1660208501614e12565b03601f198101855284610fa1565b803b15610222576040516306d61fe760e41b8152925f9184918290849082906150c290600483016121e2565b03925af191821561079d57600192615125575b505f516020615bab5f395f51905f5261511c6150fb6127f56127ef614edb868d8c6122cd565b60408051600581526001600160a01b03909216602083015290918291820190565b0390a101614e91565b806107975f61513393610fa1565b5f6150d5565b61514d600161514783611e8d565b01614d6b565b614e8b565b63b62d956d60e01b5f5260045ffd5b508315614e75565b5f516020615bab5f395f51905f52916040916001600160a01b038216156151e6575b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205284902080546001600160a01b03191693909216929092179055815190600282526020820152a1565b6001915061518b565b91906151fa83611e8d565b916152058280614d36565b9190506001840191600183540103615378575f5b82548110156152b657805f516020615bcb5f395f51905f526152ad8661528b612e2e6141798c61526f88615269615259614ad18f60019e614ac491614a34565b90508c8060a01b03169780614d36565b906122cd565b6040519485939092906001600160e01b03191660208501614e12565b5060408051600581526001600160a01b03909216602083015290918291820190565b0390a101615219565b509361531991506102319392615314614f6c926152d7600161514783611e8d565b8554614f50906152f29060101c6001600160a01b0316611de8565b936153096153008280614d36565b91909280614d36565b5f19019290506122cd565b613fa0565b5080545f516020615bcb5f395f51905f5290615365906153449060101c6001600160a01b0316611de8565b60408051600681526001600160a01b03909216602083015290918291820190565b0390a180546001600160b01b0319169055565b63013dcc8d60e31b5f5260045ffd5b9160138211156153a257823560601c92601401916013190190565b63ba597e7e5f526004601cfd5b9060338111156153a257813560601c92601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af115615424573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b918235826020118160401c176153a257830160208101938135938461545157505050565b01601f190190835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c176153a2578061545957505050565b91906154a481614290565b925f5b8281106154b357505050565b806154dd60019260051b8401358401604081013581019060208235920190602081013590356153d0565b6154e78389613ae3565b52156154f4575b016154a7565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb761553d6155228389613ae3565b51604051918291858352604060208401526040830190610d2c565b0390a16154ee565b919061555081614290565b925f5b82811061555f57505050565b8061558960019260051b8401358401604081013581019060208235920190602081013590356153f7565b6155938288613ae3565b5261559e8187613ae3565b5001615553565b9092608092611ed89594835260018060a01b0316602083015260408201528160608201520190610d2c565b91606083019060016156256155ec845163ffffffff60e01b1690565b6001600160e01b0319165f9081527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f8526020526040902090565b01805493905f5b85811061563c5750505050505050565b61564c614ad1614ac48385614a34565b6001600160a01b031660a0890190815260808901949091615675906001600160f01b0319168652565b61568f615688614682613b948985613b5b565b60ff168a52565b61569d614aef8a5160ff1690565b80840361580c57508581816156c2614b22614b1c614b166157179b9c6156ea98611c03565b8c60c06156dd61458860208401948086526009018688611c14565b9101525160090191611ca9565b949094955b51600160f11b90615709906001600160f01b03191661202b565b166001600160f01b03191690565b15615726575b5060010161562c565b51615739906001600160a01b0316611de8565b602061575f615752615752895163ffffffff60e01b1690565b6001600160e01b03191690565b60e08a01516101008b015160c08c015160405163184dfdbb60e11b815295869490938593849361579e9390926001600160a01b031690600486016155a5565b03915afa90811561079d575f916157ee575b506001600160a01b0381166157da57906001916157d260408a01918251614c75565b90529061571d565b631f24c1fb60e11b5f52600482905260245ffd5b615806915060203d81116134e8576134d98183610fa1565b5f6157b0565b90949083111561582557630760bdcf60e11b5f5260045ffd5b61571790615834365f88612a77565b60c08b01526156ef565b5f516020615beb5f395f51905f52545f9493929060581b6001600160f81b03198116600160f81b036158f9579161589e939161587f611de860209560581c90565b9160405195869485938493637aa8f17760e11b85523060048601611efb565b03915afa90811561079d575f916158da575b505b6001600160e01b0319166374eca2c160e11b016158cb57565b6362467c7760e11b5f5260045ffd5b6158f3915060203d60201161200357611ffb8183610fa1565b5f6158b0565b9094509091906001600160f81b03198116600160f91b0361245b576020916159279160081b958430886145ee565b60405163392dffaf60e01b8152929792958694938593849361595a93909230906001600160e01b031916600487016130d9565b03916001600160a01b03165afa90811561079d575f9161597b575b506158b2565b615994915060203d60201161200357611ffb8183610fa1565b5f615975565b156159a157565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b6159ea61050f8383611b72565b9160048110156159f957505050565b602c8110615b9b57602c820190615a19611de86127f56127ef8487611bc8565b615a43615a35613ba2613b94615a2f87806120f6565b90613b5b565b6001600160f81b0319161590565b80615af6575b611de86127f56127ef85615a9e6102319a87615a82611de86127f56127ef8f9d6128e89f9e8f604c9f6129519f615aa4575b5050611c98565b615a8c8b806120f6565b9390926001600160a01b031690613b64565b88611c98565b6128e8615ae8615aef93606c860190615ae3615ad2611de86127f56127ef615acc87876120f6565b90611bd9565b9586906001600160a01b0316615169565b6120f6565b8091611c7b565b8f87615a7b565b5060405163ecd0596160e01b81526002600482015290949291906020816024816001600160a01b038a165afa93841561079d576127f56127ef84615a9e611de8948b615a82611de86127f56102319f8f9c6128e89f9d8f604c9f936129519f946127ef955f91615b7c575b509f50505050505050505097509a5050959650505050615a49565b615b95915060203d6020116107f2576107e48183610fa1565b5f615b61565b6102319250600491501461599a56fed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0xe8", "chainId": "0xaa36a7" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x4d2259bb7e34df8bcc26e79970e58918d8bc1196727545ac20130e6fc660c282", + "hash": "0xa6dcb7aa5bb9f6b4ac81d9b57713014e394187d96198afdd8b87710e075bdfe9", "transactionType": "CREATE2", "contractName": "KernelFactory", - "contractAddress": "0x4600a1e70fb9e4c9a3fec6d9105f6807adeacbe2", + "contractAddress": "0x7a1dbab750f12a90eb1b60d2ae3ad17d4d81effe", "function": null, "arguments": [ - "0x97EBdCa9c606d493daD1bE10188Dd78cadB2a139" + "0xD830D15D3dc0C269F3dBAa0F3e8626d33CFdaBe1" ], "transaction": { "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", "gas": "0x5d17a", "value": "0x0", - "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61044238819003918201601f19168301916001600160401b03831184841017607757808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103b6908161008c823960805181818160c60152818161021d01526102d80152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816348aac39214610250575080635c60da1b146102085763ea6d13ac1461003d575f80fd5b6100463661033f565b60405161006c602080838181019587898837878201908382015203018084520182610394565b519020905f92604051927fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358501523060581b845260ff84538060158501526055842094341591863b156101eb5750506001906101e6575f38818034895af1156101d9575b836040525f60605215610157575b6040516001600160a01b0385168152602090f35b9180825f9493859483378101838152039082855af13d156101d4573d67ffffffffffffffff81116101c0576040519061019a601f8201601f191660200183610394565b81525f60203d92013e5b156101b1575f8080610143565b63487e630960e11b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b6101a4565b63b12d13eb5f526004601cfd5b610135565b91509450605f602134f593846101355763301164255f526004601cfd5b3461024c575f36600319011261024c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461024c57806102826020806102653661033f565b908084889499019889378201908382015203018084520182610394565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040525f60605260ff5f536035523060601b600152601552602060555f205f6035526040519060018060a01b03168152f35b90604060031983011261024c5760043567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060243590565b90601f8019910116810190811067ffffffffffffffff8211176101c0576040525600000000000000000000000097ebdca9c606d493dad1be10188dd78cadb2a139", - "nonce": "0xe3", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61044238819003918201601f19168301916001600160401b03831184841017607757808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103b6908161008c823960805181818160c60152818161021d01526102d80152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816348aac39214610250575080635c60da1b146102085763ea6d13ac1461003d575f80fd5b6100463661033f565b60405161006c602080838181019587898837878201908382015203018084520182610394565b519020905f92604051927fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358501523060581b845260ff84538060158501526055842094341591863b156101eb5750506001906101e6575f38818034895af1156101d9575b836040525f60605215610157575b6040516001600160a01b0385168152602090f35b9180825f9493859483378101838152039082855af13d156101d4573d67ffffffffffffffff81116101c0576040519061019a601f8201601f191660200183610394565b81525f60203d92013e5b156101b1575f8080610143565b63487e630960e11b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b6101a4565b63b12d13eb5f526004601cfd5b610135565b91509450605f602134f593846101355763301164255f526004601cfd5b3461024c575f36600319011261024c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461024c57806102826020806102653661033f565b908084889499019889378201908382015203018084520182610394565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040525f60605260ff5f536035523060601b600152601552602060555f205f6035526040519060018060a01b03168152f35b90604060031983011261024c5760043567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060243590565b90601f8019910116810190811067ffffffffffffffff8211176101c05760405256000000000000000000000000d830d15d3dc0c269f3dbaa0f3e8626d33cfdabe1", + "nonce": "0xe9", "chainId": "0xaa36a7" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x19f2551fa1b77002634fd5eb5cb6496327b869a998d6b8c7d8b3a26b9e96b4f0", + "hash": "0x38643c5b23787d908c62e32c302cf1b6b34207af19e90d508811a4ab42e565cf", "transactionType": "CALL", "contractName": "FactoryStaker", "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", "function": "approveFactory(address,bool)", "arguments": [ - "0x4600A1e70fB9e4C9A3feC6d9105f6807aDEACbe2", + "0x7a1dBAB750f12a90EB1B60D2Ae3aD17D4D81EfFe", "true" ], "transaction": { "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", - "gas": "0xfa0a", + "gas": "0x108d1", "value": "0x0", - "input": "0x6e7dbabb0000000000000000000000004600a1e70fb9e4c9a3fec6d9105f6807adeacbe20000000000000000000000000000000000000000000000000000000000000001", - "nonce": "0xe4", + "input": "0x6e7dbabb0000000000000000000000007a1dbab750f12a90eb1b60d2ae3ad17d4d81effe0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xea", "chainId": "0xaa36a7" }, "additionalContracts": [], @@ -68,48 +68,48 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x9a21cf", + "cumulativeGasUsed": "0x1ed4931", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x47be68e002906a800851804d2f520ab6374cda01a940d973245dbbfe7f10a8d4", - "transactionIndex": "0x33", - "blockHash": "0x10469d6df60edd6edb07f5a168288721ff19ba86978c36a79a490d25e1f69e5c", - "blockNumber": "0x6e3f47", - "gasUsed": "0x4ec3d2", - "effectiveGasPrice": "0x44a3b9d2c", + "transactionHash": "0xe04a1ae67377ff45975933b4dee7b41a4c8de161b1e53b0f2aaa5db1b7117b44", + "transactionIndex": "0x136", + "blockHash": "0x50ede33c5fb46d966f0b18314740be22805bade7a1b6814d40e7205809bcc1a6", + "blockNumber": "0x6ec1ec", + "gasUsed": "0x4f2032", + "effectiveGasPrice": "0x1ff2d899e", "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": null + "contractAddress": "0xd830d15d3dc0c269f3dbaa0f3e8626d33cfdabe1" }, { "status": "0x1", - "cumulativeGasUsed": "0x9e1c42", + "cumulativeGasUsed": "0x1f143a4", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x4d2259bb7e34df8bcc26e79970e58918d8bc1196727545ac20130e6fc660c282", - "transactionIndex": "0x34", - "blockHash": "0x10469d6df60edd6edb07f5a168288721ff19ba86978c36a79a490d25e1f69e5c", - "blockNumber": "0x6e3f47", + "transactionHash": "0xa6dcb7aa5bb9f6b4ac81d9b57713014e394187d96198afdd8b87710e075bdfe9", + "transactionIndex": "0x137", + "blockHash": "0x50ede33c5fb46d966f0b18314740be22805bade7a1b6814d40e7205809bcc1a6", + "blockNumber": "0x6ec1ec", "gasUsed": "0x3fa73", - "effectiveGasPrice": "0x44a3b9d2c", + "effectiveGasPrice": "0x1ff2d899e", "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": null + "contractAddress": "0x7a1dbab750f12a90eb1b60d2ae3ad17d4d81effe" }, { "status": "0x1", - "cumulativeGasUsed": "0x9ed149", + "cumulativeGasUsed": "0x1f1f8b7", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x19f2551fa1b77002634fd5eb5cb6496327b869a998d6b8c7d8b3a26b9e96b4f0", - "transactionIndex": "0x35", - "blockHash": "0x10469d6df60edd6edb07f5a168288721ff19ba86978c36a79a490d25e1f69e5c", - "blockNumber": "0x6e3f47", - "gasUsed": "0xb507", - "effectiveGasPrice": "0x44a3b9d2c", + "transactionHash": "0x38643c5b23787d908c62e32c302cf1b6b34207af19e90d508811a4ab42e565cf", + "transactionIndex": "0x138", + "blockHash": "0x50ede33c5fb46d966f0b18314740be22805bade7a1b6814d40e7205809bcc1a6", + "blockNumber": "0x6ec1ec", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x1ff2d899e", "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", "contractAddress": null @@ -118,7 +118,7 @@ "libraries": [], "pending": [], "returns": {}, - "timestamp": 1733513810, + "timestamp": 1733940034, "chain": 11155111, - "commit": "06ec0da" + "commit": "0ff92c6" } \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/84532/run-latest.json b/broadcast/DeployKernel.s.sol/84532/run-latest.json new file mode 100644 index 0000000..7d40b7b --- /dev/null +++ b/broadcast/DeployKernel.s.sol/84532/run-latest.json @@ -0,0 +1,142 @@ +{ + "transactions": [ + { + "hash": "0x7ab477fc1685722970262ca4e7a2b85b9f6c4dbbe44a19161c6e98cd6c15d86f", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xd830d15d3dc0c269f3dbaa0f3e8626d33cfdabe1", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x73b8af", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140806040523461020357602081615e4a80380380916100208285610207565b83398101031261020357516001600160a01b038116810361020357306080524660a05260a0604051610053604082610207565b6006815260208101906512d95c9b995b60d21b825260405191610077604084610207565b60058352602083019164181719971960d91b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052604051602081019063deadbeef60e01b825260048152610101602482610207565b5190516001600160581b031981169190601582106101e3575b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b031916605885901c179055604051615c0b908161023f82396080518161472c015260a0518161474f015260c051816147bf015260e051816147e50152610100518161470b0152610120518181816103b40152818161069d0152818161084301528181610a9f01528181610e1e01528181611136015281816112aa015281816113000152818161182d0152818161195d015281816125ac0152612ff30152f35b6001600160581b031960159290920360031b82901b161690505f8061011a565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761022a57604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001d575b36612ea15761001b612e70565b005b5f3560e01c8063112d3a7d1461020c578063150b7a02146102075780631626ba7e1461020257806319822f7c146101fd5780631f1b92e3146101f85780633659cfe6146101f35780633c3b752b146101ee57806352141cd9146101e957806357b3a5f4146101e45780636e6fa0c6146101df578063721e67f4146101da57806384b0196e146101d55780638dd7712f146101d057806390ef8862146101cb5780639198bdf5146101c65780639517e29f146101c15780639cfd7cff146101bc578063a65d69d4146101b7578063a71763a8146101b2578063adb610a3146101ad578063b8afe17d146101a8578063bc197c81146101a3578063c3e589781461019e578063d03c791414610199578063d691c96414610194578063e6f3d50a1461018f578063e9ae5c531461018a578063f1f7f0f914610185578063f23a6e6114610180578063f2dc691d1461017b5763fc9c5dec0361000e57611b12565b611af4565b611a9a565b611a64565b611936565b6117b8565b6116d6565b611689565b6115b6565b6114a5565b611439565b611407565b6112d9565b611295565b61123d565b61110f565b610ff8565b610ee9565b610dee565b610d50565b610cca565b610c6f565b610bbc565b610a1e565b610988565b61080d565b610665565b610380565b61031f565b6102c5565b61029f565b6001600160a01b0381160361022257565b5f80fd5b359061023182610211565b565b9181601f84011215610222578235916001600160401b038311610222576020838186019501011161022257565b6060600319820112610222576004359160243561027c81610211565b91604435906001600160401b0382116102225761029b91600401610233565b9091565b346102225760206102bb6102b236610260565b92919091611d65565b6040519015158152f35b34610222576080366003190112610222576102e1600435610211565b6102ec602435610211565b6064356001600160401b0381116102225761030b903690600401610233565b5050604051630a85bd0160e11b8152602090f35b34610222576040366003190112610222576004356024356001600160401b0381116102225760209161035861035e923690600401610233565b91611f2a565b6040516001600160e01b03199091168152f35b90816101209103126102225790565b6060366003190112610222576004356001600160401b038111610222576103ab903690600401610371565b602435604435917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632576103ef6020820135613212565b9092919084836001600160f81b0319861615610619575b82610411939461340b565b9361043661042661042184611cf7565b6120ca565b946001600160f81b031916151590565b9384806105d8575b6105c957602001516001600160a01b031690819081156104d15760019261046f61048e925f525f60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b0361053c57826104e0575b50506104d157816104bb925b6104bf575b506040519081529081906020820190565b0390f35b3490349034903490335af1505f6104aa565b631a0a9b9f60e21b5f5260045ffd5b61053592506105319161051561050f6105096104fe61052a95611d2e565b9360608101906120f6565b90611b72565b90611cc1565b63ffffffff60e01b165f5260205260405f2090565b5460ff1690565b1590565b5f80610499565b82919291610596575b506104d15761050981606061055b9301906120f6565b638dd7712f60e01b916001600160e01b03199161057791611cc1565b160361058757816104bb926104a5565b63dbbb044b60e01b5f5260045ffd5b6105c3915061052a6105aa61053192611d2e565b61051561050f6105bd60608801886120f6565b90611b61565b5f610545565b633ab3447f60e11b5f5260045ffd5b50805163ffffffff1663ffffffff6106116106085f516020615beb5f395f51905f525463ffffffff9060c81c1690565b63ffffffff1690565b91161061043e565b5f516020615beb5f395f51905f525460581b9250610406565b6348f5c3ed60e01b5f5260045ffd5b6004359063ffffffff8216820361022257565b359063ffffffff8216820361022257565b602036600319011261022257610679610641565b61069a6106945f516020615beb5f395f51905f525460581b90565b60581c90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610803575b156107f95760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f916107ca575b50156106325760405163d68f602560e01b8152915f838061072f363433600485016121bd565b038183865af192831561079d575f936107a2575b5061074d90613624565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061077990600483016121e2565b03925af1801561079d5761078957005b806107975f61001b93610fa1565b80610d22565b611f1f565b61074d9193506107c3903d805f833e6107bb8183610fa1565b81019061215b565b9290610743565b6107ec915060203d6020116107f2575b6107e48183610fa1565b810190612128565b5f610709565b503d6107da565b5061001b90613624565b50303314156106cd565b60203660031901126102225760043561082581610211565b6108406106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061093c575b156109325760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f91610913575b50156106325760405163d68f602560e01b8152915f83806108d5363433600485016121bd565b038183865af192831561079d575f936108f3575b5061074d906121f3565b61074d91935061090c903d805f833e6107bb8183610fa1565b92906108e9565b61092c915060203d6020116107f2576107e48183610fa1565b5f6108af565b5061001b906121f3565b5030331415610873565b6001600160581b031981160361022257565b9181601f84011215610222578235916001600160401b038311610222576020808501948460051b01011161022257565b346102225760a0366003190112610222576004356109a581610946565b6024356109b181610211565b6044356001600160401b038111610222576109d0903690600401610233565b6064939193356001600160401b038111610222576109f2903690600401610233565b91608435956001600160401b03871161022257610a1661001b973690600401610958565b969095612339565b608036600319011261022257600435610a3681610946565b602435610a4281610211565b6044356001600160401b03811161022257610a61903690600401610233565b6064356001600160401b03811161022257610a80903690600401610233565b91610a9c6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ba0575b15610b915760405163ecd0596160e01b81526004808201526001600160a01b03919091169490602081602481895afa90811561079d575f91610b72575b50156106325760405163d68f602560e01b8152955f8780610b32363433600485016121bd565b0381838a5af196871561079d575f97610b52575b5061074d959697612482565b61074d969750610b6b903d805f833e6107bb8183610fa1565b9695610b46565b610b8b915060203d6020116107f2576107e48183610fa1565b5f610b0c565b50919361001b95939193612482565b5030331415610acf565b6001600160e01b031981160361022257565b34610222576020366003190112610222576104bb610bfd600435610bdf81610baa565b5f60408051610bed81610f2f565b8281528260208201520152611e57565b600160405191610c0c83610f2f565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b3461022257604036600319011261022257602060ff610cbe600435610c9381610946565b610ca860243591610ca383610baa565b611d2e565b9063ffffffff60e01b165f5260205260405f2090565b54166040519015158152f35b34610222576020366003190112610222576020610cff600435610cec81610211565b5f604051610cf981610f4f565b5261304f565b60405190610d0c82610f4f565b546001600160a01b031690819052604051908152f35b5f91031261022257565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610222575f36600319011261022257610d8f610d9d610d6e613971565b604092919251938493600f60f81b855260e0602086015260e0850190610d2c565b908382036040850152610d2c565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610dd5575050500390f35b8251845285945060209384019390920191600101610dc7565b6040366003190112610222576004356001600160401b03811161022257610e19903690600401610371565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632575f908152602081905260409020546001600160a01b03169060609060018314159081610eb9575b610e8e610e87826060610e959401906120f6565b8091611b80565b9030613a59565b5015610eaa57610ea157005b61001b91613a7e565b63f21e646b60e01b5f5260045ffd5b9150610e95610e8e610e87610edf610ed7610e8760608801886120f6565b903489613a0e565b9492505050610e73565b34610222575f36600319011261022257602063ffffffff5f516020615beb5f395f51905f525460c81c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610f4a57604052565b610f1b565b602081019081106001600160401b03821117610f4a57604052565b604081019081106001600160401b03821117610f4a57604052565b61012081019081106001600160401b03821117610f4a57604052565b90601f801991011681019081106001600160401b03821117610f4a57604052565b60405190610231604083610fa1565b6040519061023161012083610fa1565b6001600160401b038111610f4a5760051b60200190565b6080366003190112610222576004356001600160401b03811161022257611023903690600401610958565b602435916001600160401b038311610222573660238401121561022257826004013561104e81610fe1565b9361105c6040519586610fa1565b8185526024602086019260061b8201019036821161022257602401915b8183106110ce575050506044356001600160401b038111610222576110a2903690600401610958565b90606435946001600160401b038611610222576110c661001b963690600401610958565b959094612587565b60408336031261022257602060409182516110e881610f6a565b6110f186610654565b81528286013561110081610211565b83820152815201920191611079565b61111836610260565b6111336106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611233575b156112285760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f91611209575b50156106325760405163d68f602560e01b8152935f85806111c9363433600485016121bd565b038183885af194851561079d575f956111e9575b5061074d939495612754565b61074d949550611202903d805f833e6107bb8183610fa1565b94936111dd565b611222915060203d6020116107f2576107e48183610fa1565b5f6111a3565b509161001b93612754565b5030331415611166565b34610222575f366003190112610222576104bb60405161125e604082610fa1565b601681527535b2b93732b61730b23b30b731b2b2173b181719971960511b6020820152604051918291602083526020830190610d2c565b34610222575f366003190112610222576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6112e236610260565b6112fd6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113fd575b156113f25760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f916113d3575b50156106325760405163d68f602560e01b8152935f8580611393363433600485016121bd565b038183885af194851561079d575f956113b3575b5061074d939495612aad565b61074d9495506113cc903d805f833e6107bb8183610fa1565b94936113a7565b6113ec915060203d6020116107f2576107e48183610fa1565b5f61136d565b509161001b93612aad565b5030331415611330565b34610222575f36600319011261022257602063ffffffff5f516020615beb5f395f51905f525460a81c16604051908152f35b3461022257602036600319011261022257604061146960043561145b81610946565b611463612c55565b50611cf7565b81519061147582610f6a565b5463ffffffff81168083526001600160a01b03602092831c81169383019384528451918252925190921690820152f35b346102225760a0366003190112610222576114c1600435610211565b6114cc602435610211565b6044356001600160401b038111610222576114eb903690600401610958565b50506064356001600160401b0381116102225761150c903690600401610958565b50506084356001600160401b0381116102225761152d903690600401610233565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a09092019201905f5b8181106115965750505090565b82516001600160501b031916845260209384019390920191600101611589565b34610222576020366003190112610222576115f56004356115d681610baa565b6060604080516115e581610f2f565b5f81525f60208201520152611e8d565b60016040519161160483610f2f565b805461ffff60f01b8160f01b168452828060a01b039060101c16602084015201906040519182602082549182815201915f5260205f20905f5b818110611666576104bb858761165581880382610fa1565b604082015260405191829182611541565b825460501b6001600160501b03191684526020909301926001928301920161163d565b346102225760203660031901126102225760206102bb600435612c6d565b9060406003198301126102225760043591602435906001600160401b0382116102225761029b91600401610233565b6116df366116a7565b90916001600160a01b036116f23361304f565b54169182156117a95760609060018414159485611792575b61171492936142f0565b92611782575b50506040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061175357505050500390f35b919360019193955060206117728192603f198a82030186528851610d2c565b9601920192018594939192611744565b61178b91613a7e565b5f8061171a565b61171492506117a23634876139b5565b925061170a565b63710c949760e01b5f5260045ffd5b6060366003190112610222576004356117d081610946565b6024356001600160401b038111610222576117ef903690600401610233565b6044356001600160401b0381116102225761180e903690600401610233565b9061182a6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061192c575b1561191f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169390602081602481885afa90811561079d575f91611900575b50156106325760405163d68f602560e01b8152945f86806118c0363433600485016121bd565b038183895af195861561079d575f966118e0575b5061074d949596612d45565b61074d9596506118f9903d805f833e6107bb8183610fa1565b95946118d4565b611919915060203d6020116107f2576107e48183610fa1565b5f61189a565b5091909261001b94612d45565b503033141561185d565b61193f366116a7565b61195a6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611a5a575b15611a4f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169190602081602481865afa90811561079d575f91611a30575b50156106325760405163d68f602560e01b8152925f84806119f0363433600485016121bd565b038183875af193841561079d575f94611a10575b5061074d929394612d5a565b61074d939450611a29903d805f833e6107bb8183610fa1565b9392611a04565b611a49915060203d6020116107f2576107e48183610fa1565b5f6119ca565b509061001b92612d5a565b503033141561198d565b34610222575f3660031901126102225760205f516020615beb5f395f51905f525460581b604051906001600160581b0319168152f35b346102225760a036600319011261022257611ab6600435610211565b611ac1602435610211565b6084356001600160401b03811161022257611ae0903690600401610233565b505060405163f23a6e6160e01b8152602090f35b346102225760203660031901126102225760206102bb600435612d65565b34610222576040366003190112610222576004356001600160401b03811161022257611b59611b476020923690600401610371565b60243590611b5482610211565b612d72565b604051908152f35b906008116102225760040190600490565b906004116102225790600490565b909291928360041161022257831161022257600401916003190190565b906020116102225790602090565b90929192836020116102225783116102225760200191601f190190565b906018116102225760040190601490565b906014116102225790601490565b909291928360011161022257831161022257600101915f190190565b906009116102225760010190600890565b909291928360091161022257831161022257600901916008190190565b906016116102225790601690565b906016116102225760020190601490565b909291928360161161022257831161022257601601916015190190565b906002116102225790600290565b909291928360141161022257831161022257601401916013190190565b90602c116102225760180190601490565b90939293848311610222578411610222578101920390565b356001600160e01b0319811692919060048210611cdc575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85060205260405f2090565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85160205260405f2090565b90929060018103611db457506001600160a01b0392611dae9250611d9e915060581b600160581b600160f81b0316600160f81b17611cf7565b5460201c6001600160a01b031690565b16151590565b60028103611df457506001600160a01b0392611dae9250611de89150611ddb90841661304f565b546001600160a01b031690565b6001600160a01b031690565b600303611e3457611e15611e1061050f600193611e2395611b72565b611e57565b01546001600160a01b031690565b6001600160a01b0390811691161490565b5050505f90565b359060208110611e49575090565b5f199060200360031b1b1690565b63ffffffff60e01b165f527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b60205260405f2090565b63ffffffff60e01b165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85260205260405f2090565b908160209103126102225751611ed881610baa565b90565b908060209392818452848401375f828201840152601f01601f1916010190565b611ed8949260609260018060a01b0316825260208201528160408201520191611edb565b6040513d5f823e3d90fd5b91611f3491613087565b919080836001600160f81b03198416156120aa575b6020811015918261206d575b82612057575b506001600160a01b039050611f75611de8611d9e86611cf7565b16156104d1576001600160f81b03198316600160f81b0361200a5790611fa26020949392611fc0966131b8565b604051637aa8f17760e11b8152958694859384933360048601611efb565b039160581c6001600160a01b03165afa90811561079d575f91611fe1575090565b611ed8915060203d602011612003575b611ffb8183610fa1565b810190611ec3565b503d611ff1565b929160081b93600160f11b61203861202b61202488611e8d565b5460f01b90565b6001600160f01b03191690565b1661204857611ed8943390613104565b635b71057960e01b5f5260045ffd5b819295506120659350611bab565b925f80611f5b565b91507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a6120a361209d8385611b9d565b90611e3b565b1491611f55565b92506120c45f516020615beb5f395f51905f525460581b90565b92611f49565b906040516120d781610f6a565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561022257018035906001600160401b0382116102225760200191813603831361022257565b90816020910312610222575180151581036102225790565b6001600160401b038111610f4a57601f01601f191660200190565b602081830312610222578051906001600160401b038211610222570181601f820112156102225780519061218e82612140565b9261219c6040519485610fa1565b8284526020838301011161022257815f9260208093018386015e8301015290565b611ed8939260609260018060a01b03168252602082015281604082015201905f611edb565b906020611ed8928181520190610d2c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2565b1561224d57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b5f516020615beb5f395f51905f52805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b5f52603260045260245ffd5b908210156122e45761029b9160051b8101906120f6565b6122b9565b908092918237015f815290565b60405190612305602083610fa1565b5f8252565b3d15612334573d9061231b82612140565b916123296040519384610fa1565b82523d5f602084013e565b606090565b949392919096959661237c6001600160581b03196123756123685f516020615beb5f395f51905f525460581b90565b6001600160581b03191690565b1615612246565b6001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061246a575b61245b57856123b5612402976136e9565b6123d66123c0610fc2565b60018152925b6001600160a01b03166020840152565b5f516020615beb5f395f51905f52805463ffffffff60a81b1916600160a81b17905561374f565b61374f565b5f5b81811061241057505050565b5f8061241d8385876122cd565b9061242d604051809381936122e9565b039082305af161243b61230a565b501561244957600101612404565b636534eae560e11b5f5260045260245ffd5b6361c4e91b60e11b5f5260045ffd5b506001600160f81b03198616600160f91b14156123a4565b94939291906001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061252d575b61245b576124bc866136e9565b6001600160a01b036124d0611d9e88611cf7565b16156124df575b505050505050565b612522956123fd6125055f516020615beb5f395f51905f525463ffffffff9060a81c1690565b926123c660405194612518604087610fa1565b63ffffffff168552565b5f80808080806124d7565b506001600160f81b03198616600160f91b14156124af565b9060405161255281610f2f565b82546001600160a01b03908116825260019390930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946125a96106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806126f9575b156126ea5760405163ecd0596160e01b81526004808201526001600160a01b039190911695906020816024818a5afa90811561079d575f916126cb575b50156106325760405163d68f602560e01b8152965f888061263f363433600485016121bd565b0381838b5af197881561079d575f986126ab575b5061265f969798613af7565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061268b90600483016121e2565b03925af1801561079d5761269d575b50565b806107975f61023193610fa1565b61265f9798506126c4903d805f833e6107bb8183610fa1565b9796612653565b6126e4915060203d6020116107f2576107e48183610fa1565b5f612619565b50919390929461023196613af7565b50303314156125dc565b916020611ed8938181520191611edb565b356bffffffffffffffffffffffff19811692919060148210612734575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b9091906001810361289957509060549060581b600160581b600160f81b0316600160f81b179161279061278684611cf7565b5463ffffffff1690565b5f516020615beb5f395f51905f525460a81c63ffffffff169063ffffffff808316911614612881575b506128226127fb611de86127f56127ef6127e85f516020615beb5f395f51905f525463ffffffff9060a81c1690565b9886611bd9565b90612714565b60601c90565b612812612806610fc2565b63ffffffff9097168752565b6001600160a01b03166020860152565b61284d601482019461283486806120f6565b61284460348694939401896120f6565b9390928861374f565b0191600461285b84836120f6565b905014612868575b505050565b61050f6105096102319461287b936120f6565b90613f3b565b6128939060010163ffffffff16612288565b5f6127b9565b600281036128ee5750610231926034826128e16128c6611de86127f56127ef60146128e899019786611bd9565b80966128d286806120f6565b916001600160a01b0316613eaa565b01906120f6565b91613cec565b9091906003810361295957506128e8906038612951611de86127f56127ef6102319861294b60188a01978a612939611de86127f56127ef8761293361050f8288611b72565b95611bc8565b6129438b806120f6565b939092613b64565b88611bc8565b9301906120f6565b9091600482036129ee576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b03925af192831561079d575f516020615bab5f395f51905f52936129da575b50604080519182526001600160a01b03909216602082015290819081015b0390a1565b806107975f6129e893610fa1565b5f6129b7565b60058203612a2b576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b60068203612a68576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b631092ef5760e11b5f5260045ffd5b929192612a8382612140565b91612a916040519384610fa1565b829481845281830111610222578281602093845f960137010152565b60018103612ad6575061269a92919060581b600160581b600160f81b0316600160f81b1761418f565b60028103612af3575061269a9291906001600160a01b031661410c565b60038103612b1e575050612b188280612b1261050f61269a9686611b72565b93611b80565b9161405e565b909160048203612bb057612b7d6129b7915f516020615bcb5f395f51905f5295612b565f516020615beb5f395f51905f525460581b90565b612b62611d9e82611cf7565b6001600160a01b03888116911614612b83575b503691612a77565b83613fa0565b612b8f612baa91611cf7565b8054640100000000600160c01b031916640100000000179055565b5f612b75565b60058203612c36575f516020615beb5f395f51905f525460581b5b612bd861209d8684611b9d565b906001600160f81b03198116600160f91b14612c0e575b5050612b7d6129b7915f516020615bcb5f395f51905f52953691612a77565b60081b6001600160e01b03191614612c27575f80612bef565b6313002bdd60e31b5f5260045ffd5b60068203612a68575f516020615beb5f395f51905f525460581b612bcb565b60405190612c6282610f6a565b5f6020838281520152565b612c81818060081b918160301b9160501b90565b929091906001600160f81b03198116600160f81b14159081612d31575b81612d1c575b81612d03575b50611e345760ff60f81b16600160f81b8114159081612cf9575b50612cf3576001600160e01b031916612cee576001600160501b031916612cea57600190565b5f90565b505f90565b50505f90565b905015155f612cc4565b6001600160f81b031916607f60f91b141590505f612caa565b6001600160f81b031980821614159150612ca4565b6001600160f81b0319811615159150612c9e565b91612d559161023195949361418f565b61450f565b9061269a92916142f0565b60071115612cea57600190565b612e2e90612e6a90612d8d6001600160a01b03823516611de8565b90612e3c6020820135612e2e612daf612da960408601866120f6565b906145a1565b93612dc0612da960608301836120f6565b90608081013560a082013590612de2612da960c08501359460e08101906120f6565b93604051988997602089019b8c94919260e0969399989794919961010087019a60018060a01b03168752602087015260408601526060850152608084015260a083015260c08201520152565b03601f198101835282610fa1565b51902060408051602081019283526001600160a01b03909516908501525f6060850152929182906080820190565b51902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b612ebd612eb85f356001600160e01b031916611e57565b612545565b80516001600160a01b0390612ed3908216611de8565b16156130405780516060906001600160a01b0390612ef2908216611de8565b1660018114158061302f575b15612fe35750508051612f1d906001600160a01b0316369034906139b5565b60408201516001600160f81b03191680612fa357506020820151612f49906001600160a01b03166145ac565b92905b15612f9b57516001600160a01b03169060018214158281612f86575b50612f76575b825160208401f35b612f7f91613a7e565b5f80612f6e565b6001600160a01b03908116141590505f612f68565b825160208401fd5b6001600160f81b031990811603612fd4576020820151612fcd906001600160a01b03163690613a34565b9290612f4c565b632d6a6bb760e01b5f5260045ffd5b6001600160a01b0303612f1d57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612f1d576348f5c3ed60e01b5f5260045ffd5b506001600160a01b03811415612efe565b631cd4b64760e21b5f5260045ffd5b6001600160a01b03165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b9182358060f81c805f146130cb57806001146130be576002146130a8575f80fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b505060015f9301915f190190565b9092608092611ed89694835260018060a01b0316602083015260408201528160608201520191611edb565b61311d65ffffffffffff939561312997958785856145ee565b969295919890986146dd565b50911642109081156131a6575b506131925761314a613174916020976131b8565b60405163392dffaf60e01b8152978896879586959193916001600160e01b031916600487016130d9565b03916001600160a01b03165afa90811561079d575f91611fe1575090565b506001600160e01b03199695505050505050565b65ffffffffffff91501642115f613136565b60405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8383526040820152604081526131f7606082610fa1565b519020901561320957611ed89061481b565b611ed890614709565b90818060081b9160ff839260f01c1660021461322a57565b6001600160d81b031983169150565b9080601f8301121561022257816020611ed893359101612a77565b919091610120818403126102225761326a610fd1565b9261327482610226565b84526020820135602085015260408201356001600160401b038111610222578161329f918401613239565b604085015260608201356001600160401b03811161022257816132c3918401613239565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b0381116102225781613305918401613239565b60e08501526101008201356001600160401b038111610222576133289201613239565b610100830152565b90816020910312610222575190565b80516001600160a01b03168252611ed891602082015160208201526101006133c061339061337e60408601516101206040870152610120860190610d2c565b60608601518582036060870152610d2c565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610d2c565b92015190610100818403910152610d2c565b9392916133ef90604092865260606020870152606086019061333f565b930152565b9291906133ef60209160408652604086019061333f565b9290925f9261341a3682613254565b916134296101008301836120f6565b918193835f936020821015806135ef575b6135b0575b5050506001600160f81b031916600160f81b145b613589575b506001600160f81b03198616600160f81b036134ef575050604051639700320360e01b815293602092859283915f91839161349691600484016133f4565b039260581c6001600160a01b03165af190811561079d57611ed8925f926134be575b50614c75565b6134e191925060203d6020116134e8575b6134d98183610fa1565b810190613330565b905f6134b8565b503d6134cf565b909460081b93909291600160f01b61350c61202b61202488611e8d565b1661357a575f61352c61352660209661355699858a614a96565b94614c75565b604051630ccab7a160e01b8152979096889586948593926001600160e01b031916600485016133d2565b03926001600160a01b03165af190811561079d57611ed8925f926134be5750614c75565b6314b9743f60e01b5f5260045ffd5b9161359693955086614890565b9193916135a4368284612a77565b6101008401525f613458565b9195509250829196506135c39350611bab565b90916135d0368385612a77565b6101008501526134536135e66001923390612d72565b95905f8061343f565b507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a61361e61209d8484611b9d565b1461343a565b5f516020615beb5f395f51905f5254600a63ffffffff8260a81c16019063ffffffff82116136d55763ffffffff838116921682116136c65761366e9060c81c63ffffffff16610608565b10156105c9575f516020615beb5f395f51905f52805463ffffffff60c81b60c893841b1663ffffffff60c81b1990911617908190559081901c63ffffffff9081169160a81c1681116136bd5750565b61023190612288565b63e60fd64760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88918060581c6001600160581b0360a81b5f516020615beb5f395f51905f525416175f516020615beb5f395f51905f5255604051906001600160581b0319168152a1565b92949093919361376161278685611cf7565b5f516020615beb5f395f51905f525460a81c63ffffffff169063ffffffff808316911614613959575b506020810180516001600160a01b031615613950575b5f516020615beb5f395f51905f525460a81c63ffffffff1663ffffffff6137ce610608855163ffffffff1690565b911614801590613924575b6105c957613827613834926137ed87611cf7565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b915f196001600160a01b03841601613913575b5050506001600160f81b03198116600160f81b036138f05760581c6001600160a01b031690813b15610222576040516306d61fe760e41b8152925f9184918291613895919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d5926138dc575b5060408051600181526001600160a01b03909216602083015290918291820190565b806107975f6138ea93610fa1565b5f6138ba565b91506001600160f81b03198216600160f91b0361245b576102319160081b614e5d565b61391c92613cec565b5f8080613847565b5061393161278686611cf7565b63ffffffff613947610608855163ffffffff1690565b911610156137d9565b600181526137a0565b61396b9060010163ffffffff16612288565b5f61378a565b60409081516139808382610fa1565b600681526512d95c9b995b60d21b6020820152916139a081519182610fa1565b6005815264181719971960d91b602082015290565b916139dc925f8080946040519687958694859363d68f602560e01b85523360048601611efb565b03926001600160a01b03165af190811561079d575f916139fa575090565b611ed891503d805f833e6107bb8183610fa1565b5f92836139dc95936040519687958694859363d68f602560e01b85523360048601611efb565b5f9060405192808385378338925af4913d82523d5f602084013e60203d830101604052565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b6001600160a01b0316803b1561022257604051630b9dfbed60e11b815260206004820152915f918391829084908290613abb906024830190610d2c565b03925af1801561079d57613acc5750565b5f61023191610fa1565b8051156122e45760200190565b80518210156122e45760209160051b010190565b909593919492965f5b87811015613b5057600190613b4a8a89613b368489613b2f828060051b8c013595613b2a87610946565b613ae3565b51946122cd565b90613b42868d8d6122cd565b94909361374f565b01613b00565b509650505050505050565b90156122e45790565b9293929091906001600160a01b03821615613cdd575b613b8390611e57565b93613baf613ba2613b948684613b5b565b356001600160f81b03191690565b6001600160f81b03191690565b936001600160f81b03198516613cb5576001600160a01b03841691613bd691908190611be7565b823b1561022257613c00925f92836040518096819582946306d61fe760e41b845260048401612703565b03925af194851561079d57613c64613c849360019361023198613ca1575b5060408051600381526001600160a01b03881660208201525f516020615bab5f395f51905f529190a15b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107975f613caf93610fa1565b5f613c1e565b50909390506001600160f81b031980841603612fd4576001613c8491613c6461023196613c48565b6001600160a01b039150613b7a565b6001600160a01b0316919082158015613ea0575b6128635760405163d60b347f60e01b8152306004820152602081602481875afa90811561079d575f91613e81575b50613dc5579080613d3e92611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613d69919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592613db1575b505b60408051600481526001600160a01b03909216602083015290918291820190565b806107975f613dbf93610fa1565b5f613d8e565b81151580613e62575b613dec575b50506129d55f516020615bab5f395f51905f5291613d90565b9080613df792611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613e22919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592613e4e575b5091613dd3565b806107975f613e5c93610fa1565b5f613e47565b506001600160f81b031980613e7a613b948585613b5b565b1614613dce565b613e9a915060203d6020116107f2576107e48183610fa1565b5f613d2e565b5060018314613d00565b92613eb59084615169565b81613f045750505f80916040518260208201916306d61fe760e41b8352613eee81612e2e60248201604090602081525f60208201520190565b51926001600160a01b03165af15061269a61230a565b6001600160a01b039092169190823b156102225761268b925f92836040518096819582946306d61fe760e41b845260048401612703565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091613f6d82610ca883611d2e565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b91907f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3905a905f806040519361400085613ff26020820196638a91b0e360e01b88526020602484018181520190610d2c565b03601f198101875286610fa1565b6040519361400f602086610fa1565b828552602085019583908a905f368a375193f1913d9081614056575b815f9293523e604080516001600160a01b0390951685528115156020860152909390819081016129d5565b5f915061402b565b61406b9093929193611e57565b80546001600160a01b031981168255600190910180546001600160a01b039092169490929091906001600160f81b0319605883901b16156140bb575b505081546001600160a81b03191690915550565b6140d9926140ca913691612a77565b906001600160a01b0316613fa0565b50805460408051600381526001600160a01b0390921660208301525f516020615bcb5f395f51905f5291a15f80806140a7565b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205260409081902080546001600160a01b0319811690915590921694935f516020615bcb5f395f51905f529361417f9161417991369190612a77565b82613fa0565b50815190600282526020820152a1565b9291906141bf6141ad5f516020615beb5f395f51905f525460581b90565b6001600160581b031980871691161490565b612c27576141cf611d9e85611cf7565b936141f06141dc82611cf7565b8054640100000000600160c01b0319169055565b6001600160f81b03198116600160f81b0361423357916138ba6141796129d5935f516020615bcb5f395f51905f529560018060a01b039060581c16933691612a77565b91506001600160f81b03198216600160f91b0361245b576102319160081b6151ef565b604080519091906142678382610fa1565b6001815291601f1901825f5b82811061427f57505050565b806060602080938501015201614273565b9061429a82610fe1565b6142a76040519182610fa1565b82815280926142b8601f1991610fe1565b01905f5b8281106142c857505050565b8060606020809385010152016142bc565b906040611ed8925f81528160208201520190610d2c565b600881901b9291906001600160f81b03198116600160f81b036143835750906143189161542d565b90916001600160f81b031981166143335750611ed891615545565b6001600160f81b031916600160f81b0361435057611ed891615499565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b9293926001600160f81b0319811661443b5750906143a0916153af565b916143a9614256565b956001600160f81b031981166143d657506143c3936153f7565b6143cc83613ad6565b5261269a82613ad6565b6001600160f81b031916600160f81b03614350576143f3936153d0565b6143fc84613ad6565b52610231577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129d561442e84613ad6565b51604051918291826142d9565b909391906001600160f81b0319908116036143505761446561446b9161445f614256565b95615387565b91613a59565b61447785939293613ad6565b526001600160f81b03198116600160f81b036144c257501561449557565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129d561442e84613ad6565b6001600160f81b031916614350576102315760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b9091906001600160a01b031680158015614597575b6128635781156122e4575f516020615bcb5f395f51905f52926129d5926001600160f81b03198235811614614577575b505060408051600481526001600160a01b03909216602083015290918291820190565b614588816141799261458f94611be7565b3691612a77565b505f80614554565b5060018114614524565b816040519182372090565b5f809160405136810160405236838237604051601481016040523360601b90528260143601925af190604051903d82523d5f602084013e60203d830101604052565b9491848461466f92969593966040519061460782610f85565b5f82525f602083015260408201995f8b52614669606084019a8b925f84525f60808701525f60a0870152606060c087015261465a60e08701915f83526101008801955f87529063ffffffff60e01b169052565b6001600160a01b039091169052565b526155d0565b60ff80614688614682613b948786613b5b565b60f81c90565b16036146ce576146b76146a2846146b2956146c794611be7565b9490955163ffffffff60e01b1690565b611e8d565b5460101c6001600160a01b031690565b9351929190565b63b32eeb6960e01b5f5260045ffd5b8065ffffffffffff8260a01c169182156001146146fb575b60d01c92565b65ffffffffffff92506146f5565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615614794575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220614777565b60a0614825613971565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015260408201525f6060820152306080820152206719010000000000005f52601a52603a526042601820905f603a52565b9190939293601481019160141161022257803560601c928291906148b2612c55565b602081018690525f516020615beb5f395f51905f525460a81c63ffffffff168082526001600160a01b03909616979091906148ed85806120f6565b6148f6916145a1565b9860348501996149068b886120f6565b61490f916145a1565b90605487019961491f8b8a6120f6565b614928916145a1565b604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505602082019081526001600160581b03198a169282019290925263ffffffff9390931660608401526001600160a01b0395909516608083015260a082019290925260c081019290925260e08083019190915281526149ac61010082610fa1565b519020905f1461050961029b98614a0d6094986128e1976149ee61287b9761050f97614a26576149db9061481b565b6149e860748d01856120f6565b9161583e565b9e614a046149fc84806120f6565b9290946120f6565b9390928a61374f565b614a20614a1a828b6120f6565b906159dd565b886120f6565b614a2f90614709565b6149db565b80548210156122e4575f5260205f2001905f90565b356001600160c01b0319811692919060088210614a64575050565b6001600160c01b031960089290920360031b82901b16169150565b604090611ed893928152816020820152019061333f565b93929190935f926001614aa883611e8d565b015f5b8154811015614c3857614ad9614ad1614ac48385614a34565b90549060031b1c60501b90565b908160501c90565b939095614af5614aef614682613b948585613b5b565b60ff1690565b808403614c0a5750908181614b2e614b22614b1c614b1684614b4c98611c03565b90614a49565b60c01c90565b6001600160401b031690565b600901918c610100614b44614588868686611c14565b910152611ca9565b939093955b600160f01b1615614b69575b50600101939193614aab565b604051633894f6e760e11b81529196906020908390815f81614b998f6001600160e01b03198d1660048401614a7f565b03926001600160a01b03165af191821561079d575f92614bea575b506001600160a01b038216614bd657600191614bcf91614c75565b9590614b5d565b631f24c1fb60e11b5f52600487905260245ffd5b614c0391925060203d81116134e8576134d98183610fa1565b905f614bb4565b9196909491831115614c2557630760bdcf60e11b5f5260045ffd5b614c2d6122f6565b6101008b0152614b51565b505091929460ff80614c50614682613b948789613b5b565b16036146ce57610100614c6d614588856146b796611ed898611be7565b910152611e8d565b908082186001600160a01b031615606083811b838501821b9081149184901b141717600114614ca5575050600190565b65ffffffffffff60a01b8216916001600160d01b03198082169083168415614d25575b65ffffffffffff60a01b84168015614d15575b858110908618028086189514614d04575b81811190821802189160018060a01b03911716171790565b65ffffffffffff60a01b9450614cec565b5065ffffffffffff60a01b614cdb565b65ffffffffffff60a01b9450614cc8565b903590601e198136030182121561022257018035906001600160401b03821161022257602001918160051b3603831361022257565b8054905f815581614d7a575050565b5f5260205f20908101905b818110614d90575050565b5f8155600101614d85565b356001600160501b0319811692919060168210614db6575050565b6001600160501b031960169290920360031b82901b16169150565b805468010000000000000000811015610f4a57614df391600182018155614a34565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701015f815290565b356001600160f01b0319811692919060028210614e42575050565b6001600160f01b031960029290920360031b82901b16169150565b9190614e699080614d36565b9260fe84118015615161575b615152576001614e8482611e8d565b0154615139575b5f1984015f5b818110614ffb575090614f50614f498387614ee9614f3a614f2161202b614f1b614f1587614f6c9e9f8e614f10614f7a9f8f90611de86127f56127ef614edb614ee19489896122cd565b90611c3f565b9a8b91611e8d565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6122cd565b90611c6d565b90614e27565b614f2a88611e8d565b9060f01c61ffff19825416179055565b6001600160a01b0316966122cd565b8091611c50565b6040519586939092906001600160e01b03191660208501614e12565b03601f198101845283610fa1565b803b15610222575f614fa092604051809481926306d61fe760e41b8352600483016121e2565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592614fe7575b5060408051600681526001600160a01b03909216602083015290918291820190565b806107975f614ff593610fa1565b5f614fc5565b61509690615041600161500d86611e8d565b0161503b61502e615028615022868d8c6122cd565b90611c31565b90614d9b565b6001600160501b03191690565b90614dd1565b61505b611de8611de86127f56127ef614edb868d8c6122cd565b615069614f49838a896122cd565b60405194918591615088916001600160e01b03198a1660208501614e12565b03601f198101855284610fa1565b803b15610222576040516306d61fe760e41b8152925f9184918290849082906150c290600483016121e2565b03925af191821561079d57600192615125575b505f516020615bab5f395f51905f5261511c6150fb6127f56127ef614edb868d8c6122cd565b60408051600581526001600160a01b03909216602083015290918291820190565b0390a101614e91565b806107975f61513393610fa1565b5f6150d5565b61514d600161514783611e8d565b01614d6b565b614e8b565b63b62d956d60e01b5f5260045ffd5b508315614e75565b5f516020615bab5f395f51905f52916040916001600160a01b038216156151e6575b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205284902080546001600160a01b03191693909216929092179055815190600282526020820152a1565b6001915061518b565b91906151fa83611e8d565b916152058280614d36565b9190506001840191600183540103615378575f5b82548110156152b657805f516020615bcb5f395f51905f526152ad8661528b612e2e6141798c61526f88615269615259614ad18f60019e614ac491614a34565b90508c8060a01b03169780614d36565b906122cd565b6040519485939092906001600160e01b03191660208501614e12565b5060408051600581526001600160a01b03909216602083015290918291820190565b0390a101615219565b509361531991506102319392615314614f6c926152d7600161514783611e8d565b8554614f50906152f29060101c6001600160a01b0316611de8565b936153096153008280614d36565b91909280614d36565b5f19019290506122cd565b613fa0565b5080545f516020615bcb5f395f51905f5290615365906153449060101c6001600160a01b0316611de8565b60408051600681526001600160a01b03909216602083015290918291820190565b0390a180546001600160b01b0319169055565b63013dcc8d60e31b5f5260045ffd5b9160138211156153a257823560601c92601401916013190190565b63ba597e7e5f526004601cfd5b9060338111156153a257813560601c92601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af115615424573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b918235826020118160401c176153a257830160208101938135938461545157505050565b01601f190190835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c176153a2578061545957505050565b91906154a481614290565b925f5b8281106154b357505050565b806154dd60019260051b8401358401604081013581019060208235920190602081013590356153d0565b6154e78389613ae3565b52156154f4575b016154a7565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb761553d6155228389613ae3565b51604051918291858352604060208401526040830190610d2c565b0390a16154ee565b919061555081614290565b925f5b82811061555f57505050565b8061558960019260051b8401358401604081013581019060208235920190602081013590356153f7565b6155938288613ae3565b5261559e8187613ae3565b5001615553565b9092608092611ed89594835260018060a01b0316602083015260408201528160608201520190610d2c565b91606083019060016156256155ec845163ffffffff60e01b1690565b6001600160e01b0319165f9081527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f8526020526040902090565b01805493905f5b85811061563c5750505050505050565b61564c614ad1614ac48385614a34565b6001600160a01b031660a0890190815260808901949091615675906001600160f01b0319168652565b61568f615688614682613b948985613b5b565b60ff168a52565b61569d614aef8a5160ff1690565b80840361580c57508581816156c2614b22614b1c614b166157179b9c6156ea98611c03565b8c60c06156dd61458860208401948086526009018688611c14565b9101525160090191611ca9565b949094955b51600160f11b90615709906001600160f01b03191661202b565b166001600160f01b03191690565b15615726575b5060010161562c565b51615739906001600160a01b0316611de8565b602061575f615752615752895163ffffffff60e01b1690565b6001600160e01b03191690565b60e08a01516101008b015160c08c015160405163184dfdbb60e11b815295869490938593849361579e9390926001600160a01b031690600486016155a5565b03915afa90811561079d575f916157ee575b506001600160a01b0381166157da57906001916157d260408a01918251614c75565b90529061571d565b631f24c1fb60e11b5f52600482905260245ffd5b615806915060203d81116134e8576134d98183610fa1565b5f6157b0565b90949083111561582557630760bdcf60e11b5f5260045ffd5b61571790615834365f88612a77565b60c08b01526156ef565b5f516020615beb5f395f51905f52545f9493929060581b6001600160f81b03198116600160f81b036158f9579161589e939161587f611de860209560581c90565b9160405195869485938493637aa8f17760e11b85523060048601611efb565b03915afa90811561079d575f916158da575b505b6001600160e01b0319166374eca2c160e11b016158cb57565b6362467c7760e11b5f5260045ffd5b6158f3915060203d60201161200357611ffb8183610fa1565b5f6158b0565b9094509091906001600160f81b03198116600160f91b0361245b576020916159279160081b958430886145ee565b60405163392dffaf60e01b8152929792958694938593849361595a93909230906001600160e01b031916600487016130d9565b03916001600160a01b03165afa90811561079d575f9161597b575b506158b2565b615994915060203d60201161200357611ffb8183610fa1565b5f615975565b156159a157565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b6159ea61050f8383611b72565b9160048110156159f957505050565b602c8110615b9b57602c820190615a19611de86127f56127ef8487611bc8565b615a43615a35613ba2613b94615a2f87806120f6565b90613b5b565b6001600160f81b0319161590565b80615af6575b611de86127f56127ef85615a9e6102319a87615a82611de86127f56127ef8f9d6128e89f9e8f604c9f6129519f615aa4575b5050611c98565b615a8c8b806120f6565b9390926001600160a01b031690613b64565b88611c98565b6128e8615ae8615aef93606c860190615ae3615ad2611de86127f56127ef615acc87876120f6565b90611bd9565b9586906001600160a01b0316615169565b6120f6565b8091611c7b565b8f87615a7b565b5060405163ecd0596160e01b81526002600482015290949291906020816024816001600160a01b038a165afa93841561079d576127f56127ef84615a9e611de8948b615a82611de86127f56102319f8f9c6128e89f9d8f604c9f936129519f946127ef955f91615b7c575b509f50505050505050505097509a5050959650505050615a49565b615b95915060203d6020116107f2576107e48183610fa1565b5f615b61565b6102319250600491501461599a56fed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0xdb", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x01eb882af537c2473244b8f02c8ae18884670cf5c2014b780b014a6a1d74e793", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x7a1dbab750f12a90eb1b60d2ae3ad17d4d81effe", + "function": null, + "arguments": [ + "0xD830D15D3dc0C269F3dBAa0F3e8626d33CFdaBe1" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5d17a", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61044238819003918201601f19168301916001600160401b03831184841017607757808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103b6908161008c823960805181818160c60152818161021d01526102d80152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816348aac39214610250575080635c60da1b146102085763ea6d13ac1461003d575f80fd5b6100463661033f565b60405161006c602080838181019587898837878201908382015203018084520182610394565b519020905f92604051927fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358501523060581b845260ff84538060158501526055842094341591863b156101eb5750506001906101e6575f38818034895af1156101d9575b836040525f60605215610157575b6040516001600160a01b0385168152602090f35b9180825f9493859483378101838152039082855af13d156101d4573d67ffffffffffffffff81116101c0576040519061019a601f8201601f191660200183610394565b81525f60203d92013e5b156101b1575f8080610143565b63487e630960e11b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b6101a4565b63b12d13eb5f526004601cfd5b610135565b91509450605f602134f593846101355763301164255f526004601cfd5b3461024c575f36600319011261024c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461024c57806102826020806102653661033f565b908084889499019889378201908382015203018084520182610394565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040525f60605260ff5f536035523060601b600152601552602060555f205f6035526040519060018060a01b03168152f35b90604060031983011261024c5760043567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060243590565b90601f8019910116810190811067ffffffffffffffff8211176101c05760405256000000000000000000000000d830d15d3dc0c269f3dbaa0f3e8626d33cfdabe1", + "nonce": "0xdc", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3dc7ffaf7f3863ff02192df874788a6d7a81c56f22868b7f2093148e3a1678a6", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x7a1dBAB750f12a90EB1B60D2Ae3aD17D4D81EfFe", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000007a1dbab750f12a90eb1b60d2ae3ad17d4d81effe0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xdd", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x669939", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x7ab477fc1685722970262ca4e7a2b85b9f6c4dbbe44a19161c6e98cd6c15d86f", + "transactionIndex": "0x10", + "blockHash": "0x3fa31ec4f88d6ac94ecd74d436a58530c1c8df97338b33a4168549a95026dffa", + "blockNumber": "0x12339f6", + "gasUsed": "0x4f2032", + "effectiveGasPrice": "0x90385", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null, + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x4d5e", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x1dab9ca9c37", + "l1GasPrice": "0x2080e042d", + "l1GasUsed": "0x33d07" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x6a93ac", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x01eb882af537c2473244b8f02c8ae18884670cf5c2014b780b014a6a1d74e793", + "transactionIndex": "0x11", + "blockHash": "0x3fa31ec4f88d6ac94ecd74d436a58530c1c8df97338b33a4168549a95026dffa", + "blockNumber": "0x12339f6", + "gasUsed": "0x3fa73", + "effectiveGasPrice": "0x90385", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null, + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x4d5e", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x1a7010d5ba", + "l1GasPrice": "0x2080e042d", + "l1GasUsed": "0x2e2b" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x6b48bf", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x3dc7ffaf7f3863ff02192df874788a6d7a81c56f22868b7f2093148e3a1678a6", + "transactionIndex": "0x12", + "blockHash": "0x3fa31ec4f88d6ac94ecd74d436a58530c1c8df97338b33a4168549a95026dffa", + "blockNumber": "0x12339f6", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x90385", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x4d5e", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x39434d329", + "l1GasPrice": "0x2080e042d", + "l1GasUsed": "0x640" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1733939917, + "chain": 84532, + "commit": "0ff92c6" +} \ No newline at end of file diff --git a/src/Kernel.sol b/src/Kernel.sol index 7ea2fb4..28b2e63 100644 --- a/src/Kernel.sol +++ b/src/Kernel.sol @@ -44,6 +44,8 @@ import { MAGIC_VALUE_SIG_REPLAYABLE } from "./types/Constants.sol"; +import {InstallExecutorDataFormat, InstallFallbackDataFormat, InstallValidatorDataFormat} from "./types/Structs.sol"; + contract Kernel is IAccount, IAccountExecute, IERC7579Account, ValidationManager { error ExecutionReverted(); error InvalidExecutor(); @@ -357,45 +359,30 @@ contract Kernel is IAccount, IAccountExecute, IERC7579Account, ValidationManager } ValidationConfig memory config = ValidationConfig({nonce: vs.currentNonce, hook: IHook(address(bytes20(initData[0:20])))}); - bytes calldata validatorData; - bytes calldata hookData; - bytes calldata selectorData; + InstallValidatorDataFormat calldata data; assembly { - validatorData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 20))) - validatorData.length := calldataload(sub(validatorData.offset, 32)) - hookData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 52))) - hookData.length := calldataload(sub(hookData.offset, 32)) - selectorData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 84))) - selectorData.length := calldataload(sub(selectorData.offset, 32)) + data := add(initData.offset, 20) } - _installValidation(vId, config, validatorData, hookData); - if (selectorData.length == 4) { + _installValidation(vId, config, data.validatorData, data.hookData); + if (data.selectorData.length == 4) { // NOTE: we don't allow configure on selector data on v3.1+, but using bytes instead of bytes4 for selector data to make sure we are future proof - _setSelector(vId, bytes4(selectorData[0:4]), true); + _setSelector(vId, bytes4(data.selectorData[0:4]), true); } } else if (moduleType == MODULE_TYPE_EXECUTOR) { - bytes calldata executorData; - bytes calldata hookData; + InstallExecutorDataFormat calldata data; assembly { - executorData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 20))) - executorData.length := calldataload(sub(executorData.offset, 32)) - hookData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 52))) - hookData.length := calldataload(sub(hookData.offset, 32)) + data := add(initData.offset, 20) } IHook hook = IHook(address(bytes20(initData[0:20]))); - _installExecutor(IExecutor(module), executorData, hook); - _installHook(hook, hookData); + _installExecutor(IExecutor(module), data.executorData, hook); + _installHook(hook, data.hookData); } else if (moduleType == MODULE_TYPE_FALLBACK) { - bytes calldata selectorData; - bytes calldata hookData; + InstallFallbackDataFormat calldata data; assembly { - selectorData.offset := add(add(initData.offset, 56), calldataload(add(initData.offset, 24))) - selectorData.length := calldataload(sub(selectorData.offset, 32)) - hookData.offset := add(add(initData.offset, 56), calldataload(add(initData.offset, 56))) - hookData.length := calldataload(sub(hookData.offset, 32)) + data := add(initData.offset, 24) } - _installSelector(bytes4(initData[0:4]), module, IHook(address(bytes20(initData[4:24]))), selectorData); - _installHook(IHook(address(bytes20(initData[4:24]))), hookData); + _installSelector(bytes4(initData[0:4]), module, IHook(address(bytes20(initData[4:24]))), data.selectorData); + _installHook(IHook(address(bytes20(initData[4:24]))), data.hookData); } else if (moduleType == MODULE_TYPE_HOOK) { // force call onInstall for hook // NOTE: for hook, kernel does not support independent hook install, diff --git a/src/core/ExecutorManager.sol b/src/core/ExecutorManager.sol index 0c0591d..1479067 100644 --- a/src/core/ExecutorManager.sol +++ b/src/core/ExecutorManager.sol @@ -32,7 +32,7 @@ abstract contract ExecutorManager { function _installExecutor(IExecutor executor, bytes calldata executorData, IHook hook) internal { _installExecutorWithoutInit(executor, hook); if (executorData.length == 0) { - (bool success,) = address(executor).call(abi.encodeWithSelector(IModule.onInstall.selector, hex"")); + (bool success,) = address(executor).call(abi.encodeWithSelector(IModule.onInstall.selector, hex"")); // ignore return value } else { executor.onInstall(executorData); } diff --git a/src/core/ValidationManager.sol b/src/core/ValidationManager.sol index 3a887c2..6c5fd76 100644 --- a/src/core/ValidationManager.sol +++ b/src/core/ValidationManager.sol @@ -21,9 +21,18 @@ import { } from "../utils/ValidationTypeLib.sol"; import {CALLTYPE_SINGLE, MODULE_TYPE_POLICY, MODULE_TYPE_SIGNER, MODULE_TYPE_VALIDATOR} from "../types/Constants.sol"; +import {calldataKeccak, getSender} from "../utils/Utils.sol"; import {PermissionId, getValidationResult, CallType} from "../types/Types.sol"; import {_intersectValidationData} from "../utils/KernelValidationResult.sol"; +import { + PermissionSigMemory, + PermissionDisableDataFormat, + PermissionEnableDataFormat, + UserOpSigEnableDataFormat, + SelectorDataFormat, + SelectorDataFormatWithExecutorData +} from "../types/Structs.sol"; import { VALIDATION_MODE_DEFAULT, @@ -184,21 +193,20 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe } function _uninstallPermission(PermissionId pId, bytes calldata data) internal { - bytes[] calldata permissionDisableData; + PermissionDisableDataFormat calldata permissionDisableData; assembly { - permissionDisableData.offset := add(add(data.offset, 32), calldataload(data.offset)) - permissionDisableData.length := calldataload(sub(permissionDisableData.offset, 32)) + permissionDisableData := data.offset } PermissionConfig storage config = _validationStorage().permissionConfig[pId]; unchecked { - if (permissionDisableData.length != config.policyData.length + 1) { + if (permissionDisableData.data.length != config.policyData.length + 1) { revert PermissionDataLengthMismatch(); } PolicyData[] storage policyData = config.policyData; for (uint256 i = 0; i < policyData.length; i++) { (, IPolicy policy) = ValidatorLib.decodePolicyData(policyData[i]); ModuleLib.uninstallModule( - address(policy), abi.encodePacked(bytes32(PermissionId.unwrap(pId)), permissionDisableData[i]) + address(policy), abi.encodePacked(bytes32(PermissionId.unwrap(pId)), permissionDisableData.data[i]) ); emit IERC7579Account.ModuleUninstalled(MODULE_TYPE_POLICY, address(policy)); } @@ -206,7 +214,7 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe ModuleLib.uninstallModule( address(config.signer), abi.encodePacked( - bytes32(PermissionId.unwrap(pId)), permissionDisableData[permissionDisableData.length - 1] + bytes32(PermissionId.unwrap(pId)), permissionDisableData.data[permissionDisableData.data.length - 1] ) ); emit IERC7579Account.ModuleUninstalled(MODULE_TYPE_SIGNER, address(config.signer)); @@ -251,15 +259,15 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe } } - function _installPermission(PermissionId permission, bytes calldata data) internal { + function _installPermission(PermissionId permission, bytes calldata permissionData) internal { ValidationStorage storage state = _validationStorage(); - bytes[] calldata permissionEnableData; + PermissionEnableDataFormat calldata permissionEnableData; assembly { - permissionEnableData.offset := add(add(data.offset, 32), calldataload(data.offset)) - permissionEnableData.length := calldataload(sub(permissionEnableData.offset, 32)) + permissionEnableData := permissionData.offset } + bytes[] calldata data = permissionEnableData.data; // allow up to 0xfe, 0xff is dedicated for signer - if (permissionEnableData.length > 254 || permissionEnableData.length == 0) { + if (data.length > 254 || data.length == 0) { revert PolicyDataTooLarge(); } @@ -268,27 +276,18 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe delete state.permissionConfig[permission].policyData; } unchecked { - for (uint256 i = 0; i < permissionEnableData.length - 1; i++) { - state.permissionConfig[permission].policyData.push( - PolicyData.wrap(bytes22(permissionEnableData[i][0:22])) - ); - IPolicy(address(bytes20(permissionEnableData[i][2:22]))).onInstall( - abi.encodePacked(bytes32(PermissionId.unwrap(permission)), permissionEnableData[i][22:]) - ); - emit IERC7579Account.ModuleInstalled( - MODULE_TYPE_POLICY, address(bytes20(permissionEnableData[i][2:22])) + for (uint256 i = 0; i < data.length - 1; i++) { + state.permissionConfig[permission].policyData.push(PolicyData.wrap(bytes22(data[i][0:22]))); + IPolicy(address(bytes20(data[i][2:22]))).onInstall( + abi.encodePacked(bytes32(PermissionId.unwrap(permission)), data[i][22:]) ); + emit IERC7579Account.ModuleInstalled(MODULE_TYPE_POLICY, address(bytes20(data[i][2:22]))); } // last permission data will be signer - ISigner signer = ISigner(address(bytes20(permissionEnableData[permissionEnableData.length - 1][2:22]))); + ISigner signer = ISigner(address(bytes20(data[data.length - 1][2:22]))); state.permissionConfig[permission].signer = signer; - state.permissionConfig[permission].permissionFlag = - PassFlag.wrap(bytes2(permissionEnableData[permissionEnableData.length - 1][0:2])); - signer.onInstall( - abi.encodePacked( - bytes32(PermissionId.unwrap(permission)), permissionEnableData[permissionEnableData.length - 1][22:] - ) - ); + state.permissionConfig[permission].permissionFlag = PassFlag.wrap(bytes2(data[data.length - 1][0:2])); + signer.onInstall(abi.encodePacked(bytes32(PermissionId.unwrap(permission)), data[data.length - 1][22:])); emit IERC7579Account.ModuleInstalled(MODULE_TYPE_SIGNER, address(signer)); } } @@ -301,14 +300,20 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe PackedUserOperation memory userOp = op; bytes calldata userOpSig = op.signature; unchecked { - if (userOpSig.length >= 32 && bytes32(userOpSig[0:32]) == MAGIC_VALUE_SIG_REPLAYABLE) { - // when replayable - userOpSig = op.signature[32:]; - userOpHash = replayableUserOpHash(op, msg.sender); // NOTE : msg.sender will be entrypoint - } - if (vMode == VALIDATION_MODE_ENABLE) { - (validationData, userOpSig) = _enableMode(vId, userOpSig); - userOp.signature = userOpSig; + { + bool isReplayable; + if (userOpSig.length >= 32 && bytes32(userOpSig[0:32]) == MAGIC_VALUE_SIG_REPLAYABLE) { + // when replayable + userOpSig = userOpSig[32:]; + userOp.signature = userOpSig; + isReplayable = true; + userOpHash = replayableUserOpHash(op, msg.sender); // NOTE : msg.sender will be entrypoint + } + + if (vMode == VALIDATION_MODE_ENABLE) { + (validationData, userOpSig) = _enableMode(vId, userOpSig, isReplayable); + userOp.signature = userOpSig; + } } ValidationType vType = ValidatorLib.getType(vId); @@ -368,58 +373,31 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe ); } - function calldataKeccak(bytes calldata data) internal pure returns (bytes32 ret) { - assembly ("memory-safe") { - let mem := mload(0x40) - let len := data.length - calldatacopy(mem, data.offset, len) - ret := keccak256(mem, len) - } - } - - function getSender(PackedUserOperation calldata userOp) internal pure returns (address) { - address data; - //read sender from userOp, which is first userOp member (saves 800 gas...) - assembly { - data := calldataload(userOp) - } - return address(uint160(data)); - } - - function _enableMode(ValidationId vId, bytes calldata packedData) + function _enableMode(ValidationId vId, bytes calldata packedData, bool isReplayable) internal returns (ValidationData validationData, bytes calldata userOpSig) { - validationData = _enableValidationWithSig(vId, packedData); - + UserOpSigEnableDataFormat calldata enableData; assembly { - userOpSig.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 148))) - userOpSig.length := calldataload(sub(userOpSig.offset, 32)) + enableData := add(packedData.offset, 20) } + address hook = address(bytes20(packedData[0:20])); + validationData = _enableValidationWithSig(vId, hook, enableData, isReplayable); - return (validationData, userOpSig); + return (validationData, enableData.userOpSig); } - function _enableValidationWithSig(ValidationId vId, bytes calldata packedData) - internal - returns (ValidationData validationData) - { - bytes calldata enableSig; - ( - ValidationConfig memory config, - bytes calldata validatorData, - bytes calldata hookData, - bytes calldata selectorData, - bytes32 digest - ) = _enableDigest(vId, packedData); - assembly { - enableSig.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 116))) - enableSig.length := calldataload(sub(enableSig.offset, 32)) - } - validationData = _checkEnableSig(digest, enableSig); - _installValidation(vId, config, validatorData, hookData); - _configureSelector(selectorData); - _setSelector(vId, bytes4(selectorData[0:4]), true); + function _enableValidationWithSig( + ValidationId vId, + address hook, + UserOpSigEnableDataFormat calldata enableData, + bool isReplayable + ) internal returns (ValidationData validationData) { + (ValidationConfig memory config, bytes32 digest) = _enableDigest(vId, hook, enableData, isReplayable); + validationData = _checkEnableSig(digest, enableData.enableSig); + _installValidation(vId, config, enableData.validatorData, enableData.hookData); + _configureSelector(enableData.selectorData); + _setSelector(vId, bytes4(enableData.selectorData[0:4]), true); } function _checkEnableSig(bytes32 digest, bytes calldata enableSig) @@ -448,36 +426,35 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe function _configureSelector(bytes calldata selectorData) internal { bytes4 selector = bytes4(selectorData[0:4]); + if (selectorData.length >= 4) { if (selectorData.length >= 44) { - // install selector with hook and target contract - bytes calldata selectorInitData; - bytes calldata hookInitData; - IModule selectorModule = IModule(address(bytes20(selectorData[4:24]))); + SelectorDataFormat calldata data; assembly { - selectorInitData.offset := - add(add(selectorData.offset, 76), calldataload(add(selectorData.offset, 44))) - selectorInitData.length := calldataload(sub(selectorInitData.offset, 32)) - hookInitData.offset := add(add(selectorData.offset, 76), calldataload(add(selectorData.offset, 76))) - hookInitData.length := calldataload(sub(hookInitData.offset, 32)) + data := add(selectorData.offset, 44) } - if (CallType.wrap(bytes1(selectorInitData[0])) == CALLTYPE_SINGLE && selectorModule.isModuleType(2)) { + // install selector with hook and target contract + IModule selectorModule = IModule(address(bytes20(selectorData[4:24]))); + if ( + CallType.wrap(bytes1(data.selectorInitData[0])) == CALLTYPE_SINGLE && selectorModule.isModuleType(2) + ) { // also adds as executor when fallback module is also a executor - bytes calldata executorHookData; + SelectorDataFormatWithExecutorData calldata dataWithExecutor; assembly { - executorHookData.offset := - add(add(selectorData.offset, 76), calldataload(add(selectorData.offset, 108))) - executorHookData.length := calldataload(sub(executorHookData.offset, 32)) + dataWithExecutor := data } - IHook executorHook = IHook(address(bytes20(executorHookData[0:20]))); + IHook executorHook = IHook(address(bytes20(dataWithExecutor.executorHookData[0:20]))); // if module is also executor, install as executor _installExecutorWithoutInit(IExecutor(address(selectorModule)), executorHook); - _installHook(executorHook, executorHookData[20:]); + _installHook(executorHook, dataWithExecutor.executorHookData[20:]); } _installSelector( - selector, address(selectorModule), IHook(address(bytes20(selectorData[24:44]))), selectorInitData + selector, + address(selectorModule), + IHook(address(bytes20(selectorData[24:44]))), + data.selectorInitData ); - _installHook(IHook(address(bytes20(selectorData[24:44]))), hookInitData); + _installHook(IHook(address(bytes20(selectorData[24:44]))), data.hookInitData); } else { // set without install require(selectorData.length == 4, "Invalid selectorData"); @@ -485,54 +462,29 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe } } - function _enableDigest(ValidationId vId, bytes calldata packedData) - internal - view - returns ( - ValidationConfig memory config, - bytes calldata validatorData, - bytes calldata hookData, - bytes calldata selectorData, - bytes32 digest - ) - { + function _enableDigest( + ValidationId vId, + address hook, + UserOpSigEnableDataFormat calldata enableData, + bool isReplayable + ) internal view returns (ValidationConfig memory config, bytes32 digest) { ValidationStorage storage state = _validationStorage(); - config.hook = IHook(address(bytes20(packedData[0:20]))); + config.hook = IHook(hook); config.nonce = state.currentNonce; - assembly { - validatorData.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 20))) - validatorData.length := calldataload(sub(validatorData.offset, 32)) - hookData.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 52))) - hookData.length := calldataload(sub(hookData.offset, 32)) - selectorData.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 84))) - selectorData.length := calldataload(sub(selectorData.offset, 32)) - } - digest = _hashTypedData( - keccak256( - abi.encode( - ENABLE_TYPE_HASH, - ValidationId.unwrap(vId), - state.currentNonce, - config.hook, - keccak256(validatorData), - keccak256(hookData), - keccak256(selectorData) - ) + bytes32 structHash = keccak256( + abi.encode( + ENABLE_TYPE_HASH, + ValidationId.unwrap(vId), + config.nonce, + config.hook, + calldataKeccak(enableData.validatorData), + calldataKeccak(enableData.hookData), + calldataKeccak(enableData.selectorData) ) ); - } - struct PermissionSigMemory { - uint8 idx; - uint256 length; - ValidationData validationData; - PermissionId permission; - PassFlag flag; - IPolicy policy; - bytes permSig; - address caller; - bytes32 digest; + digest = isReplayable ? _chainAgnosticHashTypedData(structHash) : _hashTypedData(structHash); } function _checkUserOpPolicy(PermissionId pId, PackedUserOperation memory userOp, bytes calldata userOpSig) @@ -654,8 +606,9 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe return isReplayable ? _chainAgnosticHashTypedData(structHash) : _hashTypedData(structHash); } + // chain agnostic internal functions /// @dev Returns the EIP-712 domain separator. - function _buildChainAgnosticDomainSeparator() private view returns (bytes32 separator) { + function _buildChainAgnosticDomainSeparator() internal view returns (bytes32 separator) { // We will use `separator` to store the name hash to save a bit of gas. bytes32 versionHash; (string memory name, string memory version) = _domainNameAndVersion(); @@ -673,7 +626,7 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe } } - function _chainAgnosticHashTypedData(bytes32 structHash) internal view virtual returns (bytes32 digest) { + function _chainAgnosticHashTypedData(bytes32 structHash) internal view returns (bytes32 digest) { // we don't do cache stuff here digest = _buildChainAgnosticDomainSeparator(); /// @solidity memory-safe-assembly diff --git a/src/sdk/KernelTestBase.sol b/src/sdk/KernelTestBase.sol index 4521a13..ace0fc6 100644 --- a/src/sdk/KernelTestBase.sol +++ b/src/sdk/KernelTestBase.sol @@ -105,7 +105,8 @@ abstract contract KernelTestBase is TestPlus, Test { isExecutor, encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); _; @@ -166,11 +167,12 @@ abstract contract KernelTestBase is TestPlus, Test { return entrypoint.getNonce(address(kernel), nonceKey); } - function getEnableDigest(ValidationType vType, bool overrideValidation, bytes memory selectorData) - internal - view - returns (bytes32) - { + function getEnableDigest( + ValidationType vType, + bool overrideValidation, + bytes memory selectorData, + bool isReplayable + ) internal view returns (bytes32) { uint32 nonce = kernel.currentNonce(); if (overrideValidation) { nonce = nonce + 1; @@ -207,8 +209,13 @@ abstract contract KernelTestBase is TestPlus, Test { ) ); - bytes32 digest = - keccak256(abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.2", address(kernel)), hash)); + bytes32 digest; + if (isReplayable) { + digest = chainAgnosticHashTypedData(address(kernel), "Kernel", "0.3.2", hash); + } else { + digest = + keccak256(abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.2", address(kernel)), hash)); + } return digest; } @@ -251,10 +258,11 @@ abstract contract KernelTestBase is TestPlus, Test { bytes memory selectorData, PackedUserOperation memory op, bool successEnable, - bool successUserOp + bool successUserOp, + bool isReplayable ) internal returns (bytes memory) { bytes memory enableSig = _rootSignDigest(digest, successEnable); - bytes memory userOpSig = _signUserOp(vType, op, successUserOp); + bytes memory userOpSig = _signUserOp(vType, op, successUserOp, isReplayable); IHook hook; bytes memory validatorData; bytes memory hookData; @@ -270,7 +278,7 @@ abstract contract KernelTestBase is TestPlus, Test { revert("Invalid validation type"); } return encodeEnableSignature( - hook, validatorData, abi.encodePacked(hex"ff", hookData), selectorData, enableSig, userOpSig + hook, validatorData, abi.encodePacked(hex"ff", hookData), selectorData, enableSig, userOpSig, isReplayable ); } @@ -280,7 +288,8 @@ abstract contract KernelTestBase is TestPlus, Test { bool isExecutor, bytes memory callData, bool successEnable, - bool successUserOp + bool successUserOp, + bool isReplayable ) internal returns (PackedUserOperation memory op) { if (isFallback && isExecutor) { mockFallback.setExecutorMode(true); @@ -303,10 +312,14 @@ abstract contract KernelTestBase is TestPlus, Test { }); if (enable) { bytes memory selectorData = encodeSelectorData(isFallback, isExecutor); - bytes32 digest = getEnableDigest(vType, false, selectorData); - op.signature = getEnableSignature(vType, digest, selectorData, op, successEnable, successUserOp); + bytes32 digest = getEnableDigest(vType, false, selectorData, isReplayable); + op.signature = + getEnableSignature(vType, digest, selectorData, op, successEnable, successUserOp, isReplayable); } else { - op.signature = _signUserOp(vType, op, successUserOp); + op.signature = _signUserOp(vType, op, successUserOp, isReplayable); + } + if (isReplayable) { + op.signature = abi.encodePacked(MAGIC_VALUE_SIG_REPLAYABLE, op.signature); } } @@ -336,7 +349,7 @@ abstract contract KernelTestBase is TestPlus, Test { function testDeployWithFactory() external { vm.deal(address(kernel), 1e18); PackedUserOperation[] memory ops = new PackedUserOperation[](1); - ops[0] = _prepareUserOp(VALIDATION_TYPE_ROOT, false, false, hex"", true, true); + ops[0] = _prepareUserOp(VALIDATION_TYPE_ROOT, false, false, hex"", true, true, false); // _prepareRootUserOp(hex"", true); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); } @@ -395,7 +408,8 @@ abstract contract KernelTestBase is TestPlus, Test { bytes memory hookData, bytes memory selectorData, bytes memory enableSig, - bytes memory userOpSig + bytes memory userOpSig, + bool isReplayable ) internal pure returns (bytes memory) { return abi.encodePacked( abi.encodePacked(hook), abi.encode(validatorData, hookData, selectorData, enableSig, userOpSig) @@ -447,27 +461,36 @@ abstract contract KernelTestBase is TestPlus, Test { } } - function _signUserOp(ValidationType vType, PackedUserOperation memory op, bool success) + function _signUserOp(ValidationType vType, PackedUserOperation memory op, bool success, bool isReplayable) internal virtual - returns (bytes memory data) + returns (bytes memory sig) { + bytes32 userOpHash = entrypoint.getUserOpHash(op); + if (isReplayable) { + userOpHash = kernel.replayableUserOpHash(op, address(entrypoint)); + } if (vType == VALIDATION_TYPE_VALIDATOR) { - return _validatorSignUserOp(op, success); + sig = _validatorSignUserOp(op, userOpHash, success); } else if (vType == VALIDATION_TYPE_PERMISSION) { - return _permissionSignUserOp(op, success); + sig = _permissionSignUserOp(op, userOpHash, success); } else if (vType == VALIDATION_TYPE_ROOT) { - return _rootSignUserOp(op, success); + sig = _rootSignUserOp(op, userOpHash, success); + } else { + revert("Invalid validation type"); } - revert("Invalid validation type"); } - function _rootSignUserOp(PackedUserOperation memory op, bool success) internal virtual returns (bytes memory) { + function _rootSignUserOp(PackedUserOperation memory op, bytes32 userOpHash, bool success) + internal + virtual + returns (bytes memory) + { mockValidator.sudoSetSuccess(success); return success ? abi.encodePacked("success") : abi.encodePacked("failure"); } - function _validatorSignUserOp(PackedUserOperation memory, bool success) + function _validatorSignUserOp(PackedUserOperation memory, bytes32 userOpHash, bool success) internal virtual returns (bytes memory data) @@ -489,7 +512,7 @@ abstract contract KernelTestBase is TestPlus, Test { } } - function _permissionSignUserOp(PackedUserOperation memory op, bool success) + function _permissionSignUserOp(PackedUserOperation memory op, bytes32 userOpHash, bool success) internal virtual returns (bytes memory data) @@ -547,7 +570,29 @@ abstract contract KernelTestBase is TestPlus, Test { false, encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), true, - success + success, + false + ); + if (!success) { + vm.expectRevert(abi.encodeWithSelector(IEntryPoint.FailedOp.selector, 0, "AA24 signature error")); + } + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + if (success) { + _rootValidatorSuccessCheck(); + } + } + + function testRootValidateUserReplayable(bool success) external whenInitialized { + vm.deal(address(kernel), 1e18); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_ROOT, + false, + false, + encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), + true, + success, + true ); if (!success) { vm.expectRevert(abi.encodeWithSelector(IEntryPoint.FailedOp.selector, 0, "AA24 signature error")); @@ -609,7 +654,8 @@ abstract contract KernelTestBase is TestPlus, Test { bool useFallback, bool isExecutor, bool enableSuccess, - bool userOpSuccess + bool userOpSuccess, + bool replayable ) external whenInitialized { vm.assume(vType == VALIDATION_TYPE_VALIDATOR || vType == VALIDATION_TYPE_PERMISSION); if (useFallback == false && isExecutor == true) { @@ -625,7 +671,8 @@ abstract contract KernelTestBase is TestPlus, Test { ? abi.encodeWithSelector(MockFallback.setData.selector, 123456) : encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), enableSuccess, - userOpSuccess + userOpSuccess, + replayable ); if (!enableSuccess) { vm.expectRevert( @@ -707,7 +754,8 @@ abstract contract KernelTestBase is TestPlus, Test { ) ), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); } @@ -721,7 +769,8 @@ abstract contract KernelTestBase is TestPlus, Test { false, abi.encodeWithSelector(kernel.uninstallModule.selector, 1, address(validator), hex""), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); } @@ -766,7 +815,8 @@ abstract contract KernelTestBase is TestPlus, Test { ) ), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); } @@ -790,7 +840,13 @@ abstract contract KernelTestBase is TestPlus, Test { vm.expectRevert(); MockAction(address(kernel)).doSomething(); PackedUserOperation memory op = _prepareUserOp( - VALIDATION_TYPE_ROOT, false, false, abi.encodeWithSelector(MockAction.doSomething.selector), true, true + VALIDATION_TYPE_ROOT, + false, + false, + abi.encodeWithSelector(MockAction.doSomething.selector), + true, + true, + false ); PackedUserOperation[] memory ops = new PackedUserOperation[](1); ops[0] = op; @@ -824,7 +880,8 @@ abstract contract KernelTestBase is TestPlus, Test { abi.encodePacked(MockAction.doSomething.selector) ), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); @@ -855,7 +912,8 @@ abstract contract KernelTestBase is TestPlus, Test { ) ), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); } @@ -890,7 +948,8 @@ abstract contract KernelTestBase is TestPlus, Test { false, abi.encodeWithSelector(MockFallback.fallbackFunction.selector, uint256(10)), true, - true + true, + false ); PackedUserOperation[] memory ops = new PackedUserOperation[](1); ops[0] = op; @@ -922,7 +981,8 @@ abstract contract KernelTestBase is TestPlus, Test { abi.encodePacked(MockFallback.fallbackFunction.selector) ), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); SelectorManager.SelectorConfig memory config = kernel.selectorConfig(MockFallback.fallbackFunction.selector); @@ -949,7 +1009,8 @@ abstract contract KernelTestBase is TestPlus, Test { ) ), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); } @@ -1020,7 +1081,8 @@ abstract contract KernelTestBase is TestPlus, Test { false, abi.encodeWithSelector(kernel.uninstallModule.selector, 2, address(mockExecutor), hex""), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); ExecutorManager.ExecutorConfig memory config = kernel.executorConfig(mockExecutor); @@ -1054,7 +1116,8 @@ abstract contract KernelTestBase is TestPlus, Test { false, encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); ValidationManager.ValidationConfig memory config = @@ -1082,7 +1145,8 @@ abstract contract KernelTestBase is TestPlus, Test { false, encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), true, - true + true, + false ); entrypoint.handleOps(ops, payable(address(0xdeadbeef))); assertEq(kernel.currentNonce(), 1); @@ -1118,4 +1182,48 @@ abstract contract KernelTestBase is TestPlus, Test { kernel.execute(mode, data); assertEq(callee.value(), sum); } + + /// @dev Returns the EIP-712 domain separator. + function buildChainAgnosticDomainSeparator(address addr, string memory name, string memory version) + private + view + returns (bytes32 separator) + { + // We will use `separator` to store the name hash to save a bit of gas. + bytes32 versionHash; + separator = keccak256(bytes(name)); + versionHash = keccak256(bytes(version)); + bytes32 typeHash = + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); + /// @solidity memory-safe-assembly + assembly { + let m := mload(0x40) // Load the free memory pointer. + mstore(m, typeHash) + mstore(add(m, 0x20), separator) // Name hash. + mstore(add(m, 0x40), versionHash) + mstore(add(m, 0x60), 0x00) // NOTE : user chainId == 0 as eip 7702 did + mstore(add(m, 0x80), addr) + separator := keccak256(m, 0xa0) + } + } + + function chainAgnosticHashTypedData(address addr, string memory name, string memory version, bytes32 structHash) + internal + view + virtual + returns (bytes32 digest) + { + // we don't do cache stuff here + digest = buildChainAgnosticDomainSeparator(addr, name, version); + /// @solidity memory-safe-assembly + assembly { + // Compute the digest. + mstore(0x00, 0x1901000000000000) // Store "\x19\x01". + mstore(0x1a, digest) // Store the domain separator. + mstore(0x3a, structHash) // Store the struct hash. + digest := keccak256(0x18, 0x42) + // Restore the part of the free memory slot that was overwritten. + mstore(0x3a, 0) + } + } } diff --git a/src/types/Structs.sol b/src/types/Structs.sol index 263fcbd..a568e16 100644 --- a/src/types/Structs.sol +++ b/src/types/Structs.sol @@ -1,8 +1,67 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.23; +import {ValidationData, PermissionId, PassFlag} from "./Types.sol"; +import {IPolicy} from "../interfaces/IERC7579Modules.sol"; + struct Execution { address target; uint256 value; bytes callData; } + +// === for internal usage === +struct PermissionSigMemory { + uint8 idx; + uint256 length; + ValidationData validationData; + PermissionId permission; + PassFlag flag; + IPolicy policy; + bytes permSig; + address caller; + bytes32 digest; +} + +struct PermissionDisableDataFormat { + bytes[] data; +} + +struct PermissionEnableDataFormat { + bytes[] data; +} + +struct UserOpSigEnableDataFormat { + bytes validatorData; + bytes hookData; + bytes selectorData; + bytes enableSig; + bytes userOpSig; +} + +struct SelectorDataFormat { + bytes selectorInitData; + bytes hookInitData; +} + +struct SelectorDataFormatWithExecutorData { + bytes selectorInitData; + bytes hookInitData; + bytes executorHookData; +} + +struct InstallValidatorDataFormat { + bytes validatorData; + bytes hookData; + bytes selectorData; +} + +struct InstallExecutorDataFormat { + bytes executorData; + bytes hookData; +} + +struct InstallFallbackDataFormat { + bytes selectorData; + bytes hookData; +} diff --git a/src/utils/Utils.sol b/src/utils/Utils.sol new file mode 100644 index 0000000..5212336 --- /dev/null +++ b/src/utils/Utils.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {PackedUserOperation} from "../interfaces/PackedUserOperation.sol"; + +function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) { + assembly ("memory-safe") { + let mem := mload(0x40) + let len := data.length + calldatacopy(mem, data.offset, len) + ret := keccak256(mem, len) + } +} + +function getSender(PackedUserOperation calldata userOp) pure returns (address) { + address data; + //read sender from userOp, which is first userOp member (saves 800 gas...) + assembly { + data := calldataload(userOp) + } + return address(uint160(data)); +} diff --git a/test/ECDSAValidator.t.sol b/test/ECDSAValidator.t.sol index 0eeebb8..56955bd 100644 --- a/test/ECDSAValidator.t.sol +++ b/test/ECDSAValidator.t.sol @@ -37,14 +37,13 @@ contract ECDSAValidatorTest is KernelTestBase { return sig; } - function _rootSignUserOp(PackedUserOperation memory op, bool success) + function _rootSignUserOp(PackedUserOperation memory op, bytes32 userOpHash, bool success) internal view override returns (bytes memory) { - bytes32 hash = entrypoint.getUserOpHash(op); - return _rootSignDigest(hash, success); + return _rootSignDigest(userOpHash, success); } function testExternalInteraction() external whenInitialized { @@ -112,7 +111,8 @@ contract ECDSAValidatorTest is KernelTestBase { abi.encodePacked(bytes1(0xff), validationConfig.hookData), abi.encodePacked(kernel.execute.selector), _rootSignDigest(digest, true), - _rootSignUserOp(op, true) + _rootSignUserOp(op, entrypoint.getUserOpHash(op), true), + false ); } }