import Bitwise hex_data = "60007820000200723C478108C09206164854980600736740000000000000006800100513004700007513004710053105601100510000078200067820003131453941463742383946313132333435363731313233343536373839303132333435373834376666663838366663373133626531620264396632373031383039663130303730363031313230336130613830323966333730343166363135376264396633363032303335623935303530303830303430303030396130333235303931373963303130303966303230363030303030303030303030303566326130323033353638323032333830303966316130323033353639663033303630303030303030303030303039663333303365306530633839663334303334323033303039663335303132323966316530383332333333373333333033303330333138343037613030303030303030333130313039663039303230303936396634313034303030303033353139663236303834373732313533336161653835343265000630303030303101877B22726F7574696E675F6D65746164617461223A7B226D6574686F64223A226669656C645F62617365645F726F7574696E67222C226465636973696F6E5F74696D655F6D73223A312C226669656C645F696E666F223A7B226669656C645F76616C7565223A22373832222C226669656C645F6964223A223234227D7D2C22726F7574696E675F74696D657374616D70223A313735393636393234372C22757073747265616D5F6E6574776F726B223A227973705F706C61696E227D" IO.puts("=== YSP Message Analysis Demo ===") binary_data = Base.decode16!(hex_data) IO.puts("Message size: #{byte_size(binary_data)} bytes") # Extract MTI <> = binary_data IO.puts("MTI: #{mti} (0x#{Base.encode16(mti)})") # Extract bitmap <> = rest bitmap_hex = Base.encode16(bitmap) IO.puts("Bitmap: #{bitmap_hex}") # Parse bitmap bits bitmap_int = :binary.decode_unsigned(bitmap, :big) present_fields = for i <- 1..64, (bitmap_int &&& (1 <<< (64 - i))) != 0, do: i IO.puts("Fields: #{Enum.join(present_fields, ", ")}") IO.puts("\n=== Hex Breakdown ===") hex_data |> String.graphemes() |> Enum.chunk_every(64) |> Enum.map(&Enum.join/1) |> Enum.with_index() |> Enum.take(10) # Show first 10 lines |> Enum.each(fn {chunk, index} -> offset = index * 32 formatted = chunk |> String.graphemes() |> Enum.chunk_every(2) |> Enum.map(&Enum.join/1) |> Enum.chunk_every(8) |> Enum.map(&Enum.join(&1, " ")) |> Enum.join(" ") IO.puts("#{String.pad_leading(Integer.to_string(offset, 16), 4, "0")}: #{formatted}") end) IO.puts("... (truncated)") IO.puts("\n✅ The enhanced YSP parser provides:") IO.puts(" - Field-by-field breakdown with descriptions") IO.puts(" - YSP packet framing analysis") IO.puts(" - JSON parsing of routing metadata") IO.puts(" - Detailed error reporting")