Ethereum
0x7cd62b0258cc51ca988cafc6ff0597516c844b03
Decompiled Solidity recovered from this contract's runtime bytecode. Best-effort reconstruction — confirm behaviour against on-chain state.
Decompilation outputEthereum · 0x7cd62b02…6c844b0318.9 KB11.2 s
This result is permanently available athttps://decompiler.exvul.com/ethereum/0x7cd62b0258cc51ca988cafc6ff0597516c844b03
858 lines · Click a variable or keyword to highlight its references · Click a line number to copy its link; Shift-click to copy a block link
//decompiled by exvvul decompiler tool contact@exvul.com https://x.com/exvulsec// SPDX-License-Identifier: MIT >=0.8.0; { ; // STORAGE[0x0] ; // STORAGE[0x33] ; // STORAGE[0x34] ; // STORAGE[0x36] bytes 0 to 19 ( => ) ; // STORAGE[0x37] // DESOLEX_STORAGE_CONFLICT_RESOLVED: mapping value 0: bool [ResolvedAbi] vs uint256 [VerifiedAbi] (selected uint256) ; // STORAGE[0x38] ; // STORAGE[0x39] bytes 0 to 19 ; // STORAGE[0x3a] ; // STORAGE[0x3b] bytes 0 to 19 ; ( ); ( , , , ); ( ); (); ( , , , ); ( ); () { (. == , "Must be owner"); ; } () { // Synthetic compatibility routes preserve original selectors for unresolved names. ((.. >= 4) && (. == 0xc7a73463)) { // Route to Unknown_c7a73463(address,address,uint256,address,uint256,uint256,bytes) after replacing only msg.sig. ((0x5a9a0ab4)); ; } ((.. >= 4) && (. == 0xd51c2f3d)) { // Route to Unknown_d51c2f3d(address,address,address,address,uint256,bytes) after replacing only msg.sig. ((0xea99c297)); ; } ((.. >= 4) && (. == 0xe92bdbf8)) { // Route to Unknown_e92bdbf8(address,address,uint256,uint256,address,uint256) after replacing only msg.sig. ((0x86a90b22)); ; } ((.. >= 4) && (. == 0xf5d8b396)) { // Route to Unknown_f5d8b396(address,address,address,uint256,uint256,bytes) after replacing only msg.sig. ((0x25d1ed6b)); ; } (); } ( , , ) ( ) { (.. != 0x0); ( , ) = .(, , ); // staticcall (); (!(. < 0x40)); .(., ()); } () ( ) { = 0; ; () { = 0x40 + ; (!( < .)) { ; } = + 0x20; } = . + (0x20 + (0x20 + )); (0x1f & (.)) { = 0x20 + ((. + (0x20 + (0x20 + ))) - (0x1f & (.))); } .((0x20 + ) - , ., (~((0x0100 ** (0x20 - (0x1f & (.)))) - 0x01)) & ); } ( , , , ) { (. == (), "RM: must be called via execute()"); = 0; ; () { = 0x20 + (0x20 + (0x24 + )); (!( < .)) { ; } = + 0x20; } = . + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))); (0x1f & (.)) { = 0x20 + ((. + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + )))))) - (0x1f & (.))); } = 0x20 + ; = ; = .; () { ( < 0x20) { ; } = + 0x20; = + 0x20; = - 0x20; } ( , ) = ().(, , , ); // call = 0x60; (. != 0) { = + ((. + 0x3f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)); = ; } = ; () { = > 0; } (!) { (!( > 0)); (, "BM: wallet invoke reverted"); } { (!( < 0x20)); (!( > 0x0100000000)); (!(( + (0x20 + ) + 0x20) > ((0x20 + ) + ))); (!(( > 0x0100000000) | (( + (0x20 + ) + 0x20) + ( * 0x01) > ((0x20 + ) + )))); = 0; () { (!( < )) { ; } = + 0x20; } = + ( + 0x20); (0x1f & ) { = 0x20 + ( + ( + 0x20) - (0x1f & )); } = ; } (, , , ); } ( ) { (. == , "BM: caller must be wallet"); (().. != 0x0); ( , ) = ().((), 0x0d8e6e2c00000000000000000000000000000000000000000000000000000000); // call (); } ( ) () { ; } ( ) { ( != (0), "M: Address must not be null"); ((!(!(([] / 0x01)))) == 0) { [] = (0x01 * 0x01) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 & []); (); } } ( ) { ((!(!(([] / 0x01)))) == 0x01, "M: Target must be an existing manager"); [] = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00) & []; (); } ( , ) ( ) { ( <= 0x100000000); (!(((0x04 + ) + 0x20) > (0x04 + (.. - 0x04)))); (!((. > 0x0100000000) | ((0x20 + (0x04 + )) + (. * 0x01) > (0x04 + (.. - 0x04))))); ; = + (0x20 + (((0x1f + .) / 0x20) * 0x20)); (( / 0x01).. != 0x0); ( , ) = ( / 0x01).(); // staticcall (); (!(. < 0x20)); = (. / 0x02) + 0x01; ((. % 0x02) == 0) { = . / 0x02; } .(, 0); } ( , , ) { = ( / 0x0100); (!(( / 0x0100))) { = (().. == 0x0) ? 1 : 0; } (( != 0x0 || (0xff & / 0x1) == 0x0), "Contract instance has already been initialized"); (!(( / 0x0100))) { = (0x01 * 0x0100) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff & ); = (0x01 * 0x01) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 & ); } = ( * 0x01) | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & ); = ( * 0x01) | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & ); (); (!(( / 0x0100))) { = (0 * 0x0100) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff & ); } } ( ) { ((!(!(([.] / 0x01)))) == 0x01, "M: Must be manager"); = ; } () { = ( / 0x0100); (!(( / 0x0100))) { = (().. == 0x0) ? 1 : 0; } (( != 0x0 || (0xff & / 0x1) == 0x0), "Contract instance has already been initialized"); (!(( / 0x0100))) { = (0x01 * 0x0100) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff & ); = (0x01 * 0x01) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 & ); } = .; (!(( / 0x0100))) { = (0 * 0x0100) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff & ); } } ( ) { (().. != 0x0); ( , ) = .(.((0x70a08231), ())); // staticcall balanceOf (); (!(. < 0x20)); = .(, ()); (().. != 0x0); ( , ) = .(.((0xa9059cbb), ( / 0x01), )); // call transfer (); (!(. < 0x20)); .(, ()); } ( ) { ( != (0), "Address must not be null"); = ; (); } ( , , , , , ) { ( <= 0x100000000); (!(((0x04 + ) + 0x20) > (0x04 + (.. - 0x04)))); (!((. > 0x0100000000) | ((0x20 + (0x04 + )) + (. * 0x01) > (0x04 + (.. - 0x04))))); ( <= 0x100000000); (!(((0x04 + ) + 0x20) > (0x04 + (.. - 0x04)))); (!((. > 0x0100000000) | ((0x20 + (0x04 + )) + (. * 0x01) > (0x04 + (.. - 0x04))))); ; = + (0x20 + (((0x1f + .) / 0x20) * 0x20)); } ( ) { ((!(!(([.] / 0x01)))) == 0x01, "M: Must be manager"); = ( * 0x01) | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & ); } ( , , ) { = ( / 0x0100); (!(( / 0x0100))) { = (().. == 0x0) ? 1 : 0; } (( != 0x0 || (0xff & / 0x1) == 0x0), "Contract instance has already been initialized"); (!(( / 0x0100))) { = (0x01 * 0x0100) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff & ); = (0x01 * 0x01) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 & ); } = ( / 0x0100); (!(( / 0x0100))) { = (().. == 0) ? 1 : 0; } (( != 0x0 || (0xff & / 0x1) == 0x0), "Contract instance has already been initialized"); (!(( / 0x0100))) { = (0x01 * 0x0100) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff & ); = (0x01 * 0x01) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 & ); } = ( * 0x01) | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & ); = ( * 0x01) | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & ); (0x5472616e73666572000000000000000000000000000000000000000000000000); (!(( / 0x0100))) { = (0 * 0x0100) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff & ); } = ( / 0x0100); (!(( / 0x0100))) { = (().. == 0) ? 1 : 0; } (( != 0x0 || (0xff & / 0x1) == 0x0), "Contract instance has already been initialized"); (!(( / 0x0100))) { = (0x01 * 0x0100) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff & ); = (0x01 * 0x01) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 & ); } = .; (!(( / 0x0100))) { = (0 * 0x0100) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff & ); } = ( * 0x01) | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & ); (!(( / 0x0100))) { = (0 * 0x0100) | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff & ); } } ( , , , , , , ) { ( <= 0x100000000); (!(((0x04 + ) + 0x20) > (0x04 + (.. - 0x04)))); (!((. > 0x0100000000) | ((0x20 + (0x04 + )) + (. * 0x01) > (0x04 + (.. - 0x04))))); (. == (), "RM: must be called via execute()"); ( == (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)) { ; ; ; ( == (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)) { = 0x20 + ; = 0; () { (!( < )) { ; } = + 0x20; } = + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))); (0x1f & ) { = 0x20 + (( + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + )))))) - (0x1f & )); } = 0x20 + ; = ; = .; () { ( < 0x20) { ; } = + 0x20; = + 0x20; = - 0x20; } ( , ) = ().(, , , ); // call = 0x60; (. != 0) { = + ((. + 0x3f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)); = ; } = ; () { = > 0; } = ; (!) { (!( > 0)); (, "BM: wallet invoke reverted"); } { (!( < 0x20)); (!( > 0x0100000000)); (!(( + (0x20 + ) + 0x20) > ((0x20 + ) + ))); (!(( > 0x0100000000) | (( + (0x20 + ) + 0x20) + ( * 0x01) > ((0x20 + ) + )))); = 0; () { (!( < )) { ; } = + 0x20; } = + ( + 0x20); (0x1f & ) { = 0x20 + ( + ( + 0x20) - (0x1f & )); } = ; = ; } } { = 0; () { = 0x20 + (0x20 + (0x24 + )); (!( < )) { ; } = + 0x20; } = + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))); (0x1f & ) { = 0x20 + (( + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + )))))) - (0x1f & )); } = 0x20 + ; = ; = .; () { ( < 0x20) { ; } = + 0x20; = + 0x20; = - 0x20; } ( , ) = ().(, , , ); // call = 0x60; (. != 0) { = + ((. + 0x3f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)); = ; } = ; () { = > 0; } (!) { (!( > 0)); (, "BM: wallet invoke reverted"); } { (!( < 0x20)); (!( > 0x0100000000)); (!(( + (0x20 + ) + 0x20) > ((0x20 + ) + ))); (!(( > 0x0100000000) | (( + (0x20 + ) + 0x20) + ( * 0x01) > ((0x20 + ) + )))); = 0; () { (!( < )) { ; } = + 0x20; } = + ( + 0x20); (0x1f & ) { = 0x20 + ( + ( + 0x20) - (0x1f & )); } = ; } } = 0; () { = + (0x20 + (((0x1f + .) / 0x20) * 0x20)); (!( < .)) { ; } = + 0x20; } = . + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))); (0x1f & (.)) { = 0x20 + ((. + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + )))))) - (0x1f & (.))); } = 0x20 + ; = ; = .; () { ( < 0x20) { ; } = + 0x20; = + 0x20; = - 0x20; } ( , ) = ().(, , , ); // call = 0x60; (. != 0) { = + ((. + 0x3f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)); = ; } = ; () { = > 0; } (!) { (!( > 0)); (, "BM: wallet invoke reverted"); } { (!( < 0x20)); (!( > 0x0100000000)); (!(( + (0x20 + ) + 0x20) > ((0x20 + ) + ))); (!(( > 0x0100000000) | (( + (0x20 + ) + 0x20) + ( * 0x01) > ((0x20 + ) + )))); = 0; () { (!( < )) { ; } = + 0x20; } = + ( + 0x20); (0x1f & ) { = 0x20 + ( + ( + 0x20) - (0x1f & )); } = ; } (, , , ); } { = 0x20 + (0x20 + (0x24 + )); = 0; () { (!( < )) { ; } = + 0x20; = ; (.. != 0x0); ( , ) = .(, , ); // staticcall (); (!(. < 0x40)); = ; = ; = ; = 0x20 + (0x20 + (0x20 + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))))); } = + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))); (0x1f & ) { = 0x20 + (( + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + )))))) - (0x1f & )); } = 0x20 + ; = ; = .; () { ( < 0x20) { ; } = + 0x20; = + 0x20; = - 0x20; } ( , ) = ().(, , , ); // call = 0x60; (. != 0) { = + ((. + 0x3f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)); = ; } = ; () { = > 0; } = ; (!) { (!( > 0)); (, "BM: wallet invoke reverted"); } { (!( < 0x20)); (!( > 0x0100000000)); (!(( + (0x20 + ) + 0x20) > ((0x20 + ) + ))); (!(( > 0x0100000000) | (( + (0x20 + ) + 0x20) + ( * 0x01) > ((0x20 + ) + )))); = 0; () { (!( < )) { ; } = + 0x20; } = + ( + 0x20); (0x1f & ) { = 0x20 + ( + ( + 0x20) - (0x1f & )); } = ; = ; } } } ( ) () { ; } ( , , , , , ) { ( <= 0x100000000); (!(((0x04 + ) + 0x20) > (0x04 + (.. - 0x04)))); (!((. > 0x0100000000) | ((0x20 + (0x04 + )) + (. * 0x01) > (0x04 + (.. - 0x04))))); (. == (), "RM: must be called via execute()"); = 0; ; () { = + (0x20 + (((0x1f + .) / 0x20) * 0x20)); (!( < .)) { ; } = + 0x20; } = . + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))); (0x1f & (.)) { = 0x20 + ((. + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + )))))) - (0x1f & (.))); } = 0x20 + ; = ; = .; () { ( < 0x20) { ; } = + 0x20; = + 0x20; = - 0x20; } ( , ) = ().(, , , ); // call = 0x60; (. != 0) { = + ((. + 0x3f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)); = ; } = ; () { = > 0; } (!) { (!( > 0)); (, "BM: wallet invoke reverted"); } { (!( < 0x20)); (!( > 0x0100000000)); (!(( + (0x20 + ) + 0x20) > ((0x20 + ) + ))); (!(( > 0x0100000000) | (( + (0x20 + ) + 0x20) + ( * 0x01) > ((0x20 + ) + )))); = 0; () { (!( < )) { ; } = + 0x20; } = + ( + 0x20); (0x1f & ) { = 0x20 + ( + ( + 0x20) - (0x1f & )); } = ; } (, , , ); } ( , , , , , ) { (. == (), "RM: must be called via execute()"); (.. != 0x0); ( , ) = .(); // staticcall (); (!(. < 0x20)); ( != (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)) { ; ( != (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)) { = 0x20 + (0x20 + (0x24 + )); = 0; () { (!( < )) { ; } = + 0x20; (0x3 <= 0xffffffffffffffff); = + 0x80; = 0x03; (0x03 != 0) { = (0x20 + ) + 0x60; } ((0 < .) && ((0x01 < .) && (0x02 < .))) { = 0; () { (!( < (0x20 * .))) { ; } = + 0x20; } = (0x20 * .) + (0x20 + (0x20 + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))))); } } = + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))); (0x1f & ) { = 0x20 + (( + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + )))))) - (0x1f & )); } = 0x20 + ; = ; = .; () { ( < 0x20) { ; } = + 0x20; = + 0x20; = - 0x20; } ( , ) = ().(, , , ); // call = 0x60; (. != 0) { = + ((. + 0x3f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)); = ; } = ; () { = > 0; } = ; (!) { (!( > 0)); (, "BM: wallet invoke reverted"); } { (!( < 0x20)); (!( > 0x0100000000)); (!(( + (0x20 + ) + 0x20) > ((0x20 + ) + ))); (!(( > 0x0100000000) | (( + (0x20 + ) + 0x20) + ( * 0x01) > ((0x20 + ) + )))); = 0; () { (!( < )) { ; } = + 0x20; } = + ( + 0x20); (0x1f & ) { = 0x20 + ( + ( + 0x20) - (0x1f & )); } = ; = ; } } { = 0x20 + (0x20 + (0x24 + )); = 0; () { (!( < )) { ; } = + 0x20; (0x2 <= 0xffffffffffffffff); = + 0x60; = 0x02; (0x02 != 0) { = (0x20 + ) + 0x40; } ((0 < .) && (0x01 < .)) { = 0; () { (!( < (0x20 * .))) { ; } = + 0x20; } = (0x20 * .) + (0x20 + (0x20 + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))))); } } = + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + ))))); (0x1f & ) { = 0x20 + (( + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + )))))) - (0x1f & )); } = 0x20 + ; = ; = .; () { ( < 0x20) { ; } = + 0x20; = + 0x20; = - 0x20; } ( , ) = ().(, , , ); // call = 0x60; (. != 0) { = + ((. + 0x3f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)); = ; } = ; () { = > 0; } = ; (!) { (!( > 0)); (, "BM: wallet invoke reverted"); } { (!( < 0x20)); (!( > 0x0100000000)); (!(( + (0x20 + ) + 0x20) > ((0x20 + ) + ))); (!(( > 0x0100000000) | (( + (0x20 + ) + 0x20) + ( * 0x01) > ((0x20 + ) + )))); = 0; () { (!( < )) { ; } = + 0x20; } = + ( + 0x20); (0x1f & ) { = 0x20 + ( + ( + 0x20) - (0x1f & )); } = ; = ; } } } { (0x2 <= 0xffffffffffffffff); = + 0x60; = 0x02; (0x02 != 0) { = (0x20 + ) + 0x40; } ((0 < .) && (0x01 < .)) { = 0; () { (!( < (0x20 * .))) { ; } = + 0x20; } = (0x20 * .) + (0x20 + (0x20 + (0x20 + (0x20 + (0x20 + (0x24 + )))))); } } } ( , ) { ((!(!(([.] / 0x01)))) == 0x01, "M: Must be manager"); = ( * 0x01) | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & ); = ; } ( , , , , , ) { ( <= 0x100000000); (!(((0x04 + ) + 0x20) > (0x04 + (.. - 0x04)))); (!((. > 0x0100000000) | ((0x20 + (0x04 + )) + (. * 0x01) > (0x04 + (.. - 0x04))))); (. == (), "RM: must be called via execute()"); ; = + (0x20 + (((0x1f + .) / 0x20) * 0x20)); ( != (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)) { = 0x20 + (0x20 + (0x24 + )); = 0x20 + (0x20 + (0x24 + )); } { = 0; () { = 0x20 + ; (!( < )) { ; } = + 0x20; } } } ( ) { { := (0x40) (, 0, ()) (, (((), 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff), (224, (, 0xffffffff)))) := ((), (), , (), 0, 0) := () (, 0, ) 0 { (, ) } { (, ) } } } // Note: This selector table is synthetic and is not part of the original Solidity source. // It records the recovered selector-to-signature mapping without executable behavior. // 0x0aea8188 => getConversionRates(address,uint256,address) // 0x0d8e6e2c => getVersion() // 0x12ef080d => approveToken(address,address,address,uint256) // 0x19ab453c => init(address) // 0x2d0335ab => getNonce(address) // 0x2d06177a => addManager(address) // 0x377e32e6 => revokeManager(address) // 0x3b73d67f => getRequiredSignatures(address,bytes) // 0x4f61ff8b => kyberNetworkContract() // 0x524900b5 => getUniswapRouter() // 0x6133f985 => initialize(address,address,bytes32) // 0x6763150e => setKyberAddress(address) // 0x8129fc1c => initialize() // 0x8da5cb5b => owner() // 0x9be65a60 => recoverToken(address) // 0xa6f9dae1 => changeOwner(address) // 0xaacaaf88 => execute(address,bytes,uint256,bytes,uint256,uint256) // 0xab18af27 => setDepositAddress(address) // 0xc0c53b8b => initialize(address,address,address) // 0xc7a73463 => Unknown_c7a73463(address,address,uint256,address,uint256,uint256,bytes) // 0xc9b5ef8e => relayer(address) // 0xd51c2f3d => Unknown_d51c2f3d(address,address,address,address,uint256,bytes) // 0xe92bdbf8 => Unknown_e92bdbf8(address,address,uint256,uint256,address,uint256) // 0xef4a64d4 => setUniswapAddresses(address,address) // 0xf5d8b396 => Unknown_f5d8b396(address,address,address,uint256,uint256,bytes) // 0xfdff9b4d => managers(address)}