|  | #!/usr/bin/env python3 | 
|  | import sys | 
|  |  | 
|  | top_levels = [] | 
|  | f = open(sys.argv[1]) | 
|  |  | 
|  | current_block_stack = [top_levels] | 
|  | while len(current_block_stack) > 0: | 
|  | line = f.readline() | 
|  | if not line: | 
|  | break | 
|  |  | 
|  | if '#' in line: | 
|  | continue | 
|  |  | 
|  | if '{' in line: | 
|  | new_block = [] | 
|  | current_block_stack[-1].append(new_block) | 
|  | current_block_stack.append(new_block) | 
|  |  | 
|  | if line.strip(): | 
|  | current_block_stack[-1].append(line) | 
|  |  | 
|  | if '}' in line or not line: | 
|  | assert len(current_block_stack) > 1 or not line, current_block_stack | 
|  | old_block = current_block_stack.pop(-1) | 
|  | sorted_block = [old_block[0],] + sorted(old_block[1:-1], key=lambda x: repr(x)) + [old_block[-1],] | 
|  | old_block.clear() | 
|  | old_block.extend(sorted_block) | 
|  |  | 
|  | top_levels = list(sorted(top_levels, key=lambda x: repr(x))) | 
|  |  | 
|  | output_stack = [top_levels] | 
|  | while len(output_stack) > 0: | 
|  | if len(output_stack[0]) == 0: | 
|  | output_stack.pop(0) | 
|  | continue | 
|  | if type(output_stack[0][0]) == list: | 
|  | output_stack.insert(0, output_stack[0].pop(0)) | 
|  | continue | 
|  | print(output_stack[0].pop(0), end='') |