<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def build_D3bubbleChart(old, MAX_DEPTH, level=1, toplayer=None):
 """ 	 Similar to standar d3, but nodes with children need to be duplicated otherwise they are 	 not depicted explicitly but just color coded 	"name": "all", 	"children": [ 		{"name": "Biological Science", "size": 9000}, 		 {"name": "Biological Science", "children": [ 			 {"name": "Biological techniques", "size": 6939}, 			{"name": "Cell biology", "size": 4166}, 			{"name": "Drug discovery X", "size": 3620, "children": [ 				{"name": "Biochemistry X", "size": 4585}, 				{"name": "Biochemistry X", "size": 4585 }, 			]}, 			{"name": "Drug discovery Y", "size": 3620, "children": [ 				{"name": "Biochemistry Y", "size": 4585}, 				{"name": "Biochemistry Y", "size": 4585 }, 			]}, 			{"name": "Drug discovery A", "size": 3620, "children": [ 				{"name": "Biochemistry A", "size": 4585}, 			]}, 			{"name": "Drug discovery B", "size": 3620, }, 		 ]}, 	"""

    out = []
    if not old:
        old = toplayer
    for x in old:
        d = {}
        # print "*" * level, x.label
        d['qname'] = x.qname
        d['name'] = x.bestLabel(quotes=False).replace("_", " ")
        d['objid'] = x.id
        if x.children() and level < MAX_DEPTH:
            duplicate_row = {}
            duplicate_row['qname'] = x.qname
            duplicate_row['name'] = x.bestLabel(quotes=False).replace("_", " ")
            duplicate_row['objid'] = x.id
            duplicate_row['size'] = len(x.children()) + 5  # fake size
            duplicate_row['realsize'] = len(x.children())  # real size
            out += [duplicate_row]
            d['children'] = build_D3bubbleChart(x.children(), MAX_DEPTH,
                                                level + 1)
        else:
            d['size'] = 1  # default size
            d['realsize'] = 0  # default size
        out += [d]

    return out