contract Adminable is Initializable, Ownable {
    mapping(address => bool) public admins;


    function checkAuthAdmin() private view {
        require(msg.sender == owner || admins[msg.sender], "Permission denied");
    }
    modifier onlyOwnerOrAdmin {
        checkAuthAdmin();
        _;
    }


    // Initializer – Constructor for Upgradable contracts
    function initialize() public initializer {
        Ownable.initialize();  // Initialize Parent Contract
    }

    function initialize(address payable newOwner) public initializer {
        Ownable.initialize(newOwner);  // Initialize Parent Contract
    }


    function setAdminPermission(address _admin, bool _status) public onlyOwner {
        admins[_admin] = _status;
    }

    uint256[50] private ______gap;
}
function initialize() public initializer {
    Ownable.initialize();  // Initialize Parent Contract
}

// Initializer – Constructor for Upgradable contracts