Packet #29915770 Success

TRACEROUTE_APP packet from razrok 6c27 (rzrk) to Hache (Hch)

22
Total Receptions
22
Unique Gateways
4
Hop Count
65
Payload Bytes
Packet Information
Database ID: 29915770
Mesh Packet ID: 0xe4424884
Used for correlation across gateways
Timestamp: 2025-12-24 22:10:41 UTC
From Node: razrok 6c27 (rzrk)
To Node: Hache (Hch)
Success: Processed
Protocol: TRACEROUTE_APP
Port: 70
Gateway: ETH Goose (ET03)
Channel: MediumFast
RSSI: -34 dBm
SNR: 10.5 dBm
Hop Info: 4/5 hops
Start: 5, Limit: 1
Relay Node: 41 ET01
Last byte of the last hop that relayed this packet - Candidate source node(s) based on 0-hop direct receptions
Payload Data
Protocol: TRACEROUTE_APP
Size: 65 bytes
Decoded: Yes
Decoded Data:
Route Information
Route Path: Rivas Partija b01c (b01c) β†’ PuppetMaster 32b0 (PUPM) β†’ Venturada2 πŸ—ΌπŸŒž (Vb2) β†’ Toledo1 (TO1) β†’ ETH Maverick (ET01)
Hop Count: 4 hops
Status: Incomplete - Final destination not reached
SNR Towards: 2.5 dB -13.25 dB -8.25 dB -7.25 dB -7.5 dB
Route Visualization
Loading...

Loading route map...

Map shows the geographic path if nodes have shared location data.
Traceroute Steps
Hop From Node To Node Distance SNR (dB) Direction Analysis
1 razrok 6c27 (rzrk) Rivas Partija b01c (b01c) 147 m 2.5 dB Origin Hops
2 Rivas Partija b01c (b01c) PuppetMaster 32b0 (PUPM) 4.52 km -13.25 dB Relay Hops
3 PuppetMaster 32b0 (PUPM) Venturada2 πŸ—ΌπŸŒž (Vb2) 53.50 km -8.25 dB Relay Hops
4 Venturada2 πŸ—ΌπŸŒž (Vb2) Toledo1 (TO1) 132.27 km -7.25 dB Relay Hops
5 Toledo1 (TO1) ETH Maverick (ET01) 62.43 km -7.5 dB Relay Hops
Traceroute incomplete - Final destination not reached
Total Forward Distance
252.86 km
Combined Traceroute Graph
Controls: Drag nodes to rearrange β€’ Mouse wheel to zoom β€’ Click and drag background to pan β€’ Hover for details
Loading graph...

Building graph...

Legend & Paths
Nodes
πŸ”„ Router Node
πŸ“‘ Gateway Node
πŸš€ Source Node
🎯 Target Node
Connections
RF Link
Gateway Connection
Direct Reception (0 hops)
Packet Paths
Loading paths...
Raw Packet Analysis
Complete field breakdown and MQTT privacy/exposure analysis
Packet Structure
MQTT Packet Flow:
ServiceEnvelope (MQTT layer) β†’ MeshPacket (Mesh layer) β†’ Decoded Payload (Application data)
Total Size:65 bytes
Gateway:!909ec2ec
Channel:MediumFast
Payload Type:TRACEROUTE_APP
Hop Count:4 / 5
Privacy Summary
Exposure Level:
Direct Message
Privacy Features:
βœ“ Direct LoRa transmission (not via MQTT)
βœ“ Acknowledgment requested
+ 3 more...
Exposure Risks:
⚠ Packet visible to MQTT subscribers
⚠ Multi-hop path visible (4 hops)
+ 1 more...
MQTT ServiceEnvelope Fields

MQTT ServiceEnvelope contains the MeshPacket plus routing metadata

FieldValue
gateway_id !909ec2ec
Node ID format
channel_id MediumFast
packet MeshPacket (65 bytes)
Contains the actual mesh network packet
MeshPacket Fields

Core mesh packet with routing and payload information

FieldValueType
from 847801383
Source node ID
uint32
to 1995717291
Target node ID
uint32
decoded.portnum 70
TRACEROUTE_APP
enum
decoded.payload_length 65 bytes size
hop_limit 1
Remaining hops allowed
uint32
hop_start 5
Initial hop limit
uint32
hops_taken 4
Calculated: hop_start - hop_limit
derived
rx_rssi -34.0 dBm
Signal strength at gateway
int32
rx_snr 10.50 dB
Signal quality at gateway
float
rx_time 1766614238
Receive timestamp
fixed32
via_mqtt False
Direct LoRa transmission
bool
want_ack True
Acknowledgment requested
bool
priority Not set enum
delayed Not set enum
channel Not set uint32
pki_encrypted False
Standard encryption
bool
next_hop Not set uint32
relay_node 65
Relay node ID
uint32
tx_after Not set uint32
timestamp 1766614241.5477204
Unix timestamp
uint32
MQTT Privacy & Exposure Analysis

Analysis of privacy features and exposure risks when packet is shared via MQTT

Exposure Level: Direct Message
Privacy Features:
  • βœ“ Direct LoRa transmission (not via MQTT)
  • βœ“ Acknowledgment requested
  • βœ“ Targeted to specific node
  • βœ“ Custom channel: MediumFast
  • βœ“ Gateway node ID tracked
Exposure Risks:
  • ⚠ Packet visible to MQTT subscribers
  • ⚠ Multi-hop path visible (4 hops)
  • ⚠ RF signal metrics exposed (location inference possible)
MQTT-Specific Fields
Want ack: True
Gateway ID: !909ec2ec
Signal Metrics: RSSI: -34.0 dBm
SNR: 10.50 dB
Complete Payload Analysis

Detailed breakdown of all payload fields and decoded data

Payload Metadata:
Protocol:TRACEROUTE_APP
Size:65 bytes
Decoded: Yes
Complete Payload Data (JSON):
{ "route_nodes": [ 2510991388, 2658546352, 2687837872, 3703763553, 772149825 ], "snr_towards": [ 2.5, -13.25, -8.25, -7.25, -7.5 ], "route_back": [], "snr_back": [], "route_node_names": { "3703763553": "Toledo1 (TO1)", "772149825": "ETH Maverick (ET01)", "847801383": "razrok 6c27 (rzrk)", "1995717291": "Hache (Hch)", "2658546352": "PuppetMaster 32b0 (PUPM)", "2687837872": "Venturada2 πŸ—ΌπŸŒž (Vb2)", "2510991388": "Rivas Partija b01c (b01c)" }, "traceroute_packet": { "packet_data": { "id": 29915770, "timestamp": 1766614241.5477204, "from_node_id": 847801383, "to_node_id": 1995717291, "portnum": 70, "portnum_name": "TRACEROUTE_APP", "gateway_id": "!909ec2ec", "channel_id": "MediumFast", "mesh_packet_id": 3829549188, "rssi": -34, "snr": 10.5, "hop_limit": 1, "hop_start": 5, "payload_length": 65, "processed_successfully": 1, "raw_payload": "0a141cb0aa95b032769eb02635a061f2c2dc4112062e12290acbffffffffffffffff01dfffffffffffffffff01e3ffffffffffffffff01e2ffffffffffffffff01", "via_mqtt": 0, "want_ack": 1, "priority": 0, "delayed": 0, "channel_index": null, "rx_time": 1766614238, "pki_encrypted": 0, "next_hop": 0, "relay_node": 65, "tx_after": 0, "timestamp_str": "2025-12-24 22:10:41 UTC", "hop_count": 4, "has_payload": true, "success": 1, "from_node_name": "razrok 6c27 (rzrk)", "to_node_name": "Hache (Hch)", "relay_hex": "41", "relay_candidates": [ { "node_id": 772149825, "node_name": "ETH Maverick", "hex_id": "!2e061241", "short_name": "ET01", "last_byte": "41" } ], "gateway_name": "ETH Goose (ET03)", "gateway_location": { "node_id": 2426323692, "latitude": 40.239104, "longitude": -3.7486592, "altitude": 627, "timestamp": 1766668299.4901254, "timestamp_str": "2025-12-25 13:11:39", "display_name": "ETH Goose", "long_name": "ETH Goose", "short_name": "ET03", "hw_model": "SENSECAP_INDICATOR" } }, "resolve_names": true, "packet_id": 29915770, "from_node_id": 847801383, "to_node_id": 1995717291, "timestamp": 1766614241.5477204, "gateway_id": "!909ec2ec", "raw_payload": "0a141cb0aa95b032769eb02635a061f2c2dc4112062e12290acbffffffffffffffff01dfffffffffffffffff01e3ffffffffffffffff01e2ffffffffffffffff01", "hop_limit": 1, "hop_start": 5, "from_node_name": "razrok 6c27 (rzrk)", "to_node_name": "!76f43aab", "route_data": { "route_nodes": [ 2510991388, 2658546352, 2687837872, 3703763553, 772149825 ], "snr_towards": [ 2.5, -13.25, -8.25, -7.25, -7.5 ], "route_back": [], "snr_back": [] }, "forward_path": { "path_type": "forward", "node_ids": [ 847801383, 2510991388, 2658546352, 2687837872, 3703763553, 772149825 ], "node_names": [ "razrok 6c27 (rzrk)", "Rivas Partija b01c (b01c)", "PuppetMaster 32b0 (PUPM)", "Venturada2 πŸ—ΌπŸŒž (Vb2)", "Toledo1 (TO1)", "ETH Maverick (ET01)" ], "snr_values": [ 2.5, -13.25, -8.25, -7.25, -7.5 ], "hops": [ { "hop_number": 1, "from_node_id": 847801383, "to_node_id": 2510991388, "from_node_name": "razrok 6c27 (rzrk)", "to_node_name": "Rivas Partija b01c (b01c)", "snr": 2.5, "direction": "forward", "is_target_hop": false, "distance_meters": 147.02777120005928, "from_location_timestamp": 1766609823.0491817, "to_location_timestamp": 1766586059.2872903, "from_location_age_warning": "from 1.2h ago", "to_location_age_warning": "from 7.8h ago" }, { "hop_number": 2, "from_node_id": 2510991388, "to_node_id": 2658546352, "from_node_name": "Rivas Partija b01c (b01c)", "to_node_name": "PuppetMaster 32b0 (PUPM)", "snr": -13.25, "direction": "forward", "is_target_hop": false, "distance_meters": 4516.721427745952, "from_location_timestamp": 1766586059.2872903, "to_location_timestamp": 1766592606.683281, "from_location_age_warning": "from 7.8h ago", "to_location_age_warning": "from 6.0h ago" }, { "hop_number": 3, "from_node_id": 2658546352, "to_node_id": 2687837872, "from_node_name": "PuppetMaster 32b0 (PUPM)", "to_node_name": "Venturada2 πŸ—ΌπŸŒž (Vb2)", "snr": -8.25, "direction": "forward", "is_target_hop": false, "distance_meters": 53497.688512827575, "from_location_timestamp": 1766592606.683281, "to_location_timestamp": 1766594255.4584403, "from_location_age_warning": "from 6.0h ago", "to_location_age_warning": "from 5.6h ago" }, { "hop_number": 4, "from_node_id": 2687837872, "to_node_id": 3703763553, "from_node_name": "Venturada2 πŸ—ΌπŸŒž (Vb2)", "to_node_name": "Toledo1 (TO1)", "snr": -7.25, "direction": "forward", "is_target_hop": false, "distance_meters": 132270.44767244215, "from_location_timestamp": 1766594255.4584403, "to_location_timestamp": 1766561982.7291777, "from_location_age_warning": "from 5.6h ago", "to_location_age_warning": "from 14.5h ago" }, { "hop_number": 5, "from_node_id": 3703763553, "to_node_id": 772149825, "from_node_name": "Toledo1 (TO1)", "to_node_name": "ETH Maverick (ET01)", "snr": -7.5, "direction": "forward", "is_target_hop": false, "distance_meters": 62430.822947514316, "from_location_timestamp": 1766561982.7291777, "to_location_timestamp": 1766585426.288859, "from_location_age_warning": "from 14.5h ago", "to_location_age_warning": "from 8.0h ago" } ], "is_complete": false, "total_hops": 5 }, "return_path": null, "actual_rf_path": { "path_type": "forward_rf", "node_ids": [ 847801383, 2510991388, 2658546352, 2687837872, 3703763553, 772149825 ], "node_names": [ "razrok 6c27 (rzrk)", "Rivas Partija b01c (b01c)", "PuppetMaster 32b0 (PUPM)", "Venturada2 πŸ—ΌπŸŒž (Vb2)", "Toledo1 (TO1)", "ETH Maverick (ET01)" ], "snr_values": [ 2.5, -13.25, -8.25, -7.25, -7.5 ], "hops": [ { "hop_number": 1, "from_node_id": 847801383, "to_node_id": 2510991388, "from_node_name": "razrok 6c27 (rzrk)", "to_node_name": "Rivas Partija b01c (b01c)", "snr": 2.5, "direction": "forward_rf", "is_target_hop": false, "distance_meters": 147.02777120005928, "from_location_timestamp": 1766609823.0491817, "to_location_timestamp": 1766586059.2872903, "from_location_age_warning": "from 1.2h ago", "to_location_age_warning": "from 7.8h ago" }, { "hop_number": 2, "from_node_id": 2510991388, "to_node_id": 2658546352, "from_node_name": "Rivas Partija b01c (b01c)", "to_node_name": "PuppetMaster 32b0 (PUPM)", "snr": -13.25, "direction": "forward_rf", "is_target_hop": false, "distance_meters": 4516.721427745952, "from_location_timestamp": 1766586059.2872903, "to_location_timestamp": 1766592606.683281, "from_location_age_warning": "from 7.8h ago", "to_location_age_warning": "from 6.0h ago" }, { "hop_number": 3, "from_node_id": 2658546352, "to_node_id": 2687837872, "from_node_name": "PuppetMaster 32b0 (PUPM)", "to_node_name": "Venturada2 πŸ—ΌπŸŒž (Vb2)", "snr": -8.25, "direction": "forward_rf", "is_target_hop": false, "distance_meters": 53497.688512827575, "from_location_timestamp": 1766592606.683281, "to_location_timestamp": 1766594255.4584403, "from_location_age_warning": "from 6.0h ago", "to_location_age_warning": "from 5.6h ago" }, { "hop_number": 4, "from_node_id": 2687837872, "to_node_id": 3703763553, "from_node_name": "Venturada2 πŸ—ΌπŸŒž (Vb2)", "to_node_name": "Toledo1 (TO1)", "snr": -7.25, "direction": "forward_rf", "is_target_hop": false, "distance_meters": 132270.44767244215, "from_location_timestamp": 1766594255.4584403, "to_location_timestamp": 1766561982.7291777, "from_location_age_warning": "from 5.6h ago", "to_location_age_warning": "from 14.5h ago" }, { "hop_number": 5, "from_node_id": 3703763553, "to_node_id": 772149825, "from_node_name": "Toledo1 (TO1)", "to_node_name": "ETH Maverick (ET01)", "snr": -7.5, "direction": "forward_rf", "is_target_hop": false, "distance_meters": 62430.822947514316, "from_location_timestamp": 1766561982.7291777, "to_location_timestamp": 1766585426.288859, "from_location_age_warning": "from 14.5h ago", "to_location_age_warning": "from 8.0h ago" } ], "is_complete": false, "total_hops": 5 } }, "has_return_path": false, "is_complete": false, "forward_path_display": "razrok 6c27 (rzrk) β†’ Rivas Partija b01c (b01c) β†’ PuppetMaster 32b0 (PUPM) β†’ Venturada2 πŸ—ΌπŸŒž (Vb2) β†’ Toledo1 (TO1) β†’ ETH Maverick (ET01)", "return_path_display": null, "actual_rf_path_display": "razrok 6c27 (rzrk) β†’ Rivas Partija b01c (b01c) β†’ PuppetMaster 32b0 (PUPM) β†’ Venturada2 πŸ—ΌπŸŒž (Vb2) β†’ Toledo1 (TO1) β†’ ETH Maverick (ET01)", "forward_hops": [ { "hop_number": 1, "from_node_id": 847801383, "to_node_id": 2510991388, "from_node_name": "razrok 6c27 (rzrk)", "to_node_name": "Rivas Partija b01c (b01c)", "snr": 2.5, "direction": "forward", "is_target_hop": false, "distance_meters": 147.02777120005928, "from_location_timestamp": 1766609823.0491817, "to_location_timestamp": 1766586059.2872903, "from_location_age_warning": "from 1.2h ago", "to_location_age_warning": "from 7.8h ago" }, { "hop_number": 2, "from_node_id": 2510991388, "to_node_id": 2658546352, "from_node_name": "Rivas Partija b01c (b01c)", "to_node_name": "PuppetMaster 32b0 (PUPM)", "snr": -13.25, "direction": "forward", "is_target_hop": false, "distance_meters": 4516.721427745952, "from_location_timestamp": 1766586059.2872903, "to_location_timestamp": 1766592606.683281, "from_location_age_warning": "from 7.8h ago", "to_location_age_warning": "from 6.0h ago" }, { "hop_number": 3, "from_node_id": 2658546352, "to_node_id": 2687837872, "from_node_name": "PuppetMaster 32b0 (PUPM)", "to_node_name": "Venturada2 πŸ—ΌπŸŒž (Vb2)", "snr": -8.25, "direction": "forward", "is_target_hop": false, "distance_meters": 53497.688512827575, "from_location_timestamp": 1766592606.683281, "to_location_timestamp": 1766594255.4584403, "from_location_age_warning": "from 6.0h ago", "to_location_age_warning": "from 5.6h ago" }, { "hop_number": 4, "from_node_id": 2687837872, "to_node_id": 3703763553, "from_node_name": "Venturada2 πŸ—ΌπŸŒž (Vb2)", "to_node_name": "Toledo1 (TO1)", "snr": -7.25, "direction": "forward", "is_target_hop": false, "distance_meters": 132270.44767244215, "from_location_timestamp": 1766594255.4584403, "to_location_timestamp": 1766561982.7291777, "from_location_age_warning": "from 5.6h ago", "to_location_age_warning": "from 14.5h ago" }, { "hop_number": 5, "from_node_id": 3703763553, "to_node_id": 772149825, "from_node_name": "Toledo1 (TO1)", "to_node_name": "ETH Maverick (ET01)", "snr": -7.5, "direction": "forward", "is_target_hop": false, "distance_meters": 62430.822947514316, "from_location_timestamp": 1766561982.7291777, "to_location_timestamp": 1766585426.288859, "from_location_age_warning": "from 14.5h ago", "to_location_age_warning": "from 8.0h ago" } ], "return_hops": [], "total_forward_distance": 252862.70833173007, "total_return_distance": null }
Complete Protobuf Decode (JSON)
{ "service_envelope": { "gateway_id": "!909ec2ec", "channel_id": "MediumFast", "packet": "MeshPacket (see mesh_packet below)" }, "mesh_packet": { "from": 847801383, "to": 1995717291, "id": 3829549188, "rx_time": 1766614238, "rx_snr": 10.5, "rx_rssi": -34, "hop_limit": 1, "hop_start": 5, "via_mqtt": 0, "want_ack": 1, "priority": 0, "delayed": 0, "channel_index": null, "pki_encrypted": 0, "next_hop": 0, "relay_node": 65, "tx_after": 0, "decoded": { "portnum": 70, "payload": "0a141cb0aa95b032769eb02635a061f2c2dc4112062e12290acbffffffffffffffff01dfffffffffffffffff01e3ffffffffffffffff01e2ffffffffffffffff01", "want_response": null, "dest": null, "source": null, "request_id": null, "reply_id": null, "emoji": null, "parsed_payload": { "route": [ 2510991388, 2658546352, 2687837872, 3703763553, 772149825 ], "snr_towards": [ 10, -53, -33, -29, -30 ], "type": "protobuf", "portnum": "TRACEROUTE_APP", "message_class": "RouteDiscovery" } } } }
Raw Packet Data (65 bytes)
0a141cb0aa95b032769eb02635a061f2c2dc4112062e12290acbffffffffffffffff01dfffffffffffffffff01e3ffffffffffffffff01e2ffffffffffffffff01
Hex Analysis:
Size:65 bytes
Format:Protobuf (Protocol Buffers)
Encoding:Binary with varint and length-delimited fields
This is the raw protobuf-encoded payload as received from MQTT. The structure follows the Meshtastic protobuf schema definitions.
All Receptions
All gateways that received this packet
Correlation: Using Mesh Packet ID
Reception Locations
Loading...

Loading reception map...

Map shows gateway locations that received this packet. Hop counts are displayed if available.
Gateway Time Offset RSSI SNR Hops Relay Channel Timestamp Actions
ETH Goose (ET03) Primary 0.000s
Reference
-34.0 dBm 10.50 dB 4 41 ET01 MediumFast 2025-12-24 22:10:41 UTC Current
[samsepi0l] πŸ“‘πŸŒ (tlg0) -3.409s
Before
-87.0 dBm 5.50 dB 1 1c b01c MediumFast 2025-12-24 22:10:38 UTC View
Venturada2 πŸ—ΌπŸŒž (Vb2) -2.579s
Before
-103.0 dBm -8.25 dB 2 b0 Sir , PUPM , Vb2 MediumFast 2025-12-24 22:10:38 UTC View
Ocumare NorteπŸ—ΌπŸŒ (RRN) -2.268s
Before
-98.0 dBm -3.75 dB 3 b0 Sir , Vb2 MediumFast 2025-12-24 22:10:39 UTC View
JAGO1_CaΓ±averal (JAGO) -2.251s
Before
-123.0 dBm -14.00 dB 3 b0 Sir , PUPM , Vb2 MediumFast 2025-12-24 22:10:39 UTC View
XiaoWatt c4c8 πŸŒπŸ”Œ (c4c8) -2.209s
Before
-76.0 dBm 9.50 dB 3 b0 Sir , Vb2 MediumFast 2025-12-24 22:10:39 UTC View
GRN1-BaseπŸ—ΌπŸŒ πŸ”‹ (GRN1) -1.975s
Before
-98.0 dBm 1.75 dB 3 b0 Sir , Vb2 MediumFast 2025-12-24 22:10:39 UTC View
πŸŽ„ SkG@Home πŸ“‘πŸŒ (SkGH) -1.703s
Before
-98.0 dBm -7.75 dB 3 aa CR1 MediumFast 2025-12-24 22:10:39 UTC View
Karabanchel_Baldur (KarB) -1.502s
Before
-104.0 dBm -8.75 dB 4 e2 Red MediumFast 2025-12-24 22:10:40 UTC View
Meshtastic b2b4πŸ“‘πŸŒ (b2b4) -1.494s
Before
-112.0 dBm -11.75 dB 4 e2 Red MediumFast 2025-12-24 22:10:40 UTC View
ETH Maverick (ET01) -1.131s
Before
-107.0 dBm -7.50 dB 3 61 TO1 MediumFast 2025-12-24 22:10:40 UTC View
Eagle’s Nest (EAGL) -0.879s
Before
-98.0 dBm 8.50 dB 4 48 SMR1 MediumFast 2025-12-24 22:10:40 UTC View
Aldinra_1640_πŸ—Ό_🌐 (AldB) -0.865s
Before
-115.0 dBm -7.00 dB 4 f5 RPT4 MediumFast 2025-12-24 22:10:40 UTC View
P3 iGate 🏠🌐 (P3N2) -0.677s
Before
-36.0 dBm 10.75 dB 4 25 P3N1 MediumFast 2025-12-24 22:10:40 UTC View
Quass001 β˜„οΈ (Q001) -0.512s
Before
-40.0 dBm 10.75 dB 5 3a Q005 MediumFast 2025-12-24 22:10:41 UTC View
πŸ€– Nicolas Cage 🌐 (Cage) -0.262s
Before
-116.0 dBm -8.50 dB 5 88 KarB MediumFast 2025-12-24 22:10:41 UTC View
g1bal (g1b0) -0.191s
Before
-107.0 dBm -3.00 dB 4 f5 RPT4 MediumFast 2025-12-24 22:10:41 UTC View
Meshtastic 1760 (1760) -0.013s
Before
-119.0 dBm -2.75 dB 5 40 AldB MediumFast 2025-12-24 22:10:41 UTC View
Meshtastic 18a4 (18a4) -0.011s
Before
-108.0 dBm -4.75 dB 5 40 AldB MediumFast 2025-12-24 22:10:41 UTC View
Quixote_JS8_7 (QXT7) +0.424s
After
-18.0 dBm 11.25 dB 5 - MediumFast 2025-12-24 22:10:41 UTC View
Quixote_JS8_5πŸ—ΌπŸŒ (QXT5) +0.453s
After
-115.0 dBm -6.75 dB 5 - MediumFast 2025-12-24 22:10:42 UTC View
JohnConnor (JOhN) +72.269s
After
-110.0 dBm -10.25 dB 4 f5 RPT4 MediumFast 2025-12-24 22:11:53 UTC View
22

Total Receptions

22

Unique Gateways