<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_flux_biases_from_cache(cur, chains, system_name, chain_strength, max_age=3600):
 """Determine the flux biases for all of the the given chains, system and chain strength. Args: cur (:class:`sqlite3.Cursor`):
 An sqlite3 cursor. This function is meant to be run within a :obj:`with` statement. chains (iterable):
 An iterable of chains. Each chain is a collection of nodes. Chains in embedding act as one node. system_name (str):
 The unique name of a system. chain_strength (float):
 The magnitude of the negative quadratic bias that induces the given chain in an Ising problem. max_age (int, optional, default=3600):
 The maximum age (in seconds) for the flux_bias offsets. Returns: dict: A dict where the keys are the nodes in the chains and the values are the flux biases. """


    select = \
        """
        SELECT
            flux_bias
        FROM flux_bias_view WHERE
            chain_length = :chain_length AND
            nodes = :nodes AND
            chain_strength = :chain_strength AND
            system_name = :system_name AND
            insert_time >= :time_limit;
        """

    encoded_data = {'chain_strength': _encode_real(chain_strength),
                    'system_name': system_name,
                    'time_limit': datetime.datetime.now() + datetime.timedelta(seconds=-max_age)}

    flux_biases = {}
    for chain in chains:
        encoded_data['chain_length'] = len(chain)
        encoded_data['nodes'] = json.dumps(sorted(chain), separators=(',', ':'))

        row = cur.execute(select, encoded_data).fetchone()
        if row is None:
            raise MissingFluxBias
        flux_bias = _decode_real(*row)

        if flux_bias == 0:
            continue

        flux_biases.update({v: flux_bias for v in chain})

    return flux_biases