0xf768ab9cb203ce01030888605ef024e040c91f66

deployer: unknown relevance score: 0 status: partially_identified bytecode: 11417 bytes

DECOMPILED SOLIDITY (Heimdall)

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/// @title            Decompiled Contract
/// @author           Jonathan Becker <jonathan@jbecker.dev>
/// @custom:version   heimdall-rs v0.9.2
///
/// @notice           This contract was decompiled using the heimdall-rs decompiler.
///                     It was generated directly by tracing the EVM opcodes from this contract.
///                     As a result, it may not compile or even be valid solidity code.
///                     Despite this, it should be obvious what each function does. Overall
///                     logic should have been preserved throughout decompiling.
///
/// @custom:github    You can find the open-source decompiler here:
///                       https://heimdall.rs

contract DecompiledContract {
    uint256 public constant COLLATERAL_RATIO_PAUSER = 80660117771772884325232518026346177235428924581649340631404993587712988832795;
    uint256 public constant genesis_supply = 3000000000000000000000;
    uint256 public constant decimals = 18;
    uint256 public constant DEFAULT_ADMIN_ROLE = 0;
    
    mapping(bytes32 => bytes32) storage_map_f;
    bool public collateral_ratio_paused;
    address public sts_eth_oracle_address;
    uint256 public redemption_fee;
    mapping(bytes32 => bytes32) storage_map_ao;
    mapping(bytes32 => bytes32) storage_map_q;
    address public sts_address;
    mapping(bytes32 => bytes32) storage_map_s;
    bytes32 unresolved_18160ddda;
    mapping(bytes32 => bytes32) storage_map_af;
    mapping(bytes32 => bytes32) storage_map_am;
    mapping(bytes32 => bytes32) storage_map_ac;
    uint256 public price_band;
    uint256 public unresolved_18160ddd;
    address public owner_address;
    mapping(bytes32 => bytes32) storage_map_b;
    address public controller_address;
    uint256 storage_map_af[storage_map_f[var_f] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff];
    bytes32 store_g;
    address store_h;
    bytes32 store_l;
    uint256 public price_target;
    uint256 public minting_fee;
    mapping(bytes32 => bytes32) storage_map_n;
    mapping(bytes32 => bytes32) storage_map_ae;
    uint256 public refresh_cooldown;
    mapping(bytes32 => bytes32) storage_map_o;
    address public timelock_address;
    uint256 storage_map_q[storage_map_b[var_a] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff];
    mapping(bytes32 => bytes32) storage_map_z;
    mapping(bytes32 => bytes32) storage_map_ah;
    address public weth_address;
    uint256 public global_collateral_ratio;
    mapping(bytes32 => bytes32) storage_map_at;
    mapping(bytes32 => bytes32) storage_map_au;
    uint256 public last_call_time;
    mapping(bytes32 => bytes32) storage_map_t;
    mapping(bytes32 => bytes32) storage_map_r;
    bool public eth_usd_price;
    mapping(bytes32 => bytes32) storage_map_ai;
    bytes32 unresolved_18160dddj;
    mapping(bytes32 => bytes32) storage_map_y;
    address public creator_address;
    mapping(bytes32 => bytes32) storage_map_p;
    bytes32 store_x;
    mapping(bytes32 => bytes32) storage_map_ag;
    address public eth_usd_consumer_address;
    address public stc_eth_oracle_address;
    uint256 public stc_step;
    
    event Event_8c5be1e5();
    event Transfer(address, address, uint256);
    event RoleRevoked(bytes32, address, address);
    event RoleGranted(bytes32, address, address);
    
    /// @custom:selector    0x095ea7b3
    /// @custom:signature   Unresolved_095ea7b3(address arg0, uint256 arg1) public payable returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function Unresolved_095ea7b3(address arg0, uint256 arg1) public payable returns (bool) {
        require(arg0 == (address(arg0)));
        require(address(msg.sender), "ERC20: approve to the zero address");
        require(address(arg0), "ERC20: approve to the zero address");
        var_a = address(arg0);
        storage_map_b[var_a] = arg1;
        emit Event_8c5be1e5(address(msg.sender), address(arg0), arg1);
        return 0x01;
    }
    
    /// @custom:selector    0xd914cd4b
    /// @custom:signature   addPool(address arg0) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function addPool(address arg0) public payable {
        require(arg0 == (address(arg0)));
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        address var_f = address(arg0);
        require(!(bytes1(storage_map_f[var_f])), "address already exists");
        var_f = address(arg0);
        storage_map_f[var_f] = 0x01 | (uint248(storage_map_f[var_f]));
        store_g = store_g + 0x01;
        store_h = (address(arg0)) | (uint96(store_h));
    }
    
    /// @custom:selector    0xca15c873
    /// @custom:signature   getRoleMemberCount(bytes32 arg0) public view returns (uint256)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function getRoleMemberCount(bytes32 arg0) public view returns (uint256) {
        uint256 var_a = arg0;
        return storage_map_b[var_a];
    }
    
    /// @custom:selector    0xdd9a9f72
    /// @custom:signature   sts_price() public payable
    function sts_price() public payable {
        require(address(eth_usd_price).code.length);
        (bool success, bytes memory ret0) = address(eth_usd_price).getLatestPrice(); // staticcall
        uint256 var_b = var_b + (uint248(ret0.length + 0x1f));
        require(!(((var_b + ret0.length) - var_b) < 0x20), "");
        require(var_b.length, "");
        var_b = 0x40 + var_b;
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)), "");
        require(!(0 > var_b.length), "");
        require(!(0x20 > var_b.length), "SafeMath: division by zero");
        var_h = 0;
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)));
        require(!0x01 > 0x01);
        require(!0x01 == 0);
        address var_f = address(weth_address);
        require(address(store_l).code.length);
        (bool success, bytes memory ret0) = address(store_l).Unresolved_3ddac953(var_f); // staticcall
        require(!(0x01 > 0x01), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(!(0x01 == 0x01), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(var_b.length, "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(((0x0f4240 * var_b.length) / var_b.length) == 0x0f4240, "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(!(0x01 > 0x01), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(!(0x01 == 0), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(!(0x01 > 0x01), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(!(0x01 == 0x01), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
    }
    
    /// @custom:selector    0x91d14854
    /// @custom:signature   hasRole(bytes32 arg0, address arg1) public view returns (bool)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    function hasRole(bytes32 arg0, address arg1) public view returns (bool) {
        require(arg1 == (address(arg1)));
        var_a = address(arg1);
        return storage_map_b[var_a];
    }
    
    /// @custom:selector    0x2f2ff15d
    /// @custom:signature   grantRole(bytes32 arg0, address arg1) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    function grantRole(bytes32 arg0, address arg1) public payable {
        require(arg1 == (address(arg1)));
        var_a = address(msg.sender);
        require(storage_map_b[var_a], "AccessControl: sender must be an admin to grant");
        var_a = address(arg1);
        require(storage_map_b[var_a], "AccessControl: sender must be an admin to grant");
        require(!0, "AccessControl: sender must be an admin to grant");
        emit RoleGranted(arg0, address(arg1), address(msg.sender));
        storage_map_b[var_a] = 0x01 + storage_map_b[var_a];
        var_a = keccak256(var_a);
        storage_map_o[var_a] = address(arg1);
        var_a = address(arg1);
        storage_map_b[var_a] = storage_map_b[var_a];
        require(!0x01, "AccessControl: sender must be an admin to grant");
        emit RoleGranted(arg0, address(arg1), address(msg.sender));
    }
    
    /// @custom:selector    0xd547741f
    /// @custom:signature   revokeRole(bytes32 arg0, address arg1) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    function revokeRole(bytes32 arg0, address arg1) public payable {
        require(arg1 == (address(arg1)));
        var_a = address(msg.sender);
        require(storage_map_b[var_a], "AccessControl: sender must be an admin to revoke");
        var_a = address(arg1);
        require(!storage_map_b[var_a], "AccessControl: sender must be an admin to revoke");
        require((storage_map_b[var_a] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < storage_map_b[var_a], "AccessControl: sender must be an admin to revoke");
        var_a = keccak256(var_a);
        require((storage_map_b[var_a] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < (storage_map_p[var_a]), "AccessControl: sender must be an admin to revoke");
        var_a = 0 + keccak256(var_a);
        storage_map_q[storage_map_b[var_a] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff] = storage_map_r[var_a];
        var_a = storage_map_s[var_a];
        storage_map_b[var_a] = (storage_map_b[var_a] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) + 0x01;
        require(storage_map_b[var_a], "AccessControl: sender must be an admin to revoke");
        var_a = keccak256(var_a);
        storage_map_t[var_a] = 0;
        storage_map_b[var_a] = storage_map_b[var_a] - 0x01;
        var_a = address(arg1);
        storage_map_b[var_a] = 0;
        require(!0x01, "AccessControl: sender must be an admin to revoke");
        emit RoleRevoked(arg0, address(arg1), address(msg.sender));
        require(!0, "AccessControl: sender must be an admin to revoke");
        emit RoleRevoked(arg0, address(arg1), address(msg.sender));
    }
    
    /// @custom:selector    0x7dbc1df0
    /// @custom:signature   setRedemptionFee(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function setRedemptionFee(uint256 arg0) public payable {
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        redemption_fee = arg0;
    }
    
    /// @custom:selector    0xdd62ed3e
    /// @custom:signature   Unresolved_dd62ed3e(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_dd62ed3e(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0xbdacb303
    /// @custom:signature   setTimelock(address arg0) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function setTimelock(address arg0) public payable {
        require(arg0 == (address(arg0)));
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        timelock_address = (address(arg0)) | (uint96(timelock_address));
    }
    
    /// @custom:selector    0x13af4035
    /// @custom:signature   setOwner(address arg0) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function setOwner(address arg0) public payable {
        require(arg0 == (address(arg0)));
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        owner_address = (address(arg0)) | (uint96(owner_address));
    }
    
    /// @custom:selector    0x06fdde03
    /// @custom:signature   Unresolved_06fdde03() public view returns (string memory)
    function Unresolved_06fdde03() public view returns (string memory) {
        bytes1 var_a = 0x20 + (var_a + (0x20 * (((store_x & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + (0x0100 * (!bytes1(store_x)))) / 0x02) + 0x1f) / 0x20)));
        if (!(store_x & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + (0x0100 * (!store_x)))) / 0x02) {
            if (0x1f < (store_x & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + (0x0100 * (!store_x))) / 0x02)) {
                var_c = 0x08;
                if ((var_a + 0x20) + (store_x & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + (0x0100 * (!store_x))) / 0x02) > (0x20 + (var_a + 0x20))) {
                    if (!0 > var_a.length) {
                        return abi.encodePacked(0x20, var_a.length);
                        return abi.encodePacked(0x20, var_a.length);
                    }
                }
            }
        }
    }
    
    /// @custom:selector    0x39509351
    /// @custom:signature   increaseAllowance(address arg0, uint256 arg1) public payable returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function increaseAllowance(address arg0, uint256 arg1) public payable returns (bool) {
        require(arg0 == (address(arg0)));
        var_a = address(arg0);
        require(!((arg1 + storage_map_b[var_a]) < storage_map_b[var_a]), "SafeMath: addition overflow");
        require(address(msg.sender), "ERC20: approve to the zero address");
        require(address(arg0), "ERC20: approve to the zero address");
        var_a = address(arg0);
        storage_map_b[var_a] = arg1 + storage_map_b[var_a];
        emit Event_8c5be1e5(address(msg.sender), address(arg0), arg1 + storage_map_b[var_a]);
        return 0x01;
    }
    
    /// @custom:selector    0x7fa3a9d3
    /// @custom:signature   stc_pools_array(uint256 arg0) public view returns (address)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function stc_pools_array(uint256 arg0) public view returns (address) {
        require(arg0 < store_g);
        var_a = 0x12;
        return address(storage_map_z[var_a]);
    }
    
    /// @custom:selector    0x95d89b41
    /// @custom:signature   Unresolved_95d89b41() public view returns (string memory)
    function Unresolved_95d89b41() public view returns (string memory) {
        bytes1 var_a = 0x20 + (var_a + (0x20 * (((unresolved_18160ddda & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + (0x0100 * (!bytes1(unresolved_18160ddda)))) / 0x02) + 0x1f) / 0x20)));
        if (!(unresolved_18160ddda & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + (0x0100 * (!unresolved_18160ddda)))) / 0x02) {
            if (0x1f < (unresolved_18160ddda & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + (0x0100 * (!unresolved_18160ddda))) / 0x02)) {
                var_c = 0x07;
                if ((var_a + 0x20) + (unresolved_18160ddda & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + (0x0100 * (!unresolved_18160ddda))) / 0x02) > (0x20 + (var_a + 0x20))) {
                    if (!0 > var_a.length) {
                        return abi.encodePacked(0x20, var_a.length);
                        return abi.encodePacked(0x20, var_a.length);
                    }
                }
            }
        }
    }
    
    /// @custom:selector    0xbef40ec8
    /// @custom:signature   toggleCollateralRatio() public payable
    function toggleCollateralRatio() public payable {
        address var_b = address(msg.sender);
        require(storage_map_ac[var_b]);
        unresolved_18160dddd = (0x010000000000000000000000000000000000000000 * (!bytes1(unresolved_18160dddd / 0x010000000000000000000000000000000000000000))) | (uint248(unresolved_18160dddd));
    }
    
    /// @custom:selector    0x36568abe
    /// @custom:signature   renounceRole(bytes32 arg0, address arg1) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    function renounceRole(bytes32 arg0, address arg1) public payable {
        require(arg1 == (address(arg1)));
        require(address(arg1) == (address(msg.sender)), "AccessControl: can only renounce roles for self");
        var_f = address(arg1);
        require(!storage_map_f[var_f]);
        require((storage_map_f[var_f] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < storage_map_f[var_f]);
        var_f = keccak256(var_f);
        require((storage_map_f[var_f] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < (storage_map_ae[var_f]));
        var_f = 0 + keccak256(var_f);
        storage_map_af[storage_map_f[var_f] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff] = storage_map_ag[var_f];
        var_f = storage_map_ah[var_f];
        storage_map_f[var_f] = (storage_map_f[var_f] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) + 0x01;
        require(storage_map_f[var_f]);
        var_f = keccak256(var_f);
        storage_map_ai[var_f] = 0;
        storage_map_f[var_f] = storage_map_f[var_f] - 0x01;
        var_f = address(arg1);
        storage_map_f[var_f] = 0;
        require(!0x01);
        emit RoleRevoked(arg0, address(arg1), address(msg.sender));
        require(!0);
        emit RoleRevoked(arg0, address(arg1), address(msg.sender));
    }
    
    /// @custom:selector    0x23b872dd
    /// @custom:signature   Unresolved_23b872dd(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_23b872dd(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0xa8a778ae
    /// @custom:signature   pool_burn_from(address arg0, uint256 arg1) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function pool_burn_from(address arg0, uint256 arg1) public payable {
        require(arg0 == (address(arg0)));
        address var_a = msg.sender;
        require(0x01 == (bytes1(storage_map_b[var_a])), "");
        require(address(arg0), "");
        uint256 var_c = 0x60 + var_c;
        var_a = address(arg0);
        require(!(arg1 > storage_map_b[var_a]), "");
        require(!(0 > var_c.length), "");
        var_a = address(arg0);
        storage_map_b[var_a] = storage_map_b[var_a] - arg1;
        var_c = 0x40 + var_c;
        require(!(arg1 > unresolved_18160ddd), "");
        require(!(0 > var_c.length), "");
        require(!(0x20 > var_c.length), "SafeMath: subtraction overflow");
    }
    
    /// @custom:selector    0x70a08231
    /// @custom:signature   Unresolved_70a08231(address arg0) public view returns (uint256)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_70a08231(address arg0) public view returns (uint256) {
        require(arg0 == (address(arg0)));
        address var_a = address(arg0);
        return storage_map_b[var_a];
    }
    
    /// @custom:selector    0x4df41253
    /// @custom:signature   stc_info() public payable
    function stc_info() public payable {
        require(address(eth_usd_price).code.length);
        (bool success, bytes memory ret0) = address(eth_usd_price).getLatestPrice(); // staticcall
        uint256 var_b = var_b + (uint248(ret0.length + 0x1f));
        if (!((var_b + ret0.length) - var_b) < 0x20) {
            require(!(((var_b + ret0.length) - var_b) < 0x20), "");
            var_b = 0x40 + var_b;
            require(var_b.length, "");
        }
        require(var_b.length, "");
        require(((0x0f4240 * var_b.length) / var_b.length) == 0x0f4240, "");
        var_b = 0x40 + var_b;
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)), "");
        require(!(0 > var_b.length), "");
        require(!(0x20 > var_b.length), "SafeMath: division by zero");
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)));
        require(!0 > 0x01);
        require(!0 == 0);
        require(!0 > 0x01);
        require(!0 == 0x01);
        address var_f = address(weth_address);
        require(address(unresolved_18160dddj).code.length);
        (bool success, bytes memory ret0) = address(unresolved_18160dddj).Unresolved_3ddac953(var_f); // staticcall
    }
    
    /// @custom:selector    0x0e66d36f
    /// @custom:signature   Unresolved_0e66d36f(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_0e66d36f(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0xb4f56b26
    /// @custom:signature   pool_mint(address arg0, uint256 arg1) public view
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function pool_mint(address arg0, uint256 arg1) public view {
        require(arg0 == (address(arg0)));
        address var_a = msg.sender;
        require(0x01 == (bytes1(storage_map_b[var_a])), "SafeMath: addition overflow");
        require(address(arg0), "SafeMath: addition overflow");
        require(!((arg1 + unresolved_18160ddd) < unresolved_18160ddd), "SafeMath: addition overflow");
    }
    
    /// @custom:selector    0x9236c058
    /// @custom:signature   setSTSAddress(address arg0) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function setSTSAddress(address arg0) public payable {
        require(arg0 == (address(arg0)));
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        sts_address = (address(arg0)) | (uint96(sts_address));
    }
    
    /// @custom:selector    0x4013124a
    /// @custom:signature   refreshCollateralRatio() public payable
    function refreshCollateralRatio() public payable {
        require(!(bytes1(unresolved_18160dddd / 0x010000000000000000000000000000000000000000)), "Collateral Ratio has been paused");
        require(address(eth_usd_price).code.length);
        (bool success, bytes memory ret0) = address(eth_usd_price).getLatestPrice(); // staticcall
        uint256 var_e = var_e + (uint248(ret0.length + 0x1f));
        require(!(((var_e + ret0.length) - var_e) < 0x20), "");
        require(var_e.length, "");
        var_e = 0x40 + var_e;
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)), "");
        require(!(0 > var_e.length), "");
        require(!(0x20 > var_e.length), "SafeMath: division by zero");
        var_k = 0;
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)));
        require(!0 > 0x01);
        require(!0 == 0);
        require(!0 > 0x01);
        require(!0 == 0x01);
        address var_i = address(weth_address);
        require(address(unresolved_18160dddj).code.length);
        (bool success, bytes memory ret0) = address(unresolved_18160dddj).Unresolved_3ddac953(var_i); // staticcall
        require(var_e.length, "INVALID PRICE CHOICE. Needs to be either var_k (STC) or 1 (STS)");
        require(((0x0f4240 * var_e.length) / var_e.length) == 0x0f4240, "INVALID PRICE CHOICE. Needs to be either var_k (STC) or 1 (STS)");
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)), "INVALID PRICE CHOICE. Needs to be either var_k (STC) or 1 (STS)");
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)), "INVALID PRICE CHOICE. Needs to be either var_k (STC) or 1 (STS)");
        require(!(0 > 0x01), "INVALID PRICE CHOICE. Needs to be either var_k (STC) or 1 (STS)");
        require(!(0 == 0), "INVALID PRICE CHOICE. Needs to be either var_k (STC) or 1 (STS)");
        require(!(0 > 0x01), "INVALID PRICE CHOICE. Needs to be either var_k (STC) or 1 (STS)");
        require(!(0 == 0x01), "INVALID PRICE CHOICE. Needs to be either var_k (STC) or 1 (STS)");
    }
    
    /// @custom:selector    0xa9059cbb
    /// @custom:signature   transfer(address arg0, uint256 arg1) public payable returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function transfer(address arg0, uint256 arg1) public payable returns (bool) {
        require(arg0 == (address(arg0)));
        require(address(msg.sender), "");
        require(address(arg0), "");
        uint256 var_a = 0x60 + var_a;
        address var_d = address(msg.sender);
        require(!(arg1 > storage_map_am[var_d]), "");
        require(!(0 > var_a.length), "");
        var_d = address(msg.sender);
        storage_map_am[var_d] = storage_map_am[var_d] - arg1;
        var_d = address(arg0);
        require(!((arg1 + storage_map_am[var_d]) < storage_map_am[var_d]), "SafeMath: addition overflow");
        var_d = address(arg0);
        storage_map_am[var_d] = arg1 + storage_map_am[var_d];
        emit Transfer(address(msg.sender), address(arg0), arg1);
        return 0x01;
    }
    
    /// @custom:selector    0x238a4709
    /// @custom:signature   setMintingFee(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function setMintingFee(uint256 arg0) public payable {
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        minting_fee = arg0;
    }
    
    /// @custom:selector    0x408ab10f
    /// @custom:signature   setPriceTarget(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function setPriceTarget(uint256 arg0) public payable {
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        unresolved_18160dddk = arg0;
    }
    
    /// @custom:selector    0x2fcc7682
    /// @custom:signature   stc_pools(address arg0) public view returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function stc_pools(address arg0) public view returns (bool) {
        require(arg0 == (address(arg0)));
        address var_b = arg0;
        return !(!bytes1(storage_map_ac[var_b]));
    }
    
    /// @custom:selector    0x248a9ca3
    /// @custom:signature   getRoleAdmin(bytes32 arg0) public view returns (uint256)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function getRoleAdmin(bytes32 arg0) public view returns (uint256) {
        uint256 var_a = arg0;
        return storage_map_n[var_a];
    }
    
    /// @custom:selector    0xa457c2d7
    /// @custom:signature   decreaseAllowance(address arg0, uint256 arg1) public payable returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function decreaseAllowance(address arg0, uint256 arg1) public payable returns (bool) {
        require(arg0 == (address(arg0)));
        uint256 var_a = 0x60 + var_a;
        var_d = address(arg0);
        require(!(arg1 > storage_map_am[var_d]), "");
        require(!(0 > var_a.length), "");
        require(address(msg.sender), "ERC20: approve to the zero address");
        require(address(arg0), "ERC20: approve to the zero address");
        var_d = address(arg0);
        storage_map_am[var_d] = storage_map_am[var_d] - arg1;
        emit Event_8c5be1e5(address(msg.sender), address(arg0), storage_map_am[var_d] - arg1);
        return 0x01;
    }
    
    /// @custom:selector    0xb805c8bd
    /// @custom:signature   stc_price() public payable
    function stc_price() public payable {
        require(address(eth_usd_price).code.length);
        (bool success, bytes memory ret0) = address(eth_usd_price).getLatestPrice(); // staticcall
        uint256 var_b = var_b + (uint248(ret0.length + 0x1f));
        require(!(((var_b + ret0.length) - var_b) < 0x20), "");
        require(var_b.length, "");
        var_b = 0x40 + var_b;
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)), "");
        require(!(0 > var_b.length), "");
        require(!(0x20 > var_b.length), "SafeMath: division by zero");
        var_h = 0;
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)));
        require(!0 > 0x01);
        require(!0 == 0);
        require(!0 > 0x01);
        require(!0 == 0x01);
        address var_f = address(weth_address);
        require(address(unresolved_18160dddj).code.length);
        (bool success, bytes memory ret0) = address(unresolved_18160dddj).Unresolved_3ddac953(var_f); // staticcall
        require(var_b.length, "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(((0x0f4240 * var_b.length) / var_b.length) == 0x0f4240, "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(0x0a ** (bytes1(eth_usd_price / 0x010000000000000000000000000000000000000000)), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(!(0 > 0x01), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(!(0 == 0), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(!(0 > 0x01), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
        require(!(0 == 0x01), "INVALID PRICE CHOICE. Needs to be either var_h (STC) or 1 (STS)");
    }
    
    /// @custom:selector    0x3b7d0946
    /// @custom:signature   removePool(address arg0) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function removePool(address arg0) public payable {
        require(arg0 == (address(arg0)));
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        address var_f = address(arg0);
        require(0x01 == (bytes1(storage_map_f[var_f])), "address doesn't exist already");
        var_f = address(arg0);
        storage_map_f[var_f] = uint248(storage_map_f[var_f]);
        require(!(0 < store_g), "address doesn't exist already");
        require(0 < store_g, "address doesn't exist already");
        var_f = 0x12;
        require(!(address(storage_map_ao[var_f]) == (address(arg0))), "address doesn't exist already");
        require(0 < store_g, "address doesn't exist already");
        var_f = 0x12;
        storage_map_ao[var_f] = 0 | (uint96(storage_map_ao[var_f]));
    }
    
    /// @custom:selector    0x47a439df
    /// @custom:signature   Unresolved_47a439df(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_47a439df(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0x1c5df1e5
    /// @custom:signature   setRefreshCooldown(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function setRefreshCooldown(uint256 arg0) public payable {
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        refresh_cooldown = arg0;
    }
    
    /// @custom:selector    0x6140133b
    /// @custom:signature   setPriceBand(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function setPriceBand(uint256 arg0) public payable {
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        unresolved_18160dddp = arg0;
    }
    
    /// @custom:selector    0x79cc6790
    /// @custom:signature   burnFrom(address arg0, uint256 arg1) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function burnFrom(address arg0, uint256 arg1) public payable {
        require(arg0 == (address(arg0)));
        uint256 var_a = 0x60 + var_a;
        var_d = address(msg.sender);
        require(!(arg1 > storage_map_am[var_d]), "");
        require(!(0 > var_a.length), "");
        require(address(arg0), "");
        require(address(msg.sender), "");
        var_d = address(msg.sender);
        storage_map_am[var_d] = storage_map_am[var_d] - arg1;
        emit Event_8c5be1e5(address(arg0), address(msg.sender), storage_map_am[var_d] - arg1);
        require(address(arg0), "");
        var_a = 0x60 + var_a;
        var_d = address(arg0);
        require(!(arg1 > storage_map_am[var_d]), "");
        require(!(0 > var_a.length), "");
        var_d = address(arg0);
        storage_map_am[var_d] = storage_map_am[var_d] - arg1;
        var_a = 0x40 + var_a;
        require(!(arg1 > unresolved_18160ddd), "");
        require(!(0 > var_a.length), "");
        require(!(0x20 > var_a.length), "SafeMath: subtraction overflow");
        unresolved_18160ddd = unresolved_18160ddd - arg1;
        emit Transfer(address(arg0), 0, arg1);
    }
    
    /// @custom:selector    0xe2527fd2
    /// @custom:signature   setStcStep(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function setStcStep(uint256 arg0) public payable {
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        unresolved_18160dddq = arg0;
    }
    
    /// @custom:selector    0x92eefe9b
    /// @custom:signature   setController(address arg0) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function setController(address arg0) public payable {
        require(arg0 == (address(arg0)));
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        controller_address = (address(arg0)) | (uint96(controller_address));
    }
    
    /// @custom:selector    0x42966c68
    /// @custom:signature   Unresolved_42966c68(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function Unresolved_42966c68(uint256 arg0) public payable {
        require(address(msg.sender), "");
        uint256 var_a = 0x60 + var_a;
        address var_d = address(msg.sender);
        require(!(arg0 > storage_map_am[var_d]), "");
        require(!(0 > var_a.length), "");
        var_d = address(msg.sender);
        storage_map_am[var_d] = storage_map_am[var_d] - arg0;
        var_a = 0x40 + var_a;
        require(!(arg0 > unresolved_18160ddd), "");
        require(!(0 > var_a.length), "");
        require(!(0x20 > var_a.length), "SafeMath: subtraction overflow");
        unresolved_18160ddd = unresolved_18160ddd - arg0;
        emit Transfer(address(msg.sender), 0, arg0);
    }
    
    /// @custom:selector    0x9010d07c
    /// @custom:signature   getRoleMember(bytes32 arg0, uint256 arg1) public view returns (address)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function getRoleMember(bytes32 arg0, uint256 arg1) public view returns (address) {
        uint256 var_a = arg0;
        require(arg1 < storage_map_b[var_a], "EnumerableSet: index out of bounds");
        require(arg1 < (storage_map_p[var_a]), "EnumerableSet: index out of bounds");
        var_a = 0 + keccak256(var_a);
        return address(storage_map_at[var_a]);
    }
    
    /// @custom:selector    0x741d3c18
    /// @custom:signature   setETHUSDOracle(address arg0) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function setETHUSDOracle(address arg0) public payable {
        require(arg0 == (address(arg0)));
        require(msg.sender == (address(owner_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(timelock_address)), "You are not the owner, controller, or the governance timelock");
        require(msg.sender == (address(controller_address)), "You are not the owner, controller, or the governance timelock");
        unresolved_18160dddr = (uint96(unresolved_18160dddr)) | (address(arg0));
        eth_usd_price = (address(uint96(unresolved_18160dddr) | (arg0))) | (uint96(eth_usd_price));
        require(address(uint96(unresolved_18160dddr) | (arg0) | (uint96(eth_usd_price))).code.length);
        (bool success, bytes memory ret0) = address(uint96(unresolved_18160dddr) | (arg0) | (uint96(eth_usd_price))).getDecimals(); // staticcall
        uint256 var_f = var_f + (uint248(ret0.length + 0x1f));
        require(!((var_f + ret0.length) - var_f) < 0x20);
        require(var_f.length == (bytes1(var_f.length)));
        eth_usd_price = (bytes1(var_f.length) * 0x010000000000000000000000000000000000000000) | (uint248(eth_usd_price));
    }
    
    /// @custom:selector    0xd2d97b06
    /// @custom:signature   globalCollateralValue() public payable returns (uint256)
    function globalCollateralValue() public payable returns (uint256) {
        require(!0 < store_g);
        require(0 < store_g);
        var_a = 0x12;
        require(address(storage_map_au[var_a]) == 0);
        require(0 < store_g);
        var_a = 0x12;
        require(address(storage_map_au[var_a]).code.length);
        (bool success, bytes memory ret0) = address(storage_map_au[var_a]).collatDollarBalance(); // staticcall
        uint256 var_c = var_c + (uint248(ret0.length + 0x1f));
        require(!(((var_c + ret0.length) - var_c) < 0x20), "SafeMath: addition overflow");
        require(!((var_c.length + 0) < 0), "SafeMath: addition overflow");
        return 0;
    }
}

ABI

[
  {
    "type": "function",
    "name": "COLLATERAL_RATIO_PAUSER",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "DEFAULT_ADMIN_ADDRESS",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "DEFAULT_ADMIN_ROLE",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_06fdde03",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "Unresolved_095ea7b3",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "Unresolved_0e66d36f",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_18160ddd",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "Unresolved_23b872dd",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_42966c68",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "Unresolved_47a439df",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_70a08231",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "Unresolved_95d89b41",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "Unresolved_dd62ed3e",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "addPool",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "burnFrom",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "collateral_ratio_paused",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "controller_address",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "creator_address",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "decimals",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "decreaseAllowance",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "eth_usd_consumer_address",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "eth_usd_price",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "genesis_supply",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "getRoleAdmin",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getRoleMember",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getRoleMemberCount",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "globalCollateralValue",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "global_collateral_ratio",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "grantRole",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32"
      },
      {
        "name": "arg1",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "hasRole",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32"
      },
      {
        "name": "arg1",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "increaseAllowance",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "last_call_time",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "minting_fee",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "owner_address",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "pool_burn_from",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "pool_mint",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "price_band",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "price_target",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "redemption_fee",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "refreshCollateralRatio",
    "inputs": [],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "refresh_cooldown",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "removePool",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "renounceRole",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32"
      },
      {
        "name": "arg1",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "revokeRole",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32"
      },
      {
        "name": "arg1",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setController",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setETHUSDOracle",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setMintingFee",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setOwner",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setPriceBand",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setPriceTarget",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setRedemptionFee",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setRefreshCooldown",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setSTSAddress",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setStcStep",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "setTimelock",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "stc_eth_oracle_address",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "stc_info",
    "inputs": [],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "stc_pools",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "stc_pools_array",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "stc_price",
    "inputs": [],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "stc_step",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "sts_address",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "sts_eth_oracle_address",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "sts_price",
    "inputs": [],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "timelock_address",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "toggleCollateralRatio",
    "inputs": [],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "transfer",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "weth_address",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "event",
    "name": "Event_8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
    "inputs": [],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "RoleGranted",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg2",
        "type": "address",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "RoleRevoked",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg2",
        "type": "address",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Transfer",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg2",
        "type": "uint256",
        "indexed": false
      }
    ],
    "anonymous": false
  }
]

UNKNOWN SELECTORS (3)

0x3c050761unknown
0x72657373unknown
0x05ca1325unknown
These selectors are not yet in the research database — they are being investigated and will be added as known functions once identified. They are also marked in red in the decompiled Solidity above.

KNOWN CLUSTER ADDRESSES IN THIS BYTECODE (0)

(none)