From c5985ab3145064753e40342b235ff0cdd48ee2c2 Mon Sep 17 00:00:00 2001 From: john-wiens Date: Mon, 23 Dec 2024 14:33:38 -0700 Subject: [PATCH 01/25] Updated Deduplicator for Compatibility with ode 4.0 --- jpo-deduplicator/jpo-deduplicator/pom.xml | 4 ++-- .../ProcessedSpatDeduplicatorTopology.java | 2 -- .../src/main/resources/application.yaml | 12 ++++++------ .../deduplicator/MapDeduplicatorTopologyTest.java | 15 +++++++++++---- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/jpo-deduplicator/jpo-deduplicator/pom.xml b/jpo-deduplicator/jpo-deduplicator/pom.xml index 3a358e2..fe29e07 100644 --- a/jpo-deduplicator/jpo-deduplicator/pom.xml +++ b/jpo-deduplicator/jpo-deduplicator/pom.xml @@ -101,12 +101,12 @@ usdot.jpo.ode jpo-ode-core - 3.0.0 + 4.0.0 usdot.jpo.ode jpo-ode-plugins - 3.0.0 + 4.0.0 usdot.jpo.ode diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java index b478669..a0c09c5 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java +++ b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java @@ -66,8 +66,6 @@ public Topology buildTopology() { Serdes.String(), JsonSerdes.ProcessedSpat())); KStream deduplicatedStream = inputStream.process(new ProcessedSpatProcessorSupplier(props), props.getKafkaStateStoreProcessedSpatName()); - - deduplicatedStream.print(Printed.toSysOut()); deduplicatedStream.to(props.getKafkaTopicDeduplicatedProcessedSpat(), Produced.with(Serdes.String(), JsonSerdes.ProcessedSpat())); diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml b/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml index 9e6b89d..2cf3771 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml +++ b/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml @@ -17,27 +17,27 @@ log4j.logger.org.apache.kafka: OFF # Processed Map Configuration kafkaTopicProcessedMap: topic.ProcessedMap kafkaTopicDeduplicatedProcessedMap: topic.DeduplicatedProcessedMap -enableProcessedMapDeduplication: false +enableProcessedMapDeduplication: true # Processed Map WKT Configuration kafkaTopicProcessedMapWKT: topic.ProcessedMapWKT kafkaTopicDeduplicatedProcessedMapWKT: topic.DeduplicatedProcessedMapWKT -enableProcessedMapWktDeduplication: false +enableProcessedMapWktDeduplication: true # Ode Map Json Configuration kafkaTopicOdeMapJson: topic.OdeMapJson kafkaTopicDeduplicatedOdeMapJson: topic.DeduplicatedOdeMapJson -enableOdeMapDeduplication: false +enableOdeMapDeduplication: true # Ode Tim Json Configuration kafkaTopicOdeTimJson: topic.OdeTimJson kafkaTopicDeduplicatedOdeTimJson: topic.DeduplicatedOdeTimJson -enableOdeTimDeduplication: false +enableOdeTimDeduplication: true # Ode Raw Encoded Tim Json Configuration kafkaTopicOdeRawEncodedTimJson: topic.OdeRawEncodedTIMJson kafkaTopicDeduplicatedOdeRawEncodedTimJson: topic.DeduplicatedOdeRawEncodedTIMJson -enableOdeRawEncodedTimDeduplication: false +enableOdeRawEncodedTimDeduplication: true # Ode Bsm Json Configuration kafkaTopicOdeBsmJson: topic.OdeBsmJson @@ -50,7 +50,7 @@ odeBsmAlwaysIncludeAtSpeed: 1 # Meter / Second # Processed Map Configuration kafkaTopicProcessedSpat: topic.ProcessedSpat kafkaTopicDeduplicatedProcessedSpat: topic.DeduplicatedProcessedSpat -enableProcessedSpatDeduplication: false +enableProcessedSpatDeduplication: true # Amount of time to wait to try and increase batching diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/MapDeduplicatorTopologyTest.java b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/MapDeduplicatorTopologyTest.java index a339677..d3f88fc 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/MapDeduplicatorTopologyTest.java +++ b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/MapDeduplicatorTopologyTest.java @@ -30,10 +30,17 @@ public class MapDeduplicatorTopologyTest { String outputTopic = "topic.DeduplicatedOdeMapJson"; ObjectMapper objectMapper; - String inputMap1 = "{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"mapTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\":{\"streamId\":\"139ba3af-e501-4854-9327-b9e1a2ed8dfb\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-02-22T21:12:44.308Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"mapSource\":\"RSU\",\"originIp\":\"10.11.81.12\"},\"payload\":{\"data\":{\"timeStamp\":null,\"msgIssueRevision\":2,\"layerType\":\"intersectionData\",\"layerID\":0,\"intersections\":{\"intersectionGeometry\":[{\"name\":null,\"id\":{\"region\":null,\"id\":12109},\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1691},\"laneWidth\":366,\"speedLimits\":null,\"laneSet\":{\"GenericLane\":[{\"laneID\":1,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":1511,\"y\":-1514},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":723,\"y\":-3116},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":892,\"y\":-3818},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":702,\"y\":-2507},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":681,\"y\":-2412},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":827,\"y\":-2798},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1176,\"y\":-3614},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":683,\"y\":-1992},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1000,\"y\":-2818},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":466,\"y\":-1295},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2505,\"y\":-6164},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":6037,\"y\":-13380},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":2,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":1192,\"y\":-1619},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":807,\"y\":-3733},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":1010,\"y\":-4226},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":1612,\"y\":-5477},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1142,\"y\":-3648},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1131,\"y\":-3343},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2259,\"y\":-6170},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2359,\"y\":-5737},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":5300,\"y\":-11774},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":50}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":3,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":805,\"y\":-1704},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":380,\"y\":-1813},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":832,\"y\":-3451},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":{\"x\":202,\"y\":-872},\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":{\"x\":340,\"y\":-482},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":6,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-988,\"y\":-2151},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":{\"x\":69,\"y\":-329},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":5,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-630,\"y\":-2062},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":76,\"y\":-377},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":4,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-245,\"y\":-2001},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":76,\"y\":-349},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":10,\"name\":null,\"ingressApproach\":null,\"egressApproach\":4,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2374,\"y\":232},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":-357,\"y\":-96},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":8,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2246,\"y\":-514},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2644,\"y\":-581},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2887,\"y\":-442},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3583,\"y\":-339},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3757,\"y\":27},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3249,\"y\":361},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2050,\"y\":478},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3893,\"y\":1184},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2625,\"y\":766},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2524,\"y\":607},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2280,\"y\":325},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":4,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":7,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2216,\"y\":-915},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2322,\"y\":-471},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1877,\"y\":-349},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1787,\"y\":-235},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2666,\"y\":-102},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":null,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":9,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2295,\"y\":-169},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2420,\"y\":-499},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1968,\"y\":-339},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1843,\"y\":-256},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2121,\"y\":-339},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":4,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":12,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1364,\"y\":1705},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-885,\"y\":4854},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-410,\"y\":2559},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-333,\"y\":1847},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-319,\"y\":3244},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-500,\"y\":4510},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-333,\"y\":3403},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-268,\"y\":2982},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-758,\"y\":11212},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-323,\"y\":11176},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":6,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":13,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-992,\"y\":1735},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-896,\"y\":4816},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-326,\"y\":2227},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-333,\"y\":2366},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-410,\"y\":3030},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-326,\"y\":3009},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-271,\"y\":2518},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-264,\"y\":2857},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-243,\"y\":2504},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-740,\"y\":11165},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-253,\"y\":11359},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":6,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":11,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1744,\"y\":1607},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-563,\"y\":3136},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-352,\"y\":2336},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-223,\"y\":1407},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-155,\"y\":1778},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":null,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":14,\"name\":null,\"ingressApproach\":null,\"egressApproach\":6,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":398,\"y\":1931},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":{\"x\":-76,\"y\":356},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":15,\"name\":null,\"ingressApproach\":null,\"egressApproach\":6,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":838,\"y\":1985},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":{\"x\":-89,\"y\":349},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null}]}}]},\"roadSegments\":null,\"dataParameters\":null,\"restrictionList\":null},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; - String inputMap2 = "{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"mapTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\":{\"streamId\":\"139ba3af-e501-4854-9327-b9e1a2ed8dfb\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-02-22T21:12:45.322Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"mapSource\":\"RSU\",\"originIp\":\"10.11.81.12\"},\"payload\":{\"data\":{\"timeStamp\":null,\"msgIssueRevision\":2,\"layerType\":\"intersectionData\",\"layerID\":0,\"intersections\":{\"intersectionGeometry\":[{\"name\":null,\"id\":{\"region\":null,\"id\":12109},\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1691},\"laneWidth\":366,\"speedLimits\":null,\"laneSet\":{\"GenericLane\":[{\"laneID\":1,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":1511,\"y\":-1514},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":723,\"y\":-3116},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":892,\"y\":-3818},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":702,\"y\":-2507},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":681,\"y\":-2412},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":827,\"y\":-2798},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1176,\"y\":-3614},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":683,\"y\":-1992},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1000,\"y\":-2818},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":466,\"y\":-1295},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2505,\"y\":-6164},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":6037,\"y\":-13380},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":2,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":1192,\"y\":-1619},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":807,\"y\":-3733},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":1010,\"y\":-4226},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":1612,\"y\":-5477},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1142,\"y\":-3648},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1131,\"y\":-3343},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2259,\"y\":-6170},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2359,\"y\":-5737},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":5300,\"y\":-11774},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":50}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":3,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":805,\"y\":-1704},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":380,\"y\":-1813},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":832,\"y\":-3451},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":{\"x\":202,\"y\":-872},\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":{\"x\":340,\"y\":-482},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":6,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-988,\"y\":-2151},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":{\"x\":69,\"y\":-329},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":5,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-630,\"y\":-2062},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":76,\"y\":-377},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":4,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-245,\"y\":-2001},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":76,\"y\":-349},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":10,\"name\":null,\"ingressApproach\":null,\"egressApproach\":4,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2374,\"y\":232},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":-357,\"y\":-96},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":8,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2246,\"y\":-514},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2644,\"y\":-581},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2887,\"y\":-442},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3583,\"y\":-339},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3757,\"y\":27},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3249,\"y\":361},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2050,\"y\":478},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3893,\"y\":1184},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2625,\"y\":766},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2524,\"y\":607},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2280,\"y\":325},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":4,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":7,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2216,\"y\":-915},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2322,\"y\":-471},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1877,\"y\":-349},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1787,\"y\":-235},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2666,\"y\":-102},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":null,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":9,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2295,\"y\":-169},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2420,\"y\":-499},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1968,\"y\":-339},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1843,\"y\":-256},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2121,\"y\":-339},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":4,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":12,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1364,\"y\":1705},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-885,\"y\":4854},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-410,\"y\":2559},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-333,\"y\":1847},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-319,\"y\":3244},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-500,\"y\":4510},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-333,\"y\":3403},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-268,\"y\":2982},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-758,\"y\":11212},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-323,\"y\":11176},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":6,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":13,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-992,\"y\":1735},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-896,\"y\":4816},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-326,\"y\":2227},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-333,\"y\":2366},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-410,\"y\":3030},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-326,\"y\":3009},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-271,\"y\":2518},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-264,\"y\":2857},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-243,\"y\":2504},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-740,\"y\":11165},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-253,\"y\":11359},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":6,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":11,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1744,\"y\":1607},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-563,\"y\":3136},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-352,\"y\":2336},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-223,\"y\":1407},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-155,\"y\":1778},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":null,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":14,\"name\":null,\"ingressApproach\":null,\"egressApproach\":6,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":398,\"y\":1931},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":{\"x\":-76,\"y\":356},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":15,\"name\":null,\"ingressApproach\":null,\"egressApproach\":6,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":838,\"y\":1985},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":{\"x\":-89,\"y\":349},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null}]}}]},\"roadSegments\":null,\"dataParameters\":null,\"restrictionList\":null},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; - String inputMap3 = "{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"mapTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\":{\"streamId\":\"139ba3af-e501-4854-9327-b9e1a2ed8dfb\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-02-22T21:12:48.355Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"mapSource\":\"RSU\",\"originIp\":\"10.11.81.12\"},\"payload\":{\"data\":{\"timeStamp\":null,\"msgIssueRevision\":2,\"layerType\":\"intersectionData\",\"layerID\":0,\"intersections\":{\"intersectionGeometry\":[{\"name\":null,\"id\":{\"region\":null,\"id\":12109},\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1500},\"laneWidth\":366,\"speedLimits\":null,\"laneSet\":{\"GenericLane\":[{\"laneID\":1,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":1511,\"y\":-1514},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":723,\"y\":-3116},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":892,\"y\":-3818},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":702,\"y\":-2507},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":681,\"y\":-2412},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":827,\"y\":-2798},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1176,\"y\":-3614},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":683,\"y\":-1992},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1000,\"y\":-2818},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":466,\"y\":-1295},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2505,\"y\":-6164},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":6037,\"y\":-13380},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":2,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":1192,\"y\":-1619},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":807,\"y\":-3733},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":1010,\"y\":-4226},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":1612,\"y\":-5477},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1142,\"y\":-3648},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1131,\"y\":-3343},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2259,\"y\":-6170},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2359,\"y\":-5737},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":5300,\"y\":-11774},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":50}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":3,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":805,\"y\":-1704},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":380,\"y\":-1813},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":832,\"y\":-3451},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":{\"x\":202,\"y\":-872},\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":{\"x\":340,\"y\":-482},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":6,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-988,\"y\":-2151},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":{\"x\":69,\"y\":-329},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":5,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-630,\"y\":-2062},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":76,\"y\":-377},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":4,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-245,\"y\":-2001},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":76,\"y\":-349},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":10,\"name\":null,\"ingressApproach\":null,\"egressApproach\":4,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2374,\"y\":232},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":-357,\"y\":-96},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":8,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2246,\"y\":-514},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2644,\"y\":-581},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2887,\"y\":-442},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3583,\"y\":-339},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3757,\"y\":27},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3249,\"y\":361},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2050,\"y\":478},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3893,\"y\":1184},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2625,\"y\":766},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2524,\"y\":607},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2280,\"y\":325},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":4,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":7,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2216,\"y\":-915},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2322,\"y\":-471},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1877,\"y\":-349},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1787,\"y\":-235},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2666,\"y\":-102},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":null,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":9,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2295,\"y\":-169},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2420,\"y\":-499},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1968,\"y\":-339},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1843,\"y\":-256},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2121,\"y\":-339},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":4,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":12,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1364,\"y\":1705},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-885,\"y\":4854},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-410,\"y\":2559},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-333,\"y\":1847},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-319,\"y\":3244},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-500,\"y\":4510},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-333,\"y\":3403},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-268,\"y\":2982},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-758,\"y\":11212},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-323,\"y\":11176},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":6,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":13,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-992,\"y\":1735},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-896,\"y\":4816},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-326,\"y\":2227},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-333,\"y\":2366},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-410,\"y\":3030},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-326,\"y\":3009},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-271,\"y\":2518},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-264,\"y\":2857},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-243,\"y\":2504},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-740,\"y\":11165},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-253,\"y\":11359},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":6,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":11,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1744,\"y\":1607},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-563,\"y\":3136},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-352,\"y\":2336},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-223,\"y\":1407},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-155,\"y\":1778},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":null,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":14,\"name\":null,\"ingressApproach\":null,\"egressApproach\":6,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":398,\"y\":1931},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":{\"x\":-76,\"y\":356},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":15,\"name\":null,\"ingressApproach\":null,\"egressApproach\":6,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":838,\"y\":1985},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":{\"x\":-89,\"y\":349},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null}]}}]},\"roadSegments\":null,\"dataParameters\":null,\"restrictionList\":null},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; - String inputMap4 = "{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"mapTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\":{\"streamId\":\"139ba3af-e501-4854-9327-b9e1a2ed8dfb\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-02-22T22:12:49.362Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"mapSource\":\"RSU\",\"originIp\":\"10.11.81.12\"},\"payload\":{\"data\":{\"timeStamp\":null,\"msgIssueRevision\":2,\"layerType\":\"intersectionData\",\"layerID\":0,\"intersections\":{\"intersectionGeometry\":[{\"name\":null,\"id\":{\"region\":null,\"id\":12109},\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1500},\"laneWidth\":366,\"speedLimits\":null,\"laneSet\":{\"GenericLane\":[{\"laneID\":1,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":1511,\"y\":-1514},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":723,\"y\":-3116},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":892,\"y\":-3818},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":702,\"y\":-2507},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":681,\"y\":-2412},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":827,\"y\":-2798},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1176,\"y\":-3614},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":683,\"y\":-1992},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1000,\"y\":-2818},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":466,\"y\":-1295},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2505,\"y\":-6164},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":6037,\"y\":-13380},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":2,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":1192,\"y\":-1619},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":807,\"y\":-3733},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":1010,\"y\":-4226},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":1612,\"y\":-5477},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1142,\"y\":-3648},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":1131,\"y\":-3343},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2259,\"y\":-6170},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":2359,\"y\":-5737},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":5300,\"y\":-11774},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":50}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":3,\"name\":null,\"ingressApproach\":1,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":805,\"y\":-1704},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":380,\"y\":-1813},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":832,\"y\":-3451},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":{\"x\":202,\"y\":-872},\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":{\"x\":340,\"y\":-482},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":2,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":6,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-988,\"y\":-2151},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":20}},{\"delta\":{\"nodeXY1\":{\"x\":69,\"y\":-329},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":5,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-630,\"y\":-2062},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":76,\"y\":-377},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":4,\"name\":null,\"ingressApproach\":null,\"egressApproach\":2,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-245,\"y\":-2001},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":76,\"y\":-349},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":10,\"name\":null,\"ingressApproach\":null,\"egressApproach\":4,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2374,\"y\":232},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":{\"x\":-357,\"y\":-96},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":8,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2246,\"y\":-514},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2644,\"y\":-581},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2887,\"y\":-442},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3583,\"y\":-339},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3757,\"y\":27},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3249,\"y\":361},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2050,\"y\":478},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-3893,\"y\":1184},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2625,\"y\":766},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2524,\"y\":607},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2280,\"y\":325},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":4,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":7,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2216,\"y\":-915},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2322,\"y\":-471},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1877,\"y\":-349},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1787,\"y\":-235},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2666,\"y\":-102},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":null,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":9,\"name\":null,\"ingressApproach\":3,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2295,\"y\":-169},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2420,\"y\":-499},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1968,\"y\":-339},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1843,\"y\":-256},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-2121,\"y\":-339},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":4,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":12,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1364,\"y\":1705},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-885,\"y\":4854},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-410,\"y\":2559},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-333,\"y\":1847},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-319,\"y\":3244},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-500,\"y\":4510},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-333,\"y\":3403},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-268,\"y\":2982},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-758,\"y\":11212},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-323,\"y\":11176},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":6,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":13,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-992,\"y\":1735},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":{\"x\":-896,\"y\":4816},\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-326,\"y\":2227},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-333,\"y\":2366},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-410,\"y\":3030},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-326,\"y\":3009},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-271,\"y\":2518},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-264,\"y\":2857},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-243,\"y\":2504},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-740,\"y\":11165},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-30}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":{\"x\":-253,\"y\":11359},\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-70}}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":6,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":11,\"name\":null,\"ingressApproach\":5,\"egressApproach\":null,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":true,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-1744,\"y\":1607},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-563,\"y\":3136},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":{\"x\":-352,\"y\":2336},\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-223,\"y\":1407},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":10}},{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":-155,\"y\":1778},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":{\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"remoteIntersection\":null,\"signalGroup\":null,\"userClass\":null,\"connectionID\":1}]},\"overlays\":null},{\"laneID\":14,\"name\":null,\"ingressApproach\":null,\"egressApproach\":6,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":398,\"y\":1931},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-10}},{\"delta\":{\"nodeXY1\":{\"x\":-76,\"y\":356},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null},{\"laneID\":15,\"name\":null,\"ingressApproach\":null,\"egressApproach\":6,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":true},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false},\"crosswalk\":null,\"bikeLane\":null,\"sidewalk\":null,\"median\":null,\"striping\":null,\"trackedVehicle\":null,\"parking\":null}},\"maneuvers\":null,\"nodeList\":{\"computed\":null,\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY1\":null,\"nodeXY2\":null,\"nodeXY3\":{\"x\":838,\"y\":1985},\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":{\"localNode\":null,\"disabled\":null,\"enabled\":null,\"data\":null,\"dWidth\":null,\"dElevation\":-20}},{\"delta\":{\"nodeXY1\":{\"x\":-89,\"y\":349},\"nodeXY2\":null,\"nodeXY3\":null,\"nodeXY4\":null,\"nodeXY5\":null,\"nodeXY6\":null,\"nodeLatLon\":null},\"attributes\":null}]}},\"connectsTo\":null,\"overlays\":null}]}}]},\"roadSegments\":null,\"dataParameters\":null,\"restrictionList\":null},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; + // Reference MAP + String inputMap1 = "{\"metadata\": {\"logFileName\": \"\",\"recordType\": \"mapTx\",\"securityResultCode\": \"success\",\"receivedMessageDetails\": {\"rxSource\": \"NA\"},\"payloadType\": \"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\": {\"streamId\": \"c495510d-c87b-4eb8-a413-a5f91e8ac026\",\"bundleSize\": 1,\"bundleId\": 0,\"recordId\": 0,\"serialNumber\": 0},\"odeReceivedAt\": \"2024-12-23T18:59:44.341Z\",\"schemaVersion\": 7,\"maxDurationTime\": 0,\"recordGeneratedAt\": \"\",\"recordGeneratedBy\": \"RSU\",\"sanitized\": false,\"odePacketID\": \"\",\"odeTimStartDateTime\": \"\",\"asn1\": \"001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E00\",\"mapSource\": \"RSU\",\"originIp\": \"172.24.0.1\"},\"payload\": {\"data\": {\"msgIssueRevision\": 0,\"layerType\": \"intersectionData\",\"layerID\": 0,\"intersections\": {\"intersectionGeometry\": [{\"id\": {\"id\": 12110},\"revision\": 0,\"refPoint\": {\"latitude\": 39.5952649,\"longitude\": -105.0914122,\"elevation\": 1677.0},\"laneWidth\": 366,\"laneSet\": {\"GenericLane\": [{\"laneID\": 2,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2225,\"y\": 808}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 10517,\"y\": -161}},\"attributes\": {\"dElevation\": -60}},{\"delta\": {\"nodeXY6\": {\"x\": 2769,\"y\": 112}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6142,\"y\": -180}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 6636,\"y\": -12}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 3804,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 19,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 3,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2222,\"y\": 515}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 2933,\"y\": -82}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6259,\"y\": -85}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 3416,\"y\": -98}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 6867,\"y\": -39}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 2657,\"y\": -55}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 4259,\"y\": 67}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 3481,\"y\": 0}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 1,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2215,\"y\": 1218}}},{\"delta\": {\"nodeXY6\": {\"x\": 10451,\"y\": -223}},\"attributes\": {\"dElevation\": -70}},{\"delta\": {\"nodeXY6\": {\"x\": 1852,\"y\": -108}},\"attributes\": {\"dElevation\": -10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 28,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 4,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2213,\"y\": -124}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 7187,\"y\": 20}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 541,\"y\": 40}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 1298,\"y\": 229}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 7,\"connectionID\": 1}]}},{\"laneID\": 6,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -1019}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 7}}}]}},{\"laneID\": 5,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -662}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 338,\"y\": 0}}}]}},{\"laneID\": 7,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2294,\"y\": -1463}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 27}}}]}},{\"laneID\": 12,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -952,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": -377}}}]}},{\"laneID\": 13,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1440,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 7,\"y\": -390}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}},{\"laneID\": 10,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 705,\"y\": -1919}}},{\"delta\": {\"nodeXY6\": {\"x\": -1,\"y\": -7515}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -41,\"y\": -5272}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -17,\"y\": -11337}}},{\"delta\": {\"nodeXY6\": {\"x\": 17,\"y\": -5938}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 9,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1090,\"y\": -1930}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 9,\"y\": -4764}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -20,\"y\": -6402}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": -34,\"y\": -7953}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": -10940}},\"attributes\": {\"dElevation\": 20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 27,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 11,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 350,\"y\": -1925}}},{\"delta\": {\"nodeXY6\": {\"x\": -32,\"y\": -6698}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 156,\"y\": -2616}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 1,\"connectionID\": 1}]}},{\"laneID\": 8,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1557,\"y\": -1956}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -101,\"y\": -1956}}},{\"delta\": {\"nodeXY6\": {\"x\": -5,\"y\": -7393}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -121,\"y\": -1636}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 7,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 15,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2405,\"y\": -1018}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -9339,\"y\": 26}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11895,\"y\": -38}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -8814,\"y\": 13}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 16,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2337,\"y\": -656}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -12229,\"y\": 15}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -11362,\"y\": -37}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -6537,\"y\": 1}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 17,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2338,\"y\": -284}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -8892,\"y\": -18}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11959,\"y\": -2}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -1564,\"y\": -180}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 3,\"connectionID\": 1}]}},{\"laneID\": 14,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2401,\"y\": -1380}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -19947,\"y\": 8}},\"attributes\": {\"dElevation\": 80}},{\"delta\": {\"nodeXY6\": {\"x\": -10108,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 18,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2264,\"y\": 479}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -580,\"y\": -14}}}]}},{\"laneID\": 19,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2257,\"y\": 796}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -518,\"y\": 0}}}]}},{\"laneID\": 20,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2236,\"y\": 1229}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -484,\"y\": 0}}}]}},{\"laneID\": 23,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -914,\"y\": 1903}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 225,\"y\": 12288}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 40,\"y\": 9634}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 32,\"y\": 8035}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 28}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 22,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1221,\"y\": 1914}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 92,\"y\": 10475}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 89,\"y\": 11582}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 48,\"y\": 7912}},\"attributes\": {\"dElevation\": -30}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 21,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1649,\"y\": 1935}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": 3182}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 21,\"y\": 5991}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 102,\"y\": 4810}}},{\"delta\": {\"nodeXY6\": {\"x\": 85,\"y\": 11803}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 19,\"y\": 4161}},\"attributes\": {\"dElevation\": -20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 20,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 24,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -535,\"y\": 1926}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 28,\"y\": 4582}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 88,\"y\": 3793}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -143,\"y\": 1866}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 25,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -213,\"y\": 1913}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 14,\"y\": 4594}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -91,\"y\": 2238}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 26,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 724,\"y\": 1902}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 352}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 27,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1105,\"y\": 1888}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 332}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 28,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1591,\"y\": 1874}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -14,\"y\": 346}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}}]}}]}},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; + + // Duplicate of Number 1 + String inputMap2 = "{\"metadata\": {\"logFileName\": \"\",\"recordType\": \"mapTx\",\"securityResultCode\": \"success\",\"receivedMessageDetails\": {\"rxSource\": \"NA\"},\"payloadType\": \"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\": {\"streamId\": \"c495510d-c87b-4eb8-a413-a5f91e8ac026\",\"bundleSize\": 1,\"bundleId\": 0,\"recordId\": 0,\"serialNumber\": 0},\"odeReceivedAt\": \"2024-12-23T18:59:44.341Z\",\"schemaVersion\": 7,\"maxDurationTime\": 0,\"recordGeneratedAt\": \"\",\"recordGeneratedBy\": \"RSU\",\"sanitized\": false,\"odePacketID\": \"\",\"odeTimStartDateTime\": \"\",\"asn1\": \"001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E00\",\"mapSource\": \"RSU\",\"originIp\": \"172.24.0.1\"},\"payload\": {\"data\": {\"msgIssueRevision\": 0,\"layerType\": \"intersectionData\",\"layerID\": 0,\"intersections\": {\"intersectionGeometry\": [{\"id\": {\"id\": 12110},\"revision\": 0,\"refPoint\": {\"latitude\": 39.5952649,\"longitude\": -105.0914122,\"elevation\": 1677.0},\"laneWidth\": 366,\"laneSet\": {\"GenericLane\": [{\"laneID\": 2,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2225,\"y\": 808}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 10517,\"y\": -161}},\"attributes\": {\"dElevation\": -60}},{\"delta\": {\"nodeXY6\": {\"x\": 2769,\"y\": 112}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6142,\"y\": -180}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 6636,\"y\": -12}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 3804,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 19,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 3,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2222,\"y\": 515}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 2933,\"y\": -82}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6259,\"y\": -85}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 3416,\"y\": -98}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 6867,\"y\": -39}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 2657,\"y\": -55}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 4259,\"y\": 67}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 3481,\"y\": 0}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 1,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2215,\"y\": 1218}}},{\"delta\": {\"nodeXY6\": {\"x\": 10451,\"y\": -223}},\"attributes\": {\"dElevation\": -70}},{\"delta\": {\"nodeXY6\": {\"x\": 1852,\"y\": -108}},\"attributes\": {\"dElevation\": -10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 28,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 4,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2213,\"y\": -124}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 7187,\"y\": 20}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 541,\"y\": 40}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 1298,\"y\": 229}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 7,\"connectionID\": 1}]}},{\"laneID\": 6,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -1019}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 7}}}]}},{\"laneID\": 5,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -662}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 338,\"y\": 0}}}]}},{\"laneID\": 7,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2294,\"y\": -1463}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 27}}}]}},{\"laneID\": 12,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -952,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": -377}}}]}},{\"laneID\": 13,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1440,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 7,\"y\": -390}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}},{\"laneID\": 10,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 705,\"y\": -1919}}},{\"delta\": {\"nodeXY6\": {\"x\": -1,\"y\": -7515}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -41,\"y\": -5272}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -17,\"y\": -11337}}},{\"delta\": {\"nodeXY6\": {\"x\": 17,\"y\": -5938}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 9,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1090,\"y\": -1930}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 9,\"y\": -4764}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -20,\"y\": -6402}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": -34,\"y\": -7953}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": -10940}},\"attributes\": {\"dElevation\": 20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 27,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 11,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 350,\"y\": -1925}}},{\"delta\": {\"nodeXY6\": {\"x\": -32,\"y\": -6698}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 156,\"y\": -2616}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 1,\"connectionID\": 1}]}},{\"laneID\": 8,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1557,\"y\": -1956}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -101,\"y\": -1956}}},{\"delta\": {\"nodeXY6\": {\"x\": -5,\"y\": -7393}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -121,\"y\": -1636}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 7,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 15,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2405,\"y\": -1018}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -9339,\"y\": 26}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11895,\"y\": -38}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -8814,\"y\": 13}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 16,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2337,\"y\": -656}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -12229,\"y\": 15}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -11362,\"y\": -37}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -6537,\"y\": 1}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 17,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2338,\"y\": -284}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -8892,\"y\": -18}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11959,\"y\": -2}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -1564,\"y\": -180}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 3,\"connectionID\": 1}]}},{\"laneID\": 14,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2401,\"y\": -1380}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -19947,\"y\": 8}},\"attributes\": {\"dElevation\": 80}},{\"delta\": {\"nodeXY6\": {\"x\": -10108,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 18,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2264,\"y\": 479}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -580,\"y\": -14}}}]}},{\"laneID\": 19,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2257,\"y\": 796}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -518,\"y\": 0}}}]}},{\"laneID\": 20,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2236,\"y\": 1229}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -484,\"y\": 0}}}]}},{\"laneID\": 23,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -914,\"y\": 1903}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 225,\"y\": 12288}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 40,\"y\": 9634}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 32,\"y\": 8035}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 28}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 22,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1221,\"y\": 1914}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 92,\"y\": 10475}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 89,\"y\": 11582}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 48,\"y\": 7912}},\"attributes\": {\"dElevation\": -30}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 21,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1649,\"y\": 1935}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": 3182}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 21,\"y\": 5991}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 102,\"y\": 4810}}},{\"delta\": {\"nodeXY6\": {\"x\": 85,\"y\": 11803}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 19,\"y\": 4161}},\"attributes\": {\"dElevation\": -20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 20,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 24,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -535,\"y\": 1926}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 28,\"y\": 4582}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 88,\"y\": 3793}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -143,\"y\": 1866}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 25,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -213,\"y\": 1913}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 14,\"y\": 4594}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -91,\"y\": 2238}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 26,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 724,\"y\": 1902}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 352}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 27,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1105,\"y\": 1888}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 332}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 28,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1591,\"y\": 1874}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -14,\"y\": 346}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}}]}}]}},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; + + // A different Message entirely + String inputMap3 = "{\"metadata\": {\"logFileName\": \"\",\"recordType\": \"mapTx\",\"securityResultCode\": \"success\",\"receivedMessageDetails\": {\"rxSource\": \"NA\"},\"payloadType\": \"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\": {\"streamId\": \"c495510d-c87b-4eb8-a413-a5f91e8ac026\",\"bundleSize\": 1,\"bundleId\": 0,\"recordId\": 0,\"serialNumber\": 0},\"odeReceivedAt\": \"2024-12-23T18:59:44.341Z\",\"schemaVersion\": 7,\"maxDurationTime\": 0,\"recordGeneratedAt\": \"\",\"recordGeneratedBy\": \"RSU\",\"sanitized\": false,\"odePacketID\": \"\",\"odeTimStartDateTime\": \"\",\"asn1\": \"001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E00\",\"mapSource\": \"RSU\",\"originIp\": \"172.24.0.1\"},\"payload\": {\"data\": {\"msgIssueRevision\": 0,\"layerType\": \"intersectionData\",\"layerID\": 0,\"intersections\": {\"intersectionGeometry\": [{\"id\": {\"id\": 12109},\"revision\": 0,\"refPoint\": {\"latitude\": 39.5952649,\"longitude\": -105.0914122,\"elevation\": 1677.0},\"laneWidth\": 366,\"laneSet\": {\"GenericLane\": [{\"laneID\": 2,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2225,\"y\": 808}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 10517,\"y\": -161}},\"attributes\": {\"dElevation\": -60}},{\"delta\": {\"nodeXY6\": {\"x\": 2769,\"y\": 112}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6142,\"y\": -180}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 6636,\"y\": -12}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 3804,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 19,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 3,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2222,\"y\": 515}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 2933,\"y\": -82}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6259,\"y\": -85}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 3416,\"y\": -98}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 6867,\"y\": -39}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 2657,\"y\": -55}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 4259,\"y\": 67}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 3481,\"y\": 0}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 1,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2215,\"y\": 1218}}},{\"delta\": {\"nodeXY6\": {\"x\": 10451,\"y\": -223}},\"attributes\": {\"dElevation\": -70}},{\"delta\": {\"nodeXY6\": {\"x\": 1852,\"y\": -108}},\"attributes\": {\"dElevation\": -10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 28,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 4,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2213,\"y\": -124}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 7187,\"y\": 20}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 541,\"y\": 40}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 1298,\"y\": 229}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 7,\"connectionID\": 1}]}},{\"laneID\": 6,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -1019}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 7}}}]}},{\"laneID\": 5,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -662}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 338,\"y\": 0}}}]}},{\"laneID\": 7,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2294,\"y\": -1463}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 27}}}]}},{\"laneID\": 12,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -952,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": -377}}}]}},{\"laneID\": 13,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1440,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 7,\"y\": -390}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}},{\"laneID\": 10,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 705,\"y\": -1919}}},{\"delta\": {\"nodeXY6\": {\"x\": -1,\"y\": -7515}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -41,\"y\": -5272}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -17,\"y\": -11337}}},{\"delta\": {\"nodeXY6\": {\"x\": 17,\"y\": -5938}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 9,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1090,\"y\": -1930}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 9,\"y\": -4764}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -20,\"y\": -6402}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": -34,\"y\": -7953}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": -10940}},\"attributes\": {\"dElevation\": 20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 27,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 11,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 350,\"y\": -1925}}},{\"delta\": {\"nodeXY6\": {\"x\": -32,\"y\": -6698}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 156,\"y\": -2616}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 1,\"connectionID\": 1}]}},{\"laneID\": 8,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1557,\"y\": -1956}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -101,\"y\": -1956}}},{\"delta\": {\"nodeXY6\": {\"x\": -5,\"y\": -7393}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -121,\"y\": -1636}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 7,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 15,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2405,\"y\": -1018}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -9339,\"y\": 26}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11895,\"y\": -38}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -8814,\"y\": 13}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 16,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2337,\"y\": -656}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -12229,\"y\": 15}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -11362,\"y\": -37}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -6537,\"y\": 1}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 17,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2338,\"y\": -284}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -8892,\"y\": -18}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11959,\"y\": -2}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -1564,\"y\": -180}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 3,\"connectionID\": 1}]}},{\"laneID\": 14,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2401,\"y\": -1380}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -19947,\"y\": 8}},\"attributes\": {\"dElevation\": 80}},{\"delta\": {\"nodeXY6\": {\"x\": -10108,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 18,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2264,\"y\": 479}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -580,\"y\": -14}}}]}},{\"laneID\": 19,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2257,\"y\": 796}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -518,\"y\": 0}}}]}},{\"laneID\": 20,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2236,\"y\": 1229}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -484,\"y\": 0}}}]}},{\"laneID\": 23,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -914,\"y\": 1903}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 225,\"y\": 12288}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 40,\"y\": 9634}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 32,\"y\": 8035}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 28}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 22,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1221,\"y\": 1914}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 92,\"y\": 10475}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 89,\"y\": 11582}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 48,\"y\": 7912}},\"attributes\": {\"dElevation\": -30}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 21,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1649,\"y\": 1935}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": 3182}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 21,\"y\": 5991}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 102,\"y\": 4810}}},{\"delta\": {\"nodeXY6\": {\"x\": 85,\"y\": 11803}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 19,\"y\": 4161}},\"attributes\": {\"dElevation\": -20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 20,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 24,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -535,\"y\": 1926}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 28,\"y\": 4582}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 88,\"y\": 3793}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -143,\"y\": 1866}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 25,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -213,\"y\": 1913}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 14,\"y\": 4594}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -91,\"y\": 2238}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 26,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 724,\"y\": 1902}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 352}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 27,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1105,\"y\": 1888}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 332}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 28,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1591,\"y\": 1874}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -14,\"y\": 346}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}}]}}]}},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; + + // Message 1 but 1 hour later + String inputMap4 = "{\"metadata\": {\"logFileName\": \"\",\"recordType\": \"mapTx\",\"securityResultCode\": \"success\",\"receivedMessageDetails\": {\"rxSource\": \"NA\"},\"payloadType\": \"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\": {\"streamId\": \"c495510d-c87b-4eb8-a413-a5f91e8ac026\",\"bundleSize\": 1,\"bundleId\": 0,\"recordId\": 0,\"serialNumber\": 0},\"odeReceivedAt\": \"2024-12-23T20:00:00.341Z\",\"schemaVersion\": 7,\"maxDurationTime\": 0,\"recordGeneratedAt\": \"\",\"recordGeneratedBy\": \"RSU\",\"sanitized\": false,\"odePacketID\": \"\",\"odeTimStartDateTime\": \"\",\"asn1\": \"001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E00\",\"mapSource\": \"RSU\",\"originIp\": \"172.24.0.1\"},\"payload\": {\"data\": {\"msgIssueRevision\": 0,\"layerType\": \"intersectionData\",\"layerID\": 0,\"intersections\": {\"intersectionGeometry\": [{\"id\": {\"id\": 12110},\"revision\": 0,\"refPoint\": {\"latitude\": 39.5952649,\"longitude\": -105.0914122,\"elevation\": 1677.0},\"laneWidth\": 366,\"laneSet\": {\"GenericLane\": [{\"laneID\": 2,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2225,\"y\": 808}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 10517,\"y\": -161}},\"attributes\": {\"dElevation\": -60}},{\"delta\": {\"nodeXY6\": {\"x\": 2769,\"y\": 112}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6142,\"y\": -180}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 6636,\"y\": -12}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 3804,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 19,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 3,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2222,\"y\": 515}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 2933,\"y\": -82}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6259,\"y\": -85}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 3416,\"y\": -98}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 6867,\"y\": -39}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 2657,\"y\": -55}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 4259,\"y\": 67}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 3481,\"y\": 0}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 1,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2215,\"y\": 1218}}},{\"delta\": {\"nodeXY6\": {\"x\": 10451,\"y\": -223}},\"attributes\": {\"dElevation\": -70}},{\"delta\": {\"nodeXY6\": {\"x\": 1852,\"y\": -108}},\"attributes\": {\"dElevation\": -10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 28,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 4,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2213,\"y\": -124}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 7187,\"y\": 20}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 541,\"y\": 40}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 1298,\"y\": 229}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 7,\"connectionID\": 1}]}},{\"laneID\": 6,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -1019}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 7}}}]}},{\"laneID\": 5,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -662}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 338,\"y\": 0}}}]}},{\"laneID\": 7,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2294,\"y\": -1463}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 27}}}]}},{\"laneID\": 12,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -952,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": -377}}}]}},{\"laneID\": 13,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1440,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 7,\"y\": -390}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}},{\"laneID\": 10,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 705,\"y\": -1919}}},{\"delta\": {\"nodeXY6\": {\"x\": -1,\"y\": -7515}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -41,\"y\": -5272}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -17,\"y\": -11337}}},{\"delta\": {\"nodeXY6\": {\"x\": 17,\"y\": -5938}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 9,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1090,\"y\": -1930}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 9,\"y\": -4764}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -20,\"y\": -6402}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": -34,\"y\": -7953}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": -10940}},\"attributes\": {\"dElevation\": 20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 27,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 11,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 350,\"y\": -1925}}},{\"delta\": {\"nodeXY6\": {\"x\": -32,\"y\": -6698}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 156,\"y\": -2616}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 1,\"connectionID\": 1}]}},{\"laneID\": 8,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1557,\"y\": -1956}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -101,\"y\": -1956}}},{\"delta\": {\"nodeXY6\": {\"x\": -5,\"y\": -7393}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -121,\"y\": -1636}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 7,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 15,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2405,\"y\": -1018}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -9339,\"y\": 26}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11895,\"y\": -38}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -8814,\"y\": 13}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 16,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2337,\"y\": -656}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -12229,\"y\": 15}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -11362,\"y\": -37}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -6537,\"y\": 1}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 17,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2338,\"y\": -284}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -8892,\"y\": -18}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11959,\"y\": -2}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -1564,\"y\": -180}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 3,\"connectionID\": 1}]}},{\"laneID\": 14,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2401,\"y\": -1380}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -19947,\"y\": 8}},\"attributes\": {\"dElevation\": 80}},{\"delta\": {\"nodeXY6\": {\"x\": -10108,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 18,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2264,\"y\": 479}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -580,\"y\": -14}}}]}},{\"laneID\": 19,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2257,\"y\": 796}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -518,\"y\": 0}}}]}},{\"laneID\": 20,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2236,\"y\": 1229}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -484,\"y\": 0}}}]}},{\"laneID\": 23,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -914,\"y\": 1903}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 225,\"y\": 12288}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 40,\"y\": 9634}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 32,\"y\": 8035}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 28}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 22,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1221,\"y\": 1914}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 92,\"y\": 10475}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 89,\"y\": 11582}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 48,\"y\": 7912}},\"attributes\": {\"dElevation\": -30}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 21,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1649,\"y\": 1935}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": 3182}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 21,\"y\": 5991}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 102,\"y\": 4810}}},{\"delta\": {\"nodeXY6\": {\"x\": 85,\"y\": 11803}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 19,\"y\": 4161}},\"attributes\": {\"dElevation\": -20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 20,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 24,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -535,\"y\": 1926}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 28,\"y\": 4582}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 88,\"y\": 3793}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -143,\"y\": 1866}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 25,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -213,\"y\": 1913}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 14,\"y\": 4594}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -91,\"y\": 2238}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 26,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 724,\"y\": 1902}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 352}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 27,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1105,\"y\": 1888}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 332}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 28,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1591,\"y\": 1874}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -14,\"y\": 346}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}}]}}]}},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; @Autowired DeduplicatorProperties props; From 3c7e1de72bf7f30171de9828ef69a53dc2fb426a Mon Sep 17 00:00:00 2001 From: john-wiens Date: Mon, 23 Dec 2024 17:12:51 -0700 Subject: [PATCH 02/25] Updated deduplicator to 2.0.0 version of GeoJson Converter --- README.md | 4 +--- jpo-deduplicator/jpo-deduplicator/pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index ea2e9d4..85b6f2d 100644 --- a/README.md +++ b/README.md @@ -205,9 +205,7 @@ The JPO-Deduplicator is a Kafka Java spring-boot application designed to reduce ### Deduplication Config -When running the jpo-deduplication as a submodule in jpo-utils, the deduplicator will automatically turn on deduplication for a topic when that topic is created. For example if the KAFKA_TOPIC_CREATE_GEOJSONCONVERTER environment variable is set to true, the deduplicator will start performing deduplication for ProcessedMap, ProcessedMapWKT, and ProcessedSpat data. - -To manually configure deduplication for a topic, the following environment variables can also be used. +When running the jpo-deduplication as a submodule in jpo-utils, the deduplicator will automatically configure an algorithm as enabled or disabled depending on if the corresponding subcomponent is also active. For example if the KAFKA_TOPIC_CREATE_GEOJSONCONVERTER environment variable is set to true, the deduplicator will start performing deduplication for ProcessedMap, ProcessedMapWKT, and ProcessedSpat data. If the KAFKA_TOPIC_CREATE_GEOJSONCONVERTER is set to false, the deduplicator will disable deduplication for those same topics. To manually configure deduplication for a topic, the following environment variables can also be used. If no value is passed for a given environment variable, the corresponding deduplication algorithm will default to enabled. | Environment Variable | Description | |---|---| diff --git a/jpo-deduplicator/jpo-deduplicator/pom.xml b/jpo-deduplicator/jpo-deduplicator/pom.xml index fe29e07..29cd82f 100644 --- a/jpo-deduplicator/jpo-deduplicator/pom.xml +++ b/jpo-deduplicator/jpo-deduplicator/pom.xml @@ -111,13 +111,13 @@ usdot.jpo.ode jpo-geojsonconverter - 1.4.2 + 2.0.0 usdot.jpo.ode jpo-conflictmonitor 1.5.0 - + junit junit From e74409155374c0a5cc365ad30a222af53a3b38e2 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 30 Dec 2024 14:12:14 -0700 Subject: [PATCH 03/25] enable bsm deduplication by default --- .../jpo-deduplicator/src/main/resources/application.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml b/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml index 2cf3771..3102c6b 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml +++ b/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml @@ -42,7 +42,7 @@ enableOdeRawEncodedTimDeduplication: true # Ode Bsm Json Configuration kafkaTopicOdeBsmJson: topic.OdeBsmJson kafkaTopicDeduplicatedOdeBsmJson: topic.DeduplicatedOdeBsmJson -enableOdeBsmDeduplication: false +enableOdeBsmDeduplication: true odeBsmMaximumTimeDelta: 10000 # Milliseconds odeBsmMaximumPositionDelta: 1 # Meter odeBsmAlwaysIncludeAtSpeed: 1 # Meter / Second From bce643b9ddc4afbe420e94e5b9db664f30b660e0 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 30 Dec 2024 14:30:26 -0700 Subject: [PATCH 04/25] updating settings.xml for faster build times --- .../jpo-deduplicator/settings.xml | 30 ++----------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/jpo-deduplicator/jpo-deduplicator/settings.xml b/jpo-deduplicator/jpo-deduplicator/settings.xml index eaee228..228152a 100644 --- a/jpo-deduplicator/jpo-deduplicator/settings.xml +++ b/jpo-deduplicator/jpo-deduplicator/settings.xml @@ -9,16 +9,6 @@ jpo_deduplicator ${env.MAVEN_GITHUB_TOKEN} - - github_jpo_ode - jpo_deduplicator - ${env.MAVEN_GITHUB_TOKEN} - - - github_jpo_geojsonconverter - jpo_deduplicator - ${env.MAVEN_GITHUB_TOKEN} - @@ -26,24 +16,8 @@ github - GitHub JPO Conflict Monitor - https://maven.pkg.github.com/${env.MAVEN_GITHUB_ORG}/jpo-conflictmonitor - - false - - - - github_jpo_ode - GitHub JPO ODE - https://maven.pkg.github.com/${env.MAVEN_GITHUB_ORG}/jpo-ode - - false - - - - github_jpo_geojsonconverter - GitHub JPO GeojsonConverter - https://maven.pkg.github.com/${env.MAVEN_GITHUB_ORG}/jpo-geojsonconverter + GitHub JPO Repositories + https://maven.pkg.github.com/${env.MAVEN_GITHUB_ORG}/* false From 0c5f4e1985426bb2425358c346223201d0f6ade2 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Thu, 9 Jan 2025 12:49:44 -0700 Subject: [PATCH 05/25] fixes to kafka-setup to include mec flag adding initial topics for the mec depositor applicaiton updates to test updates for jpo mec deposit metrics updates to kafka required pods updates to required pods --- docker-compose-connect.yml | 3 +++ docker-compose-kafka.yml | 35 +++++++++++++++++--------- docker-compose-mongo.yml | 6 +++-- jikkou/kafka-connectors-template.jinja | 6 ++++- jikkou/kafka-connectors-values.yaml | 12 ++++++++- jikkou/kafka-topics-template.jinja | 6 ++++- jikkou/kafka-topics-values.yaml | 9 ++++++- sample.env | 6 +++-- 8 files changed, 63 insertions(+), 20 deletions(-) diff --git a/docker-compose-connect.yml b/docker-compose-connect.yml index c78c49b..2e77d88 100644 --- a/docker-compose-connect.yml +++ b/docker-compose-connect.yml @@ -54,6 +54,7 @@ services: - all - kafka_connect - kafka_connect_standalone + - kafka_connect_setup image: jpo-jikkou build: context: jikkou @@ -68,6 +69,7 @@ services: depends_on: kafka-connect: condition: service_healthy + required: false environment: CONNECT_URL: ${CONNECT_URL} CONNECT_TASKS_MAX: ${CONNECT_TASKS_MAX} @@ -75,6 +77,7 @@ services: CONNECT_CREATE_GEOJSONCONVERTER: ${CONNECT_CREATE_GEOJSONCONVERTER} CONNECT_CREATE_CONFLICTMONITOR: ${CONNECT_CREATE_CONFLICTMONITOR} CONNECT_CREATE_DEDUPLICATOR: ${CONNECT_CREATE_DEDUPLICATOR} + CONNECT_CREATE_MECDEPOSIT: ${CONNECT_CREATE_MECDEPOSIT} MONGO_CONNECTOR_USERNAME: ${MONGO_ADMIN_DB_USER} MONGO_CONNECTOR_PASSWORD: ${MONGO_ADMIN_DB_PASS:?} MONGO_DB_IP: ${MONGO_IP} diff --git a/docker-compose-kafka.yml b/docker-compose-kafka.yml index 8d52a0a..1cef813 100644 --- a/docker-compose-kafka.yml +++ b/docker-compose-kafka.yml @@ -19,7 +19,7 @@ services: deploy: resources: limits: - cpus: '1' + cpus: "1" memory: 4G volumes: - kafka:/bitnami @@ -40,10 +40,9 @@ services: KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "false" logging: options: - max-size: "10m" + max-size: "10m" max-file: "5" - kafka-setup: profiles: - all @@ -58,11 +57,12 @@ services: deploy: resources: limits: - cpus: '0.5' + cpus: "0.5" memory: 1G depends_on: kafka: condition: service_healthy + required: false environment: KAFKA_BOOTSTRAP_SERVERS: ${KAFKA_BOOTSTRAP_SERVERS} KAFKA_TOPIC_PARTITIONS: ${KAFKA_TOPIC_PARTITIONS} @@ -74,12 +74,13 @@ services: KAFKA_TOPIC_CREATE_GEOJSONCONVERTER: ${KAFKA_TOPIC_CREATE_GEOJSONCONVERTER} KAFKA_TOPIC_CREATE_CONFLICTMONITOR: ${KAFKA_TOPIC_CREATE_CONFLICTMONITOR} KAFKA_TOPIC_CREATE_DEDUPLICATOR: ${KAFKA_TOPIC_CREATE_DEDUPLICATOR} - MONGO_CONNECTOR_USERNAME: ${MONGO_ADMIN_DB_USER} - MONGO_CONNECTOR_PASSWORD: ${MONGO_ADMIN_DB_PASS} - MONGO_DB_IP: ${MONGO_IP} - MONGO_DB_NAME: ${MONGO_DB_NAME} + KAFKA_TOPIC_CREATE_MECDEPOSIT: ${KAFKA_TOPIC_CREATE_MECDEPOSIT} volumes: - ${KAFKA_TOPIC_CONFIG_RELATIVE_PATH:-./jikkou/kafka-topics-values.yaml}:/app/kafka-topics-values.yaml + logging: + options: + max-size: "10m" + max-file: "5" kafka-schema-registry: profiles: @@ -91,11 +92,12 @@ services: deploy: resources: limits: - cpus: '0.5' + cpus: "0.5" memory: 1G depends_on: kafka: condition: service_healthy + required: false ports: - "8081:8081" environment: @@ -108,6 +110,10 @@ services: interval: 30s timeout: 10s retries: 4 + logging: + options: + max-size: "10m" + max-file: "5" kafka-ui: profiles: @@ -120,19 +126,24 @@ services: deploy: resources: limits: - cpus: '0.5' + cpus: "0.5" memory: 1G ports: - 8001:8080 depends_on: kafka: condition: service_healthy + required: false environment: - DYNAMIC_CONFIG_ENABLED: 'true' + DYNAMIC_CONFIG_ENABLED: "true" KAFKA_CLUSTERS_0_NAME: local KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: ${KAFKA_BOOTSTRAP_SERVERS} KAFKA_CLUSTERS_0_KAFKACONNECT_0_NAME: kafka-connect KAFKA_CLUSTERS_0_KAFKACONNECT_0_ADDRESS: ${CONNECT_URL} + logging: + options: + max-size: "10m" + max-file: "5" volumes: - kafka: \ No newline at end of file + kafka: diff --git a/docker-compose-mongo.yml b/docker-compose-mongo.yml index 2f72bcf..93a32a2 100644 --- a/docker-compose-mongo.yml +++ b/docker-compose-mongo.yml @@ -66,7 +66,9 @@ services: image: mongo:8 hostname: mongo_setup depends_on: - - mongo + mongo: + condition: service_healthy + required: false restart: on-failure deploy: resources: @@ -88,7 +90,7 @@ services: CONNECT_CREATE_GEOJSONCONVERTER: ${CONNECT_CREATE_GEOJSONCONVERTER} CONNECT_CREATE_CONFLICTMONITOR: ${CONNECT_CREATE_CONFLICTMONITOR} CONNECT_CREATE_DEDUPLICATOR: ${CONNECT_CREATE_DEDUPLICATOR} - + CONNECT_CREATE_MECDEPOSIT: ${CONNECT_CREATE_MECDEPOSIT} entrypoint: ["/bin/bash", "setup_mongo.sh"] volumes: - ${MONGO_SETUP_SCRIPT_RELATIVE_PATH}:/setup_mongo.sh diff --git a/jikkou/kafka-connectors-template.jinja b/jikkou/kafka-connectors-template.jinja index 8f34ca2..bb97cb0 100644 --- a/jikkou/kafka-connectors-template.jinja +++ b/jikkou/kafka-connectors-template.jinja @@ -69,4 +69,8 @@ spec: {% else %} {{ create_connector(values.apps.ode_duplicated) }} {{ create_connector(values.apps.geojsonconverter_duplicated) }} -{% endif %} \ No newline at end of file +{% endif %} + +{% if system.env.CONNECT_CREATE_MECDEPOSIT %} +{{ create_connector(values.apps.mecdeposit) }} +{% endif %} diff --git a/jikkou/kafka-connectors-values.yaml b/jikkou/kafka-connectors-values.yaml index 76daffe..2d0720f 100644 --- a/jikkou/kafka-connectors-values.yaml +++ b/jikkou/kafka-connectors-values.yaml @@ -350,4 +350,14 @@ apps: collectionName: CmEventStateProgressionNotificationAggregation generateTimestamp: true timestampField: notificationGeneratedAt - + mecdeposit: + name: mecdeposit + connectors: + - topicName: topic.MecEtxMqttDepositMetrics + collectionName: MecEtxMqttDepositMetrics + useTimestamp: true + timestampField: odeReceivedAt + - topicName: topic.MecEtxApiDepositMetrics + collectionName: MecEtxApiDepositMetrics + useTimestamp: true + timestampField: odeReceivedAt diff --git a/jikkou/kafka-topics-template.jinja b/jikkou/kafka-topics-template.jinja index e2d1ebc..1db6726 100644 --- a/jikkou/kafka-topics-template.jinja +++ b/jikkou/kafka-topics-template.jinja @@ -74,4 +74,8 @@ spec: {% if system.env.KAFKA_TOPIC_CREATE_DEDUPLICATOR %} {{ create_topics(values.apps.deduplicator) }} -{% endif %} \ No newline at end of file +{% endif %} + +{% if system.env.KAFKA_TOPIC_CREATE_MECDEPOSIT %} +{{ create_topics(values.apps.mecdeposit) }} +{% endif %} diff --git a/jikkou/kafka-topics-values.yaml b/jikkou/kafka-topics-values.yaml index 7c29e20..e28d1ce 100644 --- a/jikkou/kafka-topics-values.yaml +++ b/jikkou/kafka-topics-values.yaml @@ -182,4 +182,11 @@ apps: cleanUpPolicy: compact - topicName: topic.KafkaConnectStatus partitions: 10 - cleanUpPolicy: compact \ No newline at end of file + cleanUpPolicy: compact + mecdeposit: + name: jpo-mecdeposit + streamTopics: + - topic.MecEtxMqttDepositMetrics + - topic.MecEtxApiDepositMetrics + tableTopics: {} + customTopics: {} diff --git a/sample.env b/sample.env index a67d94f..feca26b 100644 --- a/sample.env +++ b/sample.env @@ -21,10 +21,10 @@ RESTART_POLICY="on-failure:3" # - kafka # - mongo # - kafka_connect -# - kafka-connect-setup +# - kafka_connect_setup # - kafka_connect # - kafka_connect -# - kafka-connect-setup +# - kafka_connect_setup # - deduplicator # - deduplicator # EXAMPLE: COMPOSE_PROFILES=kafka_connect_standalone,kafka_ui,mongo_express @@ -50,6 +50,7 @@ KAFKA_TOPIC_CREATE_ODE=true # Create topics for ODE KAFKA_TOPIC_CREATE_GEOJSONCONVERTER=true # Create topics for GeoJSON Converter KAFKA_TOPIC_CREATE_CONFLICTMONITOR=true # Create topics for Conflict Monitor KAFKA_TOPIC_CREATE_DEDUPLICATOR=true # Create topics for Deduplicator +KAFKA_TOPIC_CREATE_MECDEPOSIT=true # Create topics for MecDeposit # Relative path to the Kafka topic yaml configuration script, upper level directories are supported # NOTE: This script is used to create kafka topics KAFKA_TOPIC_CONFIG_RELATIVE_PATH="./jikkou/kafka-topics-values.yaml" @@ -117,6 +118,7 @@ CONNECT_CREATE_ODE=true # Create kafka connectors to MongoDB for CONNECT_CREATE_GEOJSONCONVERTER=true # Create kafka connectors to MongoDB for GeoJSON Converter CONNECT_CREATE_CONFLICTMONITOR=true # Create kafka connectors to MongoDB for Conflict Monitor CONNECT_CREATE_DEDUPLICATOR=true # Create kafka connectors to MongoDB for Deduplicator +CONNECT_CREATE_MECDEPOSIT=true # Create kafka connectors to MongoDB for MecDeposit # Relative path to the Kafka Connector yaml configuration script, upper level directories are supported # NOTE: This script is used to create kafka connectors CONNECT_CONFIG_RELATIVE_PATH="./jikkou/kafka-connectors-values.yaml" From b89ac3b2d168eb3945889507f82ed12d69e97716 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:46:11 -0700 Subject: [PATCH 06/25] removal of depends on requirements and updating mongo health check --- docker-compose-connect.yml | 2 ++ docker-compose-mongo.yml | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docker-compose-connect.yml b/docker-compose-connect.yml index 2e77d88..bac2384 100644 --- a/docker-compose-connect.yml +++ b/docker-compose-connect.yml @@ -24,8 +24,10 @@ services: depends_on: mongo: condition: service_healthy + required: false kafka: condition: service_healthy + required: false environment: CONNECT_BOOTSTRAP_SERVERS: ${KAFKA_BOOTSTRAP_SERVERS} CONNECT_REST_ADVERTISED_HOST_NAME: connect diff --git a/docker-compose-mongo.yml b/docker-compose-mongo.yml index 93a32a2..4a460bc 100644 --- a/docker-compose-mongo.yml +++ b/docker-compose-mongo.yml @@ -52,7 +52,8 @@ services: - ./mongo/manage-volume-cron:/data/manage-volume-cron - ./mongo/manage_volume.js:/data/manage_volume.js healthcheck: - test: "echo 'db.runCommand(\"ping\").ok' | mongosh --quiet --username ${MONGO_ADMIN_DB_USER} --password ${MONGO_ADMIN_DB_PASS} --authenticationDatabase admin --eval \"rs.status().ok\"" + # Removal of replica set status check as the mongo-setup container is what actually configures the replica set + test: mongosh --quiet --username ${MONGO_ADMIN_DB_USER} --password ${MONGO_ADMIN_DB_PASS} --authenticationDatabase admin --eval "db.adminCommand('ping').ok" interval: 10s timeout: 10s retries: 10 @@ -113,7 +114,9 @@ services: ports: - "8002:8081" depends_on: - - mongo + mongo: + condition: service_healthy + required: false environment: ME_CONFIG_MONGODB_ENABLE_ADMIN: "true" ME_CONFIG_BASICAUTH_USERNAME: ${MONGO_EXPRESS_USER} From 65855107cb8b164517ba816446ffe701d89624aa Mon Sep 17 00:00:00 2001 From: John-Wiens Date: Mon, 20 Jan 2025 15:27:26 -0700 Subject: [PATCH 07/25] Updated TIM Deduplicator for New TIM message format --- jpo-deduplicator/jpo-deduplicator/pom.xml | 10 ++--- .../DeduplicatorServiceController.java | 7 ++++ .../processors/OdeTimJsonProcessor.java | 13 +++--- .../OdeTimJsonProcessorSupplier.java | 6 +-- .../serialization/JsonSerdes.java | 2 +- .../OdeRawEncodedTimDeduplicatorTopology.java | 1 - .../ProcessedSpatDeduplicatorTopology.java | 1 - .../topologies/TimDeduplicatorTopology.java | 40 ++++++++++--------- .../src/main/resources/application.yaml | 14 +++---- 9 files changed, 51 insertions(+), 43 deletions(-) diff --git a/jpo-deduplicator/jpo-deduplicator/pom.xml b/jpo-deduplicator/jpo-deduplicator/pom.xml index 3a358e2..7b964a1 100644 --- a/jpo-deduplicator/jpo-deduplicator/pom.xml +++ b/jpo-deduplicator/jpo-deduplicator/pom.xml @@ -101,17 +101,17 @@ usdot.jpo.ode jpo-ode-core - 3.0.0 + 4.0.0 usdot.jpo.ode jpo-ode-plugins - 3.0.0 + 4.0.0 usdot.jpo.ode jpo-geojsonconverter - 1.4.2 + 2.0.0 usdot.jpo.ode @@ -208,9 +208,9 @@ org.springframework.boot spring-boot-maven-plugin - + build-info diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/DeduplicatorServiceController.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/DeduplicatorServiceController.java index 89b44da..bd38ab9 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/DeduplicatorServiceController.java +++ b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/DeduplicatorServiceController.java @@ -47,6 +47,7 @@ public DeduplicatorServiceController(final DeduplicatorProperties props, try { if(props.isEnableProcessedMapDeduplication()){ + logger.info("Starting Processed Map Deduplicator"); ProcessedMapDeduplicatorTopology processedMapDeduplicatorTopology = new ProcessedMapDeduplicatorTopology( props, props.createStreamProperties("ProcessedMapDeduplicator") @@ -55,6 +56,7 @@ public DeduplicatorServiceController(final DeduplicatorProperties props, } if(props.isEnableProcessedMapWktDeduplication()){ + logger.info("Starting Processed Map WKT Deduplicator"); ProcessedMapWktDeduplicatorTopology processedMapWktDeduplicatorTopology = new ProcessedMapWktDeduplicatorTopology( props, props.createStreamProperties("ProcessedMapWKTdeduplicator") @@ -63,6 +65,7 @@ public DeduplicatorServiceController(final DeduplicatorProperties props, } if(props.isEnableProcessedMapDeduplication()){ + logger.info("Starting Map Deduplicator"); MapDeduplicatorTopology mapDeduplicatorTopology = new MapDeduplicatorTopology( props, props.createStreamProperties("MapDeduplicator") @@ -71,6 +74,7 @@ public DeduplicatorServiceController(final DeduplicatorProperties props, } if(props.isEnableOdeTimDeduplication()){ + logger.info("Starting Tim Deduplicator"); TimDeduplicatorTopology timDeduplicatorTopology = new TimDeduplicatorTopology( props, props.createStreamProperties("TimDeduplicator") @@ -79,6 +83,7 @@ public DeduplicatorServiceController(final DeduplicatorProperties props, } if(props.isEnableOdeRawEncodedTimDeduplication()){ + logger.info("Starting Raw Encoded TIM Deduplicator"); OdeRawEncodedTimDeduplicatorTopology odeRawEncodedTimDeduplicatorTopology = new OdeRawEncodedTimDeduplicatorTopology( props, props.createStreamProperties("OdeRawEncodedTimDeduplicator") @@ -87,6 +92,7 @@ public DeduplicatorServiceController(final DeduplicatorProperties props, } if(props.isEnableProcessedSpatDeduplication()){ + logger.info("Starting Processed Spat Deduplicator"); ProcessedSpatDeduplicatorTopology processedSpatDeduplicatorTopology = new ProcessedSpatDeduplicatorTopology( props, props.createStreamProperties("ProcessedSpatDeduplicator") @@ -95,6 +101,7 @@ public DeduplicatorServiceController(final DeduplicatorProperties props, } if(props.isEnableOdeBsmDeduplication()){ + logger.info("Starting BSM Deduplicator"); BsmDeduplicatorTopology bsmDeduplicatorTopology = new BsmDeduplicatorTopology(props); bsmDeduplicatorTopology.start(); } diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeTimJsonProcessor.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeTimJsonProcessor.java index 751ce8c..9a117b3 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeTimJsonProcessor.java +++ b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeTimJsonProcessor.java @@ -4,11 +4,11 @@ import java.time.Instant; import java.time.format.DateTimeFormatter; -import com.fasterxml.jackson.databind.JsonNode; - import us.dot.its.jpo.deduplicator.DeduplicatorProperties; +import us.dot.its.jpo.ode.model.OdeTimData; +import us.dot.its.jpo.ode.model.OdeTimMetadata; -public class OdeTimJsonProcessor extends DeduplicationProcessor{ +public class OdeTimJsonProcessor extends DeduplicationProcessor{ DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; @@ -20,9 +20,10 @@ public OdeTimJsonProcessor(DeduplicatorProperties props){ @Override - public Instant getMessageTime(JsonNode message) { + public Instant getMessageTime(OdeTimData message) { try { - String time = message.get("metadata").get("odeReceivedAt").asText(); + // String time = message.get("metadata").get("odeReceivedAt").asText(); + String time = ((OdeTimMetadata)message.getMetadata()).getOdeReceivedAt(); return Instant.from(formatter.parse(time)); } catch (Exception e) { return Instant.ofEpochMilli(0); @@ -30,7 +31,7 @@ public Instant getMessageTime(JsonNode message) { } @Override - public boolean isDuplicate(JsonNode lastMessage, JsonNode newMessage) { + public boolean isDuplicate(OdeTimData lastMessage, OdeTimData newMessage) { Instant oldValueTime = getMessageTime(lastMessage); Instant newValueTime = getMessageTime(newMessage); diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeTimJsonProcessorSupplier.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeTimJsonProcessorSupplier.java index 7a27588..0c07e30 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeTimJsonProcessorSupplier.java +++ b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeTimJsonProcessorSupplier.java @@ -2,12 +2,12 @@ import org.apache.kafka.streams.processor.api.Processor; import org.apache.kafka.streams.processor.api.ProcessorSupplier; -import com.fasterxml.jackson.databind.JsonNode; import us.dot.its.jpo.deduplicator.DeduplicatorProperties; import us.dot.its.jpo.deduplicator.deduplicator.processors.OdeTimJsonProcessor; +import us.dot.its.jpo.ode.model.OdeTimData; -public class OdeTimJsonProcessorSupplier implements ProcessorSupplier { +public class OdeTimJsonProcessorSupplier implements ProcessorSupplier { String storeName; DeduplicatorProperties props; @@ -16,7 +16,7 @@ public OdeTimJsonProcessorSupplier(DeduplicatorProperties props){ } @Override - public Processor get() { + public Processor get() { return new OdeTimJsonProcessor(props); } } \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/JsonSerdes.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/JsonSerdes.java index 8f65168..29c9778 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/JsonSerdes.java +++ b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/JsonSerdes.java @@ -10,7 +10,7 @@ import us.dot.its.jpo.ode.model.OdeTimData; public class JsonSerdes { - public static Serde Tim() { + public static Serde OdeTim() { return Serdes.serdeFrom( new JsonSerializer(), new JsonDeserializer<>(OdeTimData.class)); diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/OdeRawEncodedTimDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/OdeRawEncodedTimDeduplicatorTopology.java index 9431d6b..975c85b 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/OdeRawEncodedTimDeduplicatorTopology.java +++ b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/OdeRawEncodedTimDeduplicatorTopology.java @@ -83,7 +83,6 @@ public Topology buildTopology() { KStream timRekeyedStream = inputStream.selectKey((key, value)->{ try{ - String messageBytes = value.get("payload") .get("data") .get("bytes").asText(); diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java index b478669..6f55329 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java +++ b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java @@ -67,7 +67,6 @@ public Topology buildTopology() { KStream deduplicatedStream = inputStream.process(new ProcessedSpatProcessorSupplier(props), props.getKafkaStateStoreProcessedSpatName()); - deduplicatedStream.print(Printed.toSysOut()); deduplicatedStream.to(props.getKafkaTopicDeduplicatedProcessedSpat(), Produced.with(Serdes.String(), JsonSerdes.ProcessedSpat())); diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/TimDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/TimDeduplicatorTopology.java index d8cf570..b0a7f50 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/TimDeduplicatorTopology.java +++ b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/TimDeduplicatorTopology.java @@ -7,8 +7,12 @@ import org.apache.kafka.streams.KafkaStreams.StateListener; import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler; -import us.dot.its.jpo.deduplicator.deduplicator.serialization.JsonSerdes; import us.dot.its.jpo.geojsonconverter.DateJsonMapper; +import us.dot.its.jpo.ode.model.OdeTimData; +import us.dot.its.jpo.ode.model.OdeTimMetadata; +import us.dot.its.jpo.ode.model.OdeTimPayload; +import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage; +import us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation; import org.apache.kafka.streams.kstream.*; import org.apache.kafka.streams.state.Stores; @@ -23,6 +27,7 @@ import us.dot.its.jpo.deduplicator.DeduplicatorProperties; import us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers.OdeTimJsonProcessorSupplier; +import us.dot.its.jpo.deduplicator.deduplicator.serialization.JsonSerdes; public class TimDeduplicatorTopology { @@ -65,37 +70,34 @@ public JsonNode genJsonNode() { public Topology buildTopology() { StreamsBuilder builder = new StreamsBuilder(); - KStream inputStream = builder.stream(props.getKafkaTopicOdeTimJson(), - Consumed.with(Serdes.Void(), JsonSerdes.JSON())); + KStream inputStream = builder.stream(props.getKafkaTopicOdeTimJson(), + Consumed.with(Serdes.String(), JsonSerdes.OdeTim())); builder.addStateStore(Stores.keyValueStoreBuilder(Stores.persistentKeyValueStore(props.getKafkaStateStoreOdeTimJsonName()), - Serdes.String(), JsonSerdes.JSON())); + Serdes.String(), JsonSerdes.OdeTim())); - - - KStream timRekeyedStream = inputStream.selectKey((key, value) -> { + KStream timRekeyedStream = inputStream.selectKey((key, value) -> { try { - - JsonNode travellerInformation = value.get("payload") - .get("data") - .get("MessageFrame") - .get("value") - .get("TravelerInformation"); - String rsuIP = value.get("metadata").get("originIp").asText(); - String packetId = travellerInformation.get("packetID").asText(); - String msgCnt = travellerInformation.get("msgCnt").asText(); + TravelerInformation travellerInformation = (TravelerInformation)value.getPayload().getData(); + + + String rsuIP = ((OdeTimMetadata)value.getMetadata()).getOriginIp(); + // String packetId = ((OdeTimPayload)value.getPayload()).getData();// .get("packetID").asText(); + String packetId = travellerInformation.getPacketID().toString(); + int msgCnt = travellerInformation.getMsgCnt().intValue(); String newKey = rsuIP + "_" + packetId + "_" + msgCnt; return newKey; } catch (Exception e) { + System.out.println(e); return ""; } - }).repartition(Repartitioned.with(Serdes.String(), JsonSerdes.JSON())); + }).repartition(Repartitioned.with(Serdes.String(), JsonSerdes.OdeTim())); - KStream deduplicatedStream = timRekeyedStream.process(new OdeTimJsonProcessorSupplier(props), props.getKafkaStateStoreOdeTimJsonName()); + KStream deduplicatedStream = timRekeyedStream.process(new OdeTimJsonProcessorSupplier(props), props.getKafkaStateStoreOdeTimJsonName()); - deduplicatedStream.to(props.getKafkaTopicDeduplicatedOdeTimJson(), Produced.with(Serdes.String(), JsonSerdes.JSON())); + deduplicatedStream.to(props.getKafkaTopicDeduplicatedOdeTimJson(), Produced.with(Serdes.String(), JsonSerdes.OdeTim())); return builder.build(); diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml b/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml index 9e6b89d..1b3a6b0 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml +++ b/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml @@ -17,32 +17,32 @@ log4j.logger.org.apache.kafka: OFF # Processed Map Configuration kafkaTopicProcessedMap: topic.ProcessedMap kafkaTopicDeduplicatedProcessedMap: topic.DeduplicatedProcessedMap -enableProcessedMapDeduplication: false +enableProcessedMapDeduplication: true # Processed Map WKT Configuration kafkaTopicProcessedMapWKT: topic.ProcessedMapWKT kafkaTopicDeduplicatedProcessedMapWKT: topic.DeduplicatedProcessedMapWKT -enableProcessedMapWktDeduplication: false +enableProcessedMapWktDeduplication: true # Ode Map Json Configuration kafkaTopicOdeMapJson: topic.OdeMapJson kafkaTopicDeduplicatedOdeMapJson: topic.DeduplicatedOdeMapJson -enableOdeMapDeduplication: false +enableOdeMapDeduplication: true # Ode Tim Json Configuration kafkaTopicOdeTimJson: topic.OdeTimJson kafkaTopicDeduplicatedOdeTimJson: topic.DeduplicatedOdeTimJson -enableOdeTimDeduplication: false +enableOdeTimDeduplication: true # Ode Raw Encoded Tim Json Configuration kafkaTopicOdeRawEncodedTimJson: topic.OdeRawEncodedTIMJson kafkaTopicDeduplicatedOdeRawEncodedTimJson: topic.DeduplicatedOdeRawEncodedTIMJson -enableOdeRawEncodedTimDeduplication: false +enableOdeRawEncodedTimDeduplication: true # Ode Bsm Json Configuration kafkaTopicOdeBsmJson: topic.OdeBsmJson kafkaTopicDeduplicatedOdeBsmJson: topic.DeduplicatedOdeBsmJson -enableOdeBsmDeduplication: false +enableOdeBsmDeduplication: true odeBsmMaximumTimeDelta: 10000 # Milliseconds odeBsmMaximumPositionDelta: 1 # Meter odeBsmAlwaysIncludeAtSpeed: 1 # Meter / Second @@ -50,7 +50,7 @@ odeBsmAlwaysIncludeAtSpeed: 1 # Meter / Second # Processed Map Configuration kafkaTopicProcessedSpat: topic.ProcessedSpat kafkaTopicDeduplicatedProcessedSpat: topic.DeduplicatedProcessedSpat -enableProcessedSpatDeduplication: false +enableProcessedSpatDeduplication: true # Amount of time to wait to try and increase batching From 9200ca11001fb227e7b5235562a932e3334f7df3 Mon Sep 17 00:00:00 2001 From: John-Wiens Date: Mon, 20 Jan 2025 16:00:59 -0700 Subject: [PATCH 08/25] Creating 2025 jpo-utils release --- docs/Release_notes.md | 17 ++++++++++++++++- jpo-deduplicator/jpo-deduplicator/pom.xml | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/Release_notes.md b/docs/Release_notes.md index e2914e7..60abb3b 100644 --- a/docs/Release_notes.md +++ b/docs/Release_notes.md @@ -1 +1,16 @@ -JPO-UTILS Release Notes \ No newline at end of file +## JPO-UTILS Release Notes + +## Version 2.0.0 + +### **Summary** +The first release of the jpo-utils package. This package is focused on hosting utility applications that other parts of the Conflict Monitor depend on. Many of these components are provided by 3rd party groups such as Kafka and MongoDB. This first official release formalizes the migration of multiple components from other repositories to the jpo-utils repository. The migrated components are as follows +- MongoDB - Transferred from the jpo-conflictmonitor +- Kafka - Transferred from the jpo-ode +- Deduplicator - Transferred from the jpo-conflictmonitor +- Kafka Connect - Transferred from the jpo-conflictmonitor repository + +This release also makes additional changes to the submodule components as follows +- Refactored docker-compose files to use compose profiles for modular component approach +- Adds in Jikkou for managing Kafka topic creation and Kafka connect behaviors +- Updates mongoDB indexes and collection list to support new collections +- Updated jpo-deduplicator for compatibility with jpo-ode version 4.0.0 diff --git a/jpo-deduplicator/jpo-deduplicator/pom.xml b/jpo-deduplicator/jpo-deduplicator/pom.xml index 3e45f24..25a15bd 100644 --- a/jpo-deduplicator/jpo-deduplicator/pom.xml +++ b/jpo-deduplicator/jpo-deduplicator/pom.xml @@ -11,7 +11,7 @@ usdot.jpo.ode jpo-deduplicator - 1.3.1 + 2.0.0 jar jpo-deduplicator http://maven.apache.org From 4735fbf0abdcfb770db8e50c14ea954336a0b59f Mon Sep 17 00:00:00 2001 From: john-wiens Date: Mon, 20 Jan 2025 16:11:49 -0700 Subject: [PATCH 09/25] Fix unit tests --- .../java/deduplicator/TimDeduplicatorTopologyTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/TimDeduplicatorTopologyTest.java b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/TimDeduplicatorTopologyTest.java index 164dd22..018db4f 100644 --- a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/TimDeduplicatorTopologyTest.java +++ b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/TimDeduplicatorTopologyTest.java @@ -27,16 +27,16 @@ public class TimDeduplicatorTopologyTest { ObjectMapper objectMapper = new ObjectMapper(); //Original Message - String inputTim1 = "{\"metadata\":{\"securityResultCode\":\"success\",\"recordGeneratedBy\":\"RSU\",\"schemaVersion\":\"6\",\"odePacketID\":\"\",\"sanitized\":\"false\",\"recordType\":\"timMsg\",\"recordGeneratedAt\":\"\",\"maxDurationTime\":\"0\",\"odeTimStartDateTime\":\"\",\"receivedMessageDetails\":\"\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\":{\"recordId\":\"0\",\"serialNumber\":\"0\",\"streamId\":\"d052115a-5289-4da3-bc9f-12edca1d2c46\",\"bundleSize\":\"1\",\"bundleId\":\"0\"},\"logFileName\":\"\",\"odeReceivedAt\":\"2024-07-23T18:33:17.328Z\",\"originIp\":\"10.16.28.54\"},\"payload\":{\"data\":{\"MessageFrame\":{\"messageId\":\"31\",\"value\":{\"TravelerInformation\":{\"timeStamp\":\"264703\",\"packetID\":\"0350C30EB1A83736D8\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":{\"durationTime\":\"30\",\"regions\":{\"GeographicalPath\":{\"closedPath\":{\"false\":\"\"},\"anchor\":{\"lat\":\"395658598\",\"long\":\"-1050401840\"},\"name\":\"I_CO-470_RSU_172.16.28.116\",\"laneWidth\":\"5000\",\"directionality\":{\"both\":\"\"},\"description\":{\"path\":{\"offset\":{\"ll\":{\"nodes\":{\"NodeLL\":[{\"delta\":{\"node-LL1\":{\"lon\":\"1527\",\"lat\":\"-659\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"5545\",\"lat\":\"-2394\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"9493\",\"lat\":\"-2736\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"7465\",\"lat\":\"-1304\"}}},{\"delta\":{\"node-LL4\":{\"lon\":\"34464\",\"lat\":\"-4324\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"9994\",\"lat\":\"-1119\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"20051\",\"lat\":\"-2246\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"31738\",\"lat\":\"-1775\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"5744\",\"lat\":\"-315\"}}}]}}},\"scale\":\"0\"}},\"id\":{\"id\":\"0\",\"region\":\"0\"},\"direction\":\"0000110000000000\"}},\"startYear\":\"2024\",\"notUsed2\":\"0\",\"msgId\":{\"roadSignID\":{\"viewAngle\":\"1111111111111111\",\"mutcdCode\":{\"warning\":\"\"},\"position\":{\"lat\":\"395658598\",\"long\":\"-1050401840\"}}},\"notUsed3\":\"0\",\"notUsed1\":\"0\",\"priority\":\"5\",\"content\":{\"workZone\":{\"SEQUENCE\":{\"item\":{\"itis\":\"1025\"}}}},\"url\":\"null\",\"notUsed\":\"0\",\"frameType\":{\"advisory\":\"\"},\"startTime\":\"277110\"}},\"msgCnt\":\"1\"}}}},\"dataType\":\"TravelerInformation\"}}"; + String inputTim1 = "{\"metadata\": {\"payloadType\": \"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\": {\"streamId\": \"a9012e0d-7acc-48b3-981e-aed4b4d180aa\",\"bundleSize\": 1,\"bundleId\": 113,\"recordId\": 0,\"serialNumber\": 113},\"odeReceivedAt\": \"2025-01-20T23:00:18.065Z\",\"schemaVersion\": 8,\"maxDurationTime\": 30,\"recordGeneratedAt\": \"2025-01-16T23:15:09.000Z\",\"recordGeneratedBy\": \"TMC\",\"sanitized\": false,\"odePacketID\": \"2D815A64F19A75534B\",\"odeTimStartDateTime\": \"2025-01-20T23:00:15.802Z\"},\"payload\": {\"data\": {\"msgCnt\": 1,\"timeStamp\": 22995,\"packetID\": \"2D815A64F19A75534B\",\"urlB\": \"null\",\"dataFrames\": [{\"frameType\": \"advisory\",\"msgId\": {\"roadSignID\": {\"position\": {\"lat\": 398784622,\"long\": -1050251574},\"viewAngle\": {\"from000-0to022-5degrees\": true,\"from022-5to045-0degrees\": true,\"from045-0to067-5degrees\": true,\"from067-5to090-0degrees\": true,\"from090-0to112-5degrees\": true,\"from112-5to135-0degrees\": true,\"from135-0to157-5degrees\": true,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": true,\"from225-0to247-5degrees\": true,\"from247-5to270-0degrees\": true,\"from270-0to292-5degrees\": true,\"from292-5to315-0degrees\": true,\"from315-0to337-5degrees\": true,\"from337-5to360-0degrees\": true},\"mutcdCode\": \"warning\"}},\"startYear\": 2025,\"startTime\": 28740,\"durationTime\": 30,\"priority\": 5,\"regions\": [{\"name\": \"I_US-287_SAT_1A97342A\",\"id\": {\"region\": 0,\"id\": 0},\"anchor\": {\"lat\": 398784622,\"long\": -1050251574},\"laneWidth\": 5000,\"directionality\": \"both\",\"closedPath\": false,\"direction\": {\"from000-0to022-5degrees\": false,\"from022-5to045-0degrees\": false,\"from045-0to067-5degrees\": false,\"from067-5to090-0degrees\": false,\"from090-0to112-5degrees\": false,\"from112-5to135-0degrees\": false,\"from135-0to157-5degrees\": false,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": false,\"from225-0to247-5degrees\": false,\"from247-5to270-0degrees\": false,\"from270-0to292-5degrees\": false,\"from292-5to315-0degrees\": false,\"from315-0to337-5degrees\": false,\"from337-5to360-0degrees\": false},\"description\": {\"path\": {\"scale\": 0,\"offset\": {\"ll\": {\"nodes\": [{\"delta\": {\"node-LL1\": {\"lon\": -3,\"lat\": -1349}}},{\"delta\": {\"node-LL1\": {\"lon\": 0,\"lat\": -164}}},{\"delta\": {\"node-LL4\": {\"lon\": -79,\"lat\": -36171}}},{\"delta\": {\"node-LL3\": {\"lon\": -52,\"lat\": -23867}}},{\"delta\": {\"node-LL2\": {\"lon\": 150,\"lat\": -7144}}},{\"delta\": {\"node-LL2\": {\"lon\": 936,\"lat\": -7633}}},{\"delta\": {\"node-LL3\": {\"lon\": 130,\"lat\": -15274}}},{\"delta\": {\"node-LL3\": {\"lon\": 114,\"lat\": -22432}}},{\"delta\": {\"node-LL4\": {\"lon\": -122,\"lat\": -35545}}},{\"delta\": {\"node-LL3\": {\"lon\": 378,\"lat\": -8947}}},{\"delta\": {\"node-LL3\": {\"lon\": 75,\"lat\": -9416}}}]}}}}}],\"content\": {\"workZone\": [{\"item\": {\"itis\": 1025}}]},\"url\": \"null\"}]},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation\"}}"; - // Shifted Forward .1 seconds - Should be deduplicated - String inputTim2 = "{\"metadata\":{\"securityResultCode\":\"success\",\"recordGeneratedBy\":\"RSU\",\"schemaVersion\":\"6\",\"odePacketID\":\"\",\"sanitized\":\"false\",\"recordType\":\"timMsg\",\"recordGeneratedAt\":\"\",\"maxDurationTime\":\"0\",\"odeTimStartDateTime\":\"\",\"receivedMessageDetails\":\"\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\":{\"recordId\":\"0\",\"serialNumber\":\"0\",\"streamId\":\"d052115a-5289-4da3-bc9f-12edca1d2c46\",\"bundleSize\":\"1\",\"bundleId\":\"0\"},\"logFileName\":\"\",\"odeReceivedAt\":\"2024-07-23T18:33:17.428Z\",\"originIp\":\"10.16.28.54\"},\"payload\":{\"data\":{\"MessageFrame\":{\"messageId\":\"31\",\"value\":{\"TravelerInformation\":{\"timeStamp\":\"264703\",\"packetID\":\"0350C30EB1A83736D8\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":{\"durationTime\":\"30\",\"regions\":{\"GeographicalPath\":{\"closedPath\":{\"false\":\"\"},\"anchor\":{\"lat\":\"395658598\",\"long\":\"-1050401840\"},\"name\":\"I_CO-470_RSU_172.16.28.116\",\"laneWidth\":\"5000\",\"directionality\":{\"both\":\"\"},\"description\":{\"path\":{\"offset\":{\"ll\":{\"nodes\":{\"NodeLL\":[{\"delta\":{\"node-LL1\":{\"lon\":\"1527\",\"lat\":\"-659\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"5545\",\"lat\":\"-2394\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"9493\",\"lat\":\"-2736\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"7465\",\"lat\":\"-1304\"}}},{\"delta\":{\"node-LL4\":{\"lon\":\"34464\",\"lat\":\"-4324\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"9994\",\"lat\":\"-1119\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"20051\",\"lat\":\"-2246\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"31738\",\"lat\":\"-1775\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"5744\",\"lat\":\"-315\"}}}]}}},\"scale\":\"0\"}},\"id\":{\"id\":\"0\",\"region\":\"0\"},\"direction\":\"0000110000000000\"}},\"startYear\":\"2024\",\"notUsed2\":\"0\",\"msgId\":{\"roadSignID\":{\"viewAngle\":\"1111111111111111\",\"mutcdCode\":{\"warning\":\"\"},\"position\":{\"lat\":\"395658598\",\"long\":\"-1050401840\"}}},\"notUsed3\":\"0\",\"notUsed1\":\"0\",\"priority\":\"5\",\"content\":{\"workZone\":{\"SEQUENCE\":{\"item\":{\"itis\":\"1025\"}}}},\"url\":\"null\",\"notUsed\":\"0\",\"frameType\":{\"advisory\":\"\"},\"startTime\":\"277110\"}},\"msgCnt\":\"1\"}}}},\"dataType\":\"TravelerInformation\"}}"; + // Shifted Forward 1 seconds - Should be deduplicated + String inputTim2 = "{\"metadata\": {\"payloadType\": \"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\": {\"streamId\": \"a9012e0d-7acc-48b3-981e-aed4b4d180aa\",\"bundleSize\": 1,\"bundleId\": 113,\"recordId\": 0,\"serialNumber\": 113},\"odeReceivedAt\": \"2025-01-20T23:00:19.065Z\",\"schemaVersion\": 8,\"maxDurationTime\": 30,\"recordGeneratedAt\": \"2025-01-16T23:15:09.000Z\",\"recordGeneratedBy\": \"TMC\",\"sanitized\": false,\"odePacketID\": \"2D815A64F19A75534B\",\"odeTimStartDateTime\": \"2025-01-20T23:00:15.802Z\"},\"payload\": {\"data\": {\"msgCnt\": 1,\"timeStamp\": 22995,\"packetID\": \"2D815A64F19A75534B\",\"urlB\": \"null\",\"dataFrames\": [{\"frameType\": \"advisory\",\"msgId\": {\"roadSignID\": {\"position\": {\"lat\": 398784622,\"long\": -1050251574},\"viewAngle\": {\"from000-0to022-5degrees\": true,\"from022-5to045-0degrees\": true,\"from045-0to067-5degrees\": true,\"from067-5to090-0degrees\": true,\"from090-0to112-5degrees\": true,\"from112-5to135-0degrees\": true,\"from135-0to157-5degrees\": true,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": true,\"from225-0to247-5degrees\": true,\"from247-5to270-0degrees\": true,\"from270-0to292-5degrees\": true,\"from292-5to315-0degrees\": true,\"from315-0to337-5degrees\": true,\"from337-5to360-0degrees\": true},\"mutcdCode\": \"warning\"}},\"startYear\": 2025,\"startTime\": 28740,\"durationTime\": 30,\"priority\": 5,\"regions\": [{\"name\": \"I_US-287_SAT_1A97342A\",\"id\": {\"region\": 0,\"id\": 0},\"anchor\": {\"lat\": 398784622,\"long\": -1050251574},\"laneWidth\": 5000,\"directionality\": \"both\",\"closedPath\": false,\"direction\": {\"from000-0to022-5degrees\": false,\"from022-5to045-0degrees\": false,\"from045-0to067-5degrees\": false,\"from067-5to090-0degrees\": false,\"from090-0to112-5degrees\": false,\"from112-5to135-0degrees\": false,\"from135-0to157-5degrees\": false,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": false,\"from225-0to247-5degrees\": false,\"from247-5to270-0degrees\": false,\"from270-0to292-5degrees\": false,\"from292-5to315-0degrees\": false,\"from315-0to337-5degrees\": false,\"from337-5to360-0degrees\": false},\"description\": {\"path\": {\"scale\": 0,\"offset\": {\"ll\": {\"nodes\": [{\"delta\": {\"node-LL1\": {\"lon\": -3,\"lat\": -1349}}},{\"delta\": {\"node-LL1\": {\"lon\": 0,\"lat\": -164}}},{\"delta\": {\"node-LL4\": {\"lon\": -79,\"lat\": -36171}}},{\"delta\": {\"node-LL3\": {\"lon\": -52,\"lat\": -23867}}},{\"delta\": {\"node-LL2\": {\"lon\": 150,\"lat\": -7144}}},{\"delta\": {\"node-LL2\": {\"lon\": 936,\"lat\": -7633}}},{\"delta\": {\"node-LL3\": {\"lon\": 130,\"lat\": -15274}}},{\"delta\": {\"node-LL3\": {\"lon\": 114,\"lat\": -22432}}},{\"delta\": {\"node-LL4\": {\"lon\": -122,\"lat\": -35545}}},{\"delta\": {\"node-LL3\": {\"lon\": 378,\"lat\": -8947}}},{\"delta\": {\"node-LL3\": {\"lon\": 75,\"lat\": -9416}}}]}}}}}],\"content\": {\"workZone\": [{\"item\": {\"itis\": 1025}}]},\"url\": \"null\"}]},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation\"}}"; // Shifted Forward 1 hour Should be allowed to pass through - String inputTim3 = "{\"metadata\":{\"securityResultCode\":\"success\",\"recordGeneratedBy\":\"RSU\",\"schemaVersion\":\"6\",\"odePacketID\":\"\",\"sanitized\":\"false\",\"recordType\":\"timMsg\",\"recordGeneratedAt\":\"\",\"maxDurationTime\":\"0\",\"odeTimStartDateTime\":\"\",\"receivedMessageDetails\":\"\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\":{\"recordId\":\"0\",\"serialNumber\":\"0\",\"streamId\":\"d052115a-5289-4da3-bc9f-12edca1d2c46\",\"bundleSize\":\"1\",\"bundleId\":\"0\"},\"logFileName\":\"\",\"odeReceivedAt\":\"2024-07-23T19:33:17.428Z\",\"originIp\":\"10.16.28.54\"},\"payload\":{\"data\":{\"MessageFrame\":{\"messageId\":\"31\",\"value\":{\"TravelerInformation\":{\"timeStamp\":\"264703\",\"packetID\":\"0350C30EB1A83736D8\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":{\"durationTime\":\"30\",\"regions\":{\"GeographicalPath\":{\"closedPath\":{\"false\":\"\"},\"anchor\":{\"lat\":\"395658598\",\"long\":\"-1050401840\"},\"name\":\"I_CO-470_RSU_172.16.28.116\",\"laneWidth\":\"5000\",\"directionality\":{\"both\":\"\"},\"description\":{\"path\":{\"offset\":{\"ll\":{\"nodes\":{\"NodeLL\":[{\"delta\":{\"node-LL1\":{\"lon\":\"1527\",\"lat\":\"-659\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"5545\",\"lat\":\"-2394\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"9493\",\"lat\":\"-2736\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"7465\",\"lat\":\"-1304\"}}},{\"delta\":{\"node-LL4\":{\"lon\":\"34464\",\"lat\":\"-4324\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"9994\",\"lat\":\"-1119\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"20051\",\"lat\":\"-2246\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"31738\",\"lat\":\"-1775\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"5744\",\"lat\":\"-315\"}}}]}}},\"scale\":\"0\"}},\"id\":{\"id\":\"0\",\"region\":\"0\"},\"direction\":\"0000110000000000\"}},\"startYear\":\"2024\",\"notUsed2\":\"0\",\"msgId\":{\"roadSignID\":{\"viewAngle\":\"1111111111111111\",\"mutcdCode\":{\"warning\":\"\"},\"position\":{\"lat\":\"395658598\",\"long\":\"-1050401840\"}}},\"notUsed3\":\"0\",\"notUsed1\":\"0\",\"priority\":\"5\",\"content\":{\"workZone\":{\"SEQUENCE\":{\"item\":{\"itis\":\"1025\"}}}},\"url\":\"null\",\"notUsed\":\"0\",\"frameType\":{\"advisory\":\"\"},\"startTime\":\"277110\"}},\"msgCnt\":\"1\"}}}},\"dataType\":\"TravelerInformation\"}}"; + String inputTim3 = "{\"metadata\": {\"payloadType\": \"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\": {\"streamId\": \"a9012e0d-7acc-48b3-981e-aed4b4d180aa\",\"bundleSize\": 1,\"bundleId\": 113,\"recordId\": 0,\"serialNumber\": 113},\"odeReceivedAt\": \"2025-01-21T00:00:19.065Z\",\"schemaVersion\": 8,\"maxDurationTime\": 30,\"recordGeneratedAt\": \"2025-01-16T23:15:09.000Z\",\"recordGeneratedBy\": \"TMC\",\"sanitized\": false,\"odePacketID\": \"2D815A64F19A75534B\",\"odeTimStartDateTime\": \"2025-01-20T23:00:15.802Z\"},\"payload\": {\"data\": {\"msgCnt\": 1,\"timeStamp\": 22995,\"packetID\": \"2D815A64F19A75534B\",\"urlB\": \"null\",\"dataFrames\": [{\"frameType\": \"advisory\",\"msgId\": {\"roadSignID\": {\"position\": {\"lat\": 398784622,\"long\": -1050251574},\"viewAngle\": {\"from000-0to022-5degrees\": true,\"from022-5to045-0degrees\": true,\"from045-0to067-5degrees\": true,\"from067-5to090-0degrees\": true,\"from090-0to112-5degrees\": true,\"from112-5to135-0degrees\": true,\"from135-0to157-5degrees\": true,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": true,\"from225-0to247-5degrees\": true,\"from247-5to270-0degrees\": true,\"from270-0to292-5degrees\": true,\"from292-5to315-0degrees\": true,\"from315-0to337-5degrees\": true,\"from337-5to360-0degrees\": true},\"mutcdCode\": \"warning\"}},\"startYear\": 2025,\"startTime\": 28740,\"durationTime\": 30,\"priority\": 5,\"regions\": [{\"name\": \"I_US-287_SAT_1A97342A\",\"id\": {\"region\": 0,\"id\": 0},\"anchor\": {\"lat\": 398784622,\"long\": -1050251574},\"laneWidth\": 5000,\"directionality\": \"both\",\"closedPath\": false,\"direction\": {\"from000-0to022-5degrees\": false,\"from022-5to045-0degrees\": false,\"from045-0to067-5degrees\": false,\"from067-5to090-0degrees\": false,\"from090-0to112-5degrees\": false,\"from112-5to135-0degrees\": false,\"from135-0to157-5degrees\": false,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": false,\"from225-0to247-5degrees\": false,\"from247-5to270-0degrees\": false,\"from270-0to292-5degrees\": false,\"from292-5to315-0degrees\": false,\"from315-0to337-5degrees\": false,\"from337-5to360-0degrees\": false},\"description\": {\"path\": {\"scale\": 0,\"offset\": {\"ll\": {\"nodes\": [{\"delta\": {\"node-LL1\": {\"lon\": -3,\"lat\": -1349}}},{\"delta\": {\"node-LL1\": {\"lon\": 0,\"lat\": -164}}},{\"delta\": {\"node-LL4\": {\"lon\": -79,\"lat\": -36171}}},{\"delta\": {\"node-LL3\": {\"lon\": -52,\"lat\": -23867}}},{\"delta\": {\"node-LL2\": {\"lon\": 150,\"lat\": -7144}}},{\"delta\": {\"node-LL2\": {\"lon\": 936,\"lat\": -7633}}},{\"delta\": {\"node-LL3\": {\"lon\": 130,\"lat\": -15274}}},{\"delta\": {\"node-LL3\": {\"lon\": 114,\"lat\": -22432}}},{\"delta\": {\"node-LL4\": {\"lon\": -122,\"lat\": -35545}}},{\"delta\": {\"node-LL3\": {\"lon\": 378,\"lat\": -8947}}},{\"delta\": {\"node-LL3\": {\"lon\": 75,\"lat\": -9416}}}]}}}}}],\"content\": {\"workZone\": [{\"item\": {\"itis\": 1025}}]},\"url\": \"null\"}]},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation\"}}"; // Has a different payload ID. Should be allowed through - String inputTim4 = "{\"metadata\":{\"securityResultCode\":\"success\",\"recordGeneratedBy\":\"RSU\",\"schemaVersion\":\"6\",\"odePacketID\":\"\",\"sanitized\":\"false\",\"recordType\":\"timMsg\",\"recordGeneratedAt\":\"\",\"maxDurationTime\":\"0\",\"odeTimStartDateTime\":\"\",\"receivedMessageDetails\":\"\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\":{\"recordId\":\"0\",\"serialNumber\":\"0\",\"streamId\":\"d052115a-5289-4da3-bc9f-12edca1d2c46\",\"bundleSize\":\"1\",\"bundleId\":\"0\"},\"logFileName\":\"\",\"odeReceivedAt\":\"2024-07-23T19:34:17.328Z\",\"originIp\":\"10.16.28.54\"},\"payload\":{\"data\":{\"MessageFrame\":{\"messageId\":\"31\",\"value\":{\"TravelerInformation\":{\"timeStamp\":\"264703\",\"packetID\":\"0350C30EB1A83736D9\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":{\"durationTime\":\"30\",\"regions\":{\"GeographicalPath\":{\"closedPath\":{\"false\":\"\"},\"anchor\":{\"lat\":\"395658598\",\"long\":\"-1050401840\"},\"name\":\"I_CO-470_RSU_172.16.28.116\",\"laneWidth\":\"10000\",\"directionality\":{\"both\":\"\"},\"description\":{\"path\":{\"offset\":{\"ll\":{\"nodes\":{\"NodeLL\":[{\"delta\":{\"node-LL1\":{\"lon\":\"1527\",\"lat\":\"-659\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"5545\",\"lat\":\"-2394\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"9493\",\"lat\":\"-2736\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"7465\",\"lat\":\"-1304\"}}},{\"delta\":{\"node-LL4\":{\"lon\":\"34464\",\"lat\":\"-4324\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"9994\",\"lat\":\"-1119\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"20051\",\"lat\":\"-2246\"}}},{\"delta\":{\"node-LL3\":{\"lon\":\"31738\",\"lat\":\"-1775\"}}},{\"delta\":{\"node-LL2\":{\"lon\":\"5744\",\"lat\":\"-315\"}}}]}}},\"scale\":\"0\"}},\"id\":{\"id\":\"0\",\"region\":\"0\"},\"direction\":\"0000110000000000\"}},\"startYear\":\"2024\",\"notUsed2\":\"0\",\"msgId\":{\"roadSignID\":{\"viewAngle\":\"1111111111111111\",\"mutcdCode\":{\"warning\":\"\"},\"position\":{\"lat\":\"395658598\",\"long\":\"-1050401840\"}}},\"notUsed3\":\"0\",\"notUsed1\":\"0\",\"priority\":\"5\",\"content\":{\"workZone\":{\"SEQUENCE\":{\"item\":{\"itis\":\"1025\"}}}},\"url\":\"null\",\"notUsed\":\"0\",\"frameType\":{\"advisory\":\"\"},\"startTime\":\"277110\"}},\"msgCnt\":\"1\"}}}},\"dataType\":\"TravelerInformation\"}}"; + String inputTim4 = "{\"metadata\": {\"payloadType\": \"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\": {\"streamId\": \"a9012e0d-7acc-48b3-981e-aed4b4d180aa\",\"bundleSize\": 1,\"bundleId\": 113,\"recordId\": 0,\"serialNumber\": 113},\"odeReceivedAt\": \"2025-01-20T23:00:18.065Z\",\"schemaVersion\": 8,\"maxDurationTime\": 30,\"recordGeneratedAt\": \"2025-01-16T23:15:09.000Z\",\"recordGeneratedBy\": \"TMC\",\"sanitized\": false,\"odePacketID\": \"2D815A64F19A75534B\",\"odeTimStartDateTime\": \"2025-01-20T23:00:15.802Z\"},\"payload\": {\"data\": {\"msgCnt\": 1,\"timeStamp\": 22995,\"packetID\": \"051F23D9B7C23CF677\",\"urlB\": \"null\",\"dataFrames\": [{\"frameType\": \"advisory\",\"msgId\": {\"roadSignID\": {\"position\": {\"lat\": 398784622,\"long\": -1050251574},\"viewAngle\": {\"from000-0to022-5degrees\": true,\"from022-5to045-0degrees\": true,\"from045-0to067-5degrees\": true,\"from067-5to090-0degrees\": true,\"from090-0to112-5degrees\": true,\"from112-5to135-0degrees\": true,\"from135-0to157-5degrees\": true,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": true,\"from225-0to247-5degrees\": true,\"from247-5to270-0degrees\": true,\"from270-0to292-5degrees\": true,\"from292-5to315-0degrees\": true,\"from315-0to337-5degrees\": true,\"from337-5to360-0degrees\": true},\"mutcdCode\": \"warning\"}},\"startYear\": 2025,\"startTime\": 28740,\"durationTime\": 30,\"priority\": 5,\"regions\": [{\"name\": \"I_US-287_SAT_1A97342A\",\"id\": {\"region\": 0,\"id\": 0},\"anchor\": {\"lat\": 398784622,\"long\": -1050251574},\"laneWidth\": 5000,\"directionality\": \"both\",\"closedPath\": false,\"direction\": {\"from000-0to022-5degrees\": false,\"from022-5to045-0degrees\": false,\"from045-0to067-5degrees\": false,\"from067-5to090-0degrees\": false,\"from090-0to112-5degrees\": false,\"from112-5to135-0degrees\": false,\"from135-0to157-5degrees\": false,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": false,\"from225-0to247-5degrees\": false,\"from247-5to270-0degrees\": false,\"from270-0to292-5degrees\": false,\"from292-5to315-0degrees\": false,\"from315-0to337-5degrees\": false,\"from337-5to360-0degrees\": false},\"description\": {\"path\": {\"scale\": 0,\"offset\": {\"ll\": {\"nodes\": [{\"delta\": {\"node-LL1\": {\"lon\": -3,\"lat\": -1349}}},{\"delta\": {\"node-LL1\": {\"lon\": 0,\"lat\": -164}}},{\"delta\": {\"node-LL4\": {\"lon\": -79,\"lat\": -36171}}},{\"delta\": {\"node-LL3\": {\"lon\": -52,\"lat\": -23867}}},{\"delta\": {\"node-LL2\": {\"lon\": 150,\"lat\": -7144}}},{\"delta\": {\"node-LL2\": {\"lon\": 936,\"lat\": -7633}}},{\"delta\": {\"node-LL3\": {\"lon\": 130,\"lat\": -15274}}},{\"delta\": {\"node-LL3\": {\"lon\": 114,\"lat\": -22432}}},{\"delta\": {\"node-LL4\": {\"lon\": -122,\"lat\": -35545}}},{\"delta\": {\"node-LL3\": {\"lon\": 378,\"lat\": -8947}}},{\"delta\": {\"node-LL3\": {\"lon\": 75,\"lat\": -9416}}}]}}}}}],\"content\": {\"workZone\": [{\"item\": {\"itis\": 1025}}]},\"url\": \"null\"}]},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation\"}}"; @Autowired DeduplicatorProperties props; From f26ab9e383d6c6c0c3b6510c73db1b56b54950f8 Mon Sep 17 00:00:00 2001 From: john-wiens Date: Mon, 20 Jan 2025 16:21:18 -0700 Subject: [PATCH 10/25] Adding CI/CD to jpo-utils --- .github/workflows/ci.yml | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ade6cb9 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,50 @@ +name: jpo-utils + +on: [pull_request, push] + +jobs: + build_intersection_api: + runs-on: ubuntu-latest + container: + image: maven:3.9.9-eclipse-temurin-21 + options: --user root + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Cache Maven packages + uses: actions/cache@v4 + with: + path: ~/.m2 + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ hashFiles('**/settings.xml') }}-${{ runner.os }}-java-21 + restore-keys: | + ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ runner.os }}-java-21 + ${{ runner.os }}-maven-${{ runner.os }}-java-21 + ${{ runner.os }}-maven + + - name: Install Dependencies + env: + MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }} + MAVEN_GITHUB_ORG: ${{ github.repository_owner }} + run: | + cd $GITHUB_WORKSPACE/jpo-deduplicator/jpo-deduplicator + mvn clean install -DskipTests -s ./settings.xml + mvn dependency:go-offline -s ./settings.xml + + - name: Run tests + env: + MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }} + MAVEN_GITHUB_ORG: ${{ github.repository_owner }} + run: | + cd $GITHUB_WORKSPACE/jpo-deduplicator/jpo-deduplicator + mvn verify -s ./settings.xml + + - name: Archive Test Results + uses: actions/upload-artifact@v4 + with: + name: intersection-api-test-results + path: $GITHUB_WORKSPACE/jpo-deduplicator/jpo-deduplicator/target/surefire-reports + + - name: Clean up + run: | + rm -rf $GITHUB_WORKSPACE/jpo-deduplicator/jpo-deduplicator/target \ No newline at end of file From c20d96b9a6a78324b10b4fa55fd4aa597d7fe600 Mon Sep 17 00:00:00 2001 From: john-wiens Date: Mon, 20 Jan 2025 16:25:39 -0700 Subject: [PATCH 11/25] Changing name in CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ade6cb9..068c694 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,7 +3,7 @@ name: jpo-utils on: [pull_request, push] jobs: - build_intersection_api: + build-deduplicator: runs-on: ubuntu-latest container: image: maven:3.9.9-eclipse-temurin-21 From 23cbc12736be22c385869d1bd33256285b88d969 Mon Sep 17 00:00:00 2001 From: john-wiens Date: Mon, 20 Jan 2025 16:58:04 -0700 Subject: [PATCH 12/25] Removed unneccesary components of CI/CD --- .github/workflows/ci.yml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 068c694..795b48f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,7 +3,7 @@ name: jpo-utils on: [pull_request, push] jobs: - build-deduplicator: + deduplicator-test: runs-on: ubuntu-latest container: image: maven:3.9.9-eclipse-temurin-21 @@ -37,14 +37,4 @@ jobs: MAVEN_GITHUB_ORG: ${{ github.repository_owner }} run: | cd $GITHUB_WORKSPACE/jpo-deduplicator/jpo-deduplicator - mvn verify -s ./settings.xml - - - name: Archive Test Results - uses: actions/upload-artifact@v4 - with: - name: intersection-api-test-results - path: $GITHUB_WORKSPACE/jpo-deduplicator/jpo-deduplicator/target/surefire-reports - - - name: Clean up - run: | - rm -rf $GITHUB_WORKSPACE/jpo-deduplicator/jpo-deduplicator/target \ No newline at end of file + mvn verify -s ./settings.xml \ No newline at end of file From 6ef65cd664b04d2da82b814a11302db5b20f001f Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:07:10 -0700 Subject: [PATCH 13/25] updating CI --- .github/workflows/ci.yml | 5 ++- .github/workflows/docker.yml | 30 +++++++++++++++++- .github/workflows/dockerhub.yml | 56 +++++++++++++++++++++++++++++++-- 3 files changed, 87 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 795b48f..cd49c3d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,9 @@ name: jpo-utils -on: [pull_request, push] +on: + pull_request: + paths: + - 'jpo-deduplicator/**' jobs: deduplicator-test: diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 2a76f66..2126544 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -23,4 +23,32 @@ jobs: secrets: | MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }} cache-from: type=gha - cache-to: type=gha,mode=max \ No newline at end of file + cache-to: type=gha,mode=max + + jpo-jikkou: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Build + uses: docker/build-push-action@v3 + with: + context: jpo-jikkou + cache-from: type=gha + cache-to: type=gha,mode=max + + jpo-kafka-connect: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Build + uses: docker/build-push-action@v3 + with: + context: kafka-connect + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml index 0dea5d5..31fc040 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/dockerhub.yml @@ -21,7 +21,7 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Replcae Docker tag + - name: Replace Docker tag id: set_tag run: echo "TAG=$(echo ${GITHUB_REF##*/} | sed 's/\//-/g')" >> $GITHUB_ENV @@ -38,4 +38,56 @@ jobs: secrets: | MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }} cache-from: type=gha - cache-to: type=gha,mode=max \ No newline at end of file + cache-to: type=gha,mode=max + + dockerhub-jpo-jikkou: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Replace Docker tag + id: set_tag + run: echo "TAG=$(echo ${GITHUB_REF##*/} | sed 's/\//-/g')" >> $GITHUB_ENV + + - name: Build + uses: docker/build-push-action@v3 + with: + context: jpo-jikkou + push: true + tags: usdotjpoode/jpo-jikkou:${{ env.TAG }} + cache-from: type=gha + cache-to: type=gha,mode=max + + dockerhub-jpo-kafka-connect: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Replace Docker tag + id: set_tag + run: echo "TAG=$(echo ${GITHUB_REF##*/} | sed 's/\//-/g')" >> $GITHUB_ENV + + - name: Build + uses: docker/build-push-action@v3 + with: + context: kafka-connect + push: true + tags: usdotjpoode/jpo-kafka-connect:${{ env.TAG }} + cache-from: type=gha + cache-to: type=gha,mode=max From 0c511d869b7181fe530e56a1007bbd7fed887a21 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:15:59 -0700 Subject: [PATCH 14/25] fixing jikkou build failure and adding jikkou and kafka connect to dockerhub build push --- .github/workflows/ci.yml | 27 ++++++--------------------- .github/workflows/docker.yml | 2 +- .github/workflows/dockerhub.yml | 2 +- 3 files changed, 8 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cd49c3d..c7a3107 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: jpo-utils +name: CI on: pull_request: @@ -8,31 +8,16 @@ on: jobs: deduplicator-test: runs-on: ubuntu-latest - container: - image: maven:3.9.9-eclipse-temurin-21 - options: --user root steps: - name: Checkout Repository uses: actions/checkout@v4 - - name: Cache Maven packages - uses: actions/cache@v4 + - name: Set up JDK + uses: actions/setup-java@v4 with: - path: ~/.m2 - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ hashFiles('**/settings.xml') }}-${{ runner.os }}-java-21 - restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ runner.os }}-java-21 - ${{ runner.os }}-maven-${{ runner.os }}-java-21 - ${{ runner.os }}-maven - - - name: Install Dependencies - env: - MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }} - MAVEN_GITHUB_ORG: ${{ github.repository_owner }} - run: | - cd $GITHUB_WORKSPACE/jpo-deduplicator/jpo-deduplicator - mvn clean install -DskipTests -s ./settings.xml - mvn dependency:go-offline -s ./settings.xml + java-version: "21" + distribution: "temurin" + cache: 'maven' - name: Run tests env: diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 2126544..40be231 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -35,7 +35,7 @@ jobs: - name: Build uses: docker/build-push-action@v3 with: - context: jpo-jikkou + context: jikkou cache-from: type=gha cache-to: type=gha,mode=max diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml index 31fc040..7ce9b50 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/dockerhub.yml @@ -60,7 +60,7 @@ jobs: - name: Build uses: docker/build-push-action@v3 with: - context: jpo-jikkou + context: jikkou push: true tags: usdotjpoode/jpo-jikkou:${{ env.TAG }} cache-from: type=gha From 8a5590c6ad90d57c8af539f9b27259bbc85e8fb8 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Tue, 21 Jan 2025 08:44:10 -0700 Subject: [PATCH 15/25] fix CI for jikkou dockerfile --- .github/workflows/docker.yml | 1 + .github/workflows/dockerhub.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 40be231..7b09f16 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -36,6 +36,7 @@ jobs: uses: docker/build-push-action@v3 with: context: jikkou + file: Dockerfile.jikkou cache-from: type=gha cache-to: type=gha,mode=max diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml index 7ce9b50..ddd1248 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/dockerhub.yml @@ -61,6 +61,7 @@ jobs: uses: docker/build-push-action@v3 with: context: jikkou + file: Dockerfile.jikkou push: true tags: usdotjpoode/jpo-jikkou:${{ env.TAG }} cache-from: type=gha From 69113caf90ff2f5652f67ea63722e830ce3bffc9 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Tue, 21 Jan 2025 08:47:27 -0700 Subject: [PATCH 16/25] fix to Jikkou CI --- .github/workflows/docker.yml | 2 +- .github/workflows/dockerhub.yml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 7b09f16..8853375 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -36,7 +36,7 @@ jobs: uses: docker/build-push-action@v3 with: context: jikkou - file: Dockerfile.jikkou + file: jikkou/Dockerfile.jikkou cache-from: type=gha cache-to: type=gha,mode=max diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml index ddd1248..5b12f7f 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/dockerhub.yml @@ -60,8 +60,7 @@ jobs: - name: Build uses: docker/build-push-action@v3 with: - context: jikkou - file: Dockerfile.jikkou + file: jikkou/Dockerfile.jikkou push: true tags: usdotjpoode/jpo-jikkou:${{ env.TAG }} cache-from: type=gha From 9a00daa05ccefcbff85cca6f45dca047d4e34467 Mon Sep 17 00:00:00 2001 From: john-wiens Date: Tue, 21 Jan 2025 09:51:16 -0700 Subject: [PATCH 17/25] Adding Full Enhancements list --- docs/Release_notes.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/docs/Release_notes.md b/docs/Release_notes.md index 60abb3b..40fe69d 100644 --- a/docs/Release_notes.md +++ b/docs/Release_notes.md @@ -14,3 +14,30 @@ This release also makes additional changes to the submodule components as follow - Adds in Jikkou for managing Kafka topic creation and Kafka connect behaviors - Updates mongoDB indexes and collection list to support new collections - Updated jpo-deduplicator for compatibility with jpo-ode version 4.0.0 + +Enhancements in this release: +USDOT PR 2: Kafka Connect Module Addition +USDOT PR 3: Kafka topics management +USDOT PR 5: Add TMC filtered TIM topic +USDOT PR 6: Merge Release/2024 q3 to master branch +USDOT PR 7: Sync Develop with Master branch for Q3 release 2024 +USDOT PR 8: Kafka Connect Jikkou Refactor +USDOT PR 9: Environmental Variable Fixes +USDOT PR 10: Kafka topic addition +USDOT PR 11: updates to mongo and kafka connect +USDOT PR 12: update keyfile generation to use env vars +USDOT PR 13: Added Spat and ASN Tim Deduplication +USDOT PR 14: Adding DB entries for Progression Events +USDOT PR 15: Cimms event aggregation topics +USDOT PR 16: Updating Conflict Monitor Mongo Connectors +USDOT PR 17: chore: make kafka_init.sh executable +USDOT PR 18: Adding JPO-Deduplicator to jpo-utils +CDOT PR 3: Updated Deduplicator for Compatibility with ode 4.0 +CDOT PR 4: Enable BSM deduplication by default +USDOT PR 21: Adding missing cm topic +USDOT PR 22: Adding Default Credentials +USDOT PR 23: Adding missing ode topics +USDOT PR 24: Index updates +CDOT PR 6: Adding MEC Deposit Resources +USDOT PR 25: Updating version for kafka ui to latest release +CDOT PR 7: Tim compatibility and CI updates \ No newline at end of file From 7c99f8c2d2f445f098f21ed22e11240596524604 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 13 Jan 2025 20:12:18 -0700 Subject: [PATCH 18/25] updating topics for the jpo-mec-deposit module --- jikkou/kafka-connectors-values.yaml | 8 ++------ jikkou/kafka-topics-values.yaml | 3 +-- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/jikkou/kafka-connectors-values.yaml b/jikkou/kafka-connectors-values.yaml index 2d0720f..ff9e0f8 100644 --- a/jikkou/kafka-connectors-values.yaml +++ b/jikkou/kafka-connectors-values.yaml @@ -353,11 +353,7 @@ apps: mecdeposit: name: mecdeposit connectors: - - topicName: topic.MecEtxMqttDepositMetrics - collectionName: MecEtxMqttDepositMetrics - useTimestamp: true - timestampField: odeReceivedAt - - topicName: topic.MecEtxApiDepositMetrics - collectionName: MecEtxApiDepositMetrics + - topicName: topic.MecDepositMetrics + collectionName: MecDepositMetrics useTimestamp: true timestampField: odeReceivedAt diff --git a/jikkou/kafka-topics-values.yaml b/jikkou/kafka-topics-values.yaml index e28d1ce..3a4cc48 100644 --- a/jikkou/kafka-topics-values.yaml +++ b/jikkou/kafka-topics-values.yaml @@ -186,7 +186,6 @@ apps: mecdeposit: name: jpo-mecdeposit streamTopics: - - topic.MecEtxMqttDepositMetrics - - topic.MecEtxApiDepositMetrics + - topic.MecDepositMetrics tableTopics: {} customTopics: {} From 2596542479e5aeb1e4150bcc9b0290390706b12f Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Tue, 14 Jan 2025 11:00:03 -0700 Subject: [PATCH 19/25] updating metrics kafka config --- jikkou/kafka-connectors-values.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/jikkou/kafka-connectors-values.yaml b/jikkou/kafka-connectors-values.yaml index ff9e0f8..8034c4b 100644 --- a/jikkou/kafka-connectors-values.yaml +++ b/jikkou/kafka-connectors-values.yaml @@ -355,5 +355,4 @@ apps: connectors: - topicName: topic.MecDepositMetrics collectionName: MecDepositMetrics - useTimestamp: true - timestampField: odeReceivedAt + generateTimestamp: true From 1e78b6adb7e970a5ab31a86ef6176d8a1dc06c80 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Fri, 24 Jan 2025 16:08:23 -0700 Subject: [PATCH 20/25] removal of jpo-deduplicator as it is going to it's own repo --- .github/workflows/docker.yml | 22 +- .github/workflows/dockerhub.yml | 34 +- README.md | 68 --- docker-compose-deduplicator.yml | 41 -- docker-compose-mongo.yml | 6 + docker-compose.yml | 3 +- jpo-deduplicator/.dockerignore | 1 - jpo-deduplicator/Dockerfile | 48 -- .../jpo-deduplicator/LICENSE-2.0.html | 228 --------- jpo-deduplicator/jpo-deduplicator/pom.xml | 294 ------------ .../jpo-deduplicator/settings.xml | 28 -- .../deduplicator/DeduplicatorApplication.java | 57 --- .../deduplicator/DeduplicatorProperties.java | 444 ------------------ .../jpo/deduplicator/KafkaConfiguration.java | 197 -------- .../deduplicator/StreamsExceptionHandler.java | 56 --- .../DeduplicatorServiceController.java | 114 ----- .../deduplicator/models/JsonPair.java | 21 - .../deduplicator/models/OdeBsmPair.java | 20 - .../deduplicator/models/OdeMapPair.java | 20 - .../deduplicator/models/Pair.java | 19 - .../deduplicator/models/ProcessedMapPair.java | 21 - .../models/ProcessedMapWktPair.java | 20 - .../processors/DeduplicationProcessor.java | 69 --- .../processors/OdeBsmJsonProcessor.java | 80 ---- .../processors/OdeMapJsonProcessor.java | 70 --- .../OdeRawEncodedTimJsonProcessor.java | 43 -- .../processors/OdeTimJsonProcessor.java | 43 -- .../processors/ProcessedMapProcessor.java | 57 --- .../processors/ProcessedMapWktProcessor.java | 55 --- .../processors/ProcessedSpatProcessor.java | 64 --- .../OdeBsmJsonProcessorSupplier.java | 26 - .../OdeMapJsonProcessorSupplier.java | 22 - .../OdeRawEncodedTimProcessorSupplier.java | 22 - .../OdeTimJsonProcessorSupplier.java | 22 - .../ProcessedMapProcessorSupplier.java | 23 - .../ProcessedMapWktProcessorSupplier.java | 22 - .../ProcessedSpatProcessorSupplier.java | 22 - .../serialization/JsonSerdes.java | 24 - .../serialization/PairSerdes.java | 52 -- .../topologies/BsmDeduplicatorTopology.java | 125 ----- .../topologies/MapDeduplicatorTopology.java | 121 ----- .../OdeRawEncodedTimDeduplicatorTopology.java | 130 ----- .../ProcessedMapDeduplicatorTopology.java | 92 ---- .../ProcessedMapWktDeduplicatorTopology.java | 93 ---- .../ProcessedSpatDeduplicatorTopology.java | 96 ---- .../topologies/TimDeduplicatorTopology.java | 128 ----- .../src/main/resources/application.yaml | 96 ---- .../src/main/resources/logback.xml | 20 - .../BsmDeduplicatorTopologyTest.java | 116 ----- .../MapDeduplicatorTopologyTest.java | 103 ---- ...RawEncodedTimDeduplicatorTopologyTest.java | 89 ---- .../ProcessedMapDeduplicatorTopologyTest.java | 99 ---- ...ocessedMapWktDeduplicatorTopologyTest.java | 101 ---- ...ProcessedSpatDeduplicatorTopologyTest.java | 106 ----- .../TimDeduplicatorTopologyTest.java | 89 ---- .../resources/application-testConfig.yaml | 1 - .../src/test/resources/logback-test.xml | 11 - sample.env | 29 +- 58 files changed, 13 insertions(+), 4110 deletions(-) delete mode 100644 docker-compose-deduplicator.yml delete mode 100644 jpo-deduplicator/.dockerignore delete mode 100644 jpo-deduplicator/Dockerfile delete mode 100644 jpo-deduplicator/jpo-deduplicator/LICENSE-2.0.html delete mode 100644 jpo-deduplicator/jpo-deduplicator/pom.xml delete mode 100644 jpo-deduplicator/jpo-deduplicator/settings.xml delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/DeduplicatorApplication.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/DeduplicatorProperties.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/KafkaConfiguration.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/StreamsExceptionHandler.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/DeduplicatorServiceController.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/JsonPair.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/OdeBsmPair.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/OdeMapPair.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/Pair.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/ProcessedMapPair.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/ProcessedMapWktPair.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/DeduplicationProcessor.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeBsmJsonProcessor.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeMapJsonProcessor.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeRawEncodedTimJsonProcessor.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeTimJsonProcessor.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedMapProcessor.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedMapWktProcessor.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedSpatProcessor.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeBsmJsonProcessorSupplier.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeMapJsonProcessorSupplier.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeRawEncodedTimProcessorSupplier.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeTimJsonProcessorSupplier.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedMapProcessorSupplier.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedMapWktProcessorSupplier.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedSpatProcessorSupplier.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/JsonSerdes.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/PairSerdes.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/BsmDeduplicatorTopology.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/MapDeduplicatorTopology.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/OdeRawEncodedTimDeduplicatorTopology.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedMapDeduplicatorTopology.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedMapWktDeduplicatorTopology.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/TimDeduplicatorTopology.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/main/resources/logback.xml delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/BsmDeduplicatorTopologyTest.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/MapDeduplicatorTopologyTest.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/OdeRawEncodedTimDeduplicatorTopologyTest.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedMapDeduplicatorTopologyTest.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedMapWktDeduplicatorTopologyTest.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedSpatDeduplicatorTopologyTest.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/TimDeduplicatorTopologyTest.java delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/test/resources/application-testConfig.yaml delete mode 100644 jpo-deduplicator/jpo-deduplicator/src/test/resources/logback-test.xml diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 8853375..7660b5e 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -4,27 +4,7 @@ on: pull_request: types: [opened, synchronize, reopened] -jobs: - jpo-deduplicator: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - name: Build - uses: docker/build-push-action@v3 - with: - context: jpo-deduplicator - build-args: | - MAVEN_GITHUB_TOKEN_NAME=${{ vars.MAVEN_GITHUB_TOKEN_NAME }} - MAVEN_GITHUB_TOKEN=${{ secrets.MAVEN_GITHUB_TOKEN }} - MAVEN_GITHUB_ORG=${{ github.repository_owner }} - secrets: | - MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }} - cache-from: type=gha - cache-to: type=gha,mode=max - +jobs: jpo-jikkou: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml index 5b12f7f..a49ccba 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/dockerhub.yml @@ -7,39 +7,7 @@ on: - "master" - "release/*" -jobs: - dockerhub-jpo-deduplicator: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - name: Login to DockerHub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Replace Docker tag - id: set_tag - run: echo "TAG=$(echo ${GITHUB_REF##*/} | sed 's/\//-/g')" >> $GITHUB_ENV - - - name: Build - uses: docker/build-push-action@v3 - with: - context: jpo-deduplicator - push: true - tags: usdotjpoode/jpo-deduplicator:${{ env.TAG }} - build-args: | - MAVEN_GITHUB_TOKEN_NAME=${{ vars.MAVEN_GITHUB_TOKEN_NAME }} - MAVEN_GITHUB_TOKEN=${{ secrets.MAVEN_GITHUB_TOKEN }} - MAVEN_GITHUB_ORG=${{ github.repository_owner }} - secrets: | - MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }} - cache-from: type=gha - cache-to: type=gha,mode=max - +jobs: dockerhub-jpo-jikkou: runs-on: ubuntu-latest steps: diff --git a/README.md b/README.md index 53d023e..4014f8c 100644 --- a/README.md +++ b/README.md @@ -21,10 +21,6 @@ The JPO ITS utilities repository serves as a central location for deploying open - [Configuration](#configuration) - [Configure Kafka Connector Creation](#configure-kafka-connector-creation) - [Quick Run](#quick-run-2) - - [5. jpo-deduplicator](#5-jpo-deduplicator) - - [Deduplication Config](#deduplication-config) - - [Generate a Github Token](#generate-a-github-token) - - [Quick Run](#quick-run-3) - [Security Notice](#security-notice) @@ -190,70 +186,6 @@ The following environment variables can be used to configure Kafka Connectors: 3. Click `OdeBsmJson`, and now you should see your message! 8. Feel free to test this with other topics or by producing to these topics using the [ODE](https://github.com/usdot-jpo-ode/jpo-ode) - - - -## 5. jpo-deduplicator -The JPO-Deduplicator is a Kafka Java spring-boot application designed to reduce the number of messages stored and processed in the ODE system. This is done by reading in messages from an input topic (such as topic.ProcessedMap) and outputting a subset of those messages on a related output topic (topic.DeduplicatedProcessedMap). Functionally, this is done by removing deduplicate messages from the input topic and only passing on unique messages. In addition, each topic will pass on at least 1 message per hour even if the message is a duplicate. This behavior helps ensure messages are still flowing through the system. The following topics currently support deduplication. - -- topic.ProcessedMap -> topic.DeduplicatedProcessedMap -- topic.ProcessedMapWKT -> topic.DeduplicatedProcessedMapWKT -- topic.OdeMapJson -> topic.DeduplicatedOdeMapJson -- topic.OdeTimJson -> topic.DeduplicatedOdeTimJson -- topic.OdeRawEncodedTIMJson -> topic.DeduplicatedOdeRawEncodedTIMJson -- topic.OdeBsmJson -> topic.DeduplicatedOdeBsmJson -- topic.ProcessedSpat -> topic.DeduplicatedProcessedSpat - -### Deduplication Config - -When running the jpo-deduplication as a submodule in jpo-utils, the deduplicator will automatically configure an algorithm as enabled or disabled depending on if the corresponding subcomponent is also active. For example if the KAFKA_TOPIC_CREATE_GEOJSONCONVERTER environment variable is set to true, the deduplicator will start performing deduplication for ProcessedMap, ProcessedMapWKT, and ProcessedSpat data. If the KAFKA_TOPIC_CREATE_GEOJSONCONVERTER is set to false, the deduplicator will disable deduplication for those same topics. To manually configure deduplication for a topic, the following environment variables can also be used. If no value is passed for a given environment variable, the corresponding deduplication algorithm will default to enabled. - -| Environment Variable | Description | -|---|---| -| `ENABLE_PROCESSED_MAP_DEDUPLICATION` | `true` / `false` - Enable ProcessedMap message Deduplication | -| `ENABLE_PROCESSED_MAP_WKT_DEDUPLICATION` | `true` / `false` - Enable ProcessedMap WKT message Deduplication | -| `ENABLE_ODE_MAP_DEDUPLICATION` | `true` / `false` - Enable ODE MAP message Deduplication | -| `ENABLE_ODE_TIM_DEDUPLICATION` | `true` / `false` - Enable ODE TIM message Deduplication | -| `ENABLE_ODE_RAW_ENCODED_TIM_DEDUPLICATION` | `true` / `false` - Enable ODE Raw Encoded TIM Deduplication | -| `ENABLE_PROCESSED_SPAT_DEDUPLICATION` | `true` / `false` - Enable ProcessedSpat Deduplication | -| `ENABLE_ODE_BSM_DEDUPLICATION` | `true` / `false` - Enable ODE BSM Deduplication | - -### Generate a Github Token - -A GitHub token is required to pull artifacts from GitHub repositories. This is required to obtain the jpo-deduplicator jars and must be done before attempting to build this repository. - -1. Log into GitHub. -2. Navigate to Settings -> Developer settings -> Personal access tokens. -3. Click "New personal access token (classic)". - 1. As of now, GitHub does not support `Fine-grained tokens` for obtaining packages. -4. Provide a name and expiration for the token. -5. Select the `read:packages` scope. -6. Click "Generate token" and copy the token. -7. Copy the token name and token value into your `.env` file. - -For local development the following steps are also required -8. Create a copy of [settings.xml](jpo-deduplicator/jpo-deduplicator/settings.xml) and save it to `~/.m2/settings.xml` -9. Update the variables in your `~/.m2/settings.xml` with the token value and target jpo-ode organization. - -### Quick Run -1. Create a copy of `sample.env` and rename it to `.env`. -2. Update the variable `MAVEN_GITHUB_TOKEN` to a github token used for downloading jar file dependencies. For full instructions on how to generate a token please see here: -3. Set the password for `MONGO_ADMIN_DB_PASS` and `MONGO_READ_WRITE_PASS` environmental variables to a secure password. -4. Set the `COMPOSE_PROFILES` variable to: `kafka,kafka_ui,kafka_setup, jpo-deduplicator` -5. Navigate back to the root directory and run the following command: `docker compose up -d` -6. Produce a sample message to one of the sink topics by using `kafka_ui` by: - 1. Go to `localhost:8001` - 2. Click local -> Topics - 3. Select `topic.OdeMapJson` - 4. Select `Produce Message` - 5. Copy in sample JSON for a Map Message - 6. Click `Produce Message` multiple times -7. View the synced message in `kafka_ui` by: - 1. Go to `localhost:8001` - 2. Click local -> Topics - 3. Select `topic.DeduplicatedOdeMapJson` - 4. You should now see only one copy of the map message sent. - [Back to top](#toc) ## Security Notice diff --git a/docker-compose-deduplicator.yml b/docker-compose-deduplicator.yml deleted file mode 100644 index c1e7410..0000000 --- a/docker-compose-deduplicator.yml +++ /dev/null @@ -1,41 +0,0 @@ -services: - deduplicator: - profiles: - - all - - deduplicator - build: - context: jpo-deduplicator - dockerfile: Dockerfile - args: - MAVEN_GITHUB_TOKEN: ${MAVEN_GITHUB_TOKEN} - MAVEN_GITHUB_ORG: ${MAVEN_GITHUB_ORG} - image: jpo-deduplicator:latest - restart: ${RESTART_POLICY} - environment: - DOCKER_HOST_IP: ${DOCKER_HOST_IP} - KAFKA_BOOTSTRAP_SERVERS: ${KAFKA_BOOTSTRAP_SERVERS} - spring.kafka.bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS} - enableProcessedMapDeduplication: ${ENABLE_PROCESSED_MAP_DEDUPLICATION} - enableProcessedMapWktDeduplication: ${ENABLE_PROCESSED_MAP_WKT_DEDUPLICATION} - enableOdeMapDeduplication: ${ENABLE_ODE_MAP_DEDUPLICATION} - enableOdeTimDeduplication: ${ENABLE_ODE_TIM_DEDUPLICATION} - enableOdeRawEncodedTimDeduplication: ${ENABLE_ODE_RAW_ENCODED_TIM_DEDUPLICATION} - enableProcessedSpatDeduplication: ${ENABLE_PROCESSED_SPAT_DEDUPLICATION} - enableOdeBsmDeduplication: ${ENABLE_ODE_BSM_DEDUPLICATION} - healthcheck: - test: ["CMD", "java", "-version"] - interval: 10s - timeout: 10s - retries: 20 - logging: - options: - max-size: "10m" - max-file: "5" - deploy: - resources: - limits: - memory: 3G - depends_on: - kafka: - condition: service_healthy - required: false diff --git a/docker-compose-mongo.yml b/docker-compose-mongo.yml index 4a460bc..b8c623e 100644 --- a/docker-compose-mongo.yml +++ b/docker-compose-mongo.yml @@ -8,6 +8,9 @@ services: image: mongo:8 hostname: mongo restart: ${RESTART_POLICY} + env_file: + - path: ./sample.env + required: true deploy: resources: limits: @@ -106,6 +109,9 @@ services: image: mongo-express:1.0.2-18 hostname: mongo-express restart: ${RESTART_POLICY} + env_file: + - path: ./sample.env + required: true deploy: resources: limits: diff --git a/docker-compose.yml b/docker-compose.yml index c0719e5..4410b10 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,4 @@ include: - docker-compose-connect.yml - docker-compose-mongo.yml - - docker-compose-kafka.yml - - docker-compose-deduplicator.yml \ No newline at end of file + - docker-compose-kafka.yml \ No newline at end of file diff --git a/jpo-deduplicator/.dockerignore b/jpo-deduplicator/.dockerignore deleted file mode 100644 index 1ace176..0000000 --- a/jpo-deduplicator/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -jpo-deduplicator/target/ \ No newline at end of file diff --git a/jpo-deduplicator/Dockerfile b/jpo-deduplicator/Dockerfile deleted file mode 100644 index 2631f79..0000000 --- a/jpo-deduplicator/Dockerfile +++ /dev/null @@ -1,48 +0,0 @@ -FROM maven:3.8-eclipse-temurin-21-alpine AS builder - -WORKDIR /home - -ARG MAVEN_GITHUB_TOKEN -ARG MAVEN_GITHUB_ORG - -ENV MAVEN_GITHUB_TOKEN=$MAVEN_GITHUB_TOKEN -ENV MAVEN_GITHUB_ORG=$MAVEN_GITHUB_ORG - -RUN test -n "$MAVEN_GITHUB_TOKEN" || (echo "Error: MAVEN_GITHUB_TOKEN cannot be empty" && exit 1) -RUN test -n "$MAVEN_GITHUB_ORG" || (echo "Error: MAVEN_GITHUB_ORG cannot be empty" && exit 1) - -# Copy and Build Deduplicator -WORKDIR /home -COPY ./jpo-deduplicator/pom.xml ./jpo-deduplicator/ -COPY ./jpo-deduplicator/settings.xml ./jpo-deduplicator/ - -WORKDIR /home/jpo-deduplicator -RUN mvn -s settings.xml dependency:resolve - -COPY ./jpo-deduplicator/src ./src -RUN mvn -s settings.xml install -DskipTests - -FROM amazoncorretto:21 - -WORKDIR /home - -COPY --from=builder /home/jpo-deduplicator/src/main/resources/application.yaml /home -COPY --from=builder /home/jpo-deduplicator/src/main/resources/logback.xml /home -COPY --from=builder /home/jpo-deduplicator/target/jpo-deduplicator.jar /home - -#COPY cert.crt /home/cert.crt -#RUN keytool -import -trustcacerts -keystore /usr/local/openjdk-11/lib/security/cacerts -storepass changeit -noprompt -alias mycert -file cert.crt - -ENTRYPOINT ["java", \ - "-Djava.rmi.server.hostname=$DOCKER_HOST_IP", \ - "-Dcom.sun.management.jmxremote.port=9090", \ - "-Dcom.sun.management.jmxremote.rmi.port=9090", \ - "-Dcom.sun.management.jmxremote", \ - "-Dcom.sun.management.jmxremote.local.only=true", \ - "-Dcom.sun.management.jmxremote.authenticate=false", \ - "-Dcom.sun.management.jmxremote.ssl=false", \ - "-Dlogback.configurationFile=/home/logback.xml", \ - "-jar", \ - "/home/jpo-deduplicator.jar"] - -# ENTRYPOINT ["tail", "-f", "/dev/null"] diff --git a/jpo-deduplicator/jpo-deduplicator/LICENSE-2.0.html b/jpo-deduplicator/jpo-deduplicator/LICENSE-2.0.html deleted file mode 100644 index d1055c8..0000000 --- a/jpo-deduplicator/jpo-deduplicator/LICENSE-2.0.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - Apache License, Version 2.0 - - -
- -

Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/

-

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND - DISTRIBUTION

-

1. - Definitions.

-

"License" shall mean the terms and conditions for use, - reproduction, and distribution as defined by Sections 1 through 9 - of this document.

-

"Licensor" shall mean the copyright owner or entity authorized - by the copyright owner that is granting the License.

-

"Legal Entity" shall mean the union of the acting entity and - all other entities that control, are controlled by, or are under - common control with that entity. For the purposes of this - definition, "control" means (i) the power, direct or indirect, to - cause the direction or management of such entity, whether by - contract or otherwise, or (ii) ownership of fifty percent (50%) - or more of the outstanding shares, or (iii) beneficial ownership - of such entity.

-

"You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License.

-

"Source" form shall mean the preferred form for making - modifications, including but not limited to software source code, - documentation source, and configuration files.

-

"Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but not - limited to compiled object code, generated documentation, and - conversions to other media types.

-

"Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work (an - example is provided in the Appendix below).

-

"Derivative Works" shall mean any work, whether in Source or - Object form, that is based on (or derived from) the Work and for - which the editorial revisions, annotations, elaborations, or - other modifications represent, as a whole, an original work of - authorship. For the purposes of this License, Derivative Works - shall not include works that remain separable from, or merely - link (or bind by name) to the interfaces of, the Work and - Derivative Works thereof.

-

"Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or - additions to that Work or Derivative Works thereof, that is - intentionally submitted to Licensor for inclusion in the Work by - the copyright owner or by an individual or Legal Entity - authorized to submit on behalf of the copyright owner. For the - purposes of this definition, "submitted" means any form of - electronic, verbal, or written communication sent to the Licensor - or its representatives, including but not limited to - communication on electronic mailing lists, source code control - systems, and issue tracking systems that are managed by, or on - behalf of, the Licensor for the purpose of discussing and - improving the Work, but excluding communication that is - conspicuously marked or otherwise designated in writing by the - copyright owner as "Not a Contribution."

-

"Contributor" shall mean Licensor and any individual or Legal - Entity on behalf of whom a Contribution has been received by - Licensor and subsequently incorporated within the Work.

-

2. Grant of - Copyright License. Subject to the terms and - conditions of this License, each Contributor hereby grants to You - a perpetual, worldwide, non-exclusive, no-charge, royalty-free, - irrevocable copyright license to reproduce, prepare Derivative - Works of, publicly display, publicly perform, sublicense, and - distribute the Work and such Derivative Works in Source or Object - form.

-

3. Grant of Patent - License. Subject to the terms and conditions of this - License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have - made, use, offer to sell, sell, import, and otherwise transfer - the Work, where such license applies only to those patent claims - licensable by such Contributor that are necessarily infringed by - their Contribution(s) alone or by combination of their - Contribution(s) with the Work to which such Contribution(s) was - submitted. If You institute patent litigation against any entity - (including a cross-claim or counterclaim in a lawsuit) alleging - that the Work or a Contribution incorporated within the Work - constitutes direct or contributory patent infringement, then any - patent licenses granted to You under this License for that Work - shall terminate as of the date such litigation is filed.

-

4. - Redistribution. You may reproduce and distribute - copies of the Work or Derivative Works thereof in any medium, - with or without modifications, and in Source or Object form, - provided that You meet the following conditions:

-
    -
  1. You must give any other recipients of the Work or - Derivative Works a copy of this License; and
  2. -
  3. You must cause any modified files to carry prominent - notices stating that You changed the files; and
  4. -
  5. You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, excluding - those notices that do not pertain to any part of the Derivative - Works; and
  6. -
  7. If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute - must include a readable copy of the attribution notices - contained within such NOTICE file, excluding those notices that - do not pertain to any part of the Derivative Works, in at least - one of the following places: within a NOTICE text file - distributed as part of the Derivative Works; within the Source - form or documentation, if provided along with the Derivative - Works; or, within a display generated by the Derivative Works, - if and wherever such third-party notices normally appear. The - contents of the NOTICE file are for informational purposes only - and do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed as - modifying the License.
    -
    - You may add Your own copyright statement to Your modifications - and may provide additional or different license terms and - conditions for use, reproduction, or distribution of Your - modifications, or for any such Derivative Works as a whole, - provided Your use, reproduction, and distribution of the Work - otherwise complies with the conditions stated in this - License.
  8. -
-

5. - Submission of Contributions. Unless You explicitly - state otherwise, any Contribution intentionally submitted for - inclusion in the Work by You to the Licensor shall be under the - terms and conditions of this License, without any additional - terms or conditions. Notwithstanding the above, nothing herein - shall supersede or modify the terms of any separate license - agreement you may have executed with Licensor regarding such - Contributions.

-

6. - Trademarks. This License does not grant permission - to use the trade names, trademarks, service marks, or product - names of the Licensor, except as required for reasonable and - customary use in describing the origin of the Work and - reproducing the content of the NOTICE file.

-

7. Disclaimer - of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or - conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or - FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for - determining the appropriateness of using or redistributing the - Work and assume any risks associated with Your exercise of - permissions under this License.

-

8. Limitation - of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, - special, incidental, or consequential damages of any character - arising as a result of this License or out of the use or - inability to use the Work (including but not limited to damages - for loss of goodwill, work stoppage, computer failure or - malfunction, or any and all other commercial damages or losses), - even if such Contributor has been advised of the possibility of - such damages.

-

9. Accepting - Warranty or Additional Liability. While - redistributing the Work or Derivative Works thereof, You may - choose to offer, and charge a fee for, acceptance of support, - warranty, indemnity, or other liability obligations and/or rights - consistent with this License. However, in accepting such - obligations, You may act only on Your own behalf and on Your sole - responsibility, not on behalf of any other Contributor, and only - if You agree to indemnify, defend, and hold each Contributor - harmless for any liability incurred by, or claims asserted - against, such Contributor by reason of your accepting any such - warranty or additional liability.

-

END OF TERMS AND CONDITIONS

-

APPENDIX: How to apply the Apache License to your - work

-

To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a file - or class name and description of purpose be included on the same - "printed page" as the copyright notice for easier identification - within third-party archives.

-
-
Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-    
-
-
- - - diff --git a/jpo-deduplicator/jpo-deduplicator/pom.xml b/jpo-deduplicator/jpo-deduplicator/pom.xml deleted file mode 100644 index 25a15bd..0000000 --- a/jpo-deduplicator/jpo-deduplicator/pom.xml +++ /dev/null @@ -1,294 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.1.3 - - - usdot.jpo.ode - jpo-deduplicator - 2.0.0 - jar - jpo-deduplicator - http://maven.apache.org - - UTF-8 - 29-SNAPSHOT - usdot-jpo-ode - https://sonarcloud.io - - Deduplicates Messages generated by Subcomponents of the ODE - 21 - - ^ - - - 0.8.11 - jacoco - reuseReports - ${project.basedir}/target/site/jacoco/jacoco.xml - java - - - - - org.springframework.boot - spring-boot-starter - - - org.apache.logging.log4j - log4j-to-slf4j - - - - - org.springframework.boot - spring-boot-starter-test - test - - - com.vaadin.external.google - android-json - - - - - - org.springframework.boot - spring-boot-devtools - runtime - - - org.springframework.boot - spring-boot-starter-data-rest - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.restdocs - spring-restdocs-mockmvc - test - - - org.springframework.boot - spring-boot-configuration-processor - true - - - org.springframework.boot - spring-boot-starter-websocket - - - org.springframework.kafka - spring-kafka - - - org.springframework.kafka - spring-kafka-test - test - - - - - usdot.jpo.ode - jpo-ode-core - 4.0.0 - - - usdot.jpo.ode - jpo-ode-plugins - 4.0.0 - - - usdot.jpo.ode - jpo-geojsonconverter - 2.0.0 - - - usdot.jpo.ode - jpo-conflictmonitor - 1.5.0 - - - junit - junit - 4.13.2 - test - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - - org.jacoco - jacoco-maven-plugin - ${jacoco.version} - test - - - org.mockito - mockito-core - 5.10.0 - test - - - - com.google.guava - guava - 33.0.0-jre - - - - - - - - org.projectlombok - lombok - 1.18.30 - - - - - - - - - false - - central - Central Repository - https://repo.maven.apache.org/maven2 - - - - - - ${project.artifactId} - - - org.sonarsource.scanner.maven - sonar-maven-plugin - 3.10.0.2594 - - - org.springframework.boot - spring-boot-maven-plugin - - - - build-info - - build-info - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 3.2.5 - - all - exit - - - - @{argLine} - -XX:+EnableDynamicAgentLoading - - - - - - org.apache.maven.surefire - surefire-junit47 - 3.2.5 - - - - - - org.jacoco - jacoco-maven-plugin - ${jacoco.version} - - - jacoco-initialize - - prepare-agent - - - - jacoco-site - package - - report - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.3.0 - - - - jar - - package - - - jpo-deduplicator - - - - - - - - org.apache.maven.plugins - maven-surefire-report-plugin - 3.2.5 - - - - diff --git a/jpo-deduplicator/jpo-deduplicator/settings.xml b/jpo-deduplicator/jpo-deduplicator/settings.xml deleted file mode 100644 index 2a4f90b..0000000 --- a/jpo-deduplicator/jpo-deduplicator/settings.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - default - - - - github - jpo_deduplicator - ${env.MAVEN_GITHUB_TOKEN} - - - - - default - - - github - GitHub JPO Conflict Monitor - https://maven.pkg.github.com/${env.MAVEN_GITHUB_ORG}/* - - false - - - - - - \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/DeduplicatorApplication.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/DeduplicatorApplication.java deleted file mode 100644 index 6b483c9..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/DeduplicatorApplication.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.deduplicator; - -import javax.management.InstanceAlreadyExistsException; -import javax.management.MBeanRegistrationException; -import javax.management.MalformedObjectNameException; -import javax.management.NotCompliantMBeanException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.CommandLineRunner; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; - -@SpringBootApplication -@EnableConfigurationProperties(DeduplicatorProperties.class) -public class DeduplicatorApplication { - - private static final Logger logger = LoggerFactory.getLogger(DeduplicatorApplication.class); - - static final int DEFAULT_NO_THREADS = 10; - static final String DEFAULT_SCHEMA = "default"; - - public static void main(String[] args) throws MalformedObjectNameException, InterruptedException, - InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException { - - logger.info("Starting Message Deduplicator"); - SpringApplication.run(DeduplicatorApplication.class, args); - // MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); - // SystemConfig mBean = new SystemConfig(DEFAULT_NO_THREADS, DEFAULT_SCHEMA); - // ObjectName name = new ObjectName("us.dot.its.jpo.geojson:type=SystemConfig"); - // mbs.registerMBean(mBean, name); - logger.info("Message Deduplicator has started"); - - } - - @Bean - CommandLineRunner init(DeduplicatorProperties geojsonProperties) { - return args -> { - }; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/DeduplicatorProperties.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/DeduplicatorProperties.java deleted file mode 100644 index c60f522..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/DeduplicatorProperties.java +++ /dev/null @@ -1,444 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.deduplicator; - -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.Properties; -import java.util.UUID; - -import jakarta.annotation.PostConstruct; - -import org.apache.commons.lang3.SystemUtils; -import org.apache.kafka.clients.producer.ProducerConfig; -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.StreamsConfig; -import org.apache.kafka.streams.errors.LogAndContinueExceptionHandler; -import org.apache.kafka.streams.processor.LogAndSkipOnInvalidTimestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.info.BuildProperties; -import org.springframework.context.EnvironmentAware; -import org.springframework.core.env.Environment; - -import lombok.Getter; -import lombok.Setter; -import lombok.AccessLevel; -import us.dot.its.jpo.conflictmonitor.AlwaysContinueProductionExceptionHandler; -import us.dot.its.jpo.ode.eventlog.EventLogger; -import us.dot.its.jpo.ode.util.CommonUtils; - -// import us.dot.its.jpo.conflictmonitor.AlwaysContinueProductionExceptionHandler; - -@Getter -@Setter -@ConfigurationProperties -public class DeduplicatorProperties implements EnvironmentAware { - - private static final Logger logger = LoggerFactory.getLogger(DeduplicatorProperties.class); - - // Processed Map Configuration - private String kafkaTopicProcessedMap; - private String kafkaTopicDeduplicatedProcessedMap; - private boolean enableProcessedMapDeduplication; - private String kafkaStateStoreProcessedMapName = "ProcessedMap-store"; - - // Processed Map WKT Configuration - private String kafkaTopicProcessedMapWKT; - private String kafkaTopicDeduplicatedProcessedMapWKT; - private boolean enableProcessedMapWktDeduplication; - private String kafkaStateStoreProcessedMapWKTName = "ProcessedMapWKT-store"; - - // Ode Map Json Configuration - private String kafkaTopicOdeMapJson; - private String kafkaTopicDeduplicatedOdeMapJson; - private boolean enableOdeMapDeduplication; - private String kafkaStateStoreOdeMapJsonName = "OdeMapJson-store"; - - // Ode Tim Json Configuration - private String kafkaTopicOdeTimJson; - private String kafkaTopicDeduplicatedOdeTimJson; - private boolean enableOdeTimDeduplication; - private String kafkaStateStoreOdeTimJsonName = "OdeTimJson-store"; - - // Ode Raw Encoded Tim Json Configuration - private String kafkaTopicOdeRawEncodedTimJson; - private String kafkaTopicDeduplicatedOdeRawEncodedTimJson; - private boolean enableOdeRawEncodedTimDeduplication; - private String kafkaStateStoreOdeRawEncodedTimJsonName = "OdeRawEncodedTimJson-store"; - - //Ode BsmJson Configuration - private String kafkaTopicOdeBsmJson; - private String kafkaTopicDeduplicatedOdeBsmJson; - private boolean enableOdeBsmDeduplication; - private long odeBsmMaximumTimeDelta; - private double odeBsmMaximumPositionDelta; - private double odeBsmAlwaysIncludeAtSpeed; - private String kafkaStateStoreOdeBsmJsonName = "OdeBsmJson-store"; - - // Confluent Properties - private boolean confluentCloudEnabled = false; - private String confluentKey = null; - private String confluentSecret = null; - - // Processed SPaT Configuration - private String kafkaTopicProcessedSpat; - private String kafkaTopicDeduplicatedProcessedSpat; - private boolean enableProcessedSpatDeduplication; - private String kafkaStateStoreProcessedSpatName = "ProcessedSpat-store"; - - - private int lingerMs = 0; - - - - @Autowired - @Setter(AccessLevel.NONE) - private Environment env; - - /* - * General Properties - */ - private String version; - // public static final int OUTPUT_SCHEMA_VERSION = 6; - - @Setter(AccessLevel.NONE) - private String kafkaBrokers = null; - - private static final String DEFAULT_KAFKA_PORT = "9092"; - private static final String DEFAULT_CONNECT_PORT = "8083"; - - @Setter(AccessLevel.NONE) - private String hostId; - - // @Setter(AccessLevel.NONE) - // private String connectURL = null; - - // @Setter(AccessLevel.NONE) - // private String dockerHostIP = null; - - @Setter(AccessLevel.NONE) - private String kafkaBrokerIP = null; - - - // @Setter(AccessLevel.NONE) - // private String dbHostIP = null; - - - @Setter(AccessLevel.NONE) - @Autowired - BuildProperties buildProperties; - - @PostConstruct - void initialize() { - setVersion(buildProperties.getVersion()); - logger.info("groupId: {}", buildProperties.getGroup()); - logger.info("artifactId: {}", buildProperties.getArtifact()); - logger.info("version: {}", version); - //OdeMsgMetadata.setStaticSchemaVersion(OUTPUT_SCHEMA_VERSION); - - - - String hostname; - try { - hostname = InetAddress.getLocalHost().getHostName(); - } catch (UnknownHostException e) { - // Let's just use a random hostname - hostname = UUID.randomUUID().toString(); - logger.info("Unknown host error: {}, using random", e); - } - hostId = hostname; - logger.info("Host ID: {}", hostId); - EventLogger.logger.info("Initializing services on host {}", hostId); - - // if(dbHostIP == null){ - // String dbHost = CommonUtils.getEnvironmentVariable("MONGO_IP"); - - // if(dbHost == null){ - // logger.warn( - // "DB Host IP not defined, Defaulting to localhost."); - // dbHost = "localhost"; - // } - // dbHostIP = dbHost; - // } - - if (kafkaBrokers == null) { - - String kafkaBrokers = CommonUtils.getEnvironmentVariable("KAFKA_BOOTSTRAP_SERVERS"); - - logger.info("ode.kafkaBrokers property not defined. Will try KAFKA_BOOTSTRAP_SERVERS => {}", kafkaBrokers); - - if (kafkaBrokers == null) { - logger.warn( - "Neither ode.kafkaBrokers ode property nor KAFKA_BOOTSTRAP_SERVERS environment variable are defined. Defaulting to localhost:9092"); - kafkaBrokers = "localhost:9092"; - } - - } - - String kafkaType = CommonUtils.getEnvironmentVariable("KAFKA_TYPE"); - if (kafkaType != null) { - confluentCloudEnabled = kafkaType.equals("CONFLUENT"); - if (confluentCloudEnabled) { - - System.out.println("Enabling Confluent Cloud Integration"); - - confluentKey = CommonUtils.getEnvironmentVariable("CONFLUENT_KEY"); - confluentSecret = CommonUtils.getEnvironmentVariable("CONFLUENT_SECRET"); - } - } - - // Initialize the Kafka Connect URL - // if (connectURL == null) { - // String connectURL = CommonUtils.getEnvironmentVariable("CONNECT_URL"); - // if (connectURL == null) { - // connectURL = String.format("http://%s:%s", "localhost", DEFAULT_CONNECT_PORT); - // } - // } - - // List asList = Arrays.asList(this.getKafkaTopicsDisabled()); - // logger.info("Disabled Topics: {}", asList); - // kafkaTopicsDisabledSet.addAll(asList); - } - - public Properties createStreamProperties(String name) { - Properties streamProps = new Properties(); - streamProps.put(StreamsConfig.APPLICATION_ID_CONFIG, name); - - streamProps.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBrokers); - - streamProps.put(StreamsConfig.DEFAULT_DESERIALIZATION_EXCEPTION_HANDLER_CLASS_CONFIG, - LogAndContinueExceptionHandler.class.getName()); - - streamProps.put(StreamsConfig.DEFAULT_TIMESTAMP_EXTRACTOR_CLASS_CONFIG, - LogAndSkipOnInvalidTimestamp.class.getName()); - - streamProps.put(StreamsConfig.DEFAULT_PRODUCTION_EXCEPTION_HANDLER_CLASS_CONFIG, - AlwaysContinueProductionExceptionHandler.class.getName()); - - streamProps.put(StreamsConfig.NUM_STREAM_THREADS_CONFIG, 2); - - // streamProps.put(StreamsConfig.producerPrefix("acks"), "all"); - streamProps.put(StreamsConfig.producerPrefix(ProducerConfig.ACKS_CONFIG), "all"); - - // Reduce cache buffering per topology to 1MB - streamProps.put(StreamsConfig.STATESTORE_CACHE_MAX_BYTES_CONFIG, 1 * 1024 * 1024L); - - // Decrease default commit interval. Default for 'at least once' mode of 30000ms - // is too slow. - streamProps.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 100); - - // All the keys are Strings in this app - streamProps.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); - - // Configure the state store location - if (SystemUtils.IS_OS_LINUX) { - streamProps.put(StreamsConfig.STATE_DIR_CONFIG, "/var/lib/ode/kafka-streams"); - } else if (SystemUtils.IS_OS_WINDOWS) { - streamProps.put(StreamsConfig.STATE_DIR_CONFIG, "C:/temp/ode"); - } - // streamProps.put(StreamsConfig.STATE_DIR_CONFIG, "/var/lib/")\ - - // Increase max.block.ms and delivery.timeout.ms for streams - final int FIVE_MINUTES_MS = 5 * 60 * 1000; - streamProps.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, FIVE_MINUTES_MS); - streamProps.put(ProducerConfig.DELIVERY_TIMEOUT_MS_CONFIG, FIVE_MINUTES_MS); - - // Disable batching - // streamProps.put(ProducerConfig.BATCH_SIZE_CONFIG, 0); - - streamProps.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, "zstd"); - streamProps.put(ProducerConfig.LINGER_MS_CONFIG, getKafkaLingerMs()); - - if (confluentCloudEnabled) { - streamProps.put("ssl.endpoint.identification.algorithm", "https"); - streamProps.put("security.protocol", "SASL_SSL"); - streamProps.put("sasl.mechanism", "PLAIN"); - - if (confluentKey != null && confluentSecret != null) { - String auth = "org.apache.kafka.common.security.plain.PlainLoginModule required " + - "username=\"" + confluentKey + "\" " + - "password=\"" + confluentSecret + "\";"; - streamProps.put("sasl.jaas.config", auth); - } - else { - logger.error("Environment variables CONFLUENT_KEY and CONFLUENT_SECRET are not set. Set these in the .env file to use Confluent Cloud"); - } - } - - - return streamProps; - } - - public String getProperty(String key) { - return env.getProperty(key); - } - - public String getProperty(String key, String defaultValue) { - return env.getProperty(key, defaultValue); - } - - public Object getProperty(String key, int i) { - return env.getProperty(key, Integer.class, i); - } - - public Boolean getConfluentCloudStatus() { - return confluentCloudEnabled; - } - - - @Value("${kafkaTopicProcessedMap}") - public void setKafkaTopicProcessedMap(String kafkaTopicProcessedMap) { - this.kafkaTopicProcessedMap = kafkaTopicProcessedMap; - } - - @Value("${kafkaTopicDeduplicatedProcessedMap}") - public void setKafkaTopicDeduplicatedProcessedMap(String kafkaTopicDeduplicatedProcessedMap) { - this.kafkaTopicDeduplicatedProcessedMap = kafkaTopicDeduplicatedProcessedMap; - } - - @Value("${enableProcessedMapDeduplication}") - public void setEnableProcessedMapDeduplication(boolean enableProcessedMapDeduplication) { - this.enableProcessedMapDeduplication = enableProcessedMapDeduplication; - } - - @Value("${kafkaTopicProcessedMapWKT}") - public void setKafkaTopicProcessedMapWKT(String kafkaTopicProcessedMapWKT) { - this.kafkaTopicProcessedMapWKT = kafkaTopicProcessedMapWKT; - } - - @Value("${kafkaTopicDeduplicatedProcessedMapWKT}") - public void setKafkaTopicDeduplicatedProcessedMapWKT(String kafkaTopicDeduplicatedProcessedMapWKT) { - this.kafkaTopicDeduplicatedProcessedMapWKT = kafkaTopicDeduplicatedProcessedMapWKT; - } - - @Value("${enableProcessedMapWktDeduplication}") - public void setEnableProcessedMapWktDeduplication(boolean enableProcessedMapWktDeduplication) { - this.enableProcessedMapWktDeduplication = enableProcessedMapWktDeduplication; - } - - @Value("${kafkaTopicOdeMapJson}") - public void setKafkaTopicOdeMapJson(String kafkaTopicOdeMapJson) { - this.kafkaTopicOdeMapJson = kafkaTopicOdeMapJson; - } - - @Value("${kafkaTopicDeduplicatedOdeMapJson}") - public void setKafkaTopicDeduplicatedOdeMapJson(String kafkaTopicDeduplicatedOdeMapJson) { - this.kafkaTopicDeduplicatedOdeMapJson = kafkaTopicDeduplicatedOdeMapJson; - } - - @Value("${enableOdeMapDeduplication}") - public void setEnableOdeMapDeduplication(boolean enableOdeMapDeduplication) { - this.enableOdeMapDeduplication = enableOdeMapDeduplication; - } - - @Value("${kafkaTopicOdeTimJson}") - public void setKafkaTopicOdeTimJson(String kafkaTopicOdeTimJson) { - this.kafkaTopicOdeTimJson = kafkaTopicOdeTimJson; - } - - @Value("${kafkaTopicDeduplicatedOdeTimJson}") - public void setKafkaTopicDeduplicatedOdeTimJson(String kafkaTopicDeduplicatedOdeTimJson) { - this.kafkaTopicDeduplicatedOdeTimJson = kafkaTopicDeduplicatedOdeTimJson; - } - - @Value("${enableOdeTimDeduplication}") - public void setEnableOdeTimDeduplication(boolean enableOdeTimDeduplication) { - this.enableOdeTimDeduplication = enableOdeTimDeduplication; - } - - @Value("${kafkaTopicOdeRawEncodedTimJson}") - public void setKafkaTopicOdeRawEncodedTimJson(String kafkaTopicOdeRawEncodedTimJson) { - this.kafkaTopicOdeRawEncodedTimJson = kafkaTopicOdeRawEncodedTimJson; - } - - @Value("${kafkaTopicDeduplicatedOdeRawEncodedTimJson}") - public void setKafkaTopicDeduplicatedOdeRawEncodedTimJson(String kafkaTopicDeduplicatedOdeRawEncodedTimJson) { - this.kafkaTopicDeduplicatedOdeRawEncodedTimJson = kafkaTopicDeduplicatedOdeRawEncodedTimJson; - } - - @Value("${enableOdeRawEncodedTimDeduplication}") - public void setEnableOdeRawEncodedTimDeduplication(boolean enableOdeRawEncodedTimDeduplication) { - this.enableOdeRawEncodedTimDeduplication = enableOdeRawEncodedTimDeduplication; - } - - @Value("${kafkaTopicOdeBsmJson}") - public void setkafkaTopicOdeBsmJson(String kafkaTopicOdeBsmJson) { - this.kafkaTopicOdeBsmJson = kafkaTopicOdeBsmJson; - } - - @Value("${kafkaTopicDeduplicatedOdeBsmJson}") - public void setkafkaTopicDeduplicatedOdeBsmJson(String kafkaTopicDeduplicatedOdeBsmJson) { - this.kafkaTopicDeduplicatedOdeBsmJson = kafkaTopicDeduplicatedOdeBsmJson; - } - - @Value("${enableOdeBsmDeduplication}") - public void setenableOdeBsmDeduplication(boolean enableOdeBsmDeduplication) { - this.enableOdeBsmDeduplication = enableOdeBsmDeduplication; - } - - @Value("${odeBsmMaximumTimeDelta}") - public void setMaximumTimeDelta(long maximumTimeDelta) { - this.odeBsmMaximumTimeDelta = maximumTimeDelta; - } - - @Value("${odeBsmMaximumPositionDelta}") - public void setMaximumPositionDelta(double maximumPositionDelta) { - this.odeBsmMaximumPositionDelta = maximumPositionDelta; - } - - @Value("${odeBsmAlwaysIncludeAtSpeed}") - public void setAlwaysIncludeAtSpeed(double alwaysIncludeAtSpeed) { - this.odeBsmAlwaysIncludeAtSpeed = alwaysIncludeAtSpeed; - } - - @Value("${spring.kafka.bootstrap-servers}") - public void setKafkaBrokers(String kafkaBrokers) { - this.kafkaBrokers = kafkaBrokers; - } - - @Value("${kafkaTopicProcessedSpat}") - public void setKafkaTopicProcessedSpat(String kafkaTopicProcessedSpat) { - this.kafkaTopicProcessedSpat = kafkaTopicProcessedSpat; - } - - @Value("${kafkaTopicDeduplicatedProcessedSpat}") - public void setKafkaTopicDeduplicatedProcessedSpat(String kafkaTopicDeduplicatedProcessedSpat) { - this.kafkaTopicDeduplicatedProcessedSpat = kafkaTopicDeduplicatedProcessedSpat; - } - - @Value("${enableProcessedSpatDeduplication}") - public void setEnableProcessedSpatDeduplication(boolean enableProcessedSpatDeduplication) { - this.enableProcessedSpatDeduplication = enableProcessedSpatDeduplication; - } - - @Override - public void setEnvironment(Environment environment) { - env = environment; - } - - @Value("${kafka.linger_ms}") - public void setKafkaLingerMs(int lingerMs) { - this.lingerMs = lingerMs; - } - - public int getKafkaLingerMs() { - return lingerMs; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/KafkaConfiguration.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/KafkaConfiguration.java deleted file mode 100644 index a5cac5f..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/KafkaConfiguration.java +++ /dev/null @@ -1,197 +0,0 @@ -package us.dot.its.jpo.deduplicator; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import org.apache.kafka.clients.admin.NewTopic; -import org.apache.kafka.common.serialization.StringSerializer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.kafka.config.TopicBuilder; -import org.springframework.kafka.core.DefaultKafkaProducerFactory; -import org.springframework.kafka.core.KafkaAdmin; -import org.springframework.kafka.core.KafkaAdmin.NewTopics; -import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.core.ProducerFactory; -import org.springframework.stereotype.Component; -import org.apache.kafka.clients.producer.ProducerConfig; - -@Component -@ConfigurationProperties(prefix = "kafka.topics") -public class KafkaConfiguration { - - @Autowired - private DeduplicatorProperties properties; - - @Bean(name = "createKafkaTopics") - public KafkaAdmin.NewTopics createKafkaTopics() { - logger.info("createTopic"); - List newTopics = new ArrayList<>(); - - if(!properties.getConfluentCloudStatus()){ - try { - for(var propEntry : admin.getConfigurationProperties().entrySet()) { - logger.info("KafkaAdmin property {} = {}", propEntry.getKey(), propEntry.getValue()); - } - - if (!autoCreateTopics) { - logger.info("Auto create topics is disabled"); - return null; - } - - logger.info("Creating topics: {}", createTopics); - - - - List topicNames = new ArrayList<>(); - for (var topic : createTopics) { - - // Get the name and config settings for the topic - String topicName = (String)topic.getOrDefault("name", null); - if (topicName == null) { - logger.error("CreateTopic {} has no topic name", topic); - break; - } - topicNames.add(topicName); - - Map topicConfigs = new HashMap<>(); - String cleanupPolicy = (String)topic.getOrDefault("cleanupPolicy", null); - if (cleanupPolicy != null) { - topicConfigs.put("cleanup.policy", cleanupPolicy); - } - Integer retentionMs = (Integer)topic.getOrDefault("retentionMs", null); - if (retentionMs != null) { - topicConfigs.put("retention.ms", retentionMs.toString()); - } - - NewTopic newTopic = TopicBuilder - .name(topicName) - .partitions(numPartitions) - .replicas(numReplicas) - .configs(topicConfigs) - .build(); - newTopics.add(newTopic); - logger.info("New Topic: {}", newTopic); - } - - // Explicitly create the topics here to prevent error on first run - admin.initialize(); - admin.createOrModifyTopics(newTopics.toArray(new NewTopic[0])); - - // Check that topics were created - var topicDescMap = admin.describeTopics(topicNames.toArray(new String[0])); - for (var entry : topicDescMap.entrySet()) { - String topicName = entry.getKey(); - var desc = entry.getValue(); - logger.info("Created topic {}: {}", topicName, desc); - } - - - } catch (Exception e) { - logger.error("Exception in createKafkaTopics", e); - throw e; - } - } - - // List out existing topics - // Admin adminClient = Admin.create(properties.createStreamProperties("DeduplicatorAdminClient")); - // ListTopicsOptions listTopicsOptions = new ListTopicsOptions().listInternal(true); - // ListTopicsResult topicsResult = adminClient.listTopics(listTopicsOptions); - // KafkaFuture> topicsFuture = topicsResult.names(); - // try { - // List topicNames = new ArrayList<>(); - // for(String topicName: topicsFuture.get()){ - // logger.info("Found Topic: " + topicName); - // topicNames.add(topicName); - // } - - // } catch (InterruptedException e) { - // logger.error("Interruption Exception in createKafkaTopics. Unable to List existing Topics", e); - // } catch (ExecutionException e) { - // logger.error("Execution Exception in createKafkaTopics. Unable to List existing Topics", e); - // } - - - return new NewTopics(newTopics.toArray(NewTopic[]::new)); - } - - @Bean - public ProducerFactory producerFactory() { - Properties configProps = properties.createStreamProperties("Deduplicator-producer-factory"); - - Map map = new HashMap<>(); - - for (Map.Entry entry : configProps.entrySet()) { - String key = (String) entry.getKey(); - Object value = entry.getValue(); - map.put(key, value); - } - - map.put( - ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, - StringSerializer.class); - map.put( - ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, - StringSerializer.class); - - return new DefaultKafkaProducerFactory(map); - } - - @Bean - public KafkaTemplate kafkaTemplate() { - return new KafkaTemplate<>(producerFactory()); - } - - private static final Logger logger = LoggerFactory.getLogger(KafkaConfiguration.class); - - private boolean autoCreateTopics; - private int numPartitions; - private int numReplicas; - private List> createTopics; - - public boolean getAutoCreateTopics() { - return autoCreateTopics; - } - - public void setAutoCreateTopics(boolean autoCreateTopics) { - this.autoCreateTopics = autoCreateTopics; - } - - public int getNumPartitions() { - return numPartitions; - } - - public int getNumReplicas() { - return numReplicas; - } - - public List> getCreateTopics() { - return createTopics; - } - - public void setNumPartitions(int numPartitions) { - this.numPartitions = numPartitions; - logger.info("kafka.topics.numPartitions = {}", numPartitions); - } - - public void setNumReplicas(int numReplicas) { - this.numReplicas = numReplicas; - } - - public void setCreateTopics(List> createTopics) { - this.createTopics = createTopics; - } - - - - @Autowired - private KafkaAdmin admin; - - - -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/StreamsExceptionHandler.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/StreamsExceptionHandler.java deleted file mode 100644 index 71132f3..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/StreamsExceptionHandler.java +++ /dev/null @@ -1,56 +0,0 @@ -package us.dot.its.jpo.deduplicator; - -import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.kafka.core.KafkaTemplate; - - - -/** - * Handler for unhandled exceptions thrown from Streams topologies that - * logs the exception to a topic, and allows choosing the shutdown behavior. - * - * See {@link https://cwiki.apache.org/confluence/display/KAFKA/KIP-671%3A+Introduce+Kafka+Streams+Specific+Uncaught+Exception+Handler} - * for a description of the options. - */ -public class StreamsExceptionHandler implements StreamsUncaughtExceptionHandler { - - final static Logger logger = LoggerFactory.getLogger(StreamsExceptionHandler.class); - - final KafkaTemplate kafkaTemplate; - final String topology; - final String notificationTopic; - - @Autowired - public StreamsExceptionHandler(KafkaTemplate kafkaTemplate, String topology, String notificationTopic) { - this.kafkaTemplate = kafkaTemplate; - this.topology = topology; - this.notificationTopic = notificationTopic; - } - - @Override - public StreamThreadExceptionResponse handle(Throwable exception) { - try { - logger.error(String.format("Uncaught exception in stream topology %s", topology), exception); - } catch (Exception ex) { - logger.error("Exception sending kafka streams error event", ex); - } - - - // SHUTDOWN_CLIENT option shuts down quickly. - return StreamThreadExceptionResponse.SHUTDOWN_CLIENT; - - // SHUTDOWN_APPLICATION shuts down more slowly, but cleans up more thoroughly - //return StreamThreadExceptionResponse.SHUTDOWN_APPLICATION; - - // "Replace Thread" mode can be used to keep the streams client alive, - // however if the cause of the error was not transient, but due to a code error processing - // a record, it can result in the record being repeatedly processed throwing the - // same error - // - //return StreamThreadExceptionResponse.REPLACE_THREAD; - } - -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/DeduplicatorServiceController.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/DeduplicatorServiceController.java deleted file mode 100644 index bd38ab9..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/DeduplicatorServiceController.java +++ /dev/null @@ -1,114 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator; - -import java.util.concurrent.ConcurrentHashMap; - -import org.apache.kafka.streams.KafkaStreams; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.DependsOn; -import org.springframework.context.annotation.Profile; -import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.stereotype.Controller; - -import lombok.Getter; -import us.dot.its.jpo.conflictmonitor.monitor.MonitorServiceController; -import us.dot.its.jpo.conflictmonitor.monitor.algorithms.StreamsTopology; -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.BsmDeduplicatorTopology; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.MapDeduplicatorTopology; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.TimDeduplicatorTopology; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.OdeRawEncodedTimDeduplicatorTopology; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.ProcessedMapDeduplicatorTopology; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.ProcessedMapWktDeduplicatorTopology; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.ProcessedSpatDeduplicatorTopology; - -@Controller -@DependsOn("createKafkaTopics") -@Profile("!test && !testConfig") -public class DeduplicatorServiceController { - - private static final Logger logger = LoggerFactory.getLogger(MonitorServiceController.class); - - // Temporary for KafkaStreams that don't implement the Algorithm interface - @Getter - final ConcurrentHashMap streamsMap = new ConcurrentHashMap(); - - @Getter - final ConcurrentHashMap algoMap = new ConcurrentHashMap(); - - - - @Autowired - public DeduplicatorServiceController(final DeduplicatorProperties props, - final KafkaTemplate kafkaTemplate) { - - - try { - - if(props.isEnableProcessedMapDeduplication()){ - logger.info("Starting Processed Map Deduplicator"); - ProcessedMapDeduplicatorTopology processedMapDeduplicatorTopology = new ProcessedMapDeduplicatorTopology( - props, - props.createStreamProperties("ProcessedMapDeduplicator") - ); - processedMapDeduplicatorTopology.start(); - } - - if(props.isEnableProcessedMapWktDeduplication()){ - logger.info("Starting Processed Map WKT Deduplicator"); - ProcessedMapWktDeduplicatorTopology processedMapWktDeduplicatorTopology = new ProcessedMapWktDeduplicatorTopology( - props, - props.createStreamProperties("ProcessedMapWKTdeduplicator") - ); - processedMapWktDeduplicatorTopology.start(); - } - - if(props.isEnableProcessedMapDeduplication()){ - logger.info("Starting Map Deduplicator"); - MapDeduplicatorTopology mapDeduplicatorTopology = new MapDeduplicatorTopology( - props, - props.createStreamProperties("MapDeduplicator") - ); - mapDeduplicatorTopology.start(); - } - - if(props.isEnableOdeTimDeduplication()){ - logger.info("Starting Tim Deduplicator"); - TimDeduplicatorTopology timDeduplicatorTopology = new TimDeduplicatorTopology( - props, - props.createStreamProperties("TimDeduplicator") - ); - timDeduplicatorTopology.start(); - } - - if(props.isEnableOdeRawEncodedTimDeduplication()){ - logger.info("Starting Raw Encoded TIM Deduplicator"); - OdeRawEncodedTimDeduplicatorTopology odeRawEncodedTimDeduplicatorTopology = new OdeRawEncodedTimDeduplicatorTopology( - props, - props.createStreamProperties("OdeRawEncodedTimDeduplicator") - ); - odeRawEncodedTimDeduplicatorTopology.start(); - } - - if(props.isEnableProcessedSpatDeduplication()){ - logger.info("Starting Processed Spat Deduplicator"); - ProcessedSpatDeduplicatorTopology processedSpatDeduplicatorTopology = new ProcessedSpatDeduplicatorTopology( - props, - props.createStreamProperties("ProcessedSpatDeduplicator") - ); - processedSpatDeduplicatorTopology.start(); - } - - if(props.isEnableOdeBsmDeduplication()){ - logger.info("Starting BSM Deduplicator"); - BsmDeduplicatorTopology bsmDeduplicatorTopology = new BsmDeduplicatorTopology(props); - bsmDeduplicatorTopology.start(); - } - - - } catch (Exception e) { - logger.error("Encountered issue with creating topologies", e); - } - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/JsonPair.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/JsonPair.java deleted file mode 100644 index d0f4377..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/JsonPair.java +++ /dev/null @@ -1,21 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.models; - -import com.fasterxml.jackson.databind.JsonNode; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@NoArgsConstructor -@Setter -@Getter -public class JsonPair { - - public JsonNode message; - public boolean shouldSend; - - public JsonPair(JsonNode message, boolean shouldSend){ - this.message = message; - this.shouldSend = shouldSend; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/OdeBsmPair.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/OdeBsmPair.java deleted file mode 100644 index 208622b..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/OdeBsmPair.java +++ /dev/null @@ -1,20 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.models; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import us.dot.its.jpo.ode.model.OdeBsmData; - -@NoArgsConstructor -@Setter -@Getter -public class OdeBsmPair { - - public OdeBsmData message; - public boolean shouldSend; - - public OdeBsmPair(OdeBsmData message, boolean shouldSend){ - this.message = message; - this.shouldSend = shouldSend; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/OdeMapPair.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/OdeMapPair.java deleted file mode 100644 index 24c265a..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/OdeMapPair.java +++ /dev/null @@ -1,20 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.models; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import us.dot.its.jpo.ode.model.OdeMapData; - -@NoArgsConstructor -@Setter -@Getter -public class OdeMapPair { - - public OdeMapData message; - public boolean shouldSend; - - public OdeMapPair(OdeMapData message, boolean shouldSend){ - this.message = message; - this.shouldSend = shouldSend; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/Pair.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/Pair.java deleted file mode 100644 index fd0ee44..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/Pair.java +++ /dev/null @@ -1,19 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.models; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@NoArgsConstructor -@Setter -@Getter -public class Pair { - - public T message; - public boolean shouldSend; - - public Pair(T message, boolean shouldSend){ - this.message = message; - this.shouldSend = shouldSend; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/ProcessedMapPair.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/ProcessedMapPair.java deleted file mode 100644 index b1400c5..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/ProcessedMapPair.java +++ /dev/null @@ -1,21 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.models; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.LineString; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; - -@NoArgsConstructor -@Setter -@Getter -public class ProcessedMapPair { - - public ProcessedMap message; - public boolean shouldSend; - - public ProcessedMapPair(ProcessedMap message, boolean shouldSend){ - this.message = message; - this.shouldSend = shouldSend; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/ProcessedMapWktPair.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/ProcessedMapWktPair.java deleted file mode 100644 index d6acaca..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/models/ProcessedMapWktPair.java +++ /dev/null @@ -1,20 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.models; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; - -@NoArgsConstructor -@Setter -@Getter -public class ProcessedMapWktPair { - - public ProcessedMap message; - public boolean shouldSend; - - public ProcessedMapWktPair(ProcessedMap message, boolean shouldSend){ - this.message = message; - this.shouldSend = shouldSend; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/DeduplicationProcessor.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/DeduplicationProcessor.java deleted file mode 100644 index 55b669c..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/DeduplicationProcessor.java +++ /dev/null @@ -1,69 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors; - -import java.time.Duration; -import java.time.Instant; - -import org.apache.kafka.streams.processor.PunctuationType; -import org.apache.kafka.streams.processor.api.Processor; -import org.apache.kafka.streams.processor.api.ProcessorContext; -import org.apache.kafka.streams.processor.api.Record; -import org.apache.kafka.streams.state.KeyValueStore; - -import org.apache.kafka.streams.state.KeyValueIterator; -import org.apache.kafka.streams.KeyValue; - -public abstract class DeduplicationProcessor implements Processor{ - - private ProcessorContext context; - private KeyValueStore store; - public String storeName; - - @Override - public void init(ProcessorContext context) { - this.context = context; - store = context.getStateStore(storeName); - this.context.schedule(Duration.ofHours(1), PunctuationType.WALL_CLOCK_TIME, this::cleanupOldKeys); - } - - @Override - public void process(Record record) { - - // Don't do anything if key is bad - if(record.key().equals("")){ - return; - } - - T lastRecord = store.get(record.key()); - if(lastRecord == null){ - store.put(record.key(), record.value()); - context.forward(record); - return; - } - - if(!isDuplicate(lastRecord, record.value())){ - store.put(record.key(), record.value()); - context.forward(record); - return; - } - } - - private void cleanupOldKeys(final long timestamp) { - try (KeyValueIterator iterator = store.all()) { - while (iterator.hasNext()) { - - KeyValue record = iterator.next(); - // Delete any record more than 2 hours old. - if(Instant.ofEpochMilli(timestamp).minusSeconds(2 * 60 * 60).isAfter(getMessageTime(record.value))){ - store.delete(record.key); - } - } - } - } - - // returns an instant representing the time of the message - public abstract Instant getMessageTime(T message); - - // returns if two messages are duplicates of one another - public abstract boolean isDuplicate(T lastMessage, T newMessage); - -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeBsmJsonProcessor.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeBsmJsonProcessor.java deleted file mode 100644 index 2197b23..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeBsmJsonProcessor.java +++ /dev/null @@ -1,80 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors; - - -import java.time.Duration; -import java.time.Instant; -import java.time.format.DateTimeFormatter; - -import org.geotools.referencing.GeodeticCalculator; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.ode.model.OdeBsmData; -import us.dot.its.jpo.ode.model.OdeBsmMetadata; -import us.dot.its.jpo.ode.plugin.j2735.J2735Bsm; -import us.dot.its.jpo.ode.plugin.j2735.J2735BsmCoreData; - -public class OdeBsmJsonProcessor extends DeduplicationProcessor{ - - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - DeduplicatorProperties props; - GeodeticCalculator calculator; - - public OdeBsmJsonProcessor(String storeName, DeduplicatorProperties props){ - this.storeName = storeName; - this.props = props; - calculator = new GeodeticCalculator(); - } - - - @Override - public Instant getMessageTime(OdeBsmData message) { - try { - String time = ((OdeBsmMetadata)message.getMetadata()).getOdeReceivedAt(); - return Instant.from(formatter.parse(time)); - } catch (Exception e) { - System.out.println("Failed to Parse Time"); - return Instant.ofEpochMilli(0); - } - } - - @Override - public boolean isDuplicate(OdeBsmData lastMessage, OdeBsmData newMessage) { - Instant newValueTime = getMessageTime(newMessage); - Instant oldValueTime = getMessageTime(lastMessage); - - // If the messages are more than a certain time apart, forward the new message on - if(newValueTime.minus(Duration.ofMillis(props.getOdeBsmMaximumTimeDelta())).isAfter(oldValueTime)){ - return false; - } - - J2735BsmCoreData oldCore = ((J2735Bsm)lastMessage.getPayload().getData()).getCoreData(); - J2735BsmCoreData newCore = ((J2735Bsm)newMessage.getPayload().getData()).getCoreData(); - - - // If the Vehicle is moving, forward the message on - if(newCore.getSpeed().doubleValue() > props.getOdeBsmAlwaysIncludeAtSpeed()){ - return false; - } - - - double distance = calculateGeodeticDistance( - newCore.getPosition().getLatitude().doubleValue(), - newCore.getPosition().getLongitude().doubleValue(), - oldCore.getPosition().getLatitude().doubleValue(), - oldCore.getPosition().getLongitude().doubleValue() - ); - - // If the position delta between the messages is suitable large, forward the message on - if(distance > props.getOdeBsmMaximumPositionDelta()){ - return false; - } - - return true; - } - - public double calculateGeodeticDistance(double lat1, double lon1, double lat2, double lon2) { - calculator.setStartingGeographicPoint(lon1, lat1); - calculator.setDestinationGeographicPoint(lon2, lat2); - return calculator.getOrthodromicDistance(); - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeMapJsonProcessor.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeMapJsonProcessor.java deleted file mode 100644 index adaf6db..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeMapJsonProcessor.java +++ /dev/null @@ -1,70 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors; - -import java.time.Duration; -import java.time.Instant; -import java.time.format.DateTimeFormatter; -import java.util.Objects; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.ode.model.OdeMapData; -import us.dot.its.jpo.ode.model.OdeMapMetadata; -import us.dot.its.jpo.ode.model.OdeMapPayload; - -public class OdeMapJsonProcessor extends DeduplicationProcessor{ - - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - - DeduplicatorProperties props; - - public OdeMapJsonProcessor(DeduplicatorProperties props){ - this.props = props; - this.storeName = props.getKafkaStateStoreOdeMapJsonName(); - } - - - @Override - public Instant getMessageTime(OdeMapData message) { - try { - String time = ((OdeMapMetadata)message.getMetadata()).getOdeReceivedAt(); - return Instant.from(formatter.parse(time)); - } catch (Exception e) { - return Instant.ofEpochMilli(0); - } - } - - @Override - public boolean isDuplicate(OdeMapData lastMessage, OdeMapData newMessage) { - - Instant newValueTime = getMessageTime(newMessage); - Instant oldValueTime = getMessageTime(lastMessage); - - if(newValueTime.minus(Duration.ofHours(1)).isAfter(oldValueTime)){ - return false; - - }else{ - OdeMapPayload oldPayload = (OdeMapPayload)lastMessage.getPayload(); - OdeMapPayload newPayload = (OdeMapPayload)newMessage.getPayload(); - - Integer oldTimestamp = oldPayload.getMap().getTimeStamp(); - Integer newTimestamp = newPayload.getMap().getTimeStamp(); - - - newPayload.getMap().setTimeStamp(oldTimestamp); - - int oldHash = hashMapMessage(lastMessage); - int newhash = hashMapMessage(newMessage); - - if(oldHash != newhash){ - newPayload.getMap().setTimeStamp(newTimestamp); - return false; - } - } - return true; - } - - public int hashMapMessage(OdeMapData map){ - OdeMapPayload payload = (OdeMapPayload)map.getPayload(); - return Objects.hash(payload.toJson()); - - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeRawEncodedTimJsonProcessor.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeRawEncodedTimJsonProcessor.java deleted file mode 100644 index cca49a7..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeRawEncodedTimJsonProcessor.java +++ /dev/null @@ -1,43 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors; - -import java.time.Duration; -import java.time.Instant; -import java.time.format.DateTimeFormatter; - -import com.fasterxml.jackson.databind.JsonNode; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; - -public class OdeRawEncodedTimJsonProcessor extends DeduplicationProcessor{ - - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - - DeduplicatorProperties props; - - public OdeRawEncodedTimJsonProcessor(DeduplicatorProperties props){ - this.props = props; - this.storeName = props.getKafkaStateStoreOdeRawEncodedTimJsonName(); - } - - - @Override - public Instant getMessageTime(JsonNode message) { - try { - String time = message.get("metadata").get("odeReceivedAt").asText(); - return Instant.from(formatter.parse(time)); - } catch (Exception e) { - return Instant.ofEpochMilli(0); - } - } - - @Override - public boolean isDuplicate(JsonNode lastMessage, JsonNode newMessage) { - Instant oldValueTime = getMessageTime(lastMessage); - Instant newValueTime = getMessageTime(newMessage); - - if(newValueTime.minus(Duration.ofHours(1)).isAfter(oldValueTime)){ - return false; - } - return true; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeTimJsonProcessor.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeTimJsonProcessor.java deleted file mode 100644 index 9a117b3..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/OdeTimJsonProcessor.java +++ /dev/null @@ -1,43 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors; - -import java.time.Duration; -import java.time.Instant; -import java.time.format.DateTimeFormatter; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.ode.model.OdeTimData; -import us.dot.its.jpo.ode.model.OdeTimMetadata; - -public class OdeTimJsonProcessor extends DeduplicationProcessor{ - - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - - DeduplicatorProperties props; - public OdeTimJsonProcessor(DeduplicatorProperties props){ - this.props = props; - this.storeName = props.getKafkaStateStoreOdeTimJsonName(); - } - - - @Override - public Instant getMessageTime(OdeTimData message) { - try { - // String time = message.get("metadata").get("odeReceivedAt").asText(); - String time = ((OdeTimMetadata)message.getMetadata()).getOdeReceivedAt(); - return Instant.from(formatter.parse(time)); - } catch (Exception e) { - return Instant.ofEpochMilli(0); - } - } - - @Override - public boolean isDuplicate(OdeTimData lastMessage, OdeTimData newMessage) { - Instant oldValueTime = getMessageTime(lastMessage); - Instant newValueTime = getMessageTime(newMessage); - - if(newValueTime.minus(Duration.ofHours(1)).isAfter(oldValueTime)){ - return false; - } - return true; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedMapProcessor.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedMapProcessor.java deleted file mode 100644 index 35e2c2f..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedMapProcessor.java +++ /dev/null @@ -1,57 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors; - -import java.time.Duration; -import java.time.Instant; -import java.time.ZonedDateTime; -import java.util.Objects; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.LineString; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; - -public class ProcessedMapProcessor extends DeduplicationProcessor>{ - - DeduplicatorProperties props; - - public ProcessedMapProcessor(DeduplicatorProperties props){ - this.props = props; - this.storeName = props.getKafkaStateStoreProcessedMapName(); - } - - - @Override - public Instant getMessageTime(ProcessedMap message) { - try { - return message.getProperties().getOdeReceivedAt().toInstant(); - } catch (Exception e) { - return Instant.ofEpochMilli(0); - } - } - - @Override - public boolean isDuplicate(ProcessedMap lastMessage, ProcessedMap newMessage) { - - Instant newValueTime = getMessageTime(newMessage); - Instant oldValueTime = getMessageTime(lastMessage); - - if(newValueTime.minus(Duration.ofHours(1)).isAfter(oldValueTime)){ - return false; - }else{ - ZonedDateTime newValueTimestamp = newMessage.getProperties().getTimeStamp(); - ZonedDateTime newValueOdeReceivedAt = newMessage.getProperties().getOdeReceivedAt(); - - newMessage.getProperties().setTimeStamp(lastMessage.getProperties().getTimeStamp()); - newMessage.getProperties().setOdeReceivedAt(lastMessage.getProperties().getOdeReceivedAt()); - - int oldHash = Objects.hash(lastMessage.toString()); - int newHash = Objects.hash(newMessage.toString()); - - if(oldHash != newHash){ - newMessage.getProperties().setTimeStamp(newValueTimestamp); - newMessage.getProperties().setOdeReceivedAt(newValueOdeReceivedAt); - return false; - } - } - return true; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedMapWktProcessor.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedMapWktProcessor.java deleted file mode 100644 index 7556060..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedMapWktProcessor.java +++ /dev/null @@ -1,55 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors; - -import java.time.Duration; -import java.time.Instant; -import java.time.ZonedDateTime; -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; - -public class ProcessedMapWktProcessor extends DeduplicationProcessor>{ - - DeduplicatorProperties props; - - public ProcessedMapWktProcessor(DeduplicatorProperties props){ - this.props = props; - this.storeName = props.getKafkaStateStoreProcessedMapWKTName(); - } - - - @Override - public Instant getMessageTime(ProcessedMap message) { - try { - return message.getProperties().getOdeReceivedAt().toInstant(); - } catch (Exception e) { - return Instant.ofEpochMilli(0); - } - } - - @Override - public boolean isDuplicate(ProcessedMap lastMessage, ProcessedMap newMessage) { - - Instant newValueTime = newMessage.getProperties().getTimeStamp().toInstant(); - Instant oldValueTime = lastMessage.getProperties().getTimeStamp().toInstant(); - - if(newValueTime.minus(Duration.ofHours(1)).isAfter(oldValueTime)){ - return false; - }else{ - ZonedDateTime newValueTimestamp = newMessage.getProperties().getTimeStamp(); - ZonedDateTime newValueOdeReceivedAt = newMessage.getProperties().getOdeReceivedAt(); - - newMessage.getProperties().setTimeStamp(lastMessage.getProperties().getTimeStamp()); - newMessage.getProperties().setOdeReceivedAt(lastMessage.getProperties().getOdeReceivedAt()); - - int oldHash = lastMessage.getProperties().hashCode(); - int newhash = newMessage.getProperties().hashCode(); - - if(oldHash != newhash){ - newMessage.getProperties().setTimeStamp(newValueTimestamp); - newMessage.getProperties().setOdeReceivedAt(newValueOdeReceivedAt); - return false; - } - } - - return true; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedSpatProcessor.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedSpatProcessor.java deleted file mode 100644 index 2cc58af..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/ProcessedSpatProcessor.java +++ /dev/null @@ -1,64 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors; - - -import java.time.Duration; -import java.time.Instant; -import java.util.HashMap; -import java.util.List; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.geojsonconverter.pojos.spat.MovementEvent; -import us.dot.its.jpo.geojsonconverter.pojos.spat.MovementState; -import us.dot.its.jpo.geojsonconverter.pojos.spat.ProcessedSpat; - -public class ProcessedSpatProcessor extends DeduplicationProcessor{ - - DeduplicatorProperties props; - - public ProcessedSpatProcessor(DeduplicatorProperties props){ - this.props = props; - this.storeName = props.getKafkaStateStoreProcessedSpatName(); - } - - - @Override - public Instant getMessageTime(ProcessedSpat message) { - return message.getUtcTimeStamp().toInstant(); - } - - @Override - public boolean isDuplicate(ProcessedSpat lastMessage, ProcessedSpat newMessage) { - - Instant newValueTime = getMessageTime(newMessage); - Instant oldValueTime = getMessageTime(lastMessage); - - if(newValueTime.minus(Duration.ofMinutes(1)).isAfter(oldValueTime)){ - return false; - }else{ - HashMap> lastMessageStates = new HashMap<>(); - for(MovementState state: lastMessage.getStates()){ - lastMessageStates.put(state.getSignalGroup(), state.getStateTimeSpeed()); - } - - if(lastMessageStates.size() != newMessage.getStates().size()){ - return false; // message cannot be duplicate if the signal groups have a different number of signal groups - } - - for(MovementState state: newMessage.getStates()){ - List lastMessageState = lastMessageStates.get(state.getSignalGroup()); - - if(lastMessageState == null){ - return false; // messages cannot be duplicates if they have different signal groups - } - - - for(int i=0; i< state.getStateTimeSpeed().size(); i++){ - if(state.getStateTimeSpeed().get(i).getEventState() != lastMessageState.get(i).getEventState()){ - return false; // Some signal group light has changed. Therefore the SPaTs are different - } - } - } - } - return true; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeBsmJsonProcessorSupplier.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeBsmJsonProcessorSupplier.java deleted file mode 100644 index 6b08b9f..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeBsmJsonProcessorSupplier.java +++ /dev/null @@ -1,26 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers; - -import java.time.format.DateTimeFormatter; -import org.apache.kafka.streams.processor.api.Processor; -import org.apache.kafka.streams.processor.api.ProcessorSupplier; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.OdeBsmJsonProcessor; -import us.dot.its.jpo.ode.model.OdeBsmData; - -public class OdeBsmJsonProcessorSupplier implements ProcessorSupplier { - - String storeName; - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - DeduplicatorProperties props; - - public OdeBsmJsonProcessorSupplier(String storeName, DeduplicatorProperties props){ - this.storeName = storeName; - this.props = props; - } - - @Override - public Processor get() { - return new OdeBsmJsonProcessor(storeName, props); - } -} \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeMapJsonProcessorSupplier.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeMapJsonProcessorSupplier.java deleted file mode 100644 index 829af13..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeMapJsonProcessorSupplier.java +++ /dev/null @@ -1,22 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers; - -import org.apache.kafka.streams.processor.api.Processor; -import org.apache.kafka.streams.processor.api.ProcessorSupplier; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.OdeMapJsonProcessor; -import us.dot.its.jpo.ode.model.OdeMapData; - -public class OdeMapJsonProcessorSupplier implements ProcessorSupplier { - - DeduplicatorProperties props; - - public OdeMapJsonProcessorSupplier(DeduplicatorProperties props){ - this.props = props; - } - - @Override - public Processor get() { - return new OdeMapJsonProcessor(props); - } -} \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeRawEncodedTimProcessorSupplier.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeRawEncodedTimProcessorSupplier.java deleted file mode 100644 index ef0ebb7..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeRawEncodedTimProcessorSupplier.java +++ /dev/null @@ -1,22 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers; - -import org.apache.kafka.streams.processor.api.Processor; -import org.apache.kafka.streams.processor.api.ProcessorSupplier; -import com.fasterxml.jackson.databind.JsonNode; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.OdeRawEncodedTimJsonProcessor; - -public class OdeRawEncodedTimProcessorSupplier implements ProcessorSupplier { - - DeduplicatorProperties props; - - public OdeRawEncodedTimProcessorSupplier(DeduplicatorProperties props){ - this.props = props; - } - - @Override - public Processor get() { - return new OdeRawEncodedTimJsonProcessor(props); - } -} \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeTimJsonProcessorSupplier.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeTimJsonProcessorSupplier.java deleted file mode 100644 index 0c07e30..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/OdeTimJsonProcessorSupplier.java +++ /dev/null @@ -1,22 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers; - -import org.apache.kafka.streams.processor.api.Processor; -import org.apache.kafka.streams.processor.api.ProcessorSupplier; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.OdeTimJsonProcessor; -import us.dot.its.jpo.ode.model.OdeTimData; - -public class OdeTimJsonProcessorSupplier implements ProcessorSupplier { - - String storeName; - DeduplicatorProperties props; - public OdeTimJsonProcessorSupplier(DeduplicatorProperties props){ - this.props = props; - } - - @Override - public Processor get() { - return new OdeTimJsonProcessor(props); - } -} \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedMapProcessorSupplier.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedMapProcessorSupplier.java deleted file mode 100644 index 9e45cd0..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedMapProcessorSupplier.java +++ /dev/null @@ -1,23 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers; - -import org.apache.kafka.streams.processor.api.Processor; -import org.apache.kafka.streams.processor.api.ProcessorSupplier; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.ProcessedMapProcessor; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.LineString; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; - -public class ProcessedMapProcessorSupplier implements ProcessorSupplier, String, ProcessedMap> { - - DeduplicatorProperties props; - - public ProcessedMapProcessorSupplier(DeduplicatorProperties props){ - this.props = props; - } - - @Override - public Processor, String, ProcessedMap> get() { - return new ProcessedMapProcessor(props); - } -} \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedMapWktProcessorSupplier.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedMapWktProcessorSupplier.java deleted file mode 100644 index 3dbaa8c..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedMapWktProcessorSupplier.java +++ /dev/null @@ -1,22 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers; - -import org.apache.kafka.streams.processor.api.Processor; -import org.apache.kafka.streams.processor.api.ProcessorSupplier; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.ProcessedMapWktProcessor; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; - -public class ProcessedMapWktProcessorSupplier implements ProcessorSupplier, String, ProcessedMap> { - - DeduplicatorProperties props; - - public ProcessedMapWktProcessorSupplier(DeduplicatorProperties props){ - this.props = props; - } - - @Override - public Processor, String, ProcessedMap> get() { - return new ProcessedMapWktProcessor(props); - } -} \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedSpatProcessorSupplier.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedSpatProcessorSupplier.java deleted file mode 100644 index e6661ac..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/processors/suppliers/ProcessedSpatProcessorSupplier.java +++ /dev/null @@ -1,22 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers; - -import org.apache.kafka.streams.processor.api.Processor; -import org.apache.kafka.streams.processor.api.ProcessorSupplier; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.ProcessedSpatProcessor; -import us.dot.its.jpo.geojsonconverter.pojos.spat.ProcessedSpat; - -public class ProcessedSpatProcessorSupplier implements ProcessorSupplier { - - DeduplicatorProperties props; - - public ProcessedSpatProcessorSupplier(DeduplicatorProperties props){ - this.props = props; - } - - @Override - public Processor get() { - return new ProcessedSpatProcessor(props); - } -} \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/JsonSerdes.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/JsonSerdes.java deleted file mode 100644 index 29c9778..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/JsonSerdes.java +++ /dev/null @@ -1,24 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.serialization; - -import org.apache.kafka.common.serialization.Serde; -import org.apache.kafka.common.serialization.Serdes; - -import com.fasterxml.jackson.databind.JsonNode; - -import us.dot.its.jpo.geojsonconverter.serialization.deserializers.JsonDeserializer; -import us.dot.its.jpo.geojsonconverter.serialization.serializers.JsonSerializer; -import us.dot.its.jpo.ode.model.OdeTimData; - -public class JsonSerdes { - public static Serde OdeTim() { - return Serdes.serdeFrom( - new JsonSerializer(), - new JsonDeserializer<>(OdeTimData.class)); - } - - public static Serde JSON(){ - return Serdes.serdeFrom( - new JsonSerializer(), - new JsonDeserializer<>(JsonNode.class)); - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/PairSerdes.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/PairSerdes.java deleted file mode 100644 index e509fa0..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/serialization/PairSerdes.java +++ /dev/null @@ -1,52 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.serialization; - -import org.apache.kafka.common.serialization.Serde; -import org.apache.kafka.common.serialization.Serdes; - -import us.dot.its.jpo.deduplicator.deduplicator.models.ProcessedMapPair; -import us.dot.its.jpo.deduplicator.deduplicator.models.ProcessedMapWktPair; -import us.dot.its.jpo.deduplicator.deduplicator.models.OdeMapPair; -import us.dot.its.jpo.deduplicator.deduplicator.models.OdeBsmPair; -import us.dot.its.jpo.deduplicator.deduplicator.models.JsonPair; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.DeserializedRawMap; -import us.dot.its.jpo.geojsonconverter.serialization.deserializers.JsonDeserializer; -import us.dot.its.jpo.geojsonconverter.serialization.serializers.JsonSerializer; - - -public class PairSerdes { - public static Serde ProcessedMapPair() { - return Serdes.serdeFrom( - new JsonSerializer(), - new JsonDeserializer<>(ProcessedMapPair.class)); - } - - public static Serde ProcessedMapWktPair() { - return Serdes.serdeFrom( - new JsonSerializer(), - new JsonDeserializer<>(ProcessedMapWktPair.class)); - } - - public static Serde OdeMapPair() { - return Serdes.serdeFrom( - new JsonSerializer(), - new JsonDeserializer<>(OdeMapPair.class)); - } - - public static Serde OdeBsmPair() { - return Serdes.serdeFrom( - new JsonSerializer(), - new JsonDeserializer<>(OdeBsmPair.class)); - } - - public static Serde RawMap() { - return Serdes.serdeFrom( - new JsonSerializer(), - new JsonDeserializer<>(DeserializedRawMap.class)); - } - - public static Serde JsonPair() { - return Serdes.serdeFrom( - new JsonSerializer(), - new JsonDeserializer<>(JsonPair.class)); - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/BsmDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/BsmDeduplicatorTopology.java deleted file mode 100644 index 6b26d67..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/BsmDeduplicatorTopology.java +++ /dev/null @@ -1,125 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.topologies; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KafkaStreams; -import org.apache.kafka.streams.StreamsBuilder; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.KafkaStreams.StateListener; -import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler; - -import us.dot.its.jpo.conflictmonitor.monitor.serialization.JsonSerdes; -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.ode.model.OdeBsmData; -import us.dot.its.jpo.ode.model.OdeBsmMetadata; -import us.dot.its.jpo.ode.model.OdeMapData; -import us.dot.its.jpo.ode.model.OdeMapPayload; -import us.dot.its.jpo.ode.plugin.j2735.J2735Bsm; -import us.dot.its.jpo.ode.plugin.j2735.J2735BsmCoreData; -import org.apache.kafka.streams.kstream.*; -import org.apache.kafka.streams.state.Stores; -import org.geotools.referencing.GeodeticCalculator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.time.Instant; -import java.time.format.DateTimeFormatter; -import java.util.Objects; - -import us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers.OdeBsmJsonProcessorSupplier; -import us.dot.its.jpo.geojsonconverter.DateJsonMapper; - -public class BsmDeduplicatorTopology { - - private static final Logger logger = LoggerFactory.getLogger(BsmDeduplicatorTopology.class); - - Topology topology; - KafkaStreams streams; - DeduplicatorProperties props; - ObjectMapper objectMapper; - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - GeodeticCalculator calculator; - - - - public BsmDeduplicatorTopology(DeduplicatorProperties props){ - this.props = props; - this.objectMapper = DateJsonMapper.getInstance(); - calculator = new GeodeticCalculator(); - } - - - - public void start() { - if (streams != null && streams.state().isRunningOrRebalancing()) { - throw new IllegalStateException("Start called while streams is already running."); - } - Topology topology = buildTopology(); - streams = new KafkaStreams(topology, props.createStreamProperties("BsmDeduplicator")); - if (exceptionHandler != null) streams.setUncaughtExceptionHandler(exceptionHandler); - if (stateListener != null) streams.setStateListener(stateListener); - logger.info("Starting Bsm Deduplicator Topology"); - streams.start(); - } - - public Instant getInstantFromBsm(OdeBsmData bsm){ - String time = ((OdeBsmMetadata)bsm.getMetadata()).getOdeReceivedAt(); - - return Instant.from(formatter.parse(time)); - } - - public int hashMapMessage(OdeMapData map){ - OdeMapPayload payload = (OdeMapPayload)map.getPayload(); - return Objects.hash(payload.toJson()); - - } - - public Topology buildTopology() { - StreamsBuilder builder = new StreamsBuilder(); - - KStream inputStream = builder.stream(this.props.getKafkaTopicOdeBsmJson(), Consumed.with(Serdes.Void(), JsonSerdes.OdeBsm())); - - builder.addStateStore(Stores.keyValueStoreBuilder(Stores.persistentKeyValueStore(props.getKafkaStateStoreOdeBsmJsonName()), - Serdes.String(), JsonSerdes.OdeBsm())); - - KStream bsmRekeyedStream = inputStream.selectKey((key, value)->{ - J2735BsmCoreData core = ((J2735Bsm)value.getPayload().getData()).getCoreData(); - return core.getId(); - }).repartition(Repartitioned.with(Serdes.String(), JsonSerdes.OdeBsm())); - - KStream deduplicatedStream = bsmRekeyedStream.process(new OdeBsmJsonProcessorSupplier(props.getKafkaStateStoreOdeBsmJsonName(), props), props.getKafkaStateStoreOdeBsmJsonName()); - - - deduplicatedStream.to(this.props.getKafkaTopicDeduplicatedOdeBsmJson(), Produced.with(Serdes.String(), JsonSerdes.OdeBsm())); - - return builder.build(); - - } - - public void stop() { - logger.info("Stopping Bsm deduplicator Socket Broadcast Topology."); - if (streams != null) { - streams.close(); - streams.cleanUp(); - streams = null; - } - logger.info("Stopped Bsm deduplicator Socket Broadcast Topology."); - } - - StateListener stateListener; - public void registerStateListener(StateListener stateListener) { - this.stateListener = stateListener; - } - - StreamsUncaughtExceptionHandler exceptionHandler; - public void registerUncaughtExceptionHandler(StreamsUncaughtExceptionHandler exceptionHandler) { - this.exceptionHandler = exceptionHandler; - } - - public double calculateGeodeticDistance(double lat1, double lon1, double lat2, double lon2) { - calculator.setStartingGeographicPoint(lon1, lat1); - calculator.setDestinationGeographicPoint(lon2, lat2); - return calculator.getOrthodromicDistance(); - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/MapDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/MapDeduplicatorTopology.java deleted file mode 100644 index c8ac7f6..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/MapDeduplicatorTopology.java +++ /dev/null @@ -1,121 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.topologies; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KafkaStreams; -import org.apache.kafka.streams.StreamsBuilder; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.KafkaStreams.StateListener; -import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers.OdeMapJsonProcessorSupplier; -import us.dot.its.jpo.geojsonconverter.DateJsonMapper; -import us.dot.its.jpo.geojsonconverter.partitioner.RsuIntersectionKey; -import us.dot.its.jpo.geojsonconverter.serialization.JsonSerdes; -import us.dot.its.jpo.ode.model.OdeMapData; -import us.dot.its.jpo.ode.model.OdeMapMetadata; -import us.dot.its.jpo.ode.model.OdeMapPayload; -import us.dot.its.jpo.ode.plugin.j2735.J2735IntersectionReferenceID; - -import org.apache.kafka.streams.kstream.*; -import org.apache.kafka.streams.state.Stores; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.time.Instant; -import java.time.format.DateTimeFormatter; -import java.util.Objects; -import java.util.Properties; - -public class MapDeduplicatorTopology { - - private static final Logger logger = LoggerFactory.getLogger(MapDeduplicatorTopology.class); - - Topology topology; - KafkaStreams streams; - String inputTopic; - String outputTopic; - Properties streamsProperties; - ObjectMapper objectMapper; - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - DeduplicatorProperties props; - - - public MapDeduplicatorTopology(DeduplicatorProperties props, Properties streamsProperties){ - this.props = props; - this.streamsProperties = streamsProperties; - this.objectMapper = DateJsonMapper.getInstance(); - } - - - - public void start() { - if (streams != null && streams.state().isRunningOrRebalancing()) { - throw new IllegalStateException("Start called while streams is already running."); - } - Topology topology = buildTopology(); - streams = new KafkaStreams(topology, streamsProperties); - if (exceptionHandler != null) streams.setUncaughtExceptionHandler(exceptionHandler); - if (stateListener != null) streams.setStateListener(stateListener); - logger.info("Starting Map Deduplicator Topology"); - streams.start(); - } - - public Instant getInstantFromMap(OdeMapData map){ - String time = ((OdeMapMetadata)map.getMetadata()).getOdeReceivedAt(); - - return Instant.from(formatter.parse(time)); - } - - public int hashMapMessage(OdeMapData map){ - OdeMapPayload payload = (OdeMapPayload)map.getPayload(); - return Objects.hash(payload.toJson()); - - } - - public Topology buildTopology() { - StreamsBuilder builder = new StreamsBuilder(); - - KStream inputStream = builder.stream(props.getKafkaTopicOdeMapJson(), Consumed.with(Serdes.Void(), JsonSerdes.OdeMap())); - - builder.addStateStore(Stores.keyValueStoreBuilder(Stores.persistentKeyValueStore(props.getKafkaStateStoreOdeMapJsonName()), - Serdes.String(), JsonSerdes.OdeMap())); - - KStream mapRekeyedStream = inputStream.selectKey((key, value)->{ - J2735IntersectionReferenceID intersectionId = ((OdeMapPayload)value.getPayload()).getMap().getIntersections().getIntersections().get(0).getId(); - RsuIntersectionKey newKey = new RsuIntersectionKey(); - newKey.setRsuId(((OdeMapMetadata)value.getMetadata()).getOriginIp()); - newKey.setIntersectionReferenceID(intersectionId); - return newKey.toString(); - }).repartition(Repartitioned.with(Serdes.String(), JsonSerdes.OdeMap())); - - KStream deduplicatedStream = mapRekeyedStream.process(new OdeMapJsonProcessorSupplier(props), props.getKafkaStateStoreOdeMapJsonName()); - - deduplicatedStream.to(props.getKafkaTopicDeduplicatedOdeMapJson(), Produced.with(Serdes.String(), JsonSerdes.OdeMap())); - - return builder.build(); - - } - - public void stop() { - logger.info("Stopping Map Deduplicator Socket Broadcast Topology."); - if (streams != null) { - streams.close(); - streams.cleanUp(); - streams = null; - } - logger.info("Stopped Map Deduplicator Socket Broadcast Topology."); - } - - StateListener stateListener; - public void registerStateListener(StateListener stateListener) { - this.stateListener = stateListener; - } - - StreamsUncaughtExceptionHandler exceptionHandler; - public void registerUncaughtExceptionHandler(StreamsUncaughtExceptionHandler exceptionHandler) { - this.exceptionHandler = exceptionHandler; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/OdeRawEncodedTimDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/OdeRawEncodedTimDeduplicatorTopology.java deleted file mode 100644 index 975c85b..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/OdeRawEncodedTimDeduplicatorTopology.java +++ /dev/null @@ -1,130 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.topologies; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KafkaStreams; -import org.apache.kafka.streams.StreamsBuilder; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.KafkaStreams.StateListener; -import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.serialization.JsonSerdes; -import us.dot.its.jpo.geojsonconverter.DateJsonMapper; - -import org.apache.kafka.streams.kstream.*; -import org.apache.kafka.streams.state.Stores; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.time.Instant; -import java.time.format.DateTimeFormatter; -import java.util.Objects; -import java.util.Properties; - -import us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers.OdeRawEncodedTimProcessorSupplier; - -public class OdeRawEncodedTimDeduplicatorTopology { - - private static final Logger logger = LoggerFactory.getLogger(OdeRawEncodedTimDeduplicatorTopology.class); - - Topology topology; - KafkaStreams streams; - String inputTopic; - String outputTopic; - Properties streamsProperties; - ObjectMapper objectMapper; - DeduplicatorProperties props; - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - - public OdeRawEncodedTimDeduplicatorTopology(DeduplicatorProperties props, Properties streamsProperties){ - this.streamsProperties = streamsProperties; - this.objectMapper = DateJsonMapper.getInstance(); - this.props = props; - } - - - public void start() { - if (streams != null && streams.state().isRunningOrRebalancing()) { - throw new IllegalStateException("Start called while streams is already running."); - } - Topology topology = buildTopology(); - streams = new KafkaStreams(topology, streamsProperties); - if (exceptionHandler != null) streams.setUncaughtExceptionHandler(exceptionHandler); - if (stateListener != null) streams.setStateListener(stateListener); - logger.info("Starting Tim Deduplicator Topology"); - streams.start(); - } - - public JsonNode genJsonNode(){ - return objectMapper.createObjectNode(); - } - - public Instant getInstantFromJsonTim(JsonNode tim){ - try{ - String time = tim.get("metadata").get("odeReceivedAt").asText(); - return Instant.from(formatter.parse(time)); - }catch(Exception e){ - System.out.println("Failed to parse time"); - return Instant.ofEpochMilli(0); - } - } - - - public Topology buildTopology() { - StreamsBuilder builder = new StreamsBuilder(); - - KStream inputStream = builder.stream(props.getKafkaTopicOdeRawEncodedTimJson(), Consumed.with(Serdes.Void(), JsonSerdes.JSON())); - - builder.addStateStore(Stores.keyValueStoreBuilder(Stores.persistentKeyValueStore(props.getKafkaStateStoreOdeRawEncodedTimJsonName()), - Serdes.String(), JsonSerdes.JSON())); - - KStream timRekeyedStream = inputStream.selectKey((key, value)->{ - try{ - String messageBytes = value.get("payload") - .get("data") - .get("bytes").asText(); - - int hash = Objects.hash(messageBytes); - - String rsuIP = value.get("metadata").get("originIp").asText(); - - String newKey = rsuIP + "_" + hash; - return newKey; - }catch(Exception e){ - return ""; - } - }).repartition(Repartitioned.with(Serdes.String(), JsonSerdes.JSON())); - - - - KStream deduplicatedStream = timRekeyedStream.process(new OdeRawEncodedTimProcessorSupplier(props), props.getKafkaStateStoreOdeRawEncodedTimJsonName()); - - deduplicatedStream.to(props.getKafkaTopicDeduplicatedOdeRawEncodedTimJson(), Produced.with(Serdes.String(), JsonSerdes.JSON())); - - return builder.build(); - - } - - public void stop() { - logger.info("Stopping OdeRawEncodedTim Deduplicator Socket Broadcast Topology."); - if (streams != null) { - streams.close(); - streams.cleanUp(); - streams = null; - } - logger.info("Stopped OdeRawEncodedTim Deduplicator Socket Broadcast Topology."); - } - - StateListener stateListener; - public void registerStateListener(StateListener stateListener) { - this.stateListener = stateListener; - } - - StreamsUncaughtExceptionHandler exceptionHandler; - public void registerUncaughtExceptionHandler(StreamsUncaughtExceptionHandler exceptionHandler) { - this.exceptionHandler = exceptionHandler; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedMapDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedMapDeduplicatorTopology.java deleted file mode 100644 index 5f9da3d..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedMapDeduplicatorTopology.java +++ /dev/null @@ -1,92 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.topologies; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KafkaStreams; -import org.apache.kafka.streams.StreamsBuilder; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.KafkaStreams.StateListener; -import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers.ProcessedMapProcessorSupplier; -import us.dot.its.jpo.geojsonconverter.DateJsonMapper; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.LineString; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; -import us.dot.its.jpo.geojsonconverter.serialization.JsonSerdes; -import org.apache.kafka.streams.kstream.*; -import org.apache.kafka.streams.state.Stores; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; - - -import java.util.Properties; - -public class ProcessedMapDeduplicatorTopology { - - private static final Logger logger = LoggerFactory.getLogger(MapDeduplicatorTopology.class); - - Topology topology; - KafkaStreams streams; - Properties streamsProperties; - ObjectMapper objectMapper; - DeduplicatorProperties props; - - public ProcessedMapDeduplicatorTopology(DeduplicatorProperties props, Properties streamsProperties){ - this.props = props; - this.streamsProperties = streamsProperties; - this.objectMapper = DateJsonMapper.getInstance(); - } - - - public void start() { - if (streams != null && streams.state().isRunningOrRebalancing()) { - throw new IllegalStateException("Start called while streams is already running."); - } - Topology topology = buildTopology(); - streams = new KafkaStreams(topology, streamsProperties); - if (exceptionHandler != null) streams.setUncaughtExceptionHandler(exceptionHandler); - if (stateListener != null) streams.setStateListener(stateListener); - logger.info("Starting Processed Map Deduplicator Topology"); - streams.start(); - } - - public Topology buildTopology() { - StreamsBuilder builder = new StreamsBuilder(); - - KStream> inputStream = builder.stream(props.getKafkaTopicProcessedMap(), Consumed.with(Serdes.String(), JsonSerdes.ProcessedMapGeoJson())); - - builder.addStateStore(Stores.keyValueStoreBuilder(Stores.persistentKeyValueStore(props.getKafkaStateStoreProcessedMapName()), - Serdes.String(), JsonSerdes.ProcessedMapGeoJson())); - - KStream> deduplicatedStream = inputStream.process(new ProcessedMapProcessorSupplier(props), props.getKafkaStateStoreProcessedMapName()); - - deduplicatedStream.to(props.getKafkaTopicDeduplicatedProcessedMap(), Produced.with(Serdes.String(), JsonSerdes.ProcessedMapGeoJson())); - - return builder.build(); - - } - - public void stop() { - logger.info("Stopping Processed Map deduplicator Socket Broadcast Topology."); - if (streams != null) { - streams.close(); - streams.cleanUp(); - streams = null; - } - logger.info("Stopped Processed Map deduplicator Socket Broadcast Topology."); - } - - StateListener stateListener; - public void registerStateListener(StateListener stateListener) { - this.stateListener = stateListener; - } - - StreamsUncaughtExceptionHandler exceptionHandler; - public void registerUncaughtExceptionHandler(StreamsUncaughtExceptionHandler exceptionHandler) { - this.exceptionHandler = exceptionHandler; - } - - - -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedMapWktDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedMapWktDeduplicatorTopology.java deleted file mode 100644 index 872e66f..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedMapWktDeduplicatorTopology.java +++ /dev/null @@ -1,93 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.topologies; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KafkaStreams; -import org.apache.kafka.streams.StreamsBuilder; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.KafkaStreams.StateListener; -import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers.ProcessedMapWktProcessorSupplier; -import us.dot.its.jpo.geojsonconverter.DateJsonMapper; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; -import us.dot.its.jpo.geojsonconverter.serialization.JsonSerdes; - -import org.apache.kafka.streams.kstream.*; -import org.apache.kafka.streams.state.Stores; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.util.Properties; - -public class ProcessedMapWktDeduplicatorTopology { - - private static final Logger logger = LoggerFactory.getLogger(MapDeduplicatorTopology.class); - - Topology topology; - KafkaStreams streams; - String inputTopic; - String outputTopic; - Properties streamsProperties; - ObjectMapper objectMapper; - DeduplicatorProperties props; - - public ProcessedMapWktDeduplicatorTopology(DeduplicatorProperties props, Properties streamsProperties){ - this.props = props; - this.streamsProperties = streamsProperties; - this.objectMapper = DateJsonMapper.getInstance(); - } - - - public void start() { - if (streams != null && streams.state().isRunningOrRebalancing()) { - throw new IllegalStateException("Start called while streams is already running."); - } - Topology topology = buildTopology(); - streams = new KafkaStreams(topology, streamsProperties); - if (exceptionHandler != null) streams.setUncaughtExceptionHandler(exceptionHandler); - if (stateListener != null) streams.setStateListener(stateListener); - logger.info("Starting Processed Map WKT Deduplicator Topology"); - streams.start(); - } - - public Topology buildTopology() { - StreamsBuilder builder = new StreamsBuilder(); - - KStream> inputStream = builder.stream(props.getKafkaTopicProcessedMapWKT(), Consumed.with(Serdes.String(), JsonSerdes.ProcessedMapWKT())); - - builder.addStateStore(Stores.keyValueStoreBuilder(Stores.persistentKeyValueStore(props.getKafkaStateStoreProcessedMapWKTName()), - Serdes.String(), JsonSerdes.ProcessedMapWKT())); - - KStream> deduplicatedStream = inputStream.process(new ProcessedMapWktProcessorSupplier(props), props.getKafkaStateStoreProcessedMapWKTName()); - - deduplicatedStream.to(props.getKafkaTopicDeduplicatedProcessedMapWKT(), Produced.with(Serdes.String(), JsonSerdes.ProcessedMapWKT())); - - return builder.build(); - - } - - public void stop() { - logger.info("Stopping Processed Map deduplicator Socket Broadcast Topology."); - if (streams != null) { - streams.close(); - streams.cleanUp(); - streams = null; - } - logger.info("Stopped Processed Map deduplicator Socket Broadcast Topology."); - } - - StateListener stateListener; - public void registerStateListener(StateListener stateListener) { - this.stateListener = stateListener; - } - - StreamsUncaughtExceptionHandler exceptionHandler; - public void registerUncaughtExceptionHandler(StreamsUncaughtExceptionHandler exceptionHandler) { - this.exceptionHandler = exceptionHandler; - } - - - -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java deleted file mode 100644 index 6f55329..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/ProcessedSpatDeduplicatorTopology.java +++ /dev/null @@ -1,96 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.topologies; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KafkaStreams; -import org.apache.kafka.streams.StreamsBuilder; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.KafkaStreams.StateListener; -import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.geojsonconverter.DateJsonMapper; -import us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers.ProcessedSpatProcessorSupplier; -import us.dot.its.jpo.geojsonconverter.pojos.spat.ProcessedSpat; -import us.dot.its.jpo.geojsonconverter.serialization.JsonSerdes; - -import org.apache.kafka.streams.kstream.*; -import org.apache.kafka.streams.state.Stores; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.time.format.DateTimeFormatter; -import java.util.Properties; - -public class ProcessedSpatDeduplicatorTopology { - - private static final Logger logger = LoggerFactory.getLogger(ProcessedSpatDeduplicatorTopology.class); - - Topology topology; - KafkaStreams streams; - String inputTopic; - String outputTopic; - Properties streamsProperties; - ObjectMapper objectMapper; - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - DeduplicatorProperties props; - - - public ProcessedSpatDeduplicatorTopology(DeduplicatorProperties props, Properties streamsProperties){ - this.props = props; - this.streamsProperties = streamsProperties; - this.objectMapper = DateJsonMapper.getInstance(); - } - - - - public void start() { - if (streams != null && streams.state().isRunningOrRebalancing()) { - throw new IllegalStateException("Start called while streams is already running."); - } - Topology topology = buildTopology(); - streams = new KafkaStreams(topology, streamsProperties); - if (exceptionHandler != null) streams.setUncaughtExceptionHandler(exceptionHandler); - if (stateListener != null) streams.setStateListener(stateListener); - logger.info("Starting Map Deduplicator Topology"); - streams.start(); - } - - public Topology buildTopology() { - StreamsBuilder builder = new StreamsBuilder(); - - KStream inputStream = builder.stream(props.getKafkaTopicProcessedSpat(), Consumed.with(Serdes.String(), JsonSerdes.ProcessedSpat())); - - builder.addStateStore(Stores.keyValueStoreBuilder(Stores.persistentKeyValueStore(props.getKafkaStateStoreProcessedSpatName()), - Serdes.String(), JsonSerdes.ProcessedSpat())); - - KStream deduplicatedStream = inputStream.process(new ProcessedSpatProcessorSupplier(props), props.getKafkaStateStoreProcessedSpatName()); - - - deduplicatedStream.to(props.getKafkaTopicDeduplicatedProcessedSpat(), Produced.with(Serdes.String(), JsonSerdes.ProcessedSpat())); - - return builder.build(); - - } - - public void stop() { - logger.info("Stopping Processed SPaT deduplicator Socket Broadcast Topology."); - if (streams != null) { - streams.close(); - streams.cleanUp(); - streams = null; - } - logger.info("Stopped Processed SPaT deduplicator Socket Broadcast Topology."); - } - - StateListener stateListener; - public void registerStateListener(StateListener stateListener) { - this.stateListener = stateListener; - } - - StreamsUncaughtExceptionHandler exceptionHandler; - public void registerUncaughtExceptionHandler(StreamsUncaughtExceptionHandler exceptionHandler) { - this.exceptionHandler = exceptionHandler; - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/TimDeduplicatorTopology.java b/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/TimDeduplicatorTopology.java deleted file mode 100644 index b0a7f50..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/java/us/dot/its/jpo/deduplicator/deduplicator/topologies/TimDeduplicatorTopology.java +++ /dev/null @@ -1,128 +0,0 @@ -package us.dot.its.jpo.deduplicator.deduplicator.topologies; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KafkaStreams; -import org.apache.kafka.streams.StreamsBuilder; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.KafkaStreams.StateListener; -import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler; - -import us.dot.its.jpo.geojsonconverter.DateJsonMapper; -import us.dot.its.jpo.ode.model.OdeTimData; -import us.dot.its.jpo.ode.model.OdeTimMetadata; -import us.dot.its.jpo.ode.model.OdeTimPayload; -import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage; -import us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation; - -import org.apache.kafka.streams.kstream.*; -import org.apache.kafka.streams.state.Stores; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.time.format.DateTimeFormatter; -import java.util.Properties; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.processors.suppliers.OdeTimJsonProcessorSupplier; -import us.dot.its.jpo.deduplicator.deduplicator.serialization.JsonSerdes; - - -public class TimDeduplicatorTopology { - - private static final Logger logger = LoggerFactory.getLogger(TimDeduplicatorTopology.class); - - Topology topology; - KafkaStreams streams; - Properties streamsProperties; - ObjectMapper objectMapper; - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - DeduplicatorProperties props; - - public TimDeduplicatorTopology(DeduplicatorProperties props, Properties streamsProperties) { - this.props = props; - this.streamsProperties = streamsProperties; - this.objectMapper = DateJsonMapper.getInstance(); - } - - public void start() { - if (streams != null && streams.state().isRunningOrRebalancing()) { - throw new IllegalStateException("Start called while streams is already running."); - } - Topology topology = buildTopology(); - streams = new KafkaStreams(topology, streamsProperties); - if (exceptionHandler != null) - streams.setUncaughtExceptionHandler(exceptionHandler); - if (stateListener != null) - streams.setStateListener(stateListener); - logger.info("Starting Tim Deduplicator Topology"); - streams.start(); - } - - public JsonNode genJsonNode() { - return objectMapper.createObjectNode(); - } - - - - public Topology buildTopology() { - StreamsBuilder builder = new StreamsBuilder(); - - KStream inputStream = builder.stream(props.getKafkaTopicOdeTimJson(), - Consumed.with(Serdes.String(), JsonSerdes.OdeTim())); - - builder.addStateStore(Stores.keyValueStoreBuilder(Stores.persistentKeyValueStore(props.getKafkaStateStoreOdeTimJsonName()), - Serdes.String(), JsonSerdes.OdeTim())); - - KStream timRekeyedStream = inputStream.selectKey((key, value) -> { - try { - - TravelerInformation travellerInformation = (TravelerInformation)value.getPayload().getData(); - - - String rsuIP = ((OdeTimMetadata)value.getMetadata()).getOriginIp(); - // String packetId = ((OdeTimPayload)value.getPayload()).getData();// .get("packetID").asText(); - String packetId = travellerInformation.getPacketID().toString(); - int msgCnt = travellerInformation.getMsgCnt().intValue(); - - String newKey = rsuIP + "_" + packetId + "_" + msgCnt; - return newKey; - } catch (Exception e) { - System.out.println(e); - return ""; - } - }).repartition(Repartitioned.with(Serdes.String(), JsonSerdes.OdeTim())); - - KStream deduplicatedStream = timRekeyedStream.process(new OdeTimJsonProcessorSupplier(props), props.getKafkaStateStoreOdeTimJsonName()); - - deduplicatedStream.to(props.getKafkaTopicDeduplicatedOdeTimJson(), Produced.with(Serdes.String(), JsonSerdes.OdeTim())); - - return builder.build(); - - } - - public void stop() { - logger.info("Stopping Tim deduplicator Socket Broadcast Topology."); - if (streams != null) { - streams.close(); - streams.cleanUp(); - streams = null; - } - logger.info("Stopped Tim deduplicator Socket Broadcast Topology."); - } - - StateListener stateListener; - - public void registerStateListener(StateListener stateListener) { - this.stateListener = stateListener; - } - - StreamsUncaughtExceptionHandler exceptionHandler; - - public void registerUncaughtExceptionHandler(StreamsUncaughtExceptionHandler exceptionHandler) { - this.exceptionHandler = exceptionHandler; - } - -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml b/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml deleted file mode 100644 index 1b3a6b0..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/resources/application.yaml +++ /dev/null @@ -1,96 +0,0 @@ -#General Properties -#================== -groupId: ^project.groupId^ -artifactId: ^project.artifactId^ -version: ^project.version^ -server.port: 8085 - -# Kafka properties -spring.kafka.bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092} -logging.level.org.apache.kafka: INFO -logging.level: INFO -log4j.logger.kafka: OFF -log4j.logger.org.apache.kafka: OFF - - - -# Processed Map Configuration -kafkaTopicProcessedMap: topic.ProcessedMap -kafkaTopicDeduplicatedProcessedMap: topic.DeduplicatedProcessedMap -enableProcessedMapDeduplication: true - -# Processed Map WKT Configuration -kafkaTopicProcessedMapWKT: topic.ProcessedMapWKT -kafkaTopicDeduplicatedProcessedMapWKT: topic.DeduplicatedProcessedMapWKT -enableProcessedMapWktDeduplication: true - -# Ode Map Json Configuration -kafkaTopicOdeMapJson: topic.OdeMapJson -kafkaTopicDeduplicatedOdeMapJson: topic.DeduplicatedOdeMapJson -enableOdeMapDeduplication: true - -# Ode Tim Json Configuration -kafkaTopicOdeTimJson: topic.OdeTimJson -kafkaTopicDeduplicatedOdeTimJson: topic.DeduplicatedOdeTimJson -enableOdeTimDeduplication: true - -# Ode Raw Encoded Tim Json Configuration -kafkaTopicOdeRawEncodedTimJson: topic.OdeRawEncodedTIMJson -kafkaTopicDeduplicatedOdeRawEncodedTimJson: topic.DeduplicatedOdeRawEncodedTIMJson -enableOdeRawEncodedTimDeduplication: true - -# Ode Bsm Json Configuration -kafkaTopicOdeBsmJson: topic.OdeBsmJson -kafkaTopicDeduplicatedOdeBsmJson: topic.DeduplicatedOdeBsmJson -enableOdeBsmDeduplication: true -odeBsmMaximumTimeDelta: 10000 # Milliseconds -odeBsmMaximumPositionDelta: 1 # Meter -odeBsmAlwaysIncludeAtSpeed: 1 # Meter / Second - -# Processed Map Configuration -kafkaTopicProcessedSpat: topic.ProcessedSpat -kafkaTopicDeduplicatedProcessedSpat: topic.DeduplicatedProcessedSpat -enableProcessedSpatDeduplication: true - - -# Amount of time to wait to try and increase batching -kafka.linger_ms: 50 - -# Custom kafka properties -kafka.topics: - autoCreateTopics: true # Override auto-create in test properties - numPartitions: 1 - numReplicas: 1 - createTopics: - - name: ${kafkaTopicProcessedMap} - cleanupPolicy: delete - retentionMs: 300000 - - name: ${kafkaTopicDeduplicatedProcessedMap} - cleanupPolicy: delete - retentionMs: 300000 - - name: ${kafkaTopicProcessedMapWKT} - cleanupPolicy: delete - retentionMs: 300000 - - name: ${kafkaTopicDeduplicatedProcessedMapWKT} - cleanupPolicy: delete - retentionMs: 300000 - - name: ${kafkaTopicOdeMapJson} - cleanupPolicy: delete - retentionMs: 300000 - - name: ${kafkaTopicDeduplicatedOdeMapJson} - cleanupPolicy: delete - retentionMs: 300000 - - name: ${kafkaTopicOdeTimJson} - cleanupPolicy: delete - retentionMs: 300000 - - name: ${kafkaTopicDeduplicatedOdeTimJson} - cleanupPolicy: delete - retentionMs: 300000 - - name: ${kafkaTopicProcessedSpat} - cleanupPolicy: delete - retentionMs: 300000 - - name: ${kafkaTopicDeduplicatedProcessedSpat} - cleanupPolicy: delete - retentionMs: 300000 - - \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/main/resources/logback.xml b/jpo-deduplicator/jpo-deduplicator/src/main/resources/logback.xml deleted file mode 100644 index 860df15..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/main/resources/logback.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - %date{"yyyy-MM-dd HH:mm:ss", UTC} [%thread] %-5level %logger{0} - %msg %n - - - - - - - - - - - - - diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/BsmDeduplicatorTopologyTest.java b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/BsmDeduplicatorTopologyTest.java deleted file mode 100644 index 98d6204..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/BsmDeduplicatorTopologyTest.java +++ /dev/null @@ -1,116 +0,0 @@ -package deduplicator; - - - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KeyValue; -import org.apache.kafka.streams.TestInputTopic; -import org.apache.kafka.streams.TestOutputTopic; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.TopologyTestDriver; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import us.dot.its.jpo.conflictmonitor.monitor.serialization.JsonSerdes; -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.BsmDeduplicatorTopology; -import us.dot.its.jpo.ode.model.OdeBsmData; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.List; - - -public class BsmDeduplicatorTopologyTest { - - String inputTopic = "topic.OdeBsmJson"; - String outputTopic = "topic.DeduplicatedOdeBsmJson"; - ObjectMapper objectMapper; - - String inputBsm1 = "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"\",\"longitude\":\"\",\"elevation\":\"\",\"speed\":\"\",\"heading\":\"\"},\"rxSource\":\"RV\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"f1bfed26-d986-4a0c-b8a4-68b1e5ac1348\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-07-01T15:00:52.597Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"10.164.6.18\"},\"payload\":{\"data\":{\"coreData\":{\"msgCnt\":7,\"id\":\"E79423A3\",\"secMark\":52597,\"position\":{\"latitude\":40.2970849,\"longitude\":-111.6956069,\"elevation\":1439},\"accelSet\":{\"accelLat\":2001,\"accelLong\":0,\"accelVert\":-127,\"accelYaw\":0},\"accuracy\":{\"semiMajor\":2,\"semiMinor\":2,\"orientation\":44.49530799},\"transmission\":\"FORWARDGEARS\",\"speed\":0,\"heading\":24.2,\"angle\":0,\"brakes\":{\"wheelBrakes\":{\"leftFront\":true,\"rightFront\":true,\"unavailable\":false,\"leftRear\":true,\"rightRear\":true},\"traction\":\"on\",\"abs\":\"on\",\"scs\":\"on\",\"brakeBoost\":\"off\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":230,\"length\":500}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"events\":null,\"pathHistory\":{\"initialPosition\":null,\"currGNSSstatus\":null,\"crumbData\":[{\"elevationOffset\":-0.5,\"heading\":null,\"latOffset\":0.0000038,\"lonOffset\":0.0001137,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":31.41},{\"elevationOffset\":-0.4,\"heading\":null,\"latOffset\":0.0000339,\"lonOffset\":0.0001695,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":32.05},{\"elevationOffset\":0,\"heading\":null,\"latOffset\":0.000184,\"lonOffset\":0.0002106,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":36.29},{\"elevationOffset\":0,\"heading\":null,\"latOffset\":0.0003092,\"lonOffset\":0.0003081,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":37.22},{\"elevationOffset\":0.4,\"heading\":null,\"latOffset\":0.0004354,\"lonOffset\":0.0003906,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":38.15},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.0007727,\"lonOffset\":0.0004391,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":40.39},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.00084,\"lonOffset\":0.0004778,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":41.61},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.0008649,\"lonOffset\":0.0005765,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":43.48},{\"elevationOffset\":1.7,\"heading\":null,\"latOffset\":0.0008086,\"lonOffset\":0.0015482,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":68.53},{\"elevationOffset\":1.7,\"heading\":null,\"latOffset\":0.0007738,\"lonOffset\":0.0015944,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":72.09},{\"elevationOffset\":2.1,\"heading\":null,\"latOffset\":0.0007349,\"lonOffset\":0.0015747,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":76.97}]},\"pathPrediction\":{\"confidence\":100,\"radiusOfCurve\":0},\"lights\":null}},{\"id\":\"SupplementalVehicleExtensions\",\"value\":{\"classification\":66,\"classDetails\":{\"fuelType\":null,\"hpmsType\":\"none\",\"iso3883\":null,\"keyType\":66,\"responderType\":null,\"responseEquip\":null,\"role\":null,\"vehicleType\":null},\"vehicleData\":{\"bumpers\":null,\"height\":1.8,\"mass\":2800,\"trailerWeight\":null},\"weatherReport\":{\"friction\":null,\"isRaining\":\"ERROR\",\"precipSituation\":\"UNKNOWN\",\"rainRate\":null,\"roadFriction\":0,\"solarRadiation\":null},\"weatherProbe\":{\"airPressure\":860,\"airTemp\":71,\"rainRates\":null},\"obstacle\":null,\"status\":null,\"speedProfile\":null,\"theRTCM\":null}}]},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\"}}"; - - // Same as BSM 1 - No Message should be generated - String inputBsm2 = "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"\",\"longitude\":\"\",\"elevation\":\"\",\"speed\":\"\",\"heading\":\"\"},\"rxSource\":\"RV\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"f1bfed26-d986-4a0c-b8a4-68b1e5ac1348\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-07-01T15:00:52.697Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"10.164.6.18\"},\"payload\":{\"data\":{\"coreData\":{\"msgCnt\":7,\"id\":\"E79423A3\",\"secMark\":52597,\"position\":{\"latitude\":40.2970849,\"longitude\":-111.6956069,\"elevation\":1439},\"accelSet\":{\"accelLat\":2001,\"accelLong\":0,\"accelVert\":-127,\"accelYaw\":0},\"accuracy\":{\"semiMajor\":2,\"semiMinor\":2,\"orientation\":44.49530799},\"transmission\":\"FORWARDGEARS\",\"speed\":0,\"heading\":24.2,\"angle\":0,\"brakes\":{\"wheelBrakes\":{\"leftFront\":true,\"rightFront\":true,\"unavailable\":false,\"leftRear\":true,\"rightRear\":true},\"traction\":\"on\",\"abs\":\"on\",\"scs\":\"on\",\"brakeBoost\":\"off\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":230,\"length\":500}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"events\":null,\"pathHistory\":{\"initialPosition\":null,\"currGNSSstatus\":null,\"crumbData\":[{\"elevationOffset\":-0.5,\"heading\":null,\"latOffset\":0.0000038,\"lonOffset\":0.0001137,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":31.41},{\"elevationOffset\":-0.4,\"heading\":null,\"latOffset\":0.0000339,\"lonOffset\":0.0001695,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":32.05},{\"elevationOffset\":0,\"heading\":null,\"latOffset\":0.000184,\"lonOffset\":0.0002106,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":36.29},{\"elevationOffset\":0,\"heading\":null,\"latOffset\":0.0003092,\"lonOffset\":0.0003081,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":37.22},{\"elevationOffset\":0.4,\"heading\":null,\"latOffset\":0.0004354,\"lonOffset\":0.0003906,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":38.15},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.0007727,\"lonOffset\":0.0004391,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":40.39},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.00084,\"lonOffset\":0.0004778,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":41.61},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.0008649,\"lonOffset\":0.0005765,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":43.48},{\"elevationOffset\":1.7,\"heading\":null,\"latOffset\":0.0008086,\"lonOffset\":0.0015482,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":68.53},{\"elevationOffset\":1.7,\"heading\":null,\"latOffset\":0.0007738,\"lonOffset\":0.0015944,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":72.09},{\"elevationOffset\":2.1,\"heading\":null,\"latOffset\":0.0007349,\"lonOffset\":0.0015747,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":76.97}]},\"pathPrediction\":{\"confidence\":100,\"radiusOfCurve\":0},\"lights\":null}},{\"id\":\"SupplementalVehicleExtensions\",\"value\":{\"classification\":66,\"classDetails\":{\"fuelType\":null,\"hpmsType\":\"none\",\"iso3883\":null,\"keyType\":66,\"responderType\":null,\"responseEquip\":null,\"role\":null,\"vehicleType\":null},\"vehicleData\":{\"bumpers\":null,\"height\":1.8,\"mass\":2800,\"trailerWeight\":null},\"weatherReport\":{\"friction\":null,\"isRaining\":\"ERROR\",\"precipSituation\":\"UNKNOWN\",\"rainRate\":null,\"roadFriction\":0,\"solarRadiation\":null},\"weatherProbe\":{\"airPressure\":860,\"airTemp\":71,\"rainRates\":null},\"obstacle\":null,\"status\":null,\"speedProfile\":null,\"theRTCM\":null}}]},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\"}}"; - - // Increase Time from Bsm 1 - String inputBsm3 = "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"\",\"longitude\":\"\",\"elevation\":\"\",\"speed\":\"\",\"heading\":\"\"},\"rxSource\":\"RV\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"f1bfed26-d986-4a0c-b8a4-68b1e5ac1348\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-07-01T15:01:02.797Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"10.164.6.18\"},\"payload\":{\"data\":{\"coreData\":{\"msgCnt\":7,\"id\":\"E79423A3\",\"secMark\":52597,\"position\":{\"latitude\":40.2970849,\"longitude\":-111.6956069,\"elevation\":1439},\"accelSet\":{\"accelLat\":2001,\"accelLong\":0,\"accelVert\":-127,\"accelYaw\":0},\"accuracy\":{\"semiMajor\":2,\"semiMinor\":2,\"orientation\":44.49530799},\"transmission\":\"FORWARDGEARS\",\"speed\":0,\"heading\":24.2,\"angle\":0,\"brakes\":{\"wheelBrakes\":{\"leftFront\":true,\"rightFront\":true,\"unavailable\":false,\"leftRear\":true,\"rightRear\":true},\"traction\":\"on\",\"abs\":\"on\",\"scs\":\"on\",\"brakeBoost\":\"off\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":230,\"length\":500}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"events\":null,\"pathHistory\":{\"initialPosition\":null,\"currGNSSstatus\":null,\"crumbData\":[{\"elevationOffset\":-0.5,\"heading\":null,\"latOffset\":0.0000038,\"lonOffset\":0.0001137,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":31.41},{\"elevationOffset\":-0.4,\"heading\":null,\"latOffset\":0.0000339,\"lonOffset\":0.0001695,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":32.05},{\"elevationOffset\":0,\"heading\":null,\"latOffset\":0.000184,\"lonOffset\":0.0002106,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":36.29},{\"elevationOffset\":0,\"heading\":null,\"latOffset\":0.0003092,\"lonOffset\":0.0003081,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":37.22},{\"elevationOffset\":0.4,\"heading\":null,\"latOffset\":0.0004354,\"lonOffset\":0.0003906,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":38.15},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.0007727,\"lonOffset\":0.0004391,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":40.39},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.00084,\"lonOffset\":0.0004778,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":41.61},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.0008649,\"lonOffset\":0.0005765,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":43.48},{\"elevationOffset\":1.7,\"heading\":null,\"latOffset\":0.0008086,\"lonOffset\":0.0015482,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":68.53},{\"elevationOffset\":1.7,\"heading\":null,\"latOffset\":0.0007738,\"lonOffset\":0.0015944,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":72.09},{\"elevationOffset\":2.1,\"heading\":null,\"latOffset\":0.0007349,\"lonOffset\":0.0015747,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":76.97}]},\"pathPrediction\":{\"confidence\":100,\"radiusOfCurve\":0},\"lights\":null}},{\"id\":\"SupplementalVehicleExtensions\",\"value\":{\"classification\":66,\"classDetails\":{\"fuelType\":null,\"hpmsType\":\"none\",\"iso3883\":null,\"keyType\":66,\"responderType\":null,\"responseEquip\":null,\"role\":null,\"vehicleType\":null},\"vehicleData\":{\"bumpers\":null,\"height\":1.8,\"mass\":2800,\"trailerWeight\":null},\"weatherReport\":{\"friction\":null,\"isRaining\":\"ERROR\",\"precipSituation\":\"UNKNOWN\",\"rainRate\":null,\"roadFriction\":0,\"solarRadiation\":null},\"weatherProbe\":{\"airPressure\":860,\"airTemp\":71,\"rainRates\":null},\"obstacle\":null,\"status\":null,\"speedProfile\":null,\"theRTCM\":null}}]},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\"}}"; - - // Vehicle Speed not 0 - String inputBsm4 = "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"\",\"longitude\":\"\",\"elevation\":\"\",\"speed\":\"\",\"heading\":\"\"},\"rxSource\":\"RV\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"f1bfed26-d986-4a0c-b8a4-68b1e5ac1348\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-07-01T15:01:02.897Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"10.164.6.18\"},\"payload\":{\"data\":{\"coreData\":{\"msgCnt\":7,\"id\":\"E79423A3\",\"secMark\":52597,\"position\":{\"latitude\":40.2970849,\"longitude\":-111.6956069,\"elevation\":1439},\"accelSet\":{\"accelLat\":2001,\"accelLong\":0,\"accelVert\":-127,\"accelYaw\":0},\"accuracy\":{\"semiMajor\":2,\"semiMinor\":2,\"orientation\":44.49530799},\"transmission\":\"FORWARDGEARS\",\"speed\":10,\"heading\":24.2,\"angle\":0,\"brakes\":{\"wheelBrakes\":{\"leftFront\":true,\"rightFront\":true,\"unavailable\":false,\"leftRear\":true,\"rightRear\":true},\"traction\":\"on\",\"abs\":\"on\",\"scs\":\"on\",\"brakeBoost\":\"off\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":230,\"length\":500}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"events\":null,\"pathHistory\":{\"initialPosition\":null,\"currGNSSstatus\":null,\"crumbData\":[{\"elevationOffset\":-0.5,\"heading\":null,\"latOffset\":0.0000038,\"lonOffset\":0.0001137,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":31.41},{\"elevationOffset\":-0.4,\"heading\":null,\"latOffset\":0.0000339,\"lonOffset\":0.0001695,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":32.05},{\"elevationOffset\":0,\"heading\":null,\"latOffset\":0.000184,\"lonOffset\":0.0002106,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":36.29},{\"elevationOffset\":0,\"heading\":null,\"latOffset\":0.0003092,\"lonOffset\":0.0003081,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":37.22},{\"elevationOffset\":0.4,\"heading\":null,\"latOffset\":0.0004354,\"lonOffset\":0.0003906,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":38.15},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.0007727,\"lonOffset\":0.0004391,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":40.39},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.00084,\"lonOffset\":0.0004778,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":41.61},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.0008649,\"lonOffset\":0.0005765,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":43.48},{\"elevationOffset\":1.7,\"heading\":null,\"latOffset\":0.0008086,\"lonOffset\":0.0015482,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":68.53},{\"elevationOffset\":1.7,\"heading\":null,\"latOffset\":0.0007738,\"lonOffset\":0.0015944,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":72.09},{\"elevationOffset\":2.1,\"heading\":null,\"latOffset\":0.0007349,\"lonOffset\":0.0015747,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":76.97}]},\"pathPrediction\":{\"confidence\":100,\"radiusOfCurve\":0},\"lights\":null}},{\"id\":\"SupplementalVehicleExtensions\",\"value\":{\"classification\":66,\"classDetails\":{\"fuelType\":null,\"hpmsType\":\"none\",\"iso3883\":null,\"keyType\":66,\"responderType\":null,\"responseEquip\":null,\"role\":null,\"vehicleType\":null},\"vehicleData\":{\"bumpers\":null,\"height\":1.8,\"mass\":2800,\"trailerWeight\":null},\"weatherReport\":{\"friction\":null,\"isRaining\":\"ERROR\",\"precipSituation\":\"UNKNOWN\",\"rainRate\":null,\"roadFriction\":0,\"solarRadiation\":null},\"weatherProbe\":{\"airPressure\":860,\"airTemp\":71,\"rainRates\":null},\"obstacle\":null,\"status\":null,\"speedProfile\":null,\"theRTCM\":null}}]},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\"}}"; - - // Vehicle Position has changed - String inputBsm5 = "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"\",\"longitude\":\"\",\"elevation\":\"\",\"speed\":\"\",\"heading\":\"\"},\"rxSource\":\"RV\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"f1bfed26-d986-4a0c-b8a4-68b1e5ac1348\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-07-01T15:01:02.997Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"10.164.6.18\"},\"payload\":{\"data\":{\"coreData\":{\"msgCnt\":7,\"id\":\"E79423A3\",\"secMark\":52597,\"position\":{\"latitude\":40.2970949,\"longitude\":-111.6956169,\"elevation\":1439},\"accelSet\":{\"accelLat\":2001,\"accelLong\":0,\"accelVert\":-127,\"accelYaw\":0},\"accuracy\":{\"semiMajor\":2,\"semiMinor\":2,\"orientation\":44.49530799},\"transmission\":\"FORWARDGEARS\",\"speed\":0,\"heading\":24.2,\"angle\":0,\"brakes\":{\"wheelBrakes\":{\"leftFront\":true,\"rightFront\":true,\"unavailable\":false,\"leftRear\":true,\"rightRear\":true},\"traction\":\"on\",\"abs\":\"on\",\"scs\":\"on\",\"brakeBoost\":\"off\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":230,\"length\":500}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"events\":null,\"pathHistory\":{\"initialPosition\":null,\"currGNSSstatus\":null,\"crumbData\":[{\"elevationOffset\":-0.5,\"heading\":null,\"latOffset\":0.0000038,\"lonOffset\":0.0001137,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":31.41},{\"elevationOffset\":-0.4,\"heading\":null,\"latOffset\":0.0000339,\"lonOffset\":0.0001695,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":32.05},{\"elevationOffset\":0,\"heading\":null,\"latOffset\":0.000184,\"lonOffset\":0.0002106,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":36.29},{\"elevationOffset\":0,\"heading\":null,\"latOffset\":0.0003092,\"lonOffset\":0.0003081,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":37.22},{\"elevationOffset\":0.4,\"heading\":null,\"latOffset\":0.0004354,\"lonOffset\":0.0003906,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":38.15},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.0007727,\"lonOffset\":0.0004391,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":40.39},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.00084,\"lonOffset\":0.0004778,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":41.61},{\"elevationOffset\":1.4,\"heading\":null,\"latOffset\":0.0008649,\"lonOffset\":0.0005765,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":43.48},{\"elevationOffset\":1.7,\"heading\":null,\"latOffset\":0.0008086,\"lonOffset\":0.0015482,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":68.53},{\"elevationOffset\":1.7,\"heading\":null,\"latOffset\":0.0007738,\"lonOffset\":0.0015944,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":72.09},{\"elevationOffset\":2.1,\"heading\":null,\"latOffset\":0.0007349,\"lonOffset\":0.0015747,\"posAccuracy\":null,\"speed\":null,\"timeOffset\":76.97}]},\"pathPrediction\":{\"confidence\":100,\"radiusOfCurve\":0},\"lights\":null}},{\"id\":\"SupplementalVehicleExtensions\",\"value\":{\"classification\":66,\"classDetails\":{\"fuelType\":null,\"hpmsType\":\"none\",\"iso3883\":null,\"keyType\":66,\"responderType\":null,\"responseEquip\":null,\"role\":null,\"vehicleType\":null},\"vehicleData\":{\"bumpers\":null,\"height\":1.8,\"mass\":2800,\"trailerWeight\":null},\"weatherReport\":{\"friction\":null,\"isRaining\":\"ERROR\",\"precipSituation\":\"UNKNOWN\",\"rainRate\":null,\"roadFriction\":0,\"solarRadiation\":null},\"weatherProbe\":{\"airPressure\":860,\"airTemp\":71,\"rainRates\":null},\"obstacle\":null,\"status\":null,\"speedProfile\":null,\"theRTCM\":null}}]},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\"}}"; - - - @Autowired - DeduplicatorProperties props; - - - - @Test - public void testTopology() { - - - - - - props = new DeduplicatorProperties(); - props.setAlwaysIncludeAtSpeed(1); - props.setenableOdeBsmDeduplication(true); - props.setMaximumPositionDelta(1); - props.setMaximumTimeDelta(10000); - props.setkafkaTopicOdeBsmJson(inputTopic); - props.setkafkaTopicDeduplicatedOdeBsmJson(outputTopic); - - BsmDeduplicatorTopology bsmDeduplicatorTopology = new BsmDeduplicatorTopology(props); - Topology topology = bsmDeduplicatorTopology.buildTopology(); - - try (TopologyTestDriver driver = new TopologyTestDriver(topology)) { - - - TestInputTopic inputOdeBsmData = driver.createInputTopic( - inputTopic, - Serdes.Void().serializer(), - Serdes.String().serializer()); - - - TestOutputTopic outputOdeBsmData = driver.createOutputTopic( - outputTopic, - Serdes.String().deserializer(), - JsonSerdes.OdeBsm().deserializer()); - - inputOdeBsmData.pipeInput(null, inputBsm1); - inputOdeBsmData.pipeInput(null, inputBsm2); - inputOdeBsmData.pipeInput(null, inputBsm3); - inputOdeBsmData.pipeInput(null, inputBsm4); - inputOdeBsmData.pipeInput(null, inputBsm5); - - List> bsmDeduplicationResults = outputOdeBsmData.readKeyValuesToList(); - - // validate that only 3 messages make it through - assertEquals(4, bsmDeduplicationResults.size()); - - objectMapper = new ObjectMapper(); - OdeBsmData bsm1 = objectMapper.readValue(inputBsm1, OdeBsmData.class); - OdeBsmData bsm3 = objectMapper.readValue(inputBsm3, OdeBsmData.class); - OdeBsmData bsm4 = objectMapper.readValue(inputBsm4, OdeBsmData.class); - OdeBsmData bsm5 = objectMapper.readValue(inputBsm5, OdeBsmData.class); - - - assertEquals(bsm1.getMetadata().getOdeReceivedAt(), bsmDeduplicationResults.get(0).value.getMetadata().getOdeReceivedAt()); - assertEquals(bsm3.getMetadata().getOdeReceivedAt(), bsmDeduplicationResults.get(1).value.getMetadata().getOdeReceivedAt()); - assertEquals(bsm4.getMetadata().getOdeReceivedAt(), bsmDeduplicationResults.get(2).value.getMetadata().getOdeReceivedAt()); - assertEquals(bsm5.getMetadata().getOdeReceivedAt(), bsmDeduplicationResults.get(3).value.getMetadata().getOdeReceivedAt()); - - } catch (JsonMappingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (JsonProcessingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/MapDeduplicatorTopologyTest.java b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/MapDeduplicatorTopologyTest.java deleted file mode 100644 index d3f88fc..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/MapDeduplicatorTopologyTest.java +++ /dev/null @@ -1,103 +0,0 @@ -package deduplicator; - - - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KeyValue; -import org.apache.kafka.streams.TestInputTopic; -import org.apache.kafka.streams.TestOutputTopic; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.TopologyTestDriver; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.MapDeduplicatorTopology; -import us.dot.its.jpo.geojsonconverter.serialization.JsonSerdes; -import us.dot.its.jpo.ode.model.OdeMapData; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.List; - - -public class MapDeduplicatorTopologyTest { - - String inputTopic = "topic.OdeMapJson"; - String outputTopic = "topic.DeduplicatedOdeMapJson"; - ObjectMapper objectMapper; - - // Reference MAP - String inputMap1 = "{\"metadata\": {\"logFileName\": \"\",\"recordType\": \"mapTx\",\"securityResultCode\": \"success\",\"receivedMessageDetails\": {\"rxSource\": \"NA\"},\"payloadType\": \"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\": {\"streamId\": \"c495510d-c87b-4eb8-a413-a5f91e8ac026\",\"bundleSize\": 1,\"bundleId\": 0,\"recordId\": 0,\"serialNumber\": 0},\"odeReceivedAt\": \"2024-12-23T18:59:44.341Z\",\"schemaVersion\": 7,\"maxDurationTime\": 0,\"recordGeneratedAt\": \"\",\"recordGeneratedBy\": \"RSU\",\"sanitized\": false,\"odePacketID\": \"\",\"odeTimStartDateTime\": \"\",\"asn1\": \"001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E00\",\"mapSource\": \"RSU\",\"originIp\": \"172.24.0.1\"},\"payload\": {\"data\": {\"msgIssueRevision\": 0,\"layerType\": \"intersectionData\",\"layerID\": 0,\"intersections\": {\"intersectionGeometry\": [{\"id\": {\"id\": 12110},\"revision\": 0,\"refPoint\": {\"latitude\": 39.5952649,\"longitude\": -105.0914122,\"elevation\": 1677.0},\"laneWidth\": 366,\"laneSet\": {\"GenericLane\": [{\"laneID\": 2,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2225,\"y\": 808}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 10517,\"y\": -161}},\"attributes\": {\"dElevation\": -60}},{\"delta\": {\"nodeXY6\": {\"x\": 2769,\"y\": 112}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6142,\"y\": -180}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 6636,\"y\": -12}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 3804,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 19,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 3,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2222,\"y\": 515}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 2933,\"y\": -82}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6259,\"y\": -85}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 3416,\"y\": -98}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 6867,\"y\": -39}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 2657,\"y\": -55}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 4259,\"y\": 67}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 3481,\"y\": 0}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 1,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2215,\"y\": 1218}}},{\"delta\": {\"nodeXY6\": {\"x\": 10451,\"y\": -223}},\"attributes\": {\"dElevation\": -70}},{\"delta\": {\"nodeXY6\": {\"x\": 1852,\"y\": -108}},\"attributes\": {\"dElevation\": -10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 28,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 4,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2213,\"y\": -124}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 7187,\"y\": 20}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 541,\"y\": 40}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 1298,\"y\": 229}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 7,\"connectionID\": 1}]}},{\"laneID\": 6,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -1019}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 7}}}]}},{\"laneID\": 5,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -662}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 338,\"y\": 0}}}]}},{\"laneID\": 7,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2294,\"y\": -1463}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 27}}}]}},{\"laneID\": 12,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -952,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": -377}}}]}},{\"laneID\": 13,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1440,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 7,\"y\": -390}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}},{\"laneID\": 10,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 705,\"y\": -1919}}},{\"delta\": {\"nodeXY6\": {\"x\": -1,\"y\": -7515}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -41,\"y\": -5272}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -17,\"y\": -11337}}},{\"delta\": {\"nodeXY6\": {\"x\": 17,\"y\": -5938}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 9,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1090,\"y\": -1930}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 9,\"y\": -4764}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -20,\"y\": -6402}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": -34,\"y\": -7953}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": -10940}},\"attributes\": {\"dElevation\": 20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 27,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 11,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 350,\"y\": -1925}}},{\"delta\": {\"nodeXY6\": {\"x\": -32,\"y\": -6698}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 156,\"y\": -2616}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 1,\"connectionID\": 1}]}},{\"laneID\": 8,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1557,\"y\": -1956}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -101,\"y\": -1956}}},{\"delta\": {\"nodeXY6\": {\"x\": -5,\"y\": -7393}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -121,\"y\": -1636}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 7,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 15,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2405,\"y\": -1018}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -9339,\"y\": 26}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11895,\"y\": -38}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -8814,\"y\": 13}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 16,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2337,\"y\": -656}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -12229,\"y\": 15}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -11362,\"y\": -37}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -6537,\"y\": 1}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 17,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2338,\"y\": -284}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -8892,\"y\": -18}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11959,\"y\": -2}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -1564,\"y\": -180}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 3,\"connectionID\": 1}]}},{\"laneID\": 14,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2401,\"y\": -1380}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -19947,\"y\": 8}},\"attributes\": {\"dElevation\": 80}},{\"delta\": {\"nodeXY6\": {\"x\": -10108,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 18,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2264,\"y\": 479}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -580,\"y\": -14}}}]}},{\"laneID\": 19,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2257,\"y\": 796}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -518,\"y\": 0}}}]}},{\"laneID\": 20,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2236,\"y\": 1229}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -484,\"y\": 0}}}]}},{\"laneID\": 23,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -914,\"y\": 1903}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 225,\"y\": 12288}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 40,\"y\": 9634}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 32,\"y\": 8035}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 28}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 22,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1221,\"y\": 1914}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 92,\"y\": 10475}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 89,\"y\": 11582}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 48,\"y\": 7912}},\"attributes\": {\"dElevation\": -30}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 21,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1649,\"y\": 1935}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": 3182}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 21,\"y\": 5991}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 102,\"y\": 4810}}},{\"delta\": {\"nodeXY6\": {\"x\": 85,\"y\": 11803}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 19,\"y\": 4161}},\"attributes\": {\"dElevation\": -20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 20,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 24,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -535,\"y\": 1926}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 28,\"y\": 4582}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 88,\"y\": 3793}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -143,\"y\": 1866}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 25,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -213,\"y\": 1913}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 14,\"y\": 4594}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -91,\"y\": 2238}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 26,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 724,\"y\": 1902}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 352}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 27,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1105,\"y\": 1888}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 332}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 28,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1591,\"y\": 1874}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -14,\"y\": 346}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}}]}}]}},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; - - // Duplicate of Number 1 - String inputMap2 = "{\"metadata\": {\"logFileName\": \"\",\"recordType\": \"mapTx\",\"securityResultCode\": \"success\",\"receivedMessageDetails\": {\"rxSource\": \"NA\"},\"payloadType\": \"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\": {\"streamId\": \"c495510d-c87b-4eb8-a413-a5f91e8ac026\",\"bundleSize\": 1,\"bundleId\": 0,\"recordId\": 0,\"serialNumber\": 0},\"odeReceivedAt\": \"2024-12-23T18:59:44.341Z\",\"schemaVersion\": 7,\"maxDurationTime\": 0,\"recordGeneratedAt\": \"\",\"recordGeneratedBy\": \"RSU\",\"sanitized\": false,\"odePacketID\": \"\",\"odeTimStartDateTime\": \"\",\"asn1\": \"001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E00\",\"mapSource\": \"RSU\",\"originIp\": \"172.24.0.1\"},\"payload\": {\"data\": {\"msgIssueRevision\": 0,\"layerType\": \"intersectionData\",\"layerID\": 0,\"intersections\": {\"intersectionGeometry\": [{\"id\": {\"id\": 12110},\"revision\": 0,\"refPoint\": {\"latitude\": 39.5952649,\"longitude\": -105.0914122,\"elevation\": 1677.0},\"laneWidth\": 366,\"laneSet\": {\"GenericLane\": [{\"laneID\": 2,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2225,\"y\": 808}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 10517,\"y\": -161}},\"attributes\": {\"dElevation\": -60}},{\"delta\": {\"nodeXY6\": {\"x\": 2769,\"y\": 112}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6142,\"y\": -180}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 6636,\"y\": -12}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 3804,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 19,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 3,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2222,\"y\": 515}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 2933,\"y\": -82}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6259,\"y\": -85}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 3416,\"y\": -98}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 6867,\"y\": -39}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 2657,\"y\": -55}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 4259,\"y\": 67}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 3481,\"y\": 0}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 1,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2215,\"y\": 1218}}},{\"delta\": {\"nodeXY6\": {\"x\": 10451,\"y\": -223}},\"attributes\": {\"dElevation\": -70}},{\"delta\": {\"nodeXY6\": {\"x\": 1852,\"y\": -108}},\"attributes\": {\"dElevation\": -10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 28,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 4,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2213,\"y\": -124}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 7187,\"y\": 20}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 541,\"y\": 40}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 1298,\"y\": 229}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 7,\"connectionID\": 1}]}},{\"laneID\": 6,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -1019}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 7}}}]}},{\"laneID\": 5,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -662}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 338,\"y\": 0}}}]}},{\"laneID\": 7,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2294,\"y\": -1463}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 27}}}]}},{\"laneID\": 12,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -952,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": -377}}}]}},{\"laneID\": 13,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1440,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 7,\"y\": -390}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}},{\"laneID\": 10,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 705,\"y\": -1919}}},{\"delta\": {\"nodeXY6\": {\"x\": -1,\"y\": -7515}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -41,\"y\": -5272}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -17,\"y\": -11337}}},{\"delta\": {\"nodeXY6\": {\"x\": 17,\"y\": -5938}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 9,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1090,\"y\": -1930}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 9,\"y\": -4764}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -20,\"y\": -6402}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": -34,\"y\": -7953}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": -10940}},\"attributes\": {\"dElevation\": 20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 27,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 11,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 350,\"y\": -1925}}},{\"delta\": {\"nodeXY6\": {\"x\": -32,\"y\": -6698}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 156,\"y\": -2616}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 1,\"connectionID\": 1}]}},{\"laneID\": 8,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1557,\"y\": -1956}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -101,\"y\": -1956}}},{\"delta\": {\"nodeXY6\": {\"x\": -5,\"y\": -7393}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -121,\"y\": -1636}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 7,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 15,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2405,\"y\": -1018}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -9339,\"y\": 26}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11895,\"y\": -38}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -8814,\"y\": 13}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 16,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2337,\"y\": -656}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -12229,\"y\": 15}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -11362,\"y\": -37}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -6537,\"y\": 1}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 17,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2338,\"y\": -284}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -8892,\"y\": -18}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11959,\"y\": -2}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -1564,\"y\": -180}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 3,\"connectionID\": 1}]}},{\"laneID\": 14,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2401,\"y\": -1380}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -19947,\"y\": 8}},\"attributes\": {\"dElevation\": 80}},{\"delta\": {\"nodeXY6\": {\"x\": -10108,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 18,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2264,\"y\": 479}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -580,\"y\": -14}}}]}},{\"laneID\": 19,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2257,\"y\": 796}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -518,\"y\": 0}}}]}},{\"laneID\": 20,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2236,\"y\": 1229}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -484,\"y\": 0}}}]}},{\"laneID\": 23,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -914,\"y\": 1903}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 225,\"y\": 12288}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 40,\"y\": 9634}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 32,\"y\": 8035}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 28}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 22,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1221,\"y\": 1914}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 92,\"y\": 10475}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 89,\"y\": 11582}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 48,\"y\": 7912}},\"attributes\": {\"dElevation\": -30}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 21,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1649,\"y\": 1935}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": 3182}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 21,\"y\": 5991}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 102,\"y\": 4810}}},{\"delta\": {\"nodeXY6\": {\"x\": 85,\"y\": 11803}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 19,\"y\": 4161}},\"attributes\": {\"dElevation\": -20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 20,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 24,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -535,\"y\": 1926}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 28,\"y\": 4582}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 88,\"y\": 3793}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -143,\"y\": 1866}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 25,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -213,\"y\": 1913}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 14,\"y\": 4594}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -91,\"y\": 2238}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 26,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 724,\"y\": 1902}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 352}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 27,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1105,\"y\": 1888}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 332}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 28,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1591,\"y\": 1874}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -14,\"y\": 346}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}}]}}]}},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; - - // A different Message entirely - String inputMap3 = "{\"metadata\": {\"logFileName\": \"\",\"recordType\": \"mapTx\",\"securityResultCode\": \"success\",\"receivedMessageDetails\": {\"rxSource\": \"NA\"},\"payloadType\": \"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\": {\"streamId\": \"c495510d-c87b-4eb8-a413-a5f91e8ac026\",\"bundleSize\": 1,\"bundleId\": 0,\"recordId\": 0,\"serialNumber\": 0},\"odeReceivedAt\": \"2024-12-23T18:59:44.341Z\",\"schemaVersion\": 7,\"maxDurationTime\": 0,\"recordGeneratedAt\": \"\",\"recordGeneratedBy\": \"RSU\",\"sanitized\": false,\"odePacketID\": \"\",\"odeTimStartDateTime\": \"\",\"asn1\": \"001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E00\",\"mapSource\": \"RSU\",\"originIp\": \"172.24.0.1\"},\"payload\": {\"data\": {\"msgIssueRevision\": 0,\"layerType\": \"intersectionData\",\"layerID\": 0,\"intersections\": {\"intersectionGeometry\": [{\"id\": {\"id\": 12109},\"revision\": 0,\"refPoint\": {\"latitude\": 39.5952649,\"longitude\": -105.0914122,\"elevation\": 1677.0},\"laneWidth\": 366,\"laneSet\": {\"GenericLane\": [{\"laneID\": 2,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2225,\"y\": 808}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 10517,\"y\": -161}},\"attributes\": {\"dElevation\": -60}},{\"delta\": {\"nodeXY6\": {\"x\": 2769,\"y\": 112}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6142,\"y\": -180}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 6636,\"y\": -12}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 3804,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 19,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 3,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2222,\"y\": 515}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 2933,\"y\": -82}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6259,\"y\": -85}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 3416,\"y\": -98}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 6867,\"y\": -39}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 2657,\"y\": -55}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 4259,\"y\": 67}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 3481,\"y\": 0}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 1,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2215,\"y\": 1218}}},{\"delta\": {\"nodeXY6\": {\"x\": 10451,\"y\": -223}},\"attributes\": {\"dElevation\": -70}},{\"delta\": {\"nodeXY6\": {\"x\": 1852,\"y\": -108}},\"attributes\": {\"dElevation\": -10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 28,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 4,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2213,\"y\": -124}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 7187,\"y\": 20}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 541,\"y\": 40}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 1298,\"y\": 229}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 7,\"connectionID\": 1}]}},{\"laneID\": 6,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -1019}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 7}}}]}},{\"laneID\": 5,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -662}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 338,\"y\": 0}}}]}},{\"laneID\": 7,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2294,\"y\": -1463}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 27}}}]}},{\"laneID\": 12,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -952,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": -377}}}]}},{\"laneID\": 13,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1440,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 7,\"y\": -390}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}},{\"laneID\": 10,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 705,\"y\": -1919}}},{\"delta\": {\"nodeXY6\": {\"x\": -1,\"y\": -7515}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -41,\"y\": -5272}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -17,\"y\": -11337}}},{\"delta\": {\"nodeXY6\": {\"x\": 17,\"y\": -5938}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 9,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1090,\"y\": -1930}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 9,\"y\": -4764}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -20,\"y\": -6402}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": -34,\"y\": -7953}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": -10940}},\"attributes\": {\"dElevation\": 20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 27,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 11,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 350,\"y\": -1925}}},{\"delta\": {\"nodeXY6\": {\"x\": -32,\"y\": -6698}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 156,\"y\": -2616}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 1,\"connectionID\": 1}]}},{\"laneID\": 8,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1557,\"y\": -1956}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -101,\"y\": -1956}}},{\"delta\": {\"nodeXY6\": {\"x\": -5,\"y\": -7393}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -121,\"y\": -1636}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 7,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 15,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2405,\"y\": -1018}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -9339,\"y\": 26}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11895,\"y\": -38}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -8814,\"y\": 13}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 16,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2337,\"y\": -656}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -12229,\"y\": 15}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -11362,\"y\": -37}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -6537,\"y\": 1}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 17,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2338,\"y\": -284}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -8892,\"y\": -18}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11959,\"y\": -2}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -1564,\"y\": -180}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 3,\"connectionID\": 1}]}},{\"laneID\": 14,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2401,\"y\": -1380}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -19947,\"y\": 8}},\"attributes\": {\"dElevation\": 80}},{\"delta\": {\"nodeXY6\": {\"x\": -10108,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 18,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2264,\"y\": 479}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -580,\"y\": -14}}}]}},{\"laneID\": 19,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2257,\"y\": 796}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -518,\"y\": 0}}}]}},{\"laneID\": 20,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2236,\"y\": 1229}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -484,\"y\": 0}}}]}},{\"laneID\": 23,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -914,\"y\": 1903}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 225,\"y\": 12288}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 40,\"y\": 9634}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 32,\"y\": 8035}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 28}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 22,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1221,\"y\": 1914}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 92,\"y\": 10475}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 89,\"y\": 11582}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 48,\"y\": 7912}},\"attributes\": {\"dElevation\": -30}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 21,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1649,\"y\": 1935}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": 3182}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 21,\"y\": 5991}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 102,\"y\": 4810}}},{\"delta\": {\"nodeXY6\": {\"x\": 85,\"y\": 11803}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 19,\"y\": 4161}},\"attributes\": {\"dElevation\": -20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 20,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 24,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -535,\"y\": 1926}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 28,\"y\": 4582}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 88,\"y\": 3793}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -143,\"y\": 1866}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 25,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -213,\"y\": 1913}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 14,\"y\": 4594}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -91,\"y\": 2238}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 26,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 724,\"y\": 1902}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 352}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 27,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1105,\"y\": 1888}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 332}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 28,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1591,\"y\": 1874}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -14,\"y\": 346}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}}]}}]}},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; - - // Message 1 but 1 hour later - String inputMap4 = "{\"metadata\": {\"logFileName\": \"\",\"recordType\": \"mapTx\",\"securityResultCode\": \"success\",\"receivedMessageDetails\": {\"rxSource\": \"NA\"},\"payloadType\": \"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\": {\"streamId\": \"c495510d-c87b-4eb8-a413-a5f91e8ac026\",\"bundleSize\": 1,\"bundleId\": 0,\"recordId\": 0,\"serialNumber\": 0},\"odeReceivedAt\": \"2024-12-23T20:00:00.341Z\",\"schemaVersion\": 7,\"maxDurationTime\": 0,\"recordGeneratedAt\": \"\",\"recordGeneratedBy\": \"RSU\",\"sanitized\": false,\"odePacketID\": \"\",\"odeTimStartDateTime\": \"\",\"asn1\": \"001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E00\",\"mapSource\": \"RSU\",\"originIp\": \"172.24.0.1\"},\"payload\": {\"data\": {\"msgIssueRevision\": 0,\"layerType\": \"intersectionData\",\"layerID\": 0,\"intersections\": {\"intersectionGeometry\": [{\"id\": {\"id\": 12110},\"revision\": 0,\"refPoint\": {\"latitude\": 39.5952649,\"longitude\": -105.0914122,\"elevation\": 1677.0},\"laneWidth\": 366,\"laneSet\": {\"GenericLane\": [{\"laneID\": 2,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2225,\"y\": 808}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 10517,\"y\": -161}},\"attributes\": {\"dElevation\": -60}},{\"delta\": {\"nodeXY6\": {\"x\": 2769,\"y\": 112}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6142,\"y\": -180}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 6636,\"y\": -12}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 3804,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 19,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 3,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2222,\"y\": 515}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 2933,\"y\": -82}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 6259,\"y\": -85}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 3416,\"y\": -98}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 6867,\"y\": -39}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 2657,\"y\": -55}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 4259,\"y\": 67}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 3481,\"y\": 0}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 4,\"connectionID\": 1}]}},{\"laneID\": 1,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2215,\"y\": 1218}}},{\"delta\": {\"nodeXY6\": {\"x\": 10451,\"y\": -223}},\"attributes\": {\"dElevation\": -70}},{\"delta\": {\"nodeXY6\": {\"x\": 1852,\"y\": -108}},\"attributes\": {\"dElevation\": -10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 28,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 4,\"ingressApproach\": 1,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2213,\"y\": -124}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 7187,\"y\": 20}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": 541,\"y\": 40}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 1298,\"y\": 229}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 7,\"connectionID\": 1}]}},{\"laneID\": 6,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -1019}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 7}}}]}},{\"laneID\": 5,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2267,\"y\": -662}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 338,\"y\": 0}}}]}},{\"laneID\": 7,\"egressApproach\": 2,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 2294,\"y\": -1463}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 365,\"y\": 27}}}]}},{\"laneID\": 12,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -952,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": -377}}}]}},{\"laneID\": 13,\"egressApproach\": 4,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1440,\"y\": -1898}}},{\"delta\": {\"nodeXY6\": {\"x\": 7,\"y\": -390}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}},{\"laneID\": 10,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 705,\"y\": -1919}}},{\"delta\": {\"nodeXY6\": {\"x\": -1,\"y\": -7515}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -41,\"y\": -5272}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -17,\"y\": -11337}}},{\"delta\": {\"nodeXY6\": {\"x\": 17,\"y\": -5938}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 9,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1090,\"y\": -1930}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 9,\"y\": -4764}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -20,\"y\": -6402}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": -34,\"y\": -7953}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": -10940}},\"attributes\": {\"dElevation\": 20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 27,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 6,\"connectionID\": 1}]}},{\"laneID\": 11,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 350,\"y\": -1925}}},{\"delta\": {\"nodeXY6\": {\"x\": -32,\"y\": -6698}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 156,\"y\": -2616}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 18,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 1,\"connectionID\": 1}]}},{\"laneID\": 8,\"ingressApproach\": 3,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1557,\"y\": -1956}},\"attributes\": {\"dElevation\": -10}},{\"delta\": {\"nodeXY6\": {\"x\": -101,\"y\": -1956}}},{\"delta\": {\"nodeXY6\": {\"x\": -5,\"y\": -7393}},\"attributes\": {\"dElevation\": -40}},{\"delta\": {\"nodeXY6\": {\"x\": -121,\"y\": -1636}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 7,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 15,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2405,\"y\": -1018}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -9339,\"y\": 26}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11895,\"y\": -38}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -8814,\"y\": 13}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 16,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2337,\"y\": -656}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -12229,\"y\": 15}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -11362,\"y\": -37}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -6537,\"y\": 1}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 8,\"connectionID\": 1}]}},{\"laneID\": 17,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2338,\"y\": -284}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -8892,\"y\": -18}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": -11959,\"y\": -2}},\"attributes\": {\"dElevation\": 50}},{\"delta\": {\"nodeXY6\": {\"x\": -1564,\"y\": -180}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 26,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 3,\"connectionID\": 1}]}},{\"laneID\": 14,\"ingressApproach\": 5,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2401,\"y\": -1380}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -19947,\"y\": 8}},\"attributes\": {\"dElevation\": 80}},{\"delta\": {\"nodeXY6\": {\"x\": -10108,\"y\": -7}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 18,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2264,\"y\": 479}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -580,\"y\": -14}}}]}},{\"laneID\": 19,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2257,\"y\": 796}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -518,\"y\": 0}}}]}},{\"laneID\": 20,\"egressApproach\": 6,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -2236,\"y\": 1229}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": -484,\"y\": 0}}}]}},{\"laneID\": 23,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -914,\"y\": 1903}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 225,\"y\": 12288}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 40,\"y\": 9634}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 32,\"y\": 8035}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 0}}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 28}}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 12,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 22,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1221,\"y\": 1914}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 92,\"y\": 10475}},\"attributes\": {\"dElevation\": 30}},{\"delta\": {\"nodeXY6\": {\"x\": 89,\"y\": 11582}},\"attributes\": {\"dElevation\": -20}},{\"delta\": {\"nodeXY6\": {\"x\": 48,\"y\": 7912}},\"attributes\": {\"dElevation\": -30}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 13,\"maneuver\": {\"maneuverStraightAllowed\": true,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 2,\"connectionID\": 1}]}},{\"laneID\": 21,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -1649,\"y\": 1935}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 16,\"y\": 3182}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 21,\"y\": 5991}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 102,\"y\": 4810}}},{\"delta\": {\"nodeXY6\": {\"x\": 85,\"y\": 11803}},\"attributes\": {\"dElevation\": -30}},{\"delta\": {\"nodeXY6\": {\"x\": 19,\"y\": 4161}},\"attributes\": {\"dElevation\": -20}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 20,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": false,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": true,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"connectionID\": 1}]}},{\"laneID\": 24,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -535,\"y\": 1926}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 28,\"y\": 4582}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": 88,\"y\": 3793}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -143,\"y\": 1866}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 6,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 25,\"ingressApproach\": 7,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": true,\"egressPath\": false},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"maneuvers\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": -213,\"y\": 1913}},\"attributes\": {\"dElevation\": 20}},{\"delta\": {\"nodeXY6\": {\"x\": 14,\"y\": 4594}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -91,\"y\": 2238}},\"attributes\": {\"dElevation\": 10}}]},\"connectsTo\": {\"connectsTo\": [{\"connectingLane\": {\"lane\": 5,\"maneuver\": {\"maneuverStraightAllowed\": false,\"maneuverNoStoppingAllowed\": false,\"goWithHalt\": false,\"maneuverLeftAllowed\": true,\"maneuverUTurnAllowed\": false,\"maneuverLeftTurnOnRedAllowed\": false,\"reserved1\": false,\"maneuverRightAllowed\": false,\"maneuverLaneChangeAllowed\": false,\"yieldAllwaysRequired\": false,\"maneuverRightTurnOnRedAllowed\": false,\"caution\": false}},\"signalGroup\": 5,\"connectionID\": 1}]}},{\"laneID\": 26,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 724,\"y\": 1902}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 352}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 27,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1105,\"y\": 1888}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -7,\"y\": 332}},\"attributes\": {\"dElevation\": 10}}]}},{\"laneID\": 28,\"egressApproach\": 8,\"laneAttributes\": {\"directionalUse\": {\"ingressPath\": false,\"egressPath\": true},\"shareWith\": {\"busVehicleTraffic\": false,\"trackedVehicleTraffic\": false,\"individualMotorizedVehicleTraffic\": false,\"taxiVehicleTraffic\": false,\"overlappingLaneDescriptionProvided\": false,\"cyclistVehicleTraffic\": false,\"otherNonMotorizedTrafficTypes\": false,\"multipleLanesTreatedAsOneLane\": false,\"pedestrianTraffic\": false,\"pedestriansTraffic\": false},\"laneType\": {\"vehicle\": {\"isVehicleRevocableLane\": false,\"isVehicleFlyOverLane\": false,\"permissionOnRequest\": false,\"hasIRbeaconCoverage\": false,\"restrictedToBusUse\": false,\"restrictedToTaxiUse\": false,\"restrictedFromPublicUse\": false,\"hovLaneUseOnly\": false}}},\"nodeList\": {\"nodes\": [{\"delta\": {\"nodeXY6\": {\"x\": 1591,\"y\": 1874}},\"attributes\": {\"dElevation\": 10}},{\"delta\": {\"nodeXY6\": {\"x\": -14,\"y\": 346}}},{\"delta\": {\"nodeXY6\": {\"x\": 0,\"y\": 7}}}]}}]}}]}},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; - - @Autowired - DeduplicatorProperties props; - - - - @Test - public void testTopology() { - - props = new DeduplicatorProperties(); - props.setKafkaTopicOdeMapJson(inputTopic); - props.setKafkaTopicDeduplicatedOdeMapJson(outputTopic); - - MapDeduplicatorTopology mapDeduplicatorTopology = new MapDeduplicatorTopology(props, null); - - Topology topology = mapDeduplicatorTopology.buildTopology(); - - try (TopologyTestDriver driver = new TopologyTestDriver(topology)) { - - - TestInputTopic inputOdeMapData = driver.createInputTopic( - inputTopic, - Serdes.Void().serializer(), - Serdes.String().serializer()); - - - TestOutputTopic outputOdeMapData = driver.createOutputTopic( - outputTopic, - Serdes.String().deserializer(), - JsonSerdes.OdeMap().deserializer()); - - inputOdeMapData.pipeInput(null, inputMap1); - inputOdeMapData.pipeInput(null, inputMap2); - inputOdeMapData.pipeInput(null, inputMap3); - inputOdeMapData.pipeInput(null, inputMap4); - - List> mapDeduplicationResults = outputOdeMapData.readKeyValuesToList(); - - // validate that only 3 messages make it through - assertEquals(3, mapDeduplicationResults.size()); - - objectMapper = new ObjectMapper(); - OdeMapData map1 = objectMapper.readValue(inputMap1, OdeMapData.class); - OdeMapData map3 = objectMapper.readValue(inputMap3, OdeMapData.class); - OdeMapData map4 = objectMapper.readValue(inputMap4, OdeMapData.class); - - - assertEquals(map1.getMetadata().getOdeReceivedAt(), mapDeduplicationResults.get(0).value.getMetadata().getOdeReceivedAt()); - assertEquals(map3.getMetadata().getOdeReceivedAt(), mapDeduplicationResults.get(1).value.getMetadata().getOdeReceivedAt()); - assertEquals(map4.getMetadata().getOdeReceivedAt(), mapDeduplicationResults.get(2).value.getMetadata().getOdeReceivedAt()); - - } catch (JsonMappingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (JsonProcessingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/OdeRawEncodedTimDeduplicatorTopologyTest.java b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/OdeRawEncodedTimDeduplicatorTopologyTest.java deleted file mode 100644 index 4b618d9..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/OdeRawEncodedTimDeduplicatorTopologyTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package deduplicator; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KeyValue; -import org.apache.kafka.streams.TestInputTopic; -import org.apache.kafka.streams.TestOutputTopic; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.TopologyTestDriver; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.OdeRawEncodedTimDeduplicatorTopology; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.List; - - -public class OdeRawEncodedTimDeduplicatorTopologyTest { - - String inputTopic = "topic.OdeRawEncodedTIMJson"; - String outputTopic = "topic.DeduplicatedOdeRawEncodedTIMJson"; - - ObjectMapper objectMapper = new ObjectMapper(); - - // Original Message - String inputTim1 = "{ \"metadata\": { \"securityResultCode\": \"success\", \"recordGeneratedBy\": \"RSU\", \"schemaVersion\": 6, \"payloadType\": \"us.dot.its.jpo.ode.model.OdeAsn1Payload\", \"serialId\": { \"recordId\": 0, \"serialNumber\": 0, \"streamId\": \"5f470323-7770-4810-b225-8c45aa672103\", \"bundleSize\": 1, \"bundleId\": 0 }, \"sanitized\": false, \"recordType\": \"timMsg\", \"maxDurationTime\": 0, \"odeReceivedAt\": \"2024-07-22T23:23:29.553Z\", \"originIp\": \"10.16.28.53\" }, \"payload\": { \"data\": { \"bytes\": \"001F63701409FF38D05CD47AF567A4570F775D9B0301C269D16DD9656F9637FFF93F421D3B001EA007F99937E1CF5AD1BB0BF4A9D5BEC5BB25CC5B2E64E173162DA00000000269D16DD9656F9631388C100021000EBF7272441F8CFDED60004008027BBAECD8A1A81EF1C153853DD08B394DDCE85F7F4F2222BE087C98000801004F775D9B002F378A81FD1358540F893502C0B711D815FF7883E0A9AACF804536FC9E2A39A67D4289155859ABA8ACBD4997855D345BA429991568E1CA702BA1D8ADFF4805456C0A46862B7F41BE614A122DFB8B0FA019FC52FC8AFF62A7DA3D3F1C9A00BC220AA6B0DC20571A23C142A8C0368F14D181D9B8E2FA859714531606FF8197DC2D81469C97540A33D8D25850D7CA7E82916C1F82142D3A8A20A4884311C320C8EB2290AD1BAC0C84856E8A1B1D760C51BE458B8189591FF0C64E68D0004008027BBAECD8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" }, \"dataType\": \"us.dot.its.jpo.ode.model.OdeHexByteArray\" }}"; - - // Shifted Forward .1 seconds - Should be deduplicated - String inputTim2 = "{ \"metadata\": { \"securityResultCode\": \"success\", \"recordGeneratedBy\": \"RSU\", \"schemaVersion\": 6, \"payloadType\": \"us.dot.its.jpo.ode.model.OdeAsn1Payload\", \"serialId\": { \"recordId\": 0, \"serialNumber\": 0, \"streamId\": \"5f470323-7770-4810-b225-8c45aa672103\", \"bundleSize\": 1, \"bundleId\": 0 }, \"sanitized\": false, \"recordType\": \"timMsg\", \"maxDurationTime\": 0, \"odeReceivedAt\": \"2024-07-22T23:23:29.653Z\", \"originIp\": \"10.16.28.53\" }, \"payload\": { \"data\": { \"bytes\": \"001F63701409FF38D05CD47AF567A4570F775D9B0301C269D16DD9656F9637FFF93F421D3B001EA007F99937E1CF5AD1BB0BF4A9D5BEC5BB25CC5B2E64E173162DA00000000269D16DD9656F9631388C100021000EBF7272441F8CFDED60004008027BBAECD8A1A81EF1C153853DD08B394DDCE85F7F4F2222BE087C98000801004F775D9B002F378A81FD1358540F893502C0B711D815FF7883E0A9AACF804536FC9E2A39A67D4289155859ABA8ACBD4997855D345BA429991568E1CA702BA1D8ADFF4805456C0A46862B7F41BE614A122DFB8B0FA019FC52FC8AFF62A7DA3D3F1C9A00BC220AA6B0DC20571A23C142A8C0368F14D181D9B8E2FA859714531606FF8197DC2D81469C97540A33D8D25850D7CA7E82916C1F82142D3A8A20A4884311C320C8EB2290AD1BAC0C84856E8A1B1D760C51BE458B8189591FF0C64E68D0004008027BBAECD8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" }, \"dataType\": \"us.dot.its.jpo.ode.model.OdeHexByteArray\" }}"; - - // Shifted Forward 1 hour Should be allowed to pass through - String inputTim3 = "{ \"metadata\": { \"securityResultCode\": \"success\", \"recordGeneratedBy\": \"RSU\", \"schemaVersion\": 6, \"payloadType\": \"us.dot.its.jpo.ode.model.OdeAsn1Payload\", \"serialId\": { \"recordId\": 0, \"serialNumber\": 0, \"streamId\": \"5f470323-7770-4810-b225-8c45aa672103\", \"bundleSize\": 1, \"bundleId\": 0 }, \"sanitized\": false, \"recordType\": \"timMsg\", \"maxDurationTime\": 0, \"odeReceivedAt\": \"2024-07-23T00:23:29.653Z\", \"originIp\": \"10.16.28.53\" }, \"payload\": { \"data\": { \"bytes\": \"001F63701409FF38D05CD47AF567A4570F775D9B0301C269D16DD9656F9637FFF93F421D3B001EA007F99937E1CF5AD1BB0BF4A9D5BEC5BB25CC5B2E64E173162DA00000000269D16DD9656F9631388C100021000EBF7272441F8CFDED60004008027BBAECD8A1A81EF1C153853DD08B394DDCE85F7F4F2222BE087C98000801004F775D9B002F378A81FD1358540F893502C0B711D815FF7883E0A9AACF804536FC9E2A39A67D4289155859ABA8ACBD4997855D345BA429991568E1CA702BA1D8ADFF4805456C0A46862B7F41BE614A122DFB8B0FA019FC52FC8AFF62A7DA3D3F1C9A00BC220AA6B0DC20571A23C142A8C0368F14D181D9B8E2FA859714531606FF8197DC2D81469C97540A33D8D25850D7CA7E82916C1F82142D3A8A20A4884311C320C8EB2290AD1BAC0C84856E8A1B1D760C51BE458B8189591FF0C64E68D0004008027BBAECD8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" }, \"dataType\": \"us.dot.its.jpo.ode.model.OdeHexByteArray\" }}"; - - // Has a different payload ID. Should be allowed through - String inputTim4 = "{ \"metadata\": { \"securityResultCode\": \"success\", \"recordGeneratedBy\": \"RSU\", \"schemaVersion\": 6, \"payloadType\": \"us.dot.its.jpo.ode.model.OdeAsn1Payload\", \"serialId\": { \"recordId\": 0, \"serialNumber\": 0, \"streamId\": \"5f470323-7770-4810-b225-8c45aa672103\", \"bundleSize\": 1, \"bundleId\": 0 }, \"sanitized\": false, \"recordType\": \"timMsg\", \"maxDurationTime\": 0, \"odeReceivedAt\": \"2024-07-22T23:23:29.553Z\", \"originIp\": \"10.16.28.53\" }, \"payload\": { \"data\": { \"bytes\": \"001F63701409FF38D05CD47AF567A4570F775D9B0301C269D16DD9656F9637FFF93F421D3B001EA007F99937E1CF5AD1BB0BF4A9D5BEC5BB25CC5B2E64E173162DA00000000269D16DD9656F9631388C100021000EBF7272441F8CFDED60004008027BBAECD8A1A81EF1C153853DD08B394DDCE85F7F4F2222BE087C98000801004F775D9B002F378A81FD1358540F893502C0B711D815FF7883E0A9AACF804536FC9E2A39A67D4289155859ABA8ACBD4997855D345BA429991568E1CA702BA1D8ADFF4805456C0A46862B7F41BE614A122DFB8B0FA019FC52FC8AFF62A7DA3D3F1C9A00BC220AA6B0DC20571A23C142A8C0368F14D181D9B8E2FA859714531606FF8197DC2D81469C97540A33D8D25850D7CA7E82916C1F82142D3A8A20A4884311C320C8EB2290AD1BAC0C84856E8A1B1D760C51BE458B8189591FF0C64E68D0004008027BBAECD9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" }, \"dataType\": \"us.dot.its.jpo.ode.model.OdeHexByteArray\" }}"; - - @Autowired - DeduplicatorProperties props; - - @Test - public void testTopology() { - - props = new DeduplicatorProperties(); - props.setKafkaTopicOdeRawEncodedTimJson(inputTopic); - props.setKafkaTopicDeduplicatedOdeRawEncodedTimJson(outputTopic); - - OdeRawEncodedTimDeduplicatorTopology TimDeduplicatorTopology = new OdeRawEncodedTimDeduplicatorTopology(props, null); - - Topology topology = TimDeduplicatorTopology.buildTopology(); - objectMapper.registerModule(new JavaTimeModule()); - - try (TopologyTestDriver driver = new TopologyTestDriver(topology)) { - - - TestInputTopic inputTimData = driver.createInputTopic( - inputTopic, - Serdes.Void().serializer(), - Serdes.String().serializer()); - - - TestOutputTopic outputTimData = driver.createOutputTopic( - outputTopic, - Serdes.String().deserializer(), - Serdes.String().deserializer()); - - inputTimData.pipeInput(null, inputTim1); - inputTimData.pipeInput(null, inputTim2); - inputTimData.pipeInput(null, inputTim3); - inputTimData.pipeInput(null, inputTim4); - - List> timDeduplicatedResults = outputTimData.readKeyValuesToList(); - - // validate that only 3 messages make it through - assertEquals(3, timDeduplicatedResults.size()); - inputTim1 = inputTim1.strip(); - - assertEquals(inputTim1.replace(" ", ""), timDeduplicatedResults.get(0).value.replace(" ", "")); - assertEquals(inputTim3.replace(" ", ""), timDeduplicatedResults.get(1).value.replace(" ", "")); - assertEquals(inputTim4.replace(" ", ""), timDeduplicatedResults.get(2).value.replace(" ", "")); - - }catch(Exception e){ - e.printStackTrace(); - } - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedMapDeduplicatorTopologyTest.java b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedMapDeduplicatorTopologyTest.java deleted file mode 100644 index 331bfdc..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedMapDeduplicatorTopologyTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package deduplicator; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KeyValue; -import org.apache.kafka.streams.TestInputTopic; -import org.apache.kafka.streams.TestOutputTopic; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.TopologyTestDriver; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.ProcessedMapDeduplicatorTopology; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.LineString; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; -import us.dot.its.jpo.geojsonconverter.serialization.JsonSerdes; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.List; - - -public class ProcessedMapDeduplicatorTopologyTest { - - String inputTopic = "topic.ProcessedMap"; - String outputTopic = "topic.DeduplicatedProcessedMap"; - - - TypeReference> typeReference = new TypeReference<>(){}; - ObjectMapper objectMapper = new ObjectMapper(); - - String inputProcessedMap1 = "{\"mapFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":1,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907089,39.587905],[-105.0906245,39.5876246],[-105.0905203,39.587281],[-105.0904383,39.5870554],[-105.0903588,39.5868383],[-105.0902622,39.5865865],[-105.0901249,39.5862612],[-105.0900451,39.5860819],[-105.0899283,39.5858283],[-105.0898739,39.5857117],[-105.0895814,39.5851569],[-105.0888764,39.5839527]]},\"properties\":{\"nodes\":[{\"delta\":[1511,-1514]},{\"delta\":[723,-3116],\"delevation\":10},{\"delta\":[892,-3818],\"delevation\":20},{\"delta\":[702,-2507],\"delevation\":20},{\"delta\":[681,-2412],\"delevation\":10},{\"delta\":[827,-2798],\"delevation\":10},{\"delta\":[1176,-3614],\"delevation\":20},{\"delta\":[683,-1992]},{\"delta\":[1000,-2818],\"delevation\":10},{\"delta\":[466,-1295],\"delevation\":20},{\"delta\":[2505,-6164],\"delevation\":20},{\"delta\":[6037,-13380],\"delevation\":70}],\"laneId\":1,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":2,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907462,39.5878956],[-105.090652,39.5875596],[-105.090534,39.5871793],[-105.0903457,39.5866864],[-105.0902123,39.5863581],[-105.0900802,39.5860572],[-105.0898164,39.5855019],[-105.0895409,39.5849856],[-105.088922,39.5839259]]},\"properties\":{\"nodes\":[{\"delta\":[1192,-1619]},{\"delta\":[807,-3733],\"delevation\":30},{\"delta\":[1010,-4226],\"delevation\":10},{\"delta\":[1612,-5477],\"delevation\":30},{\"delta\":[1142,-3648],\"delevation\":20},{\"delta\":[1131,-3343],\"delevation\":10},{\"delta\":[2259,-6170],\"delevation\":30},{\"delta\":[2359,-5737],\"delevation\":30},{\"delta\":[5300,-11774],\"delevation\":50}],\"laneId\":2,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":3,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907914,39.5878879],[-105.090747,39.5877247],[-105.0906498,39.5874141],[-105.0906262,39.5873356],[-105.0905865,39.5872922]]},\"properties\":{\"nodes\":[{\"delta\":[805,-1704],\"delevation\":10},{\"delta\":[380,-1813]},{\"delta\":[832,-3451],\"delevation\":30},{\"delta\":[202,-872]},{\"delta\":[340,-482],\"delevation\":-10}],\"laneId\":3,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":6,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910008,39.5878477],[-105.0909927,39.5878181]]},\"properties\":{\"nodes\":[{\"delta\":[-988,-2151],\"delevation\":20},{\"delta\":[69,-329]}],\"laneId\":6,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":5,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.090959,39.5878557],[-105.0909501,39.5878218]]},\"properties\":{\"nodes\":[{\"delta\":[-630,-2062],\"delevation\":10},{\"delta\":[76,-377],\"delevation\":10}],\"laneId\":5,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":4,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.090914,39.5878612],[-105.0909051,39.5878298]]},\"properties\":{\"nodes\":[{\"delta\":[-245,-2001],\"delevation\":10},{\"delta\":[76,-349]}],\"laneId\":4,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":10,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911626,39.5880622],[-105.0912043,39.5880536]]},\"properties\":{\"nodes\":[{\"delta\":[-2374,232],\"delevation\":10},{\"delta\":[-357,-96]}],\"laneId\":10,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":4,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":8,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911477,39.587995],[-105.0914565,39.5879427],[-105.0917937,39.5879029],[-105.0922121,39.5878724],[-105.0926509,39.5878748],[-105.0930303,39.5879073],[-105.0932697,39.5879503],[-105.0937243,39.5880569],[-105.0940309,39.5881258],[-105.0943257,39.5881804],[-105.094592,39.5882097]]},\"properties\":{\"nodes\":[{\"delta\":[-2246,-514],\"delevation\":10},{\"delta\":[-2644,-581]},{\"delta\":[-2887,-442],\"delevation\":10},{\"delta\":[-3583,-339],\"delevation\":10},{\"delta\":[-3757,27]},{\"delta\":[-3249,361],\"delevation\":-10},{\"delta\":[-2050,478]},{\"delta\":[-3893,1184]},{\"delta\":[-2625,766],\"delevation\":-10},{\"delta\":[-2524,607],\"delevation\":10},{\"delta\":[-2280,325],\"delevation\":10}],\"laneId\":8,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":7,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911442,39.5879589],[-105.0914154,39.5879165],[-105.0916346,39.5878851],[-105.0918433,39.5878639],[-105.0921546,39.5878547]]},\"properties\":{\"nodes\":[{\"delta\":[-2216,-915],\"delevation\":10},{\"delta\":[-2322,-471]},{\"delta\":[-1877,-349],\"delevation\":10},{\"delta\":[-1787,-235]},{\"delta\":[-2666,-102],\"delevation\":10}],\"laneId\":7,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":9,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911534,39.5880261],[-105.091436,39.5879812],[-105.0916658,39.5879507],[-105.091881,39.5879277],[-105.0921287,39.5878972]]},\"properties\":{\"nodes\":[{\"delta\":[-2295,-169],\"delevation\":10},{\"delta\":[-2420,-499]},{\"delta\":[-1968,-339],\"delevation\":10},{\"delta\":[-1843,-256]},{\"delta\":[-2121,-339]}],\"laneId\":9,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":12,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910447,39.5881948],[-105.0911481,39.5886317],[-105.091196,39.588862],[-105.0912349,39.5890282],[-105.0912722,39.5893202],[-105.0913306,39.5897261],[-105.0913695,39.5900324],[-105.0914008,39.5903008],[-105.0914893,39.5913099],[-105.091527,39.5923157]]},\"properties\":{\"nodes\":[{\"delta\":[-1364,1705],\"delevation\":10},{\"delta\":[-885,4854],\"delevation\":-30},{\"delta\":[-410,2559],\"delevation\":10},{\"delta\":[-333,1847],\"delevation\":-10},{\"delta\":[-319,3244],\"delevation\":-20},{\"delta\":[-500,4510]},{\"delta\":[-333,3403],\"delevation\":-30},{\"delta\":[-268,2982]},{\"delta\":[-758,11212],\"delevation\":-30},{\"delta\":[-323,11176],\"delevation\":-70}],\"laneId\":12,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":13,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910013,39.5881975],[-105.0911059,39.5886309],[-105.091144,39.5888313],[-105.0911829,39.5890442],[-105.0912308,39.5893169],[-105.0912689,39.5895877],[-105.0913005,39.5898143],[-105.0913313,39.5900714],[-105.0913597,39.5902968],[-105.0914461,39.5913017],[-105.0914756,39.592324]]},\"properties\":{\"nodes\":[{\"delta\":[-992,1735],\"delevation\":10},{\"delta\":[-896,4816],\"delevation\":-30},{\"delta\":[-326,2227],\"delevation\":10},{\"delta\":[-333,2366]},{\"delta\":[-410,3030],\"delevation\":-20},{\"delta\":[-326,3009],\"delevation\":-10},{\"delta\":[-271,2518],\"delevation\":-10},{\"delta\":[-264,2857],\"delevation\":-20},{\"delta\":[-243,2504]},{\"delta\":[-740,11165],\"delevation\":-30},{\"delta\":[-253,11359],\"delevation\":-70}],\"laneId\":13,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":11,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910891,39.5881859],[-105.0911549,39.5884681],[-105.091196,39.5886783],[-105.091222,39.5888049],[-105.0912401,39.5889649]]},\"properties\":{\"nodes\":[{\"delta\":[-1744,1607],\"delevation\":10},{\"delta\":[-563,3136],\"delevation\":-20},{\"delta\":[-352,2336],\"delevation\":-10},{\"delta\":[-223,1407],\"delevation\":10},{\"delta\":[-155,1778]}],\"laneId\":11,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":14,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0908389,39.5882151],[-105.0908478,39.5882471]]},\"properties\":{\"nodes\":[{\"delta\":[398,1931],\"delevation\":-10},{\"delta\":[-76,356]}],\"laneId\":14,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":15,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907875,39.58822],[-105.0907979,39.5882514]]},\"properties\":{\"nodes\":[{\"delta\":[838,1985],\"delevation\":-20},{\"delta\":[-89,349]}],\"laneId\":15,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}}]},\"connectingLanesFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":\"1-15\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907089,39.587905],[-105.0907875,39.58822]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":1,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"2-14\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907462,39.5878956],[-105.0908389,39.5882151]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":2,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"3-10\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907914,39.5878879],[-105.0911626,39.5880622]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":3,\"egressLaneId\":10}},{\"type\":\"Feature\",\"id\":\"8-15\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911477,39.587995],[-105.0907875,39.58822]]},\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":8,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"7-6\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911442,39.5879589],[-105.0910008,39.5878477]]},\"properties\":{\"ingressLaneId\":7,\"egressLaneId\":6}},{\"type\":\"Feature\",\"id\":\"9-14\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911534,39.5880261],[-105.0908389,39.5882151]]},\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":9,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"12-5\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910447,39.5881948],[-105.090959,39.5878557]]},\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":12,\"egressLaneId\":5}},{\"type\":\"Feature\",\"id\":\"13-4\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910013,39.5881975],[-105.090914,39.5878612]]},\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":13,\"egressLaneId\":4}},{\"type\":\"Feature\",\"id\":\"11-10\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910891,39.5881859],[-105.0911626,39.5880622]]},\"properties\":{\"ingressLaneId\":11,\"egressLaneId\":10}}]},\"properties\":{\"messageType\":\"MAP\",\"odeReceivedAt\":\"2024-02-22T23:26:21.06Z\",\"originIp\":\"10.11.81.12\",\"intersectionId\":12109,\"msgIssueRevision\":2,\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1691},\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].id.region: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].id.region\",\"schemaPath\":\"#/$defs/J2735RoadRegulatorID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[8].connectsTo.connectsTo[0].signalGroup: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[8].connectsTo.connectsTo[0].signalGroup\",\"schemaPath\":\"#/$defs/J2735SignalGroupID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[12].connectsTo.connectsTo[0].signalGroup: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[12].connectsTo.connectsTo[0].signalGroup\",\"schemaPath\":\"#/$defs/J2735SignalGroupID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].speedLimits: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].speedLimits\",\"schemaPath\":\"#/$defs/J2735SpeedLimitList_Wrapper/type\"}],\"laneWidth\":366,\"mapSource\":\"RSU\",\"timeStamp\":\"2024-02-22T23:26:21.06Z\"}}"; - String inputProcessedMap2 = "{\"mapFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":1,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907089,39.587905],[-105.0906245,39.5876246],[-105.0905203,39.587281],[-105.0904383,39.5870554],[-105.0903588,39.5868383],[-105.0902622,39.5865865],[-105.0901249,39.5862612],[-105.0900451,39.5860819],[-105.0899283,39.5858283],[-105.0898739,39.5857117],[-105.0895814,39.5851569],[-105.0888764,39.5839527]]},\"properties\":{\"nodes\":[{\"delta\":[1511,-1514]},{\"delta\":[723,-3116],\"delevation\":10},{\"delta\":[892,-3818],\"delevation\":20},{\"delta\":[702,-2507],\"delevation\":20},{\"delta\":[681,-2412],\"delevation\":10},{\"delta\":[827,-2798],\"delevation\":10},{\"delta\":[1176,-3614],\"delevation\":20},{\"delta\":[683,-1992]},{\"delta\":[1000,-2818],\"delevation\":10},{\"delta\":[466,-1295],\"delevation\":20},{\"delta\":[2505,-6164],\"delevation\":20},{\"delta\":[6037,-13380],\"delevation\":70}],\"laneId\":1,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":2,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907462,39.5878956],[-105.090652,39.5875596],[-105.090534,39.5871793],[-105.0903457,39.5866864],[-105.0902123,39.5863581],[-105.0900802,39.5860572],[-105.0898164,39.5855019],[-105.0895409,39.5849856],[-105.088922,39.5839259]]},\"properties\":{\"nodes\":[{\"delta\":[1192,-1619]},{\"delta\":[807,-3733],\"delevation\":30},{\"delta\":[1010,-4226],\"delevation\":10},{\"delta\":[1612,-5477],\"delevation\":30},{\"delta\":[1142,-3648],\"delevation\":20},{\"delta\":[1131,-3343],\"delevation\":10},{\"delta\":[2259,-6170],\"delevation\":30},{\"delta\":[2359,-5737],\"delevation\":30},{\"delta\":[5300,-11774],\"delevation\":50}],\"laneId\":2,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":3,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907914,39.5878879],[-105.090747,39.5877247],[-105.0906498,39.5874141],[-105.0906262,39.5873356],[-105.0905865,39.5872922]]},\"properties\":{\"nodes\":[{\"delta\":[805,-1704],\"delevation\":10},{\"delta\":[380,-1813]},{\"delta\":[832,-3451],\"delevation\":30},{\"delta\":[202,-872]},{\"delta\":[340,-482],\"delevation\":-10}],\"laneId\":3,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":6,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910008,39.5878477],[-105.0909927,39.5878181]]},\"properties\":{\"nodes\":[{\"delta\":[-988,-2151],\"delevation\":20},{\"delta\":[69,-329]}],\"laneId\":6,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":5,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.090959,39.5878557],[-105.0909501,39.5878218]]},\"properties\":{\"nodes\":[{\"delta\":[-630,-2062],\"delevation\":10},{\"delta\":[76,-377],\"delevation\":10}],\"laneId\":5,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":4,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.090914,39.5878612],[-105.0909051,39.5878298]]},\"properties\":{\"nodes\":[{\"delta\":[-245,-2001],\"delevation\":10},{\"delta\":[76,-349]}],\"laneId\":4,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":10,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911626,39.5880622],[-105.0912043,39.5880536]]},\"properties\":{\"nodes\":[{\"delta\":[-2374,232],\"delevation\":10},{\"delta\":[-357,-96]}],\"laneId\":10,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":4,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":8,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911477,39.587995],[-105.0914565,39.5879427],[-105.0917937,39.5879029],[-105.0922121,39.5878724],[-105.0926509,39.5878748],[-105.0930303,39.5879073],[-105.0932697,39.5879503],[-105.0937243,39.5880569],[-105.0940309,39.5881258],[-105.0943257,39.5881804],[-105.094592,39.5882097]]},\"properties\":{\"nodes\":[{\"delta\":[-2246,-514],\"delevation\":10},{\"delta\":[-2644,-581]},{\"delta\":[-2887,-442],\"delevation\":10},{\"delta\":[-3583,-339],\"delevation\":10},{\"delta\":[-3757,27]},{\"delta\":[-3249,361],\"delevation\":-10},{\"delta\":[-2050,478]},{\"delta\":[-3893,1184]},{\"delta\":[-2625,766],\"delevation\":-10},{\"delta\":[-2524,607],\"delevation\":10},{\"delta\":[-2280,325],\"delevation\":10}],\"laneId\":8,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":7,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911442,39.5879589],[-105.0914154,39.5879165],[-105.0916346,39.5878851],[-105.0918433,39.5878639],[-105.0921546,39.5878547]]},\"properties\":{\"nodes\":[{\"delta\":[-2216,-915],\"delevation\":10},{\"delta\":[-2322,-471]},{\"delta\":[-1877,-349],\"delevation\":10},{\"delta\":[-1787,-235]},{\"delta\":[-2666,-102],\"delevation\":10}],\"laneId\":7,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":9,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911534,39.5880261],[-105.091436,39.5879812],[-105.0916658,39.5879507],[-105.091881,39.5879277],[-105.0921287,39.5878972]]},\"properties\":{\"nodes\":[{\"delta\":[-2295,-169],\"delevation\":10},{\"delta\":[-2420,-499]},{\"delta\":[-1968,-339],\"delevation\":10},{\"delta\":[-1843,-256]},{\"delta\":[-2121,-339]}],\"laneId\":9,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":12,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910447,39.5881948],[-105.0911481,39.5886317],[-105.091196,39.588862],[-105.0912349,39.5890282],[-105.0912722,39.5893202],[-105.0913306,39.5897261],[-105.0913695,39.5900324],[-105.0914008,39.5903008],[-105.0914893,39.5913099],[-105.091527,39.5923157]]},\"properties\":{\"nodes\":[{\"delta\":[-1364,1705],\"delevation\":10},{\"delta\":[-885,4854],\"delevation\":-30},{\"delta\":[-410,2559],\"delevation\":10},{\"delta\":[-333,1847],\"delevation\":-10},{\"delta\":[-319,3244],\"delevation\":-20},{\"delta\":[-500,4510]},{\"delta\":[-333,3403],\"delevation\":-30},{\"delta\":[-268,2982]},{\"delta\":[-758,11212],\"delevation\":-30},{\"delta\":[-323,11176],\"delevation\":-70}],\"laneId\":12,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":13,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910013,39.5881975],[-105.0911059,39.5886309],[-105.091144,39.5888313],[-105.0911829,39.5890442],[-105.0912308,39.5893169],[-105.0912689,39.5895877],[-105.0913005,39.5898143],[-105.0913313,39.5900714],[-105.0913597,39.5902968],[-105.0914461,39.5913017],[-105.0914756,39.592324]]},\"properties\":{\"nodes\":[{\"delta\":[-992,1735],\"delevation\":10},{\"delta\":[-896,4816],\"delevation\":-30},{\"delta\":[-326,2227],\"delevation\":10},{\"delta\":[-333,2366]},{\"delta\":[-410,3030],\"delevation\":-20},{\"delta\":[-326,3009],\"delevation\":-10},{\"delta\":[-271,2518],\"delevation\":-10},{\"delta\":[-264,2857],\"delevation\":-20},{\"delta\":[-243,2504]},{\"delta\":[-740,11165],\"delevation\":-30},{\"delta\":[-253,11359],\"delevation\":-70}],\"laneId\":13,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":11,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910891,39.5881859],[-105.0911549,39.5884681],[-105.091196,39.5886783],[-105.091222,39.5888049],[-105.0912401,39.5889649]]},\"properties\":{\"nodes\":[{\"delta\":[-1744,1607],\"delevation\":10},{\"delta\":[-563,3136],\"delevation\":-20},{\"delta\":[-352,2336],\"delevation\":-10},{\"delta\":[-223,1407],\"delevation\":10},{\"delta\":[-155,1778]}],\"laneId\":11,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":14,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0908389,39.5882151],[-105.0908478,39.5882471]]},\"properties\":{\"nodes\":[{\"delta\":[398,1931],\"delevation\":-10},{\"delta\":[-76,356]}],\"laneId\":14,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":15,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907875,39.58822],[-105.0907979,39.5882514]]},\"properties\":{\"nodes\":[{\"delta\":[838,1985],\"delevation\":-20},{\"delta\":[-89,349]}],\"laneId\":15,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}}]},\"connectingLanesFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":\"1-15\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907089,39.587905],[-105.0907875,39.58822]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":1,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"2-14\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907462,39.5878956],[-105.0908389,39.5882151]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":2,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"3-10\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907914,39.5878879],[-105.0911626,39.5880622]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":3,\"egressLaneId\":10}},{\"type\":\"Feature\",\"id\":\"8-15\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911477,39.587995],[-105.0907875,39.58822]]},\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":8,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"7-6\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911442,39.5879589],[-105.0910008,39.5878477]]},\"properties\":{\"ingressLaneId\":7,\"egressLaneId\":6}},{\"type\":\"Feature\",\"id\":\"9-14\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911534,39.5880261],[-105.0908389,39.5882151]]},\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":9,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"12-5\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910447,39.5881948],[-105.090959,39.5878557]]},\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":12,\"egressLaneId\":5}},{\"type\":\"Feature\",\"id\":\"13-4\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910013,39.5881975],[-105.090914,39.5878612]]},\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":13,\"egressLaneId\":4}},{\"type\":\"Feature\",\"id\":\"11-10\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910891,39.5881859],[-105.0911626,39.5880622]]},\"properties\":{\"ingressLaneId\":11,\"egressLaneId\":10}}]},\"properties\":{\"messageType\":\"MAP\",\"odeReceivedAt\":\"2024-02-22T23:26:22.074Z\",\"originIp\":\"10.11.81.12\",\"intersectionId\":12109,\"msgIssueRevision\":2,\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1691},\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].id.region: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].id.region\",\"schemaPath\":\"#/$defs/J2735RoadRegulatorID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[8].connectsTo.connectsTo[0].signalGroup: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[8].connectsTo.connectsTo[0].signalGroup\",\"schemaPath\":\"#/$defs/J2735SignalGroupID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[12].connectsTo.connectsTo[0].signalGroup: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[12].connectsTo.connectsTo[0].signalGroup\",\"schemaPath\":\"#/$defs/J2735SignalGroupID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].speedLimits: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].speedLimits\",\"schemaPath\":\"#/$defs/J2735SpeedLimitList_Wrapper/type\"}],\"laneWidth\":366,\"mapSource\":\"RSU\",\"timeStamp\":\"2024-02-22T23:26:22.074Z\"}}"; - String inputProcessedMap3 = "{\"mapFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":1,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907089,39.587905],[-105.0906245,39.5876246],[-105.0905203,39.587281],[-105.0904383,39.5870554],[-105.0903588,39.5868383],[-105.0902622,39.5865865],[-105.0901249,39.5862612],[-105.0900451,39.5860819],[-105.0899283,39.5858283],[-105.0898739,39.5857117],[-105.0895814,39.5851569],[-105.0888764,39.5839527]]},\"properties\":{\"nodes\":[{\"delta\":[1511,-1514]},{\"delta\":[723,-3116],\"delevation\":10},{\"delta\":[892,-3818],\"delevation\":20},{\"delta\":[702,-2507],\"delevation\":20},{\"delta\":[681,-2412],\"delevation\":10},{\"delta\":[827,-2798],\"delevation\":10},{\"delta\":[1176,-3614],\"delevation\":20},{\"delta\":[683,-1992]},{\"delta\":[1000,-2818],\"delevation\":10},{\"delta\":[466,-1295],\"delevation\":20},{\"delta\":[2505,-6164],\"delevation\":20},{\"delta\":[6037,-13380],\"delevation\":70}],\"laneId\":1,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":2,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907462,39.5878956],[-105.090652,39.5875596],[-105.090534,39.5871793],[-105.0903457,39.5866864],[-105.0902123,39.5863581],[-105.0900802,39.5860572],[-105.0898164,39.5855019],[-105.0895409,39.5849856],[-105.088922,39.5839259]]},\"properties\":{\"nodes\":[{\"delta\":[1192,-1619]},{\"delta\":[807,-3733],\"delevation\":30},{\"delta\":[1010,-4226],\"delevation\":10},{\"delta\":[1612,-5477],\"delevation\":30},{\"delta\":[1142,-3648],\"delevation\":20},{\"delta\":[1131,-3343],\"delevation\":10},{\"delta\":[2259,-6170],\"delevation\":30},{\"delta\":[2359,-5737],\"delevation\":30},{\"delta\":[5300,-11774],\"delevation\":50}],\"laneId\":2,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":3,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907914,39.5878879],[-105.090747,39.5877247],[-105.0906498,39.5874141],[-105.0906262,39.5873356],[-105.0905865,39.5872922]]},\"properties\":{\"nodes\":[{\"delta\":[805,-1704],\"delevation\":10},{\"delta\":[380,-1813]},{\"delta\":[832,-3451],\"delevation\":30},{\"delta\":[202,-872]},{\"delta\":[340,-482],\"delevation\":-10}],\"laneId\":3,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":6,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910008,39.5878477],[-105.0909927,39.5878181]]},\"properties\":{\"nodes\":[{\"delta\":[-988,-2151],\"delevation\":20},{\"delta\":[69,-329]}],\"laneId\":6,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":5,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.090959,39.5878557],[-105.0909501,39.5878218]]},\"properties\":{\"nodes\":[{\"delta\":[-630,-2062],\"delevation\":10},{\"delta\":[76,-377],\"delevation\":10}],\"laneId\":5,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":4,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.090914,39.5878612],[-105.0909051,39.5878298]]},\"properties\":{\"nodes\":[{\"delta\":[-245,-2001],\"delevation\":10},{\"delta\":[76,-349]}],\"laneId\":4,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":10,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911626,39.5880622],[-105.0912043,39.5880536]]},\"properties\":{\"nodes\":[{\"delta\":[-2374,232],\"delevation\":10},{\"delta\":[-357,-96]}],\"laneId\":10,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":4,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":8,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911477,39.587995],[-105.0914565,39.5879427],[-105.0917937,39.5879029],[-105.0922121,39.5878724],[-105.0926509,39.5878748],[-105.0930303,39.5879073],[-105.0932697,39.5879503],[-105.0937243,39.5880569],[-105.0940309,39.5881258],[-105.0943257,39.5881804],[-105.094592,39.5882097]]},\"properties\":{\"nodes\":[{\"delta\":[-2246,-514],\"delevation\":10},{\"delta\":[-2644,-581]},{\"delta\":[-2887,-442],\"delevation\":10},{\"delta\":[-3583,-339],\"delevation\":10},{\"delta\":[-3757,27]},{\"delta\":[-3249,361],\"delevation\":-10},{\"delta\":[-2050,478]},{\"delta\":[-3893,1184]},{\"delta\":[-2625,766],\"delevation\":-10},{\"delta\":[-2524,607],\"delevation\":10},{\"delta\":[-2280,325],\"delevation\":10}],\"laneId\":8,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":7,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911442,39.5879589],[-105.0914154,39.5879165],[-105.0916346,39.5878851],[-105.0918433,39.5878639],[-105.0921546,39.5878547]]},\"properties\":{\"nodes\":[{\"delta\":[-2216,-915],\"delevation\":10},{\"delta\":[-2322,-471]},{\"delta\":[-1877,-349],\"delevation\":10},{\"delta\":[-1787,-235]},{\"delta\":[-2666,-102],\"delevation\":10}],\"laneId\":7,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":9,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911534,39.5880261],[-105.091436,39.5879812],[-105.0916658,39.5879507],[-105.091881,39.5879277],[-105.0921287,39.5878972]]},\"properties\":{\"nodes\":[{\"delta\":[-2295,-169],\"delevation\":10},{\"delta\":[-2420,-499]},{\"delta\":[-1968,-339],\"delevation\":10},{\"delta\":[-1843,-256]},{\"delta\":[-2121,-339]}],\"laneId\":9,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":12,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910447,39.5881948],[-105.0911481,39.5886317],[-105.091196,39.588862],[-105.0912349,39.5890282],[-105.0912722,39.5893202],[-105.0913306,39.5897261],[-105.0913695,39.5900324],[-105.0914008,39.5903008],[-105.0914893,39.5913099],[-105.091527,39.5923157]]},\"properties\":{\"nodes\":[{\"delta\":[-1364,1705],\"delevation\":10},{\"delta\":[-885,4854],\"delevation\":-30},{\"delta\":[-410,2559],\"delevation\":10},{\"delta\":[-333,1847],\"delevation\":-10},{\"delta\":[-319,3244],\"delevation\":-20},{\"delta\":[-500,4510]},{\"delta\":[-333,3403],\"delevation\":-30},{\"delta\":[-268,2982]},{\"delta\":[-758,11212],\"delevation\":-30},{\"delta\":[-323,11176],\"delevation\":-70}],\"laneId\":12,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":13,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910013,39.5881975],[-105.0911059,39.5886309],[-105.091144,39.5888313],[-105.0911829,39.5890442],[-105.0912308,39.5893169],[-105.0912689,39.5895877],[-105.0913005,39.5898143],[-105.0913313,39.5900714],[-105.0913597,39.5902968],[-105.0914461,39.5913017],[-105.0914756,39.592324]]},\"properties\":{\"nodes\":[{\"delta\":[-992,1735],\"delevation\":10},{\"delta\":[-896,4816],\"delevation\":-30},{\"delta\":[-326,2227],\"delevation\":10},{\"delta\":[-333,2366]},{\"delta\":[-410,3030],\"delevation\":-20},{\"delta\":[-326,3009],\"delevation\":-10},{\"delta\":[-271,2518],\"delevation\":-10},{\"delta\":[-264,2857],\"delevation\":-20},{\"delta\":[-243,2504]},{\"delta\":[-740,11165],\"delevation\":-30},{\"delta\":[-253,11359],\"delevation\":-70}],\"laneId\":13,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":11,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910891,39.5881859],[-105.0911549,39.5884681],[-105.091196,39.5886783],[-105.091222,39.5888049],[-105.0912401,39.5889649]]},\"properties\":{\"nodes\":[{\"delta\":[-1744,1607],\"delevation\":10},{\"delta\":[-563,3136],\"delevation\":-20},{\"delta\":[-352,2336],\"delevation\":-10},{\"delta\":[-223,1407],\"delevation\":10},{\"delta\":[-155,1778]}],\"laneId\":11,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":14,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0908389,39.5882151],[-105.0908478,39.5882471]]},\"properties\":{\"nodes\":[{\"delta\":[398,1931],\"delevation\":-10},{\"delta\":[-76,356]}],\"laneId\":14,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":15,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907875,39.58822],[-105.0907979,39.5882514]]},\"properties\":{\"nodes\":[{\"delta\":[838,1985],\"delevation\":-20},{\"delta\":[-89,349]}],\"laneId\":15,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}}]},\"connectingLanesFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":\"1-15\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907089,39.587905],[-105.0907875,39.58822]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":1,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"2-14\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907462,39.5878956],[-105.0908389,39.5882151]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":2,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"3-10\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907914,39.5878879],[-105.0911626,39.5880622]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":3,\"egressLaneId\":10}},{\"type\":\"Feature\",\"id\":\"8-15\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911477,39.587995],[-105.0907875,39.58822]]},\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":8,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"7-6\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911442,39.5879589],[-105.0910008,39.5878477]]},\"properties\":{\"ingressLaneId\":7,\"egressLaneId\":6}},{\"type\":\"Feature\",\"id\":\"9-14\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911534,39.5880261],[-105.0908389,39.5882151]]},\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":9,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"12-5\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910447,39.5881948],[-105.090959,39.5878557]]},\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":12,\"egressLaneId\":5}},{\"type\":\"Feature\",\"id\":\"13-4\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910013,39.5881975],[-105.090914,39.5878612]]},\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":13,\"egressLaneId\":4}},{\"type\":\"Feature\",\"id\":\"11-10\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910891,39.5881859],[-105.0911626,39.5880622]]},\"properties\":{\"ingressLaneId\":11,\"egressLaneId\":10}}]},\"properties\":{\"messageType\":\"MAP\",\"odeReceivedAt\":\"2024-02-22T23:26:25.107Z\",\"originIp\":\"10.11.81.12\",\"intersectionId\":12109,\"msgIssueRevision\":2,\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1500},\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].id.region: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].id.region\",\"schemaPath\":\"#/$defs/J2735RoadRegulatorID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[8].connectsTo.connectsTo[0].signalGroup: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[8].connectsTo.connectsTo[0].signalGroup\",\"schemaPath\":\"#/$defs/J2735SignalGroupID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[12].connectsTo.connectsTo[0].signalGroup: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[12].connectsTo.connectsTo[0].signalGroup\",\"schemaPath\":\"#/$defs/J2735SignalGroupID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].speedLimits: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].speedLimits\",\"schemaPath\":\"#/$defs/J2735SpeedLimitList_Wrapper/type\"}],\"laneWidth\":366,\"mapSource\":\"RSU\",\"timeStamp\":\"2024-02-22T23:26:25.107Z\"}}"; - String inputProcessedMap4 = "{\"mapFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":1,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907089,39.587905],[-105.0906245,39.5876246],[-105.0905203,39.587281],[-105.0904383,39.5870554],[-105.0903588,39.5868383],[-105.0902622,39.5865865],[-105.0901249,39.5862612],[-105.0900451,39.5860819],[-105.0899283,39.5858283],[-105.0898739,39.5857117],[-105.0895814,39.5851569],[-105.0888764,39.5839527]]},\"properties\":{\"nodes\":[{\"delta\":[1511,-1514]},{\"delta\":[723,-3116],\"delevation\":10},{\"delta\":[892,-3818],\"delevation\":20},{\"delta\":[702,-2507],\"delevation\":20},{\"delta\":[681,-2412],\"delevation\":10},{\"delta\":[827,-2798],\"delevation\":10},{\"delta\":[1176,-3614],\"delevation\":20},{\"delta\":[683,-1992]},{\"delta\":[1000,-2818],\"delevation\":10},{\"delta\":[466,-1295],\"delevation\":20},{\"delta\":[2505,-6164],\"delevation\":20},{\"delta\":[6037,-13380],\"delevation\":70}],\"laneId\":1,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":2,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907462,39.5878956],[-105.090652,39.5875596],[-105.090534,39.5871793],[-105.0903457,39.5866864],[-105.0902123,39.5863581],[-105.0900802,39.5860572],[-105.0898164,39.5855019],[-105.0895409,39.5849856],[-105.088922,39.5839259]]},\"properties\":{\"nodes\":[{\"delta\":[1192,-1619]},{\"delta\":[807,-3733],\"delevation\":30},{\"delta\":[1010,-4226],\"delevation\":10},{\"delta\":[1612,-5477],\"delevation\":30},{\"delta\":[1142,-3648],\"delevation\":20},{\"delta\":[1131,-3343],\"delevation\":10},{\"delta\":[2259,-6170],\"delevation\":30},{\"delta\":[2359,-5737],\"delevation\":30},{\"delta\":[5300,-11774],\"delevation\":50}],\"laneId\":2,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":3,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907914,39.5878879],[-105.090747,39.5877247],[-105.0906498,39.5874141],[-105.0906262,39.5873356],[-105.0905865,39.5872922]]},\"properties\":{\"nodes\":[{\"delta\":[805,-1704],\"delevation\":10},{\"delta\":[380,-1813]},{\"delta\":[832,-3451],\"delevation\":30},{\"delta\":[202,-872]},{\"delta\":[340,-482],\"delevation\":-10}],\"laneId\":3,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":6,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910008,39.5878477],[-105.0909927,39.5878181]]},\"properties\":{\"nodes\":[{\"delta\":[-988,-2151],\"delevation\":20},{\"delta\":[69,-329]}],\"laneId\":6,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":5,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.090959,39.5878557],[-105.0909501,39.5878218]]},\"properties\":{\"nodes\":[{\"delta\":[-630,-2062],\"delevation\":10},{\"delta\":[76,-377],\"delevation\":10}],\"laneId\":5,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":4,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.090914,39.5878612],[-105.0909051,39.5878298]]},\"properties\":{\"nodes\":[{\"delta\":[-245,-2001],\"delevation\":10},{\"delta\":[76,-349]}],\"laneId\":4,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":10,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911626,39.5880622],[-105.0912043,39.5880536]]},\"properties\":{\"nodes\":[{\"delta\":[-2374,232],\"delevation\":10},{\"delta\":[-357,-96]}],\"laneId\":10,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":4,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":8,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911477,39.587995],[-105.0914565,39.5879427],[-105.0917937,39.5879029],[-105.0922121,39.5878724],[-105.0926509,39.5878748],[-105.0930303,39.5879073],[-105.0932697,39.5879503],[-105.0937243,39.5880569],[-105.0940309,39.5881258],[-105.0943257,39.5881804],[-105.094592,39.5882097]]},\"properties\":{\"nodes\":[{\"delta\":[-2246,-514],\"delevation\":10},{\"delta\":[-2644,-581]},{\"delta\":[-2887,-442],\"delevation\":10},{\"delta\":[-3583,-339],\"delevation\":10},{\"delta\":[-3757,27]},{\"delta\":[-3249,361],\"delevation\":-10},{\"delta\":[-2050,478]},{\"delta\":[-3893,1184]},{\"delta\":[-2625,766],\"delevation\":-10},{\"delta\":[-2524,607],\"delevation\":10},{\"delta\":[-2280,325],\"delevation\":10}],\"laneId\":8,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":7,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911442,39.5879589],[-105.0914154,39.5879165],[-105.0916346,39.5878851],[-105.0918433,39.5878639],[-105.0921546,39.5878547]]},\"properties\":{\"nodes\":[{\"delta\":[-2216,-915],\"delevation\":10},{\"delta\":[-2322,-471]},{\"delta\":[-1877,-349],\"delevation\":10},{\"delta\":[-1787,-235]},{\"delta\":[-2666,-102],\"delevation\":10}],\"laneId\":7,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":9,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911534,39.5880261],[-105.091436,39.5879812],[-105.0916658,39.5879507],[-105.091881,39.5879277],[-105.0921287,39.5878972]]},\"properties\":{\"nodes\":[{\"delta\":[-2295,-169],\"delevation\":10},{\"delta\":[-2420,-499]},{\"delta\":[-1968,-339],\"delevation\":10},{\"delta\":[-1843,-256]},{\"delta\":[-2121,-339]}],\"laneId\":9,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":12,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910447,39.5881948],[-105.0911481,39.5886317],[-105.091196,39.588862],[-105.0912349,39.5890282],[-105.0912722,39.5893202],[-105.0913306,39.5897261],[-105.0913695,39.5900324],[-105.0914008,39.5903008],[-105.0914893,39.5913099],[-105.091527,39.5923157]]},\"properties\":{\"nodes\":[{\"delta\":[-1364,1705],\"delevation\":10},{\"delta\":[-885,4854],\"delevation\":-30},{\"delta\":[-410,2559],\"delevation\":10},{\"delta\":[-333,1847],\"delevation\":-10},{\"delta\":[-319,3244],\"delevation\":-20},{\"delta\":[-500,4510]},{\"delta\":[-333,3403],\"delevation\":-30},{\"delta\":[-268,2982]},{\"delta\":[-758,11212],\"delevation\":-30},{\"delta\":[-323,11176],\"delevation\":-70}],\"laneId\":12,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":13,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910013,39.5881975],[-105.0911059,39.5886309],[-105.091144,39.5888313],[-105.0911829,39.5890442],[-105.0912308,39.5893169],[-105.0912689,39.5895877],[-105.0913005,39.5898143],[-105.0913313,39.5900714],[-105.0913597,39.5902968],[-105.0914461,39.5913017],[-105.0914756,39.592324]]},\"properties\":{\"nodes\":[{\"delta\":[-992,1735],\"delevation\":10},{\"delta\":[-896,4816],\"delevation\":-30},{\"delta\":[-326,2227],\"delevation\":10},{\"delta\":[-333,2366]},{\"delta\":[-410,3030],\"delevation\":-20},{\"delta\":[-326,3009],\"delevation\":-10},{\"delta\":[-271,2518],\"delevation\":-10},{\"delta\":[-264,2857],\"delevation\":-20},{\"delta\":[-243,2504]},{\"delta\":[-740,11165],\"delevation\":-30},{\"delta\":[-253,11359],\"delevation\":-70}],\"laneId\":13,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":11,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910891,39.5881859],[-105.0911549,39.5884681],[-105.091196,39.5886783],[-105.091222,39.5888049],[-105.0912401,39.5889649]]},\"properties\":{\"nodes\":[{\"delta\":[-1744,1607],\"delevation\":10},{\"delta\":[-563,3136],\"delevation\":-20},{\"delta\":[-352,2336],\"delevation\":-10},{\"delta\":[-223,1407],\"delevation\":10},{\"delta\":[-155,1778]}],\"laneId\":11,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":14,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0908389,39.5882151],[-105.0908478,39.5882471]]},\"properties\":{\"nodes\":[{\"delta\":[398,1931],\"delevation\":-10},{\"delta\":[-76,356]}],\"laneId\":14,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":15,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907875,39.58822],[-105.0907979,39.5882514]]},\"properties\":{\"nodes\":[{\"delta\":[838,1985],\"delevation\":-20},{\"delta\":[-89,349]}],\"laneId\":15,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}}]},\"connectingLanesFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":\"1-15\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907089,39.587905],[-105.0907875,39.58822]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":1,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"2-14\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907462,39.5878956],[-105.0908389,39.5882151]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":2,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"3-10\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907914,39.5878879],[-105.0911626,39.5880622]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":3,\"egressLaneId\":10}},{\"type\":\"Feature\",\"id\":\"8-15\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911477,39.587995],[-105.0907875,39.58822]]},\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":8,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"7-6\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911442,39.5879589],[-105.0910008,39.5878477]]},\"properties\":{\"ingressLaneId\":7,\"egressLaneId\":6}},{\"type\":\"Feature\",\"id\":\"9-14\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911534,39.5880261],[-105.0908389,39.5882151]]},\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":9,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"12-5\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910447,39.5881948],[-105.090959,39.5878557]]},\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":12,\"egressLaneId\":5}},{\"type\":\"Feature\",\"id\":\"13-4\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910013,39.5881975],[-105.090914,39.5878612]]},\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":13,\"egressLaneId\":4}},{\"type\":\"Feature\",\"id\":\"11-10\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910891,39.5881859],[-105.0911626,39.5880622]]},\"properties\":{\"ingressLaneId\":11,\"egressLaneId\":10}}]},\"properties\":{\"messageType\":\"MAP\",\"odeReceivedAt\":\"2024-02-22T23:26:26.114Z\",\"originIp\":\"10.11.81.12\",\"intersectionId\":12109,\"msgIssueRevision\":2,\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1691},\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].id.region: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].id.region\",\"schemaPath\":\"#/$defs/J2735RoadRegulatorID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[8].connectsTo.connectsTo[0].signalGroup: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[8].connectsTo.connectsTo[0].signalGroup\",\"schemaPath\":\"#/$defs/J2735SignalGroupID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[12].connectsTo.connectsTo[0].signalGroup: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[12].connectsTo.connectsTo[0].signalGroup\",\"schemaPath\":\"#/$defs/J2735SignalGroupID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].speedLimits: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].speedLimits\",\"schemaPath\":\"#/$defs/J2735SpeedLimitList_Wrapper/type\"}],\"laneWidth\":366,\"mapSource\":\"RSU\",\"timeStamp\":\"2024-02-22T23:26:26.114Z\"}}"; - - - String key = "{\"rsuId\":\"10.11.81.12\",\"intersectionId\":12109,\"region\":-1}"; - - @Autowired - DeduplicatorProperties props; - - - @Test - public void testTopology() { - - props = new DeduplicatorProperties(); - props.setKafkaTopicProcessedMap(inputTopic); - props.setKafkaTopicDeduplicatedProcessedMap(outputTopic); - - ProcessedMapDeduplicatorTopology processedMapDeduplicatorTopology = new ProcessedMapDeduplicatorTopology(props, null); - - Topology topology = processedMapDeduplicatorTopology.buildTopology(); - objectMapper.registerModule(new JavaTimeModule()); - - try (TopologyTestDriver driver = new TopologyTestDriver(topology)) { - - - TestInputTopic inputProcessedMapData = driver.createInputTopic( - inputTopic, - Serdes.String().serializer(), - Serdes.String().serializer()); - - - TestOutputTopic> outputProcessedMapData = driver.createOutputTopic( - outputTopic, - Serdes.String().deserializer(), - JsonSerdes.ProcessedMapGeoJson().deserializer()); - - inputProcessedMapData.pipeInput(key, inputProcessedMap1); - inputProcessedMapData.pipeInput(key, inputProcessedMap2); - inputProcessedMapData.pipeInput(key, inputProcessedMap3); - inputProcessedMapData.pipeInput(key, inputProcessedMap4); - - List>> mapDeduplicatorResults = outputProcessedMapData.readKeyValuesToList(); - - // validate that only 3 messages make it through - assertEquals(3, mapDeduplicatorResults.size()); - - ProcessedMap map1 = objectMapper.readValue(inputProcessedMap1, typeReference); - ProcessedMap map3 = objectMapper.readValue(inputProcessedMap3, typeReference); - ProcessedMap map4 = objectMapper.readValue(inputProcessedMap4, typeReference); - - assertEquals(map1.getProperties().getOdeReceivedAt(), mapDeduplicatorResults.get(0).value.getProperties().getOdeReceivedAt()); - assertEquals(map3.getProperties().getOdeReceivedAt(), mapDeduplicatorResults.get(1).value.getProperties().getOdeReceivedAt()); - assertEquals(map4.getProperties().getOdeReceivedAt(), mapDeduplicatorResults.get(2).value.getProperties().getOdeReceivedAt()); - - } catch (JsonMappingException e) { - e.printStackTrace(); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedMapWktDeduplicatorTopologyTest.java b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedMapWktDeduplicatorTopologyTest.java deleted file mode 100644 index 7b1d2fb..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedMapWktDeduplicatorTopologyTest.java +++ /dev/null @@ -1,101 +0,0 @@ -package deduplicator; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KeyValue; -import org.apache.kafka.streams.TestInputTopic; -import org.apache.kafka.streams.TestOutputTopic; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.TopologyTestDriver; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.ProcessedMapWktDeduplicatorTopology; -import us.dot.its.jpo.geojsonconverter.pojos.geojson.map.ProcessedMap; -import us.dot.its.jpo.geojsonconverter.serialization.JsonSerdes; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.List; - -public class ProcessedMapWktDeduplicatorTopologyTest { - - String inputTopic = "topic.ProcessedMapWKT"; - String outputTopic = "topic.DeduplicatedProcessedMapWKT"; - - - TypeReference> typeReference = new TypeReference<>(){}; - ObjectMapper objectMapper = new ObjectMapper(); - - String inputProcessedMapWkt1 = "{\"mapFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":1,\"geometry\":\"LINESTRING (-105.0907089 39.587905, -105.0906245 39.5876246, -105.0905203 39.587281, -105.0904383 39.5870554, -105.0903588 39.5868383, -105.0902622 39.5865865, -105.0901249 39.5862612, -105.0900451 39.5860819, -105.0899283 39.5858283, -105.0898739 39.5857117, -105.0895814 39.5851569, -105.0888764 39.5839527)\",\"properties\":{\"laneId\":1,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":2,\"geometry\":\"LINESTRING (-105.0907462 39.5878956, -105.090652 39.5875596, -105.090534 39.5871793, -105.0903457 39.5866864, -105.0902123 39.5863581, -105.0900802 39.5860572, -105.0898164 39.5855019, -105.0895409 39.5849856, -105.088922 39.5839259)\",\"properties\":{\"laneId\":2,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":3,\"geometry\":\"LINESTRING (-105.0907914 39.5878879, -105.090747 39.5877247, -105.0906498 39.5874141, -105.0906262 39.5873356, -105.0905865 39.5872922)\",\"properties\":{\"laneId\":3,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":6,\"geometry\":\"LINESTRING (-105.0910008 39.5878477, -105.0909927 39.5878181)\",\"properties\":{\"laneId\":6,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":5,\"geometry\":\"LINESTRING (-105.090959 39.5878557, -105.0909501 39.5878218)\",\"properties\":{\"laneId\":5,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":4,\"geometry\":\"LINESTRING (-105.090914 39.5878612, -105.0909051 39.5878298)\",\"properties\":{\"laneId\":4,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":10,\"geometry\":\"LINESTRING (-105.0911626 39.5880622, -105.0912043 39.5880536)\",\"properties\":{\"laneId\":10,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":4,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":8,\"geometry\":\"LINESTRING (-105.0911477 39.587995, -105.0914565 39.5879427, -105.0917937 39.5879029, -105.0922121 39.5878724, -105.0926509 39.5878748, -105.0930303 39.5879073, -105.0932697 39.5879503, -105.0937243 39.5880569, -105.0940309 39.5881258, -105.0943257 39.5881804, -105.094592 39.5882097)\",\"properties\":{\"laneId\":8,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":7,\"geometry\":\"LINESTRING (-105.0911442 39.5879589, -105.0914154 39.5879165, -105.0916346 39.5878851, -105.0918433 39.5878639, -105.0921546 39.5878547)\",\"properties\":{\"laneId\":7,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":9,\"geometry\":\"LINESTRING (-105.0911534 39.5880261, -105.091436 39.5879812, -105.0916658 39.5879507, -105.091881 39.5879277, -105.0921287 39.5878972)\",\"properties\":{\"laneId\":9,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":12,\"geometry\":\"LINESTRING (-105.0910447 39.5881948, -105.0911481 39.5886317, -105.091196 39.588862, -105.0912349 39.5890282, -105.0912722 39.5893202, -105.0913306 39.5897261, -105.0913695 39.5900324, -105.0914008 39.5903008, -105.0914893 39.5913099, -105.091527 39.5923157)\",\"properties\":{\"laneId\":12,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":13,\"geometry\":\"LINESTRING (-105.0910013 39.5881975, -105.0911059 39.5886309, -105.091144 39.5888313, -105.0911829 39.5890442, -105.0912308 39.5893169, -105.0912689 39.5895877, -105.0913005 39.5898143, -105.0913313 39.5900714, -105.0913597 39.5902968, -105.0914461 39.5913017, -105.0914756 39.592324)\",\"properties\":{\"laneId\":13,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":11,\"geometry\":\"LINESTRING (-105.0910891 39.5881859, -105.0911549 39.5884681, -105.091196 39.5886783, -105.091222 39.5888049, -105.0912401 39.5889649)\",\"properties\":{\"laneId\":11,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":14,\"geometry\":\"LINESTRING (-105.0908389 39.5882151, -105.0908478 39.5882471)\",\"properties\":{\"laneId\":14,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":15,\"geometry\":\"LINESTRING (-105.0907875 39.58822, -105.0907979 39.5882514)\",\"properties\":{\"laneId\":15,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}}]},\"connectingLanesFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":\"1-15\",\"geometry\":\"LINESTRING (-105.0907089 39.587905, -105.0907875 39.58822)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":1,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"2-14\",\"geometry\":\"LINESTRING (-105.0907462 39.5878956, -105.0908389 39.5882151)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":2,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"3-10\",\"geometry\":\"LINESTRING (-105.0907914 39.5878879, -105.0911626 39.5880622)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":3,\"egressLaneId\":10}},{\"type\":\"Feature\",\"id\":\"8-15\",\"geometry\":\"LINESTRING (-105.0911477 39.587995, -105.0907875 39.58822)\",\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":8,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"7-6\",\"geometry\":\"LINESTRING (-105.0911442 39.5879589, -105.0910008 39.5878477)\",\"properties\":{\"ingressLaneId\":7,\"egressLaneId\":6}},{\"type\":\"Feature\",\"id\":\"9-14\",\"geometry\":\"LINESTRING (-105.0911534 39.5880261, -105.0908389 39.5882151)\",\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":9,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"12-5\",\"geometry\":\"LINESTRING (-105.0910447 39.5881948, -105.090959 39.5878557)\",\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":12,\"egressLaneId\":5}},{\"type\":\"Feature\",\"id\":\"13-4\",\"geometry\":\"LINESTRING (-105.0910013 39.5881975, -105.090914 39.5878612)\",\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":13,\"egressLaneId\":4}},{\"type\":\"Feature\",\"id\":\"11-10\",\"geometry\":\"LINESTRING (-105.0910891 39.5881859, -105.0911626 39.5880622)\",\"properties\":{\"ingressLaneId\":11,\"egressLaneId\":10}}]},\"properties\":{\"messageType\":\"MAP\",\"odeReceivedAt\":\"2024-05-06T21:35:21.713Z\",\"originIp\":\"10.11.81.12\",\"intersectionId\":12109,\"msgIssueRevision\":2,\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1500},\"cti4501Conformant\":false,\"laneWidth\":366,\"mapSource\":\"RSU\",\"timeStamp\":\"2024-05-06T21:35:21.713Z\"}}"; - - - //String inputProcessedMapWkt1 = "{\"mapFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":1,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907089,39.587905],[-105.0906245,39.5876246],[-105.0905203,39.587281],[-105.0904383,39.5870554],[-105.0903588,39.5868383],[-105.0902622,39.5865865],[-105.0901249,39.5862612],[-105.0900451,39.5860819],[-105.0899283,39.5858283],[-105.0898739,39.5857117],[-105.0895814,39.5851569],[-105.0888764,39.5839527]]},\"properties\":{\"nodes\":[{\"delta\":[1511,-1514]},{\"delta\":[723,-3116],\"delevation\":10},{\"delta\":[892,-3818],\"delevation\":20},{\"delta\":[702,-2507],\"delevation\":20},{\"delta\":[681,-2412],\"delevation\":10},{\"delta\":[827,-2798],\"delevation\":10},{\"delta\":[1176,-3614],\"delevation\":20},{\"delta\":[683,-1992]},{\"delta\":[1000,-2818],\"delevation\":10},{\"delta\":[466,-1295],\"delevation\":20},{\"delta\":[2505,-6164],\"delevation\":20},{\"delta\":[6037,-13380],\"delevation\":70}],\"laneId\":1,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":2,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907462,39.5878956],[-105.090652,39.5875596],[-105.090534,39.5871793],[-105.0903457,39.5866864],[-105.0902123,39.5863581],[-105.0900802,39.5860572],[-105.0898164,39.5855019],[-105.0895409,39.5849856],[-105.088922,39.5839259]]},\"properties\":{\"nodes\":[{\"delta\":[1192,-1619]},{\"delta\":[807,-3733],\"delevation\":30},{\"delta\":[1010,-4226],\"delevation\":10},{\"delta\":[1612,-5477],\"delevation\":30},{\"delta\":[1142,-3648],\"delevation\":20},{\"delta\":[1131,-3343],\"delevation\":10},{\"delta\":[2259,-6170],\"delevation\":30},{\"delta\":[2359,-5737],\"delevation\":30},{\"delta\":[5300,-11774],\"delevation\":50}],\"laneId\":2,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":3,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907914,39.5878879],[-105.090747,39.5877247],[-105.0906498,39.5874141],[-105.0906262,39.5873356],[-105.0905865,39.5872922]]},\"properties\":{\"nodes\":[{\"delta\":[805,-1704],\"delevation\":10},{\"delta\":[380,-1813]},{\"delta\":[832,-3451],\"delevation\":30},{\"delta\":[202,-872]},{\"delta\":[340,-482],\"delevation\":-10}],\"laneId\":3,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":6,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910008,39.5878477],[-105.0909927,39.5878181]]},\"properties\":{\"nodes\":[{\"delta\":[-988,-2151],\"delevation\":20},{\"delta\":[69,-329]}],\"laneId\":6,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":5,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.090959,39.5878557],[-105.0909501,39.5878218]]},\"properties\":{\"nodes\":[{\"delta\":[-630,-2062],\"delevation\":10},{\"delta\":[76,-377],\"delevation\":10}],\"laneId\":5,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":4,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.090914,39.5878612],[-105.0909051,39.5878298]]},\"properties\":{\"nodes\":[{\"delta\":[-245,-2001],\"delevation\":10},{\"delta\":[76,-349]}],\"laneId\":4,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":10,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911626,39.5880622],[-105.0912043,39.5880536]]},\"properties\":{\"nodes\":[{\"delta\":[-2374,232],\"delevation\":10},{\"delta\":[-357,-96]}],\"laneId\":10,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":4,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":8,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911477,39.587995],[-105.0914565,39.5879427],[-105.0917937,39.5879029],[-105.0922121,39.5878724],[-105.0926509,39.5878748],[-105.0930303,39.5879073],[-105.0932697,39.5879503],[-105.0937243,39.5880569],[-105.0940309,39.5881258],[-105.0943257,39.5881804],[-105.094592,39.5882097]]},\"properties\":{\"nodes\":[{\"delta\":[-2246,-514],\"delevation\":10},{\"delta\":[-2644,-581]},{\"delta\":[-2887,-442],\"delevation\":10},{\"delta\":[-3583,-339],\"delevation\":10},{\"delta\":[-3757,27]},{\"delta\":[-3249,361],\"delevation\":-10},{\"delta\":[-2050,478]},{\"delta\":[-3893,1184]},{\"delta\":[-2625,766],\"delevation\":-10},{\"delta\":[-2524,607],\"delevation\":10},{\"delta\":[-2280,325],\"delevation\":10}],\"laneId\":8,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":7,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911442,39.5879589],[-105.0914154,39.5879165],[-105.0916346,39.5878851],[-105.0918433,39.5878639],[-105.0921546,39.5878547]]},\"properties\":{\"nodes\":[{\"delta\":[-2216,-915],\"delevation\":10},{\"delta\":[-2322,-471]},{\"delta\":[-1877,-349],\"delevation\":10},{\"delta\":[-1787,-235]},{\"delta\":[-2666,-102],\"delevation\":10}],\"laneId\":7,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":9,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911534,39.5880261],[-105.091436,39.5879812],[-105.0916658,39.5879507],[-105.091881,39.5879277],[-105.0921287,39.5878972]]},\"properties\":{\"nodes\":[{\"delta\":[-2295,-169],\"delevation\":10},{\"delta\":[-2420,-499]},{\"delta\":[-1968,-339],\"delevation\":10},{\"delta\":[-1843,-256]},{\"delta\":[-2121,-339]}],\"laneId\":9,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":12,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910447,39.5881948],[-105.0911481,39.5886317],[-105.091196,39.588862],[-105.0912349,39.5890282],[-105.0912722,39.5893202],[-105.0913306,39.5897261],[-105.0913695,39.5900324],[-105.0914008,39.5903008],[-105.0914893,39.5913099],[-105.091527,39.5923157]]},\"properties\":{\"nodes\":[{\"delta\":[-1364,1705],\"delevation\":10},{\"delta\":[-885,4854],\"delevation\":-30},{\"delta\":[-410,2559],\"delevation\":10},{\"delta\":[-333,1847],\"delevation\":-10},{\"delta\":[-319,3244],\"delevation\":-20},{\"delta\":[-500,4510]},{\"delta\":[-333,3403],\"delevation\":-30},{\"delta\":[-268,2982]},{\"delta\":[-758,11212],\"delevation\":-30},{\"delta\":[-323,11176],\"delevation\":-70}],\"laneId\":12,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":13,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910013,39.5881975],[-105.0911059,39.5886309],[-105.091144,39.5888313],[-105.0911829,39.5890442],[-105.0912308,39.5893169],[-105.0912689,39.5895877],[-105.0913005,39.5898143],[-105.0913313,39.5900714],[-105.0913597,39.5902968],[-105.0914461,39.5913017],[-105.0914756,39.592324]]},\"properties\":{\"nodes\":[{\"delta\":[-992,1735],\"delevation\":10},{\"delta\":[-896,4816],\"delevation\":-30},{\"delta\":[-326,2227],\"delevation\":10},{\"delta\":[-333,2366]},{\"delta\":[-410,3030],\"delevation\":-20},{\"delta\":[-326,3009],\"delevation\":-10},{\"delta\":[-271,2518],\"delevation\":-10},{\"delta\":[-264,2857],\"delevation\":-20},{\"delta\":[-243,2504]},{\"delta\":[-740,11165],\"delevation\":-30},{\"delta\":[-253,11359],\"delevation\":-70}],\"laneId\":13,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":11,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910891,39.5881859],[-105.0911549,39.5884681],[-105.091196,39.5886783],[-105.091222,39.5888049],[-105.0912401,39.5889649]]},\"properties\":{\"nodes\":[{\"delta\":[-1744,1607],\"delevation\":10},{\"delta\":[-563,3136],\"delevation\":-20},{\"delta\":[-352,2336],\"delevation\":-10},{\"delta\":[-223,1407],\"delevation\":10},{\"delta\":[-155,1778]}],\"laneId\":11,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":14,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0908389,39.5882151],[-105.0908478,39.5882471]]},\"properties\":{\"nodes\":[{\"delta\":[398,1931],\"delevation\":-10},{\"delta\":[-76,356]}],\"laneId\":14,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":15,\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907875,39.58822],[-105.0907979,39.5882514]]},\"properties\":{\"nodes\":[{\"delta\":[838,1985],\"delevation\":-20},{\"delta\":[-89,349]}],\"laneId\":15,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}}]},\"connectingLanesFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":\"1-15\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907089,39.587905],[-105.0907875,39.58822]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":1,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"2-14\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907462,39.5878956],[-105.0908389,39.5882151]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":2,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"3-10\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0907914,39.5878879],[-105.0911626,39.5880622]]},\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":3,\"egressLaneId\":10}},{\"type\":\"Feature\",\"id\":\"8-15\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911477,39.587995],[-105.0907875,39.58822]]},\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":8,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"7-6\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911442,39.5879589],[-105.0910008,39.5878477]]},\"properties\":{\"ingressLaneId\":7,\"egressLaneId\":6}},{\"type\":\"Feature\",\"id\":\"9-14\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0911534,39.5880261],[-105.0908389,39.5882151]]},\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":9,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"12-5\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910447,39.5881948],[-105.090959,39.5878557]]},\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":12,\"egressLaneId\":5}},{\"type\":\"Feature\",\"id\":\"13-4\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910013,39.5881975],[-105.090914,39.5878612]]},\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":13,\"egressLaneId\":4}},{\"type\":\"Feature\",\"id\":\"11-10\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-105.0910891,39.5881859],[-105.0911626,39.5880622]]},\"properties\":{\"ingressLaneId\":11,\"egressLaneId\":10}}]},\"properties\":{\"messageType\":\"MAP\",\"odeReceivedAt\":\"2024-02-22T23:26:26.114Z\",\"originIp\":\"10.11.81.12\",\"intersectionId\":12109,\"msgIssueRevision\":2,\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1691},\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].id.region: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].id.region\",\"schemaPath\":\"#/$defs/J2735RoadRegulatorID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[3].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[4].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[5].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[6].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[8].connectsTo.connectsTo[0].signalGroup: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[8].connectsTo.connectsTo[0].signalGroup\",\"schemaPath\":\"#/$defs/J2735SignalGroupID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[12].connectsTo.connectsTo[0].signalGroup: null found, integer expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[12].connectsTo.connectsTo[0].signalGroup\",\"schemaPath\":\"#/$defs/J2735SignalGroupID/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[13].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].connectsTo: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].connectsTo\",\"schemaPath\":\"#/$defs/J2735ConnectsToList_Wrapper/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].maneuvers: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].laneSet.GenericLane[14].maneuvers\",\"schemaPath\":\"#/$defs/J2735AllowedManeuvers/type\"},{\"message\":\"$.payload.data.intersections.intersectionGeometry[0].speedLimits: null found, object expected\",\"jsonPath\":\"$.payload.data.intersections.intersectionGeometry[0].speedLimits\",\"schemaPath\":\"#/$defs/J2735SpeedLimitList_Wrapper/type\"}],\"laneWidth\":366,\"mapSource\":\"RSU\",\"timeStamp\":\"2024-02-22T23:26:26.114Z\"}}"; - String inputProcessedMapWkt2 = "{\"mapFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":1,\"geometry\":\"LINESTRING (-105.0907089 39.587905, -105.0906245 39.5876246, -105.0905203 39.587281, -105.0904383 39.5870554, -105.0903588 39.5868383, -105.0902622 39.5865865, -105.0901249 39.5862612, -105.0900451 39.5860819, -105.0899283 39.5858283, -105.0898739 39.5857117, -105.0895814 39.5851569, -105.0888764 39.5839527)\",\"properties\":{\"laneId\":1,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":2,\"geometry\":\"LINESTRING (-105.0907462 39.5878956, -105.090652 39.5875596, -105.090534 39.5871793, -105.0903457 39.5866864, -105.0902123 39.5863581, -105.0900802 39.5860572, -105.0898164 39.5855019, -105.0895409 39.5849856, -105.088922 39.5839259)\",\"properties\":{\"laneId\":2,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":3,\"geometry\":\"LINESTRING (-105.0907914 39.5878879, -105.090747 39.5877247, -105.0906498 39.5874141, -105.0906262 39.5873356, -105.0905865 39.5872922)\",\"properties\":{\"laneId\":3,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":6,\"geometry\":\"LINESTRING (-105.0910008 39.5878477, -105.0909927 39.5878181)\",\"properties\":{\"laneId\":6,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":5,\"geometry\":\"LINESTRING (-105.090959 39.5878557, -105.0909501 39.5878218)\",\"properties\":{\"laneId\":5,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":4,\"geometry\":\"LINESTRING (-105.090914 39.5878612, -105.0909051 39.5878298)\",\"properties\":{\"laneId\":4,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":10,\"geometry\":\"LINESTRING (-105.0911626 39.5880622, -105.0912043 39.5880536)\",\"properties\":{\"laneId\":10,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":4,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":8,\"geometry\":\"LINESTRING (-105.0911477 39.587995, -105.0914565 39.5879427, -105.0917937 39.5879029, -105.0922121 39.5878724, -105.0926509 39.5878748, -105.0930303 39.5879073, -105.0932697 39.5879503, -105.0937243 39.5880569, -105.0940309 39.5881258, -105.0943257 39.5881804, -105.094592 39.5882097)\",\"properties\":{\"laneId\":8,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":7,\"geometry\":\"LINESTRING (-105.0911442 39.5879589, -105.0914154 39.5879165, -105.0916346 39.5878851, -105.0918433 39.5878639, -105.0921546 39.5878547)\",\"properties\":{\"laneId\":7,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":9,\"geometry\":\"LINESTRING (-105.0911534 39.5880261, -105.091436 39.5879812, -105.0916658 39.5879507, -105.091881 39.5879277, -105.0921287 39.5878972)\",\"properties\":{\"laneId\":9,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":12,\"geometry\":\"LINESTRING (-105.0910447 39.5881948, -105.0911481 39.5886317, -105.091196 39.588862, -105.0912349 39.5890282, -105.0912722 39.5893202, -105.0913306 39.5897261, -105.0913695 39.5900324, -105.0914008 39.5903008, -105.0914893 39.5913099, -105.091527 39.5923157)\",\"properties\":{\"laneId\":12,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":13,\"geometry\":\"LINESTRING (-105.0910013 39.5881975, -105.0911059 39.5886309, -105.091144 39.5888313, -105.0911829 39.5890442, -105.0912308 39.5893169, -105.0912689 39.5895877, -105.0913005 39.5898143, -105.0913313 39.5900714, -105.0913597 39.5902968, -105.0914461 39.5913017, -105.0914756 39.592324)\",\"properties\":{\"laneId\":13,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":11,\"geometry\":\"LINESTRING (-105.0910891 39.5881859, -105.0911549 39.5884681, -105.091196 39.5886783, -105.091222 39.5888049, -105.0912401 39.5889649)\",\"properties\":{\"laneId\":11,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":14,\"geometry\":\"LINESTRING (-105.0908389 39.5882151, -105.0908478 39.5882471)\",\"properties\":{\"laneId\":14,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":15,\"geometry\":\"LINESTRING (-105.0907875 39.58822, -105.0907979 39.5882514)\",\"properties\":{\"laneId\":15,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}}]},\"connectingLanesFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":\"1-15\",\"geometry\":\"LINESTRING (-105.0907089 39.587905, -105.0907875 39.58822)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":1,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"2-14\",\"geometry\":\"LINESTRING (-105.0907462 39.5878956, -105.0908389 39.5882151)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":2,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"3-10\",\"geometry\":\"LINESTRING (-105.0907914 39.5878879, -105.0911626 39.5880622)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":3,\"egressLaneId\":10}},{\"type\":\"Feature\",\"id\":\"8-15\",\"geometry\":\"LINESTRING (-105.0911477 39.587995, -105.0907875 39.58822)\",\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":8,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"7-6\",\"geometry\":\"LINESTRING (-105.0911442 39.5879589, -105.0910008 39.5878477)\",\"properties\":{\"ingressLaneId\":7,\"egressLaneId\":6}},{\"type\":\"Feature\",\"id\":\"9-14\",\"geometry\":\"LINESTRING (-105.0911534 39.5880261, -105.0908389 39.5882151)\",\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":9,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"12-5\",\"geometry\":\"LINESTRING (-105.0910447 39.5881948, -105.090959 39.5878557)\",\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":12,\"egressLaneId\":5}},{\"type\":\"Feature\",\"id\":\"13-4\",\"geometry\":\"LINESTRING (-105.0910013 39.5881975, -105.090914 39.5878612)\",\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":13,\"egressLaneId\":4}},{\"type\":\"Feature\",\"id\":\"11-10\",\"geometry\":\"LINESTRING (-105.0910891 39.5881859, -105.0911626 39.5880622)\",\"properties\":{\"ingressLaneId\":11,\"egressLaneId\":10}}]},\"properties\":{\"messageType\":\"MAP\",\"odeReceivedAt\":\"2024-05-03T20:58:48.748Z\",\"originIp\":\"10.11.81.12\",\"intersectionId\":12109,\"msgIssueRevision\":2,\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1691},\"cti4501Conformant\":false,\"laneWidth\":366,\"mapSource\":\"RSU\",\"timeStamp\":\"2024-05-03T20:58:48.748Z\"}}"; - String inputProcessedMapWkt3 = "{\"mapFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":1,\"geometry\":\"LINESTRING (-105.0907089 39.587905, -105.0906245 39.5876246, -105.0905203 39.587281, -105.0904383 39.5870554, -105.0903588 39.5868383, -105.0902622 39.5865865, -105.0901249 39.5862612, -105.0900451 39.5860819, -105.0899283 39.5858283, -105.0898739 39.5857117, -105.0895814 39.5851569, -105.0888764 39.5839527)\",\"properties\":{\"laneId\":1,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":2,\"geometry\":\"LINESTRING (-105.0907462 39.5878956, -105.090652 39.5875596, -105.090534 39.5871793, -105.0903457 39.5866864, -105.0902123 39.5863581, -105.0900802 39.5860572, -105.0898164 39.5855019, -105.0895409 39.5849856, -105.088922 39.5839259)\",\"properties\":{\"laneId\":2,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":3,\"geometry\":\"LINESTRING (-105.0907914 39.5878879, -105.090747 39.5877247, -105.0906498 39.5874141, -105.0906262 39.5873356, -105.0905865 39.5872922)\",\"properties\":{\"laneId\":3,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":6,\"geometry\":\"LINESTRING (-105.0910008 39.5878477, -105.0909927 39.5878181)\",\"properties\":{\"laneId\":6,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":5,\"geometry\":\"LINESTRING (-105.090959 39.5878557, -105.0909501 39.5878218)\",\"properties\":{\"laneId\":5,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":4,\"geometry\":\"LINESTRING (-105.090914 39.5878612, -105.0909051 39.5878298)\",\"properties\":{\"laneId\":4,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":10,\"geometry\":\"LINESTRING (-105.0911626 39.5880622, -105.0912043 39.5880536)\",\"properties\":{\"laneId\":10,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":4,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":8,\"geometry\":\"LINESTRING (-105.0911477 39.587995, -105.0914565 39.5879427, -105.0917937 39.5879029, -105.0922121 39.5878724, -105.0926509 39.5878748, -105.0930303 39.5879073, -105.0932697 39.5879503, -105.0937243 39.5880569, -105.0940309 39.5881258, -105.0943257 39.5881804, -105.094592 39.5882097)\",\"properties\":{\"laneId\":8,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":7,\"geometry\":\"LINESTRING (-105.0911442 39.5879589, -105.0914154 39.5879165, -105.0916346 39.5878851, -105.0918433 39.5878639, -105.0921546 39.5878547)\",\"properties\":{\"laneId\":7,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":9,\"geometry\":\"LINESTRING (-105.0911534 39.5880261, -105.091436 39.5879812, -105.0916658 39.5879507, -105.091881 39.5879277, -105.0921287 39.5878972)\",\"properties\":{\"laneId\":9,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":12,\"geometry\":\"LINESTRING (-105.0910447 39.5881948, -105.0911481 39.5886317, -105.091196 39.588862, -105.0912349 39.5890282, -105.0912722 39.5893202, -105.0913306 39.5897261, -105.0913695 39.5900324, -105.0914008 39.5903008, -105.0914893 39.5913099, -105.091527 39.5923157)\",\"properties\":{\"laneId\":12,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":13,\"geometry\":\"LINESTRING (-105.0910013 39.5881975, -105.0911059 39.5886309, -105.091144 39.5888313, -105.0911829 39.5890442, -105.0912308 39.5893169, -105.0912689 39.5895877, -105.0913005 39.5898143, -105.0913313 39.5900714, -105.0913597 39.5902968, -105.0914461 39.5913017, -105.0914756 39.592324)\",\"properties\":{\"laneId\":13,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":11,\"geometry\":\"LINESTRING (-105.0910891 39.5881859, -105.0911549 39.5884681, -105.091196 39.5886783, -105.091222 39.5888049, -105.0912401 39.5889649)\",\"properties\":{\"laneId\":11,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":14,\"geometry\":\"LINESTRING (-105.0908389 39.5882151, -105.0908478 39.5882471)\",\"properties\":{\"laneId\":14,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":15,\"geometry\":\"LINESTRING (-105.0907875 39.58822, -105.0907979 39.5882514)\",\"properties\":{\"laneId\":15,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}}]},\"connectingLanesFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":\"1-15\",\"geometry\":\"LINESTRING (-105.0907089 39.587905, -105.0907875 39.58822)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":1,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"2-14\",\"geometry\":\"LINESTRING (-105.0907462 39.5878956, -105.0908389 39.5882151)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":2,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"3-10\",\"geometry\":\"LINESTRING (-105.0907914 39.5878879, -105.0911626 39.5880622)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":3,\"egressLaneId\":10}},{\"type\":\"Feature\",\"id\":\"8-15\",\"geometry\":\"LINESTRING (-105.0911477 39.587995, -105.0907875 39.58822)\",\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":8,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"7-6\",\"geometry\":\"LINESTRING (-105.0911442 39.5879589, -105.0910008 39.5878477)\",\"properties\":{\"ingressLaneId\":7,\"egressLaneId\":6}},{\"type\":\"Feature\",\"id\":\"9-14\",\"geometry\":\"LINESTRING (-105.0911534 39.5880261, -105.0908389 39.5882151)\",\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":9,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"12-5\",\"geometry\":\"LINESTRING (-105.0910447 39.5881948, -105.090959 39.5878557)\",\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":12,\"egressLaneId\":5}},{\"type\":\"Feature\",\"id\":\"13-4\",\"geometry\":\"LINESTRING (-105.0910013 39.5881975, -105.090914 39.5878612)\",\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":13,\"egressLaneId\":4}},{\"type\":\"Feature\",\"id\":\"11-10\",\"geometry\":\"LINESTRING (-105.0910891 39.5881859, -105.0911626 39.5880622)\",\"properties\":{\"ingressLaneId\":11,\"egressLaneId\":10}}]},\"properties\":{\"messageType\":\"MAP\",\"odeReceivedAt\":\"2024-05-03T20:58:48.748Z\",\"originIp\":\"10.11.81.12\",\"intersectionId\":12109,\"msgIssueRevision\":2,\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1691},\"cti4501Conformant\":false,\"laneWidth\":366,\"mapSource\":\"RSU\",\"timeStamp\":\"2024-05-03T20:59:48.748Z\"}}"; - String inputProcessedMapWkt4 = "{\"mapFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":1,\"geometry\":\"LINESTRING (-105.0907089 39.587905, -105.0906245 39.5876246, -105.0905203 39.587281, -105.0904383 39.5870554, -105.0903588 39.5868383, -105.0902622 39.5865865, -105.0901249 39.5862612, -105.0900451 39.5860819, -105.0899283 39.5858283, -105.0898739 39.5857117, -105.0895814 39.5851569, -105.0888764 39.5839527)\",\"properties\":{\"laneId\":1,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":2,\"geometry\":\"LINESTRING (-105.0907462 39.5878956, -105.090652 39.5875596, -105.090534 39.5871793, -105.0903457 39.5866864, -105.0902123 39.5863581, -105.0900802 39.5860572, -105.0898164 39.5855019, -105.0895409 39.5849856, -105.088922 39.5839259)\",\"properties\":{\"laneId\":2,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":3,\"geometry\":\"LINESTRING (-105.0907914 39.5878879, -105.090747 39.5877247, -105.0906498 39.5874141, -105.0906262 39.5873356, -105.0905865 39.5872922)\",\"properties\":{\"laneId\":3,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":1,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":2,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":6,\"geometry\":\"LINESTRING (-105.0910008 39.5878477, -105.0909927 39.5878181)\",\"properties\":{\"laneId\":6,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":5,\"geometry\":\"LINESTRING (-105.090959 39.5878557, -105.0909501 39.5878218)\",\"properties\":{\"laneId\":5,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":4,\"geometry\":\"LINESTRING (-105.090914 39.5878612, -105.0909051 39.5878298)\",\"properties\":{\"laneId\":4,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":2,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":10,\"geometry\":\"LINESTRING (-105.0911626 39.5880622, -105.0912043 39.5880536)\",\"properties\":{\"laneId\":10,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":4,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":8,\"geometry\":\"LINESTRING (-105.0911477 39.587995, -105.0914565 39.5879427, -105.0917937 39.5879029, -105.0922121 39.5878724, -105.0926509 39.5878748, -105.0930303 39.5879073, -105.0932697 39.5879503, -105.0937243 39.5880569, -105.0940309 39.5881258, -105.0943257 39.5881804, -105.094592 39.5882097)\",\"properties\":{\"laneId\":8,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":15,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":7,\"geometry\":\"LINESTRING (-105.0911442 39.5879589, -105.0914154 39.5879165, -105.0916346 39.5878851, -105.0918433 39.5878639, -105.0921546 39.5878547)\",\"properties\":{\"laneId\":7,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":6,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":9,\"geometry\":\"LINESTRING (-105.0911534 39.5880261, -105.091436 39.5879812, -105.0916658 39.5879507, -105.091881 39.5879277, -105.0921287 39.5878972)\",\"properties\":{\"laneId\":9,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":3,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":14,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":true,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":4,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":12,\"geometry\":\"LINESTRING (-105.0910447 39.5881948, -105.0911481 39.5886317, -105.091196 39.588862, -105.0912349 39.5890282, -105.0912722 39.5893202, -105.0913306 39.5897261, -105.0913695 39.5900324, -105.0914008 39.5903008, -105.0914893 39.5913099, -105.091527 39.5923157)\",\"properties\":{\"laneId\":12,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":5,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":13,\"geometry\":\"LINESTRING (-105.0910013 39.5881975, -105.0911059 39.5886309, -105.091144 39.5888313, -105.0911829 39.5890442, -105.0912308 39.5893169, -105.0912689 39.5895877, -105.0913005 39.5898143, -105.0913313 39.5900714, -105.0913597 39.5902968, -105.0914461 39.5913017, -105.0914756 39.592324)\",\"properties\":{\"laneId\":13,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":4,\"maneuver\":{\"maneuverStraightAllowed\":true,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":false,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"signalGroup\":6,\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":11,\"geometry\":\"LINESTRING (-105.0910891 39.5881859, -105.0911549 39.5884681, -105.091196 39.5886783, -105.091222 39.5888049, -105.0912401 39.5889649)\",\"properties\":{\"laneId\":11,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":0,\"ingressApproach\":5,\"ingressPath\":true,\"egressPath\":false,\"maneuvers\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false},\"connectsTo\":[{\"connectingLane\":{\"lane\":10,\"maneuver\":{\"maneuverStraightAllowed\":false,\"maneuverNoStoppingAllowed\":false,\"goWithHalt\":false,\"maneuverLeftAllowed\":false,\"maneuverUTurnAllowed\":false,\"maneuverLeftTurnOnRedAllowed\":false,\"reserved1\":false,\"maneuverRightAllowed\":true,\"maneuverLaneChangeAllowed\":false,\"yieldAllwaysRequired\":false,\"maneuverRightTurnOnRedAllowed\":false,\"caution\":false}},\"connectionID\":1}]}},{\"type\":\"Feature\",\"id\":14,\"geometry\":\"LINESTRING (-105.0908389 39.5882151, -105.0908478 39.5882471)\",\"properties\":{\"laneId\":14,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}},{\"type\":\"Feature\",\"id\":15,\"geometry\":\"LINESTRING (-105.0907875 39.58822, -105.0907979 39.5882514)\",\"properties\":{\"laneId\":15,\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}},\"sharedWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"egressApproach\":6,\"ingressApproach\":0,\"ingressPath\":false,\"egressPath\":true}}]},\"connectingLanesFeatureCollection\":{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":\"1-15\",\"geometry\":\"LINESTRING (-105.0907089 39.587905, -105.0907875 39.58822)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":1,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"2-14\",\"geometry\":\"LINESTRING (-105.0907462 39.5878956, -105.0908389 39.5882151)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":2,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"3-10\",\"geometry\":\"LINESTRING (-105.0907914 39.5878879, -105.0911626 39.5880622)\",\"properties\":{\"signalGroupId\":2,\"ingressLaneId\":3,\"egressLaneId\":10}},{\"type\":\"Feature\",\"id\":\"8-15\",\"geometry\":\"LINESTRING (-105.0911477 39.587995, -105.0907875 39.58822)\",\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":8,\"egressLaneId\":15}},{\"type\":\"Feature\",\"id\":\"7-6\",\"geometry\":\"LINESTRING (-105.0911442 39.5879589, -105.0910008 39.5878477)\",\"properties\":{\"ingressLaneId\":7,\"egressLaneId\":6}},{\"type\":\"Feature\",\"id\":\"9-14\",\"geometry\":\"LINESTRING (-105.0911534 39.5880261, -105.0908389 39.5882151)\",\"properties\":{\"signalGroupId\":4,\"ingressLaneId\":9,\"egressLaneId\":14}},{\"type\":\"Feature\",\"id\":\"12-5\",\"geometry\":\"LINESTRING (-105.0910447 39.5881948, -105.090959 39.5878557)\",\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":12,\"egressLaneId\":5}},{\"type\":\"Feature\",\"id\":\"13-4\",\"geometry\":\"LINESTRING (-105.0910013 39.5881975, -105.090914 39.5878612)\",\"properties\":{\"signalGroupId\":6,\"ingressLaneId\":13,\"egressLaneId\":4}},{\"type\":\"Feature\",\"id\":\"11-10\",\"geometry\":\"LINESTRING (-105.0910891 39.5881859, -105.0911626 39.5880622)\",\"properties\":{\"ingressLaneId\":11,\"egressLaneId\":10}}]},\"properties\":{\"messageType\":\"MAP\",\"odeReceivedAt\":\"2024-05-03T20:58:48.748Z\",\"originIp\":\"10.11.81.12\",\"intersectionId\":12109,\"msgIssueRevision\":2,\"revision\":2,\"refPoint\":{\"latitude\":39.5880413,\"longitude\":-105.0908854,\"elevation\":1691},\"cti4501Conformant\":false,\"laneWidth\":366,\"mapSource\":\"RSU\",\"timeStamp\":\"2024-05-03T22:00:48.748Z\"}}"; - - String key = "{\"rsuId\":\"10.11.81.12\",\"intersectionId\":12109,\"region\":-1}"; - - @Autowired - DeduplicatorProperties props; - - - @Test - public void testTopology() { - - props = new DeduplicatorProperties(); - props.setKafkaTopicProcessedMapWKT(inputTopic); - props.setKafkaTopicDeduplicatedProcessedMapWKT(outputTopic); - - ProcessedMapWktDeduplicatorTopology processedMapDeduplicatorTopology = new ProcessedMapWktDeduplicatorTopology(props, null); - - Topology topology = processedMapDeduplicatorTopology.buildTopology(); - objectMapper.registerModule(new JavaTimeModule()); - - try (TopologyTestDriver driver = new TopologyTestDriver(topology)) { - - - TestInputTopic inputProcessedMapData = driver.createInputTopic( - inputTopic, - Serdes.String().serializer(), - Serdes.String().serializer()); - - - TestOutputTopic> outputProcessedMapData = driver.createOutputTopic( - outputTopic, - Serdes.String().deserializer(), - JsonSerdes.ProcessedMapWKT().deserializer()); - - inputProcessedMapData.pipeInput(key, inputProcessedMapWkt1); - inputProcessedMapData.pipeInput(key, inputProcessedMapWkt2); - inputProcessedMapData.pipeInput(key, inputProcessedMapWkt3); - inputProcessedMapData.pipeInput(key, inputProcessedMapWkt4); - - List>> mapDeduplicatorResults = outputProcessedMapData.readKeyValuesToList(); - - // validate that only 3 messages make it through - assertEquals(3, mapDeduplicatorResults.size()); - - ProcessedMap map1 = objectMapper.readValue(inputProcessedMapWkt1, typeReference); - ProcessedMap map2 = objectMapper.readValue(inputProcessedMapWkt2, typeReference); - ProcessedMap map4 = objectMapper.readValue(inputProcessedMapWkt4, typeReference); - - assertEquals(map1.getProperties().getOdeReceivedAt(), mapDeduplicatorResults.get(0).value.getProperties().getOdeReceivedAt()); - assertEquals(map2.getProperties().getOdeReceivedAt(), mapDeduplicatorResults.get(1).value.getProperties().getOdeReceivedAt()); - assertEquals(map4.getProperties().getOdeReceivedAt(), mapDeduplicatorResults.get(2).value.getProperties().getOdeReceivedAt()); - - - - } catch (JsonMappingException e) { - e.printStackTrace(); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedSpatDeduplicatorTopologyTest.java b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedSpatDeduplicatorTopologyTest.java deleted file mode 100644 index 96fd914..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/ProcessedSpatDeduplicatorTopologyTest.java +++ /dev/null @@ -1,106 +0,0 @@ -package deduplicator; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KeyValue; -import org.apache.kafka.streams.TestInputTopic; -import org.apache.kafka.streams.TestOutputTopic; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.TopologyTestDriver; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.ProcessedSpatDeduplicatorTopology; -import us.dot.its.jpo.geojsonconverter.pojos.spat.ProcessedSpat; -import us.dot.its.jpo.geojsonconverter.serialization.JsonSerdes; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.List; - - -public class ProcessedSpatDeduplicatorTopologyTest { - - String inputTopic = "topic.ProcessedSpat"; - String outputTopic = "topic.DeduplicatedProcessedSpat"; - - - TypeReference typeReference = new TypeReference<>(){}; - ObjectMapper objectMapper = new ObjectMapper(); - - String inputProcessedSpat1 = "{\"schemaVersion\":-1,\"messageType\":\"SPAT\",\"odeReceivedAt\":\"2024-11-01T15:49:05.278Z\",\"originIp\":\"10.164.6.16\",\"name\":\"N State St & E Center St\",\"intersectionId\":6311,\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id.region: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id\",\"schemaPath\":\"#/$defs/J2735IntersectionReferenceID/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.maxEndTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"}],\"revision\":102,\"status\":{\"manualControlIsEnabled\":false,\"stopTimeIsActivated\":false,\"failureFlash\":false,\"preemptIsActive\":false,\"signalPriorityIsActive\":false,\"fixedTimeOperation\":false,\"trafficDependentOperation\":false,\"standbyOperation\":false,\"failureMode\":false,\"off\":false,\"recentMAPmessageUpdate\":true,\"recentChangeInMAPassignedLanesIDsUsed\":true,\"noValidMAPisAvailableAtThisTime\":false,\"noValidSPATisAvailableAtThisTime\":false},\"utcTimeStamp\":\"2024-11-01T15:49:05.278Z\",\"enabledLanes\":[],\"states\":[{\"signalGroup\":1,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:04.237Z\",\"maxEndTime\":\"2024-11-01T15:50:04.237Z\"}}]},{\"signalGroup\":2,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":3,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:24.237Z\",\"maxEndTime\":\"2024-11-01T15:50:24.237Z\"}}]},{\"signalGroup\":4,\"stateTimeSpeed\":[{\"eventState\":\"PERMISSIVE_CLEARANCE\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:06.137Z\",\"maxEndTime\":\"2024-11-01T15:49:06.137Z\"}}]},{\"signalGroup\":5,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":6,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:44.237Z\",\"maxEndTime\":\"2024-11-01T15:49:44.237Z\"}}]},{\"signalGroup\":7,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:05.237Z\"}}]},{\"signalGroup\":8,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:24.237Z\",\"maxEndTime\":\"2024-11-01T15:50:24.237Z\"}}]}]}"; - String inputProcessedSpat2 = "{\"schemaVersion\":-1,\"messageType\":\"SPAT\",\"odeReceivedAt\":\"2024-11-01T15:49:05.278Z\",\"originIp\":\"10.164.6.16\",\"name\":\"N State St & E Center St\",\"intersectionId\":6311,\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id.region: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id\",\"schemaPath\":\"#/$defs/J2735IntersectionReferenceID/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.maxEndTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"}],\"revision\":102,\"status\":{\"manualControlIsEnabled\":false,\"stopTimeIsActivated\":false,\"failureFlash\":false,\"preemptIsActive\":false,\"signalPriorityIsActive\":false,\"fixedTimeOperation\":false,\"trafficDependentOperation\":false,\"standbyOperation\":false,\"failureMode\":false,\"off\":false,\"recentMAPmessageUpdate\":true,\"recentChangeInMAPassignedLanesIDsUsed\":true,\"noValidMAPisAvailableAtThisTime\":false,\"noValidSPATisAvailableAtThisTime\":false},\"utcTimeStamp\":\"2024-11-01T15:49:05.378Z\",\"enabledLanes\":[],\"states\":[{\"signalGroup\":1,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:04.237Z\",\"maxEndTime\":\"2024-11-01T15:50:04.237Z\"}}]},{\"signalGroup\":2,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":3,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:24.237Z\",\"maxEndTime\":\"2024-11-01T15:50:24.237Z\"}}]},{\"signalGroup\":4,\"stateTimeSpeed\":[{\"eventState\":\"PERMISSIVE_CLEARANCE\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:06.137Z\",\"maxEndTime\":\"2024-11-01T15:49:06.137Z\"}}]},{\"signalGroup\":5,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":6,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:44.237Z\",\"maxEndTime\":\"2024-11-01T15:49:44.237Z\"}}]},{\"signalGroup\":7,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:05.237Z\"}}]},{\"signalGroup\":8,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:24.237Z\",\"maxEndTime\":\"2024-11-01T15:50:24.237Z\"}}]}]}"; - String inputProcessedSpat3 = "{\"schemaVersion\":-1,\"messageType\":\"SPAT\",\"odeReceivedAt\":\"2024-11-01T15:49:05.278Z\",\"originIp\":\"10.164.6.16\",\"name\":\"N State St & E Center St\",\"intersectionId\":6311,\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id.region: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id\",\"schemaPath\":\"#/$defs/J2735IntersectionReferenceID/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.maxEndTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"}],\"revision\":102,\"status\":{\"manualControlIsEnabled\":false,\"stopTimeIsActivated\":false,\"failureFlash\":false,\"preemptIsActive\":false,\"signalPriorityIsActive\":false,\"fixedTimeOperation\":false,\"trafficDependentOperation\":false,\"standbyOperation\":false,\"failureMode\":false,\"off\":false,\"recentMAPmessageUpdate\":true,\"recentChangeInMAPassignedLanesIDsUsed\":true,\"noValidMAPisAvailableAtThisTime\":false,\"noValidSPATisAvailableAtThisTime\":false},\"utcTimeStamp\":\"2024-11-01T15:50:05.478Z\",\"enabledLanes\":[],\"states\":[{\"signalGroup\":1,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:04.237Z\",\"maxEndTime\":\"2024-11-01T15:50:04.237Z\"}}]},{\"signalGroup\":2,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":3,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:24.237Z\",\"maxEndTime\":\"2024-11-01T15:50:24.237Z\"}}]},{\"signalGroup\":4,\"stateTimeSpeed\":[{\"eventState\":\"PERMISSIVE_CLEARANCE\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:06.137Z\",\"maxEndTime\":\"2024-11-01T15:49:06.137Z\"}}]},{\"signalGroup\":5,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":6,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:44.237Z\",\"maxEndTime\":\"2024-11-01T15:49:44.237Z\"}}]},{\"signalGroup\":7,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:05.237Z\"}}]},{\"signalGroup\":8,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:24.237Z\",\"maxEndTime\":\"2024-11-01T15:50:24.237Z\"}}]}]}"; - String inputProcessedSpat4 = "{\"schemaVersion\":-1,\"messageType\":\"SPAT\",\"odeReceivedAt\":\"2024-11-01T15:49:05.278Z\",\"originIp\":\"10.164.6.16\",\"name\":\"N State St & E Center St\",\"intersectionId\":6311,\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id.region: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id\",\"schemaPath\":\"#/$defs/J2735IntersectionReferenceID/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.maxEndTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"}],\"revision\":102,\"status\":{\"manualControlIsEnabled\":false,\"stopTimeIsActivated\":false,\"failureFlash\":false,\"preemptIsActive\":false,\"signalPriorityIsActive\":false,\"fixedTimeOperation\":false,\"trafficDependentOperation\":false,\"standbyOperation\":false,\"failureMode\":false,\"off\":false,\"recentMAPmessageUpdate\":true,\"recentChangeInMAPassignedLanesIDsUsed\":true,\"noValidMAPisAvailableAtThisTime\":false,\"noValidSPATisAvailableAtThisTime\":false},\"utcTimeStamp\":\"2024-11-01T15:50:05.578Z\",\"enabledLanes\":[],\"states\":[{\"signalGroup\":1,\"stateTimeSpeed\":[{\"eventState\":\"PROTECTED_MOVEMENT_ALLOWED\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:04.237Z\",\"maxEndTime\":\"2024-11-01T15:50:04.237Z\"}}]},{\"signalGroup\":2,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":3,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:24.237Z\",\"maxEndTime\":\"2024-11-01T15:50:24.237Z\"}}]},{\"signalGroup\":4,\"stateTimeSpeed\":[{\"eventState\":\"PERMISSIVE_CLEARANCE\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:06.137Z\",\"maxEndTime\":\"2024-11-01T15:49:06.137Z\"}}]},{\"signalGroup\":5,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":6,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:44.237Z\",\"maxEndTime\":\"2024-11-01T15:49:44.237Z\"}}]},{\"signalGroup\":7,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:05.237Z\"}}]},{\"signalGroup\":8,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:24.237Z\",\"maxEndTime\":\"2024-11-01T15:50:24.237Z\"}}]}]}"; - String inputProcessedSpat5 = "{\"schemaVersion\":-1,\"messageType\":\"SPAT\",\"odeReceivedAt\":\"2024-11-01T15:49:05.278Z\",\"originIp\":\"10.164.6.16\",\"name\":\"N State St & E Center St\",\"intersectionId\":6311,\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id.region: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id\",\"schemaPath\":\"#/$defs/J2735IntersectionReferenceID/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.maxEndTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"}],\"revision\":102,\"status\":{\"manualControlIsEnabled\":false,\"stopTimeIsActivated\":false,\"failureFlash\":false,\"preemptIsActive\":false,\"signalPriorityIsActive\":false,\"fixedTimeOperation\":false,\"trafficDependentOperation\":false,\"standbyOperation\":false,\"failureMode\":false,\"off\":false,\"recentMAPmessageUpdate\":true,\"recentChangeInMAPassignedLanesIDsUsed\":true,\"noValidMAPisAvailableAtThisTime\":false,\"noValidSPATisAvailableAtThisTime\":false},\"utcTimeStamp\":\"2024-11-01T15:50:05.678Z\",\"enabledLanes\":[],\"states\":[{\"signalGroup\":1,\"stateTimeSpeed\":[{\"eventState\":\"PROTECTED_MOVEMENT_ALLOWED\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:04.237Z\",\"maxEndTime\":\"2024-11-01T15:50:04.237Z\"}}]},{\"signalGroup\":2,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":3,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:24.237Z\",\"maxEndTime\":\"2024-11-01T15:50:24.237Z\"}}]},{\"signalGroup\":4,\"stateTimeSpeed\":[{\"eventState\":\"PERMISSIVE_CLEARANCE\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:06.137Z\",\"maxEndTime\":\"2024-11-01T15:49:06.137Z\"}}]},{\"signalGroup\":5,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":6,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:44.237Z\",\"maxEndTime\":\"2024-11-01T15:49:44.237Z\"}}]},{\"signalGroup\":7,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:05.237Z\"}}]}]}"; - String inputProcessedSpat6 = "{\"schemaVersion\":-1,\"messageType\":\"SPAT\",\"odeReceivedAt\":\"2024-11-01T15:49:05.278Z\",\"originIp\":\"10.164.6.16\",\"name\":\"N State St & E Center St\",\"intersectionId\":6311,\"cti4501Conformant\":false,\"validationMessages\":[{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id.region: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].id\",\"schemaPath\":\"#/$defs/J2735IntersectionReferenceID/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[0].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[1].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[2].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[3].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[4].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[5].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.maxEndTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[6].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.startTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"},{\"message\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing.nextTime: is missing but it is required\",\"jsonPath\":\"$.payload.data.intersectionStateList.intersectionStatelist[0].states.movementList[7].state_time_speed.movementEventList[0].timing\",\"schemaPath\":\"#/$defs/J2735TimeChangeDetails/required\"}],\"revision\":102,\"status\":{\"manualControlIsEnabled\":false,\"stopTimeIsActivated\":false,\"failureFlash\":false,\"preemptIsActive\":false,\"signalPriorityIsActive\":false,\"fixedTimeOperation\":false,\"trafficDependentOperation\":false,\"standbyOperation\":false,\"failureMode\":false,\"off\":false,\"recentMAPmessageUpdate\":true,\"recentChangeInMAPassignedLanesIDsUsed\":true,\"noValidMAPisAvailableAtThisTime\":false,\"noValidSPATisAvailableAtThisTime\":false},\"utcTimeStamp\":\"2024-11-01T15:50:05.778Z\",\"enabledLanes\":[],\"states\":[{\"signalGroup\":1,\"stateTimeSpeed\":[{\"eventState\":\"PROTECTED_MOVEMENT_ALLOWED\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:04.237Z\",\"maxEndTime\":\"2024-11-01T15:50:04.237Z\"}}]},{\"signalGroup\":2,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":3,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:50:24.237Z\",\"maxEndTime\":\"2024-11-01T15:50:24.237Z\"}}]},{\"signalGroup\":4,\"stateTimeSpeed\":[{\"eventState\":\"PERMISSIVE_CLEARANCE\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:06.137Z\",\"maxEndTime\":\"2024-11-01T15:49:06.137Z\"}}]},{\"signalGroup\":5,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:08.337Z\",\"maxEndTime\":\"2024-11-01T15:49:08.337Z\"}}]},{\"signalGroup\":6,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:44.237Z\",\"maxEndTime\":\"2024-11-01T15:49:44.237Z\"}}]},{\"signalGroup\":9,\"stateTimeSpeed\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":\"2024-11-01T15:49:05.237Z\"}}]}]}"; - - String key = "{\"rsuId\": \"10.164.6.16\", \"intersectionId\": 6311, \"region\": -1}"; - - @Autowired - DeduplicatorProperties props; - - - @Test - public void testTopology() { - - props = new DeduplicatorProperties(); - props.setKafkaTopicProcessedSpat(inputTopic); - props.setKafkaTopicDeduplicatedProcessedSpat(outputTopic); - - ProcessedSpatDeduplicatorTopology processedSpatDeduplicatorTopology = new ProcessedSpatDeduplicatorTopology(props, null); - - Topology topology = processedSpatDeduplicatorTopology.buildTopology(); - objectMapper.registerModule(new JavaTimeModule()); - - try (TopologyTestDriver driver = new TopologyTestDriver(topology)) { - - - TestInputTopic inputProcessedSpatData = driver.createInputTopic( - inputTopic, - Serdes.String().serializer(), - Serdes.String().serializer()); - - - TestOutputTopic outputProcessedSpatData = driver.createOutputTopic( - outputTopic, - Serdes.String().deserializer(), - JsonSerdes.ProcessedSpat().deserializer()); - - inputProcessedSpatData.pipeInput(key, inputProcessedSpat1); - inputProcessedSpatData.pipeInput(key, inputProcessedSpat2); - inputProcessedSpatData.pipeInput(key, inputProcessedSpat3); - inputProcessedSpatData.pipeInput(key, inputProcessedSpat4); - inputProcessedSpatData.pipeInput(key, inputProcessedSpat5); - inputProcessedSpatData.pipeInput(key, inputProcessedSpat6); - - List> spatDeduplicatorResults = outputProcessedSpatData.readKeyValuesToList(); - - // validate that only 5 messages make it through - assertEquals(5, spatDeduplicatorResults.size()); - - ProcessedSpat spat1 = objectMapper.readValue(inputProcessedSpat1, typeReference); - ProcessedSpat spat3 = objectMapper.readValue(inputProcessedSpat3, typeReference); // forwarded because the time on the message changes by 1 minute - ProcessedSpat spat4 = objectMapper.readValue(inputProcessedSpat4, typeReference); // forwarded because the signal state changes - ProcessedSpat spat5 = objectMapper.readValue(inputProcessedSpat5, typeReference); // forwarded because the number of signal groups changed - ProcessedSpat spat6 = objectMapper.readValue(inputProcessedSpat6, typeReference); // forwarded because a signal group ID changed - - assertEquals(spat1.getUtcTimeStamp(), spatDeduplicatorResults.get(0).value.getUtcTimeStamp()); - assertEquals(spat3.getUtcTimeStamp(), spatDeduplicatorResults.get(1).value.getUtcTimeStamp()); - assertEquals(spat4.getUtcTimeStamp(), spatDeduplicatorResults.get(2).value.getUtcTimeStamp()); - assertEquals(spat5.getUtcTimeStamp(), spatDeduplicatorResults.get(3).value.getUtcTimeStamp()); - assertEquals(spat6.getUtcTimeStamp(), spatDeduplicatorResults.get(4).value.getUtcTimeStamp()); - - - } catch (JsonMappingException e) { - e.printStackTrace(); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/TimDeduplicatorTopologyTest.java b/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/TimDeduplicatorTopologyTest.java deleted file mode 100644 index 018db4f..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/test/java/deduplicator/TimDeduplicatorTopologyTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package deduplicator; - -import org.apache.kafka.common.serialization.Serdes; -import org.apache.kafka.streams.KeyValue; -import org.apache.kafka.streams.TestInputTopic; -import org.apache.kafka.streams.TestOutputTopic; -import org.apache.kafka.streams.Topology; -import org.apache.kafka.streams.TopologyTestDriver; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -import us.dot.its.jpo.deduplicator.DeduplicatorProperties; -import us.dot.its.jpo.deduplicator.deduplicator.topologies.TimDeduplicatorTopology; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.List; - - -public class TimDeduplicatorTopologyTest { - - String inputTopic = "topic.OdeTimJson"; - String outputTopic = "topic.DeduplicatedOdeTimJson"; - - ObjectMapper objectMapper = new ObjectMapper(); - - //Original Message - String inputTim1 = "{\"metadata\": {\"payloadType\": \"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\": {\"streamId\": \"a9012e0d-7acc-48b3-981e-aed4b4d180aa\",\"bundleSize\": 1,\"bundleId\": 113,\"recordId\": 0,\"serialNumber\": 113},\"odeReceivedAt\": \"2025-01-20T23:00:18.065Z\",\"schemaVersion\": 8,\"maxDurationTime\": 30,\"recordGeneratedAt\": \"2025-01-16T23:15:09.000Z\",\"recordGeneratedBy\": \"TMC\",\"sanitized\": false,\"odePacketID\": \"2D815A64F19A75534B\",\"odeTimStartDateTime\": \"2025-01-20T23:00:15.802Z\"},\"payload\": {\"data\": {\"msgCnt\": 1,\"timeStamp\": 22995,\"packetID\": \"2D815A64F19A75534B\",\"urlB\": \"null\",\"dataFrames\": [{\"frameType\": \"advisory\",\"msgId\": {\"roadSignID\": {\"position\": {\"lat\": 398784622,\"long\": -1050251574},\"viewAngle\": {\"from000-0to022-5degrees\": true,\"from022-5to045-0degrees\": true,\"from045-0to067-5degrees\": true,\"from067-5to090-0degrees\": true,\"from090-0to112-5degrees\": true,\"from112-5to135-0degrees\": true,\"from135-0to157-5degrees\": true,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": true,\"from225-0to247-5degrees\": true,\"from247-5to270-0degrees\": true,\"from270-0to292-5degrees\": true,\"from292-5to315-0degrees\": true,\"from315-0to337-5degrees\": true,\"from337-5to360-0degrees\": true},\"mutcdCode\": \"warning\"}},\"startYear\": 2025,\"startTime\": 28740,\"durationTime\": 30,\"priority\": 5,\"regions\": [{\"name\": \"I_US-287_SAT_1A97342A\",\"id\": {\"region\": 0,\"id\": 0},\"anchor\": {\"lat\": 398784622,\"long\": -1050251574},\"laneWidth\": 5000,\"directionality\": \"both\",\"closedPath\": false,\"direction\": {\"from000-0to022-5degrees\": false,\"from022-5to045-0degrees\": false,\"from045-0to067-5degrees\": false,\"from067-5to090-0degrees\": false,\"from090-0to112-5degrees\": false,\"from112-5to135-0degrees\": false,\"from135-0to157-5degrees\": false,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": false,\"from225-0to247-5degrees\": false,\"from247-5to270-0degrees\": false,\"from270-0to292-5degrees\": false,\"from292-5to315-0degrees\": false,\"from315-0to337-5degrees\": false,\"from337-5to360-0degrees\": false},\"description\": {\"path\": {\"scale\": 0,\"offset\": {\"ll\": {\"nodes\": [{\"delta\": {\"node-LL1\": {\"lon\": -3,\"lat\": -1349}}},{\"delta\": {\"node-LL1\": {\"lon\": 0,\"lat\": -164}}},{\"delta\": {\"node-LL4\": {\"lon\": -79,\"lat\": -36171}}},{\"delta\": {\"node-LL3\": {\"lon\": -52,\"lat\": -23867}}},{\"delta\": {\"node-LL2\": {\"lon\": 150,\"lat\": -7144}}},{\"delta\": {\"node-LL2\": {\"lon\": 936,\"lat\": -7633}}},{\"delta\": {\"node-LL3\": {\"lon\": 130,\"lat\": -15274}}},{\"delta\": {\"node-LL3\": {\"lon\": 114,\"lat\": -22432}}},{\"delta\": {\"node-LL4\": {\"lon\": -122,\"lat\": -35545}}},{\"delta\": {\"node-LL3\": {\"lon\": 378,\"lat\": -8947}}},{\"delta\": {\"node-LL3\": {\"lon\": 75,\"lat\": -9416}}}]}}}}}],\"content\": {\"workZone\": [{\"item\": {\"itis\": 1025}}]},\"url\": \"null\"}]},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation\"}}"; - - // Shifted Forward 1 seconds - Should be deduplicated - String inputTim2 = "{\"metadata\": {\"payloadType\": \"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\": {\"streamId\": \"a9012e0d-7acc-48b3-981e-aed4b4d180aa\",\"bundleSize\": 1,\"bundleId\": 113,\"recordId\": 0,\"serialNumber\": 113},\"odeReceivedAt\": \"2025-01-20T23:00:19.065Z\",\"schemaVersion\": 8,\"maxDurationTime\": 30,\"recordGeneratedAt\": \"2025-01-16T23:15:09.000Z\",\"recordGeneratedBy\": \"TMC\",\"sanitized\": false,\"odePacketID\": \"2D815A64F19A75534B\",\"odeTimStartDateTime\": \"2025-01-20T23:00:15.802Z\"},\"payload\": {\"data\": {\"msgCnt\": 1,\"timeStamp\": 22995,\"packetID\": \"2D815A64F19A75534B\",\"urlB\": \"null\",\"dataFrames\": [{\"frameType\": \"advisory\",\"msgId\": {\"roadSignID\": {\"position\": {\"lat\": 398784622,\"long\": -1050251574},\"viewAngle\": {\"from000-0to022-5degrees\": true,\"from022-5to045-0degrees\": true,\"from045-0to067-5degrees\": true,\"from067-5to090-0degrees\": true,\"from090-0to112-5degrees\": true,\"from112-5to135-0degrees\": true,\"from135-0to157-5degrees\": true,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": true,\"from225-0to247-5degrees\": true,\"from247-5to270-0degrees\": true,\"from270-0to292-5degrees\": true,\"from292-5to315-0degrees\": true,\"from315-0to337-5degrees\": true,\"from337-5to360-0degrees\": true},\"mutcdCode\": \"warning\"}},\"startYear\": 2025,\"startTime\": 28740,\"durationTime\": 30,\"priority\": 5,\"regions\": [{\"name\": \"I_US-287_SAT_1A97342A\",\"id\": {\"region\": 0,\"id\": 0},\"anchor\": {\"lat\": 398784622,\"long\": -1050251574},\"laneWidth\": 5000,\"directionality\": \"both\",\"closedPath\": false,\"direction\": {\"from000-0to022-5degrees\": false,\"from022-5to045-0degrees\": false,\"from045-0to067-5degrees\": false,\"from067-5to090-0degrees\": false,\"from090-0to112-5degrees\": false,\"from112-5to135-0degrees\": false,\"from135-0to157-5degrees\": false,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": false,\"from225-0to247-5degrees\": false,\"from247-5to270-0degrees\": false,\"from270-0to292-5degrees\": false,\"from292-5to315-0degrees\": false,\"from315-0to337-5degrees\": false,\"from337-5to360-0degrees\": false},\"description\": {\"path\": {\"scale\": 0,\"offset\": {\"ll\": {\"nodes\": [{\"delta\": {\"node-LL1\": {\"lon\": -3,\"lat\": -1349}}},{\"delta\": {\"node-LL1\": {\"lon\": 0,\"lat\": -164}}},{\"delta\": {\"node-LL4\": {\"lon\": -79,\"lat\": -36171}}},{\"delta\": {\"node-LL3\": {\"lon\": -52,\"lat\": -23867}}},{\"delta\": {\"node-LL2\": {\"lon\": 150,\"lat\": -7144}}},{\"delta\": {\"node-LL2\": {\"lon\": 936,\"lat\": -7633}}},{\"delta\": {\"node-LL3\": {\"lon\": 130,\"lat\": -15274}}},{\"delta\": {\"node-LL3\": {\"lon\": 114,\"lat\": -22432}}},{\"delta\": {\"node-LL4\": {\"lon\": -122,\"lat\": -35545}}},{\"delta\": {\"node-LL3\": {\"lon\": 378,\"lat\": -8947}}},{\"delta\": {\"node-LL3\": {\"lon\": 75,\"lat\": -9416}}}]}}}}}],\"content\": {\"workZone\": [{\"item\": {\"itis\": 1025}}]},\"url\": \"null\"}]},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation\"}}"; - - // Shifted Forward 1 hour Should be allowed to pass through - String inputTim3 = "{\"metadata\": {\"payloadType\": \"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\": {\"streamId\": \"a9012e0d-7acc-48b3-981e-aed4b4d180aa\",\"bundleSize\": 1,\"bundleId\": 113,\"recordId\": 0,\"serialNumber\": 113},\"odeReceivedAt\": \"2025-01-21T00:00:19.065Z\",\"schemaVersion\": 8,\"maxDurationTime\": 30,\"recordGeneratedAt\": \"2025-01-16T23:15:09.000Z\",\"recordGeneratedBy\": \"TMC\",\"sanitized\": false,\"odePacketID\": \"2D815A64F19A75534B\",\"odeTimStartDateTime\": \"2025-01-20T23:00:15.802Z\"},\"payload\": {\"data\": {\"msgCnt\": 1,\"timeStamp\": 22995,\"packetID\": \"2D815A64F19A75534B\",\"urlB\": \"null\",\"dataFrames\": [{\"frameType\": \"advisory\",\"msgId\": {\"roadSignID\": {\"position\": {\"lat\": 398784622,\"long\": -1050251574},\"viewAngle\": {\"from000-0to022-5degrees\": true,\"from022-5to045-0degrees\": true,\"from045-0to067-5degrees\": true,\"from067-5to090-0degrees\": true,\"from090-0to112-5degrees\": true,\"from112-5to135-0degrees\": true,\"from135-0to157-5degrees\": true,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": true,\"from225-0to247-5degrees\": true,\"from247-5to270-0degrees\": true,\"from270-0to292-5degrees\": true,\"from292-5to315-0degrees\": true,\"from315-0to337-5degrees\": true,\"from337-5to360-0degrees\": true},\"mutcdCode\": \"warning\"}},\"startYear\": 2025,\"startTime\": 28740,\"durationTime\": 30,\"priority\": 5,\"regions\": [{\"name\": \"I_US-287_SAT_1A97342A\",\"id\": {\"region\": 0,\"id\": 0},\"anchor\": {\"lat\": 398784622,\"long\": -1050251574},\"laneWidth\": 5000,\"directionality\": \"both\",\"closedPath\": false,\"direction\": {\"from000-0to022-5degrees\": false,\"from022-5to045-0degrees\": false,\"from045-0to067-5degrees\": false,\"from067-5to090-0degrees\": false,\"from090-0to112-5degrees\": false,\"from112-5to135-0degrees\": false,\"from135-0to157-5degrees\": false,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": false,\"from225-0to247-5degrees\": false,\"from247-5to270-0degrees\": false,\"from270-0to292-5degrees\": false,\"from292-5to315-0degrees\": false,\"from315-0to337-5degrees\": false,\"from337-5to360-0degrees\": false},\"description\": {\"path\": {\"scale\": 0,\"offset\": {\"ll\": {\"nodes\": [{\"delta\": {\"node-LL1\": {\"lon\": -3,\"lat\": -1349}}},{\"delta\": {\"node-LL1\": {\"lon\": 0,\"lat\": -164}}},{\"delta\": {\"node-LL4\": {\"lon\": -79,\"lat\": -36171}}},{\"delta\": {\"node-LL3\": {\"lon\": -52,\"lat\": -23867}}},{\"delta\": {\"node-LL2\": {\"lon\": 150,\"lat\": -7144}}},{\"delta\": {\"node-LL2\": {\"lon\": 936,\"lat\": -7633}}},{\"delta\": {\"node-LL3\": {\"lon\": 130,\"lat\": -15274}}},{\"delta\": {\"node-LL3\": {\"lon\": 114,\"lat\": -22432}}},{\"delta\": {\"node-LL4\": {\"lon\": -122,\"lat\": -35545}}},{\"delta\": {\"node-LL3\": {\"lon\": 378,\"lat\": -8947}}},{\"delta\": {\"node-LL3\": {\"lon\": 75,\"lat\": -9416}}}]}}}}}],\"content\": {\"workZone\": [{\"item\": {\"itis\": 1025}}]},\"url\": \"null\"}]},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation\"}}"; - - // Has a different payload ID. Should be allowed through - String inputTim4 = "{\"metadata\": {\"payloadType\": \"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\": {\"streamId\": \"a9012e0d-7acc-48b3-981e-aed4b4d180aa\",\"bundleSize\": 1,\"bundleId\": 113,\"recordId\": 0,\"serialNumber\": 113},\"odeReceivedAt\": \"2025-01-20T23:00:18.065Z\",\"schemaVersion\": 8,\"maxDurationTime\": 30,\"recordGeneratedAt\": \"2025-01-16T23:15:09.000Z\",\"recordGeneratedBy\": \"TMC\",\"sanitized\": false,\"odePacketID\": \"2D815A64F19A75534B\",\"odeTimStartDateTime\": \"2025-01-20T23:00:15.802Z\"},\"payload\": {\"data\": {\"msgCnt\": 1,\"timeStamp\": 22995,\"packetID\": \"051F23D9B7C23CF677\",\"urlB\": \"null\",\"dataFrames\": [{\"frameType\": \"advisory\",\"msgId\": {\"roadSignID\": {\"position\": {\"lat\": 398784622,\"long\": -1050251574},\"viewAngle\": {\"from000-0to022-5degrees\": true,\"from022-5to045-0degrees\": true,\"from045-0to067-5degrees\": true,\"from067-5to090-0degrees\": true,\"from090-0to112-5degrees\": true,\"from112-5to135-0degrees\": true,\"from135-0to157-5degrees\": true,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": true,\"from225-0to247-5degrees\": true,\"from247-5to270-0degrees\": true,\"from270-0to292-5degrees\": true,\"from292-5to315-0degrees\": true,\"from315-0to337-5degrees\": true,\"from337-5to360-0degrees\": true},\"mutcdCode\": \"warning\"}},\"startYear\": 2025,\"startTime\": 28740,\"durationTime\": 30,\"priority\": 5,\"regions\": [{\"name\": \"I_US-287_SAT_1A97342A\",\"id\": {\"region\": 0,\"id\": 0},\"anchor\": {\"lat\": 398784622,\"long\": -1050251574},\"laneWidth\": 5000,\"directionality\": \"both\",\"closedPath\": false,\"direction\": {\"from000-0to022-5degrees\": false,\"from022-5to045-0degrees\": false,\"from045-0to067-5degrees\": false,\"from067-5to090-0degrees\": false,\"from090-0to112-5degrees\": false,\"from112-5to135-0degrees\": false,\"from135-0to157-5degrees\": false,\"from157-5to180-0degrees\": true,\"from180-0to202-5degrees\": true,\"from202-5to225-0degrees\": false,\"from225-0to247-5degrees\": false,\"from247-5to270-0degrees\": false,\"from270-0to292-5degrees\": false,\"from292-5to315-0degrees\": false,\"from315-0to337-5degrees\": false,\"from337-5to360-0degrees\": false},\"description\": {\"path\": {\"scale\": 0,\"offset\": {\"ll\": {\"nodes\": [{\"delta\": {\"node-LL1\": {\"lon\": -3,\"lat\": -1349}}},{\"delta\": {\"node-LL1\": {\"lon\": 0,\"lat\": -164}}},{\"delta\": {\"node-LL4\": {\"lon\": -79,\"lat\": -36171}}},{\"delta\": {\"node-LL3\": {\"lon\": -52,\"lat\": -23867}}},{\"delta\": {\"node-LL2\": {\"lon\": 150,\"lat\": -7144}}},{\"delta\": {\"node-LL2\": {\"lon\": 936,\"lat\": -7633}}},{\"delta\": {\"node-LL3\": {\"lon\": 130,\"lat\": -15274}}},{\"delta\": {\"node-LL3\": {\"lon\": 114,\"lat\": -22432}}},{\"delta\": {\"node-LL4\": {\"lon\": -122,\"lat\": -35545}}},{\"delta\": {\"node-LL3\": {\"lon\": 378,\"lat\": -8947}}},{\"delta\": {\"node-LL3\": {\"lon\": 75,\"lat\": -9416}}}]}}}}}],\"content\": {\"workZone\": [{\"item\": {\"itis\": 1025}}]},\"url\": \"null\"}]},\"dataType\": \"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation\"}}"; - - @Autowired - DeduplicatorProperties props; - - @Test - public void testTopology() { - - props = new DeduplicatorProperties(); - props.setKafkaTopicOdeTimJson(inputTopic); - props.setKafkaTopicDeduplicatedOdeTimJson(outputTopic); - - TimDeduplicatorTopology TimDeduplicatorTopology = new TimDeduplicatorTopology(props, null); - - Topology topology = TimDeduplicatorTopology.buildTopology(); - objectMapper.registerModule(new JavaTimeModule()); - - try (TopologyTestDriver driver = new TopologyTestDriver(topology)) { - - - TestInputTopic inputTimData = driver.createInputTopic( - inputTopic, - Serdes.Void().serializer(), - Serdes.String().serializer()); - - - TestOutputTopic outputTimData = driver.createOutputTopic( - outputTopic, - Serdes.String().deserializer(), - Serdes.String().deserializer()); - - inputTimData.pipeInput(null, inputTim1); - inputTimData.pipeInput(null, inputTim2); - inputTimData.pipeInput(null, inputTim3); - inputTimData.pipeInput(null, inputTim4); - - List> timDeduplicatedResults = outputTimData.readKeyValuesToList(); - - // validate that only 3 messages make it through - assertEquals(3, timDeduplicatedResults.size()); - inputTim1 = inputTim1.strip(); - - assertEquals(inputTim1.replace(" ", ""), timDeduplicatedResults.get(0).value.replace(" ", "")); - assertEquals(inputTim3.replace(" ", ""), timDeduplicatedResults.get(1).value.replace(" ", "")); - assertEquals(inputTim4.replace(" ", ""), timDeduplicatedResults.get(2).value.replace(" ", "")); - - }catch(Exception e){ - e.printStackTrace(); - } - } -} diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/resources/application-testConfig.yaml b/jpo-deduplicator/jpo-deduplicator/src/test/resources/application-testConfig.yaml deleted file mode 100644 index 4f102d0..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/test/resources/application-testConfig.yaml +++ /dev/null @@ -1 +0,0 @@ -spring.kafka.bootstrap-servers: localhost:10093 \ No newline at end of file diff --git a/jpo-deduplicator/jpo-deduplicator/src/test/resources/logback-test.xml b/jpo-deduplicator/jpo-deduplicator/src/test/resources/logback-test.xml deleted file mode 100644 index cd07f49..0000000 --- a/jpo-deduplicator/jpo-deduplicator/src/test/resources/logback-test.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - %msg%n - - - - - - - \ No newline at end of file diff --git a/sample.env b/sample.env index feca26b..75bb52b 100644 --- a/sample.env +++ b/sample.env @@ -63,7 +63,7 @@ MONGO_DB_NAME=CV # Generate a random string for the MongoDB keyfile using the following command: # $ openssl rand -base64 32 -MONGO_DB_KEYFILE_STRING=replace_me +MONGO_DB_KEYFILE_STRING=replacethisstring MONGO_ADMIN_DB_USER=admin MONGO_ADMIN_DB_PASS=replace_me @@ -117,31 +117,10 @@ CONNECT_TASKS_MAX=1 # Number of concurrent tasks to configur CONNECT_CREATE_ODE=true # Create kafka connectors to MongoDB for ODE CONNECT_CREATE_GEOJSONCONVERTER=true # Create kafka connectors to MongoDB for GeoJSON Converter CONNECT_CREATE_CONFLICTMONITOR=true # Create kafka connectors to MongoDB for Conflict Monitor -CONNECT_CREATE_DEDUPLICATOR=true # Create kafka connectors to MongoDB for Deduplicator -CONNECT_CREATE_MECDEPOSIT=true # Create kafka connectors to MongoDB for MecDeposit +CONNECT_CREATE_DEDUPLICATOR=false # Create kafka connectors to MongoDB for Deduplicator +CONNECT_CREATE_MECDEPOSIT=false # Create kafka connectors to MongoDB for MecDeposit # Relative path to the Kafka Connector yaml configuration script, upper level directories are supported # NOTE: This script is used to create kafka connectors CONNECT_CONFIG_RELATIVE_PATH="./jikkou/kafka-connectors-values.yaml" -### Kafka connect variables - END ### - -### DEDUPLICATOR variables - START ### - -# Required for building the deduplicator. Documentation: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry#authenticating-to-github-packages -MAVEN_GITHUB_TOKEN= -MAVEN_GITHUB_ORG=usdot-jpo-ode - -ENABLE_PROCESSED_MAP_DEDUPLICATION=${KAFKA_TOPIC_CREATE_GEOJSONCONVERTER} -ENABLE_PROCESSED_MAP_WKT_DEDUPLICATION=${KAFKA_TOPIC_CREATE_GEOJSONCONVERTER} -ENABLE_ODE_MAP_DEDUPLICATION=${KAFKA_TOPIC_CREATE_ODE} -ENABLE_ODE_TIM_DEDUPLICATION=${KAFKA_TOPIC_CREATE_ODE} -ENABLE_ODE_RAW_ENCODED_TIM_DEDUPLICATION=${KAFKA_TOPIC_CREATE_ODE} -ENABLE_PROCESSED_SPAT_DEDUPLICATION=${KAFKA_TOPIC_CREATE_GEOJSONCONVERTER} -ENABLE_ODE_BSM_DEDUPLICATION=${KAFKA_TOPIC_CREATE_ODE} - - - -### DEDUPLICATOR variables - END ### - - - +### Kafka connect variables - END ### \ No newline at end of file From a0bcfedefdd03a167fb98e19db4ab45decce5c6c Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Fri, 24 Jan 2025 16:11:47 -0700 Subject: [PATCH 21/25] update default kafka topics --- sample.env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sample.env b/sample.env index 75bb52b..1597556 100644 --- a/sample.env +++ b/sample.env @@ -49,8 +49,8 @@ KAFKA_TOPIC_DELETE_RETENTION_MS=3600000 KAFKA_TOPIC_CREATE_ODE=true # Create topics for ODE KAFKA_TOPIC_CREATE_GEOJSONCONVERTER=true # Create topics for GeoJSON Converter KAFKA_TOPIC_CREATE_CONFLICTMONITOR=true # Create topics for Conflict Monitor -KAFKA_TOPIC_CREATE_DEDUPLICATOR=true # Create topics for Deduplicator -KAFKA_TOPIC_CREATE_MECDEPOSIT=true # Create topics for MecDeposit +KAFKA_TOPIC_CREATE_DEDUPLICATOR=false # Create topics for Deduplicator +KAFKA_TOPIC_CREATE_MECDEPOSIT=false # Create topics for MecDeposit # Relative path to the Kafka topic yaml configuration script, upper level directories are supported # NOTE: This script is used to create kafka topics KAFKA_TOPIC_CONFIG_RELATIVE_PATH="./jikkou/kafka-topics-values.yaml" From e613651bd8dfb6ed10bc63961fc49b8d238a1b52 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Fri, 24 Jan 2025 16:12:33 -0700 Subject: [PATCH 22/25] update release notes --- docs/Release_notes.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/Release_notes.md b/docs/Release_notes.md index 40fe69d..6c1a6eb 100644 --- a/docs/Release_notes.md +++ b/docs/Release_notes.md @@ -40,4 +40,5 @@ USDOT PR 23: Adding missing ode topics USDOT PR 24: Index updates CDOT PR 6: Adding MEC Deposit Resources USDOT PR 25: Updating version for kafka ui to latest release -CDOT PR 7: Tim compatibility and CI updates \ No newline at end of file +CDOT PR 7: Tim compatibility and CI updates +CDOT PR 8: Jpo deduplicator removal \ No newline at end of file From 0e2bc5e6f1c065175567abf3a711670d5841dda3 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Fri, 24 Jan 2025 16:13:15 -0700 Subject: [PATCH 23/25] removal of deduplicator CI --- .github/workflows/ci.yml | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index c7a3107..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: CI - -on: - pull_request: - paths: - - 'jpo-deduplicator/**' - -jobs: - deduplicator-test: - runs-on: ubuntu-latest - steps: - - name: Checkout Repository - uses: actions/checkout@v4 - - - name: Set up JDK - uses: actions/setup-java@v4 - with: - java-version: "21" - distribution: "temurin" - cache: 'maven' - - - name: Run tests - env: - MAVEN_GITHUB_TOKEN: ${{ secrets.MAVEN_GITHUB_TOKEN }} - MAVEN_GITHUB_ORG: ${{ github.repository_owner }} - run: | - cd $GITHUB_WORKSPACE/jpo-deduplicator/jpo-deduplicator - mvn verify -s ./settings.xml \ No newline at end of file From 2a625d52d2bbe4cfb648ec9c3eef4d76e704499f Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Fri, 24 Jan 2025 16:13:49 -0700 Subject: [PATCH 24/25] removal of deduplicator compose profile --- sample.env | 2 -- 1 file changed, 2 deletions(-) diff --git a/sample.env b/sample.env index 1597556..2237c0c 100644 --- a/sample.env +++ b/sample.env @@ -25,8 +25,6 @@ RESTART_POLICY="on-failure:3" # - kafka_connect # - kafka_connect # - kafka_connect_setup -# - deduplicator -# - deduplicator # EXAMPLE: COMPOSE_PROFILES=kafka_connect_standalone,kafka_ui,mongo_express COMPOSE_PROFILES=all From 551e09fa0e206d2d1c6a65809e190185784801e3 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Fri, 24 Jan 2025 16:20:07 -0700 Subject: [PATCH 25/25] revert env file testing --- docker-compose-mongo.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docker-compose-mongo.yml b/docker-compose-mongo.yml index b8c623e..4a460bc 100644 --- a/docker-compose-mongo.yml +++ b/docker-compose-mongo.yml @@ -8,9 +8,6 @@ services: image: mongo:8 hostname: mongo restart: ${RESTART_POLICY} - env_file: - - path: ./sample.env - required: true deploy: resources: limits: @@ -109,9 +106,6 @@ services: image: mongo-express:1.0.2-18 hostname: mongo-express restart: ${RESTART_POLICY} - env_file: - - path: ./sample.env - required: true deploy: resources: limits: