code: def parse_path(nstr: str) -> Address:
      
      if not nstr:
          return []
  
      n = nstr.split("/")
  
      # m/a/b/c => a/b/c
      if n[0] == "m":
          n = n[1:]
  
      # coin_name/a/b/c => 44'/SLIP44_constant'/a/b/c
      if n[0] in slip44:
          coin_id = slip44[n[0]]
          n[0:1] = ["44h", "{}h".format(coin_id)]
  
      def str_to_harden(x: str) -> int:
          if x.startswith("-"):
              return H_(abs(int(x)))
          elif x.endswith(("h", "'")):
              return H_(int(x[:-1]))
          else:
              return int(x)
  
      try:
          return [str_to_harden(x) for x in n]
      except Exception:
          raise ValueError("Invalid BIP32 path", nstr)
docs: Convert BIP32 path string to list of uint32 integers with hardened flags.
      Several conventions are supported to set the hardened flag: -1, 1', 1h
  
      e.g.: "0/1h/1" -> [0, 0x80000001, 1]
  
      :param nstr: path string
      :return: list of integers