code: def solc_parse_output(compiler_output):
      
      # At the moment some solc output like --hashes or -- gas will not output
      # json at all so if used with those arguments the logic here will break.
      # Perhaps solidity will slowly switch to a json only output and this comment
      # can eventually go away and we will not need to add more logic here at
      # all.
      result = yaml.safe_load(compiler_output)['contracts']
  
      if 'bin' in tuple(result.values())[0]:
          for value in result.values():
              value['bin_hex'] = value['bin']
  
              # decoding can fail if the compiled contract has unresolved symbols
              try:
                  value['bin'] = decode_hex(value['bin_hex'])
              except (TypeError, ValueError):
                  pass
  
      for json_data in ('abi', 'devdoc', 'userdoc'):
          # the values in the output can be configured through the
          # --combined-json flag, check that it's present in the first value and
          # assume all values are consistent
          if json_data not in tuple(result.values())[0]:
              continue
  
          for value in result.values():
              value[json_data] = yaml.safe_load(value[json_data])
  
      return result
docs: Parses the compiler output.