def METHOD_NAME(runtime_info: RuntimeInfo, script: Script, obj: Dict):
    """process a single JSON object from bpftrace output"""
    if obj['type'] == BPFtraceMessageType.AttachedProbes:
        if runtime_info.bpftrace_version <= (0, 9, 2):
            script.state.probes = obj['probes']
        else:
            # https://github.com/iovisor/bpftrace/commit/9d1269b
            script.state.probes = obj['data']['probes']
    elif obj['type'] == BPFtraceMessageType.Map:
        script.state.data.update(obj['data'])
    elif obj['type'] == BPFtraceMessageType.Hist:
        for k, v in obj['data'].items():
            script.state.data[k] = {
                '{}-{}'.format(bucket.get('min', '-inf'), bucket.get('max', 'inf')): bucket['count']
                for bucket in v
            }
    elif obj['type'] in [BPFtraceMessageType.Printf, BPFtraceMessageType.Time]:
        if runtime_info.bpftrace_version <= (0, 9, 2):
            script.state.data['@output'] = script.state.data.get('@output', '') + obj['msg']
        else:
            # https://github.com/iovisor/bpftrace/commit/9d1269b
            script.state.data['@output'] = script.state.data.get('@output', '') + obj['data']
        if script.metadata.table_retain_lines is not None:
            table_retain_lines(script)