diff options
42 files changed, 51485 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aaade80 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/__pycache__/**
\ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..dd47276 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# Dependencies + +Python libraries used: +- flask +- flask-login +- pillow +- exif + +JavaScript libraries used: +- Leaflet + +General: +- ffmpeg
\ No newline at end of file diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..3b5f51d --- /dev/null +++ b/__init__.py @@ -0,0 +1,29 @@ +from flask import Flask +from flask_login import LoginManager +from . import db + +def create_app(): + app = Flask(__name__) + + app.config['SECRET_KEY'] = 'secret-key-goes-here' + + # authorization-related routes + from .auth import auth as auth_blueprint + # main routes + from .main import main as main_blueprint + + app.register_blueprint(main_blueprint) + app.register_blueprint(auth_blueprint) + + login_manager = LoginManager() + login_manager.login_view = 'auth.login' + login_manager.init_app(app) + + @login_manager.user_loader + def load_user(user_id): + # must return None in case no such user exists + return db.get_user(user_id) + + db.startup() + + return app @@ -0,0 +1,50 @@ +# external libraries +from flask import Blueprint, render_template, redirect, url_for, flash, request +from flask_login import login_user, login_required, logout_user +from werkzeug.security import generate_password_hash, check_password_hash + +# internal code +from . import db + +auth = Blueprint('auth', __name__) + +@auth.route('/login', methods=["GET", "POST"]) +def login(): + if request.method == "GET": + return render_template("login.html") + elif request.method == "POST": + email = request.form.get('email') + password = request.form.get('password') + remember = True if request.form.get('remember') else False + + user = db.get_user(email) + if not user or not check_password_hash(user.password, password): + flash('Please check your login details and try again.') + return redirect(url_for('auth.login')) + + login_user(user, remember=remember) + return redirect(url_for('main.home')) + + +@auth.route('/signup', methods=["GET", "POST"]) +def signup(): + if request.method == "GET": + return render_template("signup.html") + elif request.method == "POST": + # code to validate and add user to database goes here + email = request.form.get('email') + name = request.form.get('name') + password = request.form.get('password') + + if db.get_user(email): + flash('Email address already exists') + return redirect(url_for('auth.signup')) + + db.add_user(email=email, name=name, password=generate_password_hash(password, method='pbkdf2:sha256')) + return redirect(url_for('auth.login')) + +@auth.route('/logout', methods=["GET"]) +@login_required +def logout(): + logout_user() + return redirect(url_for("main.home")) diff --git a/collections.json b/collections.json new file mode 100644 index 0000000..9337d55 --- /dev/null +++ b/collections.json @@ -0,0 +1 @@ +{"last_modified": "PLACEHOLDER", "collections": {"1742863099": {"id": "1742863099", "title": "El Salvador", "subtitle": "March 2025 trip to El Salvador", "info": "Additional information", "owner": "john@gmail.com", "editors": ["fred@gmail.com", "mike@gmail.com"], "viewers" : [], "public": false, "last_edited": 1743619816.1493742, "media": [{"id": "P1040368.JPG", "mediapath": "content/1742863099/media/P1040368.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040368.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040368.png", "name": "P1040368.JPG", "info": "", "timestamp": "2025-03-16T05:41:49", "latitude": 42.36388162502043, "longitude": -71.01141929626466, "attached_notes": []}, {"id": "P1040375.JPG", "mediapath": "content/1742863099/media/P1040375.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040375.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040375.png", "name": "P1040375.JPG", "info": "", "timestamp": "2025-03-16T06:12:39", "latitude": 42.316944688648604, "longitude": -71.02489471435548, "attached_notes": []}, {"id": "P1040379.JPG", "mediapath": "content/1742863099/media/P1040379.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040379.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040379.png", "name": "P1040379.JPG", "info": "", "timestamp": "2025-03-16T11:02:16", "latitude": 39.870699197063104, "longitude": -75.24621963500978, "attached_notes": []}, {"id": "P1040382.JPG", "mediapath": "content/1742863099/media/P1040382.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040382.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040382.png", "name": "P1040382.JPG", "info": "", "timestamp": "2025-03-16T15:27:51", "latitude": 25.696428639780407, "longitude": -80.08209228515626, "attached_notes": []}, {"id": "P1040384.JPG", "mediapath": "content/1742863099/media/P1040384.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040384.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040384.png", "name": "P1040384.JPG", "info": "", "timestamp": "2025-03-16T15:32:01", "latitude": 25.56019106590662, "longitude": -80.08758544921876, "attached_notes": []}, {"id": "P1040385.JPG", "mediapath": "content/1742863099/media/P1040385.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040385.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040385.png", "name": "P1040385.JPG", "info": "", "timestamp": "2025-03-16T15:33:58", "latitude": 25.473413631643098, "longitude": -80.12054443359376, "attached_notes": []}, {"id": "P1040386.JPG", "mediapath": "content/1742863099/media/P1040386.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040386.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040386.png", "name": "P1040386.JPG", "info": "", "timestamp": "2025-03-16T15:35:36", "latitude": 25.374162705062023, "longitude": -80.12878417968751, "attached_notes": []}, {"id": "P1040389.JPG", "mediapath": "content/1742863099/media/P1040389.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040389.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040389.png", "name": "P1040389.JPG", "info": "", "timestamp": "2025-03-16T20:45:33", "latitude": 13.834404674344144, "longitude": -89.26497817039491, "attached_notes": []}, {"id": "P1040391.JPG", "mediapath": "content/1742863099/media/P1040391.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040391.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040391.png", "name": "P1040391.JPG", "info": "", "timestamp": "2025-03-17T07:53:49", "latitude": 13.734091299238154, "longitude": -89.2790973186493, "attached_notes": []}, {"id": "P1040392.JPG", "mediapath": "content/1742863099/media/P1040392.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040392.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040392.png", "name": "P1040392.JPG", "info": "", "timestamp": "2025-03-17T08:00:06", "latitude": 13.734476617293236, "longitude": -89.28010046482088, "attached_notes": []}, {"id": "P1040393.JPG", "mediapath": "content/1742863099/media/P1040393.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040393.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040393.png", "name": "P1040393.JPG", "info": "", "timestamp": "2025-03-17T08:00:15", "latitude": 13.737158113014797, "longitude": -89.28603887557983, "attached_notes": []}, {"id": "P1040395.JPG", "mediapath": "content/1742863099/media/P1040395.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040395.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040395.png", "name": "P1040395.JPG", "info": "", "timestamp": "2025-03-17T08:01:58", "latitude": 13.734651349933612, "longitude": -89.28008973598482, "attached_notes": []}, {"id": "P1040396.JPG", "mediapath": "content/1742863099/media/P1040396.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040396.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040396.png", "name": "P1040396.JPG", "info": "", "timestamp": "2025-03-17T08:02:56", "latitude": 13.736019158455344, "longitude": -89.28001999855042, "attached_notes": []}, {"id": "P1040397.JPG", "mediapath": "content/1742863099/media/P1040397.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040397.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040397.png", "name": "P1040397.JPG", "info": "", "timestamp": "2025-03-17T08:08:59", "latitude": 13.735300574741295, "longitude": -89.28008437156677, "attached_notes": []}, {"id": "P1040403.JPG", "mediapath": "content/1742863099/media/P1040403.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040403.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040403.png", "name": "P1040403.JPG", "info": "", "timestamp": "2025-03-17T08:15:40", "latitude": 13.735008678080051, "longitude": -89.28000926971437, "attached_notes": []}, {"id": "P1040404.JPG", "mediapath": "content/1742863099/media/P1040404.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040404.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040404.png", "name": "P1040404.JPG", "info": "", "timestamp": "2025-03-17T08:16:01", "latitude": 13.734049634950724, "longitude": -89.27955865859987, "attached_notes": []}, {"id": "P1040405.JPG", "mediapath": "content/1742863099/media/P1040405.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040405.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040405.png", "name": "P1040405.JPG", "info": "", "timestamp": "2025-03-17T08:18:37", "latitude": 13.733736886845156, "longitude": -89.28009510040283, "attached_notes": []}, {"id": "P1040406.JPG", "mediapath": "content/1742863099/media/P1040406.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040406.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040406.png", "name": "P1040406.JPG", "info": "", "timestamp": "2025-03-17T08:21:42", "latitude": 13.733497113014977, "longitude": -89.2790973186493, "attached_notes": []}, {"id": "P1040407.JPG", "mediapath": "content/1742863099/media/P1040407.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040407.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040407.png", "name": "P1040407.JPG", "info": "", "timestamp": "2025-03-17T09:02:48", "latitude": 13.68971504680421, "longitude": -89.20123279094697, "attached_notes": []}, {"id": "P1040408.JPG", "mediapath": "content/1742863099/media/P1040408.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040408.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040408.png", "name": "P1040408.JPG", "info": "", "timestamp": "2025-03-17T09:06:47", "latitude": 13.691691855263032, "longitude": -89.21246051788331, "attached_notes": []}, {"id": "P1040409.JPG", "mediapath": "content/1742863099/media/P1040409.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040409.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040409.png", "name": "P1040409.JPG", "info": "", "timestamp": "2025-03-17T09:25:08", "latitude": 13.698539357254786, "longitude": -89.19107794761658, "attached_notes": []}, {"id": "P1040411.JPG", "mediapath": "content/1742863099/media/P1040411.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040411.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040411.png", "name": "P1040411.JPG", "info": "", "timestamp": "2025-03-17T09:28:11", "latitude": 13.699305719950829, "longitude": -89.19014990329744, "attached_notes": []}, {"id": "P1040413.JPG", "mediapath": "content/1742863099/media/P1040413.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040413.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040413.png", "name": "P1040413.JPG", "info": "", "timestamp": "2025-03-17T09:35:45", "latitude": 13.698018047006995, "longitude": -89.19133543968202, "attached_notes": []}, {"id": "P1040417.JPG", "mediapath": "content/1742863099/media/P1040417.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040417.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040417.png", "name": "P1040417.JPG", "info": "", "timestamp": "2025-03-17T10:20:56", "latitude": 13.696573968148924, "longitude": -89.1937816143036, "attached_notes": []}, {"id": "P1040418.JPG", "mediapath": "content/1742863099/media/P1040418.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040418.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040418.png", "name": "P1040418.JPG", "info": "", "timestamp": "2025-03-17T10:29:33", "latitude": 13.695930008286542, "longitude": -89.19408738613129, "attached_notes": []}, {"id": "P1040419.JPG", "mediapath": "content/1742863099/media/P1040419.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040419.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040419.png", "name": "P1040419.JPG", "info": "", "timestamp": "2025-03-17T10:31:04", "latitude": 13.69627418423265, "longitude": -89.1953667998314, "attached_notes": []}, {"id": "P1040421.JPG", "mediapath": "content/1742863099/media/P1040421.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040421.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040421.png", "name": "P1040421.JPG", "info": "", "timestamp": "2025-03-17T10:42:32", "latitude": 13.694979204164188, "longitude": -89.19729530811311, "attached_notes": []}, {"id": "P1040422.JPG", "mediapath": "content/1742863099/media/P1040422.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040422.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040422.png", "name": "P1040422.JPG", "info": "", "timestamp": "2025-03-17T10:43:09", "latitude": 13.694968776073535, "longitude": -89.19844329357149, "attached_notes": []}, {"id": "P1040423.JPG", "mediapath": "content/1742863099/media/P1040423.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040423.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040423.png", "name": "P1040423.JPG", "info": "", "timestamp": "2025-03-17T10:47:52", "latitude": 13.697960089353753, "longitude": -89.20018136501314, "attached_notes": []}, {"id": "P1040424.JPG", "mediapath": "content/1742863099/media/P1040424.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040424.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040424.png", "name": "P1040424.JPG", "info": "", "timestamp": "2025-03-17T10:48:21", "latitude": 13.69780349566066, "longitude": -89.2001920938492, "attached_notes": []}, {"id": "P1040425.JPG", "mediapath": "content/1742863099/media/P1040425.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040425.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040425.png", "name": "P1040425.JPG", "info": "", "timestamp": "2025-03-17T10:49:02", "latitude": 13.695937819240573, "longitude": -89.19959664344789, "attached_notes": []}, {"id": "P1040426.JPG", "mediapath": "content/1742863099/media/P1040426.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040426.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040426.png", "name": "P1040426.JPG", "info": "", "timestamp": "2025-03-17T10:49:30", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040427.JPG", "mediapath": "content/1742863099/media/P1040427.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040427.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040427.png", "name": "P1040427.JPG", "info": "", "timestamp": "2025-03-17T10:50:32", "latitude": 13.69654279271527, "longitude": -89.1999936103821, "attached_notes": []}, {"id": "P1040428.JPG", "mediapath": "content/1742863099/media/P1040428.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040428.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040428.png", "name": "P1040428.JPG", "info": "", "timestamp": "2025-03-17T10:56:35", "latitude": 13.697298450238382, "longitude": -89.20026719570161, "attached_notes": []}, {"id": "P1040429.JPG", "mediapath": "content/1742863099/media/P1040429.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040429.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040429.png", "name": "P1040429.JPG", "info": "", "timestamp": "2025-03-17T11:01:16", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040430.JPG", "mediapath": "content/1742863099/media/P1040430.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040430.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040430.png", "name": "P1040430.JPG", "info": "", "timestamp": "2025-03-17T11:03:54", "latitude": 13.700915226364877, "longitude": -89.19921040534975, "attached_notes": []}, {"id": "P1040431.JPG", "mediapath": "content/1742863099/media/P1040431.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040431.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040431.png", "name": "P1040431.JPG", "info": "", "timestamp": "2025-03-17T11:08:06", "latitude": 13.700589282093166, "longitude": -89.20115903019907, "attached_notes": []}, {"id": "P1040433.JPG", "mediapath": "content/1742863099/media/P1040433.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040433.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040433.png", "name": "P1040433.JPG", "info": "", "timestamp": "2025-03-17T11:34:57", "latitude": 13.700973496505684, "longitude": -89.20113757252695, "attached_notes": []}, {"id": "P1040436.JPG", "mediapath": "content/1742863099/media/P1040436.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040436.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040436.png", "name": "P1040436.JPG", "info": "", "timestamp": "2025-03-17T13:17:15", "latitude": 13.70195213365922, "longitude": -89.24094155430795, "attached_notes": []}, {"id": "P1040437.JPG", "mediapath": "content/1742863099/media/P1040437.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040437.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040437.png", "name": "P1040437.JPG", "info": "", "timestamp": "2025-03-17T13:44:41", "latitude": 13.700979114481754, "longitude": -89.24251198768617, "attached_notes": []}, {"id": "P1040438.JPG", "mediapath": "content/1742863099/media/P1040438.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040438.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040438.png", "name": "P1040438.JPG", "info": "", "timestamp": "2025-03-17T13:51:49", "latitude": 13.700801985207727, "longitude": -89.24184679985048, "attached_notes": []}, {"id": "P1040439.JPG", "mediapath": "content/1742863099/media/P1040439.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040439.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040439.png", "name": "P1040439.JPG", "info": "", "timestamp": "2025-03-17T13:55:14", "latitude": 13.701927274796184, "longitude": -89.24298405647279, "attached_notes": []}, {"id": "P1040440.JPG", "mediapath": "content/1742863099/media/P1040440.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040440.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040440.png", "name": "P1040440.JPG", "info": "", "timestamp": "2025-03-17T13:55:25", "latitude": 13.700133557059756, "longitude": -89.24189507961273, "attached_notes": []}, {"id": "P1040441.JPG", "mediapath": "content/1742863099/media/P1040441.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040441.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040441.png", "name": "P1040441.JPG", "info": "", "timestamp": "2025-03-17T14:12:05", "latitude": 13.697721653747973, "longitude": -89.2381936311722, "attached_notes": []}, {"id": "P1040442.JPG", "mediapath": "content/1742863099/media/P1040442.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040442.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040442.png", "name": "P1040442.JPG", "info": "", "timestamp": "2025-03-17T14:22:49", "latitude": 13.700541500738732, "longitude": -89.23755526542665, "attached_notes": []}, {"id": "P1040443.JPG", "mediapath": "content/1742863099/media/P1040443.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040443.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040443.png", "name": "P1040443.JPG", "info": "", "timestamp": "2025-03-17T14:24:44", "latitude": 13.701083308109997, "longitude": -89.23888564109802, "attached_notes": []}, {"id": "P1040444.JPG", "mediapath": "content/1742863099/media/P1040444.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040444.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040444.png", "name": "P1040444.JPG", "info": "", "timestamp": "2025-03-17T14:51:56", "latitude": 13.709537256037018, "longitude": -89.22610759735109, "attached_notes": []}, {"id": "P1040448.JPG", "mediapath": "content/1742863099/media/P1040448.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040448.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040448.png", "name": "P1040448.JPG", "info": "", "timestamp": "2025-03-17T17:37:57", "latitude": 13.834904966589047, "longitude": -89.27000999450685, "attached_notes": []}, {"id": "P1040450.JPG", "mediapath": "content/1742863099/media/P1040450.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040450.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040450.png", "name": "P1040450.JPG", "info": "", "timestamp": "2025-03-17T17:43:19", "latitude": 13.83268514537351, "longitude": -89.27088975906373, "attached_notes": []}, {"id": "P1040451.JPG", "mediapath": "content/1742863099/media/P1040451.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040451.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040451.png", "name": "P1040451.JPG", "info": "", "timestamp": "2025-03-17T18:39:26", "latitude": 13.834345747295593, "longitude": -89.2707395553589, "attached_notes": []}, {"id": "P1040453.JPG", "mediapath": "content/1742863099/media/P1040453.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040453.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040453.png", "name": "P1040453.JPG", "info": "", "timestamp": "2025-03-17T18:51:04", "latitude": 13.834113012651569, "longitude": -89.26506400108337, "attached_notes": []}, {"id": "P1040454.JPG", "mediapath": "content/1742863099/media/P1040454.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040454.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040454.png", "name": "P1040454.JPG", "info": "", "timestamp": "2025-03-18T07:18:15", "latitude": 13.826420073643272, "longitude": -89.27893638610841, "attached_notes": []}, {"id": "P1040459.JPG", "mediapath": "content/1742863099/media/P1040459.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040459.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040459.png", "name": "P1040459.JPG", "info": "", "timestamp": "2025-03-18T08:20:25", "latitude": 13.979912307356098, "longitude": -89.16375160217287, "attached_notes": []}, {"id": "P1040461.JPG", "mediapath": "content/1742863099/media/P1040461.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040461.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040461.png", "name": "P1040461.JPG", "info": "", "timestamp": "2025-03-18T08:21:24", "latitude": 13.981245282782094, "longitude": -89.16464209556581, "attached_notes": []}, {"id": "P1040463.JPG", "mediapath": "content/1742863099/media/P1040463.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040463.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040463.png", "name": "P1040463.JPG", "info": "", "timestamp": "2025-03-18T08:21:53", "latitude": 13.981120316663896, "longitude": -89.16615486145021, "attached_notes": []}, {"id": "P1040464.JPG", "mediapath": "content/1742863099/media/P1040464.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040464.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040464.png", "name": "P1040464.JPG", "info": "", "timestamp": "2025-03-18T08:22:41", "latitude": 13.979860237846843, "longitude": -89.16321516036987, "attached_notes": []}, {"id": "P1040465.JPG", "mediapath": "content/1742863099/media/P1040465.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040465.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040465.png", "name": "P1040465.JPG", "info": "", "timestamp": "2025-03-18T08:30:52", "latitude": 13.98051631280263, "longitude": -89.16532874107362, "attached_notes": []}, {"id": "P1040469.JPG", "mediapath": "content/1742863099/media/P1040469.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040469.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040469.png", "name": "P1040469.JPG", "info": "", "timestamp": "2025-03-18T08:45:07", "latitude": 13.980839495403481, "longitude": -89.16360139846803, "attached_notes": []}, {"id": "P1040470.JPG", "mediapath": "content/1742863099/media/P1040470.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040470.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040470.png", "name": "P1040470.JPG", "info": "", "timestamp": "2025-03-18T08:49:25", "latitude": 13.979985204649267, "longitude": -89.16496396064758, "attached_notes": []}, {"id": "P1040475.JPG", "mediapath": "content/1742863099/media/P1040475.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040475.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040475.png", "name": "P1040475.JPG", "info": "", "timestamp": "2025-03-18T10:05:17", "latitude": 13.936649805315254, "longitude": -89.02582839131357, "attached_notes": []}, {"id": "P1040476.JPG", "mediapath": "content/1742863099/media/P1040476.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040476.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040476.png", "name": "P1040476.JPG", "info": "", "timestamp": "2025-03-18T10:05:34", "latitude": 13.936837279598349, "longitude": -89.02564600110055, "attached_notes": []}, {"id": "P1040477.JPG", "mediapath": "content/1742863099/media/P1040477.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040477.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040477.png", "name": "P1040477.JPG", "info": "", "timestamp": "2025-03-18T10:07:36", "latitude": 13.936366146730073, "longitude": -89.0253858268261, "attached_notes": []}, {"id": "P1040478.JPG", "mediapath": "content/1742863099/media/P1040478.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040478.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040478.png", "name": "P1040478.JPG", "info": "", "timestamp": "2025-03-18T10:07:49", "latitude": 13.936341301613638, "longitude": -89.02527183294298, "attached_notes": []}, {"id": "P1040479.JPG", "mediapath": "content/1742863099/media/P1040479.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040479.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040479.png", "name": "P1040479.JPG", "info": "", "timestamp": "2025-03-18T10:07:57", "latitude": 13.93659909423304, "longitude": -89.0256929397583, "attached_notes": []}, {"id": "P1040480.JPG", "mediapath": "content/1742863099/media/P1040480.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040480.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040480.png", "name": "P1040480.JPG", "info": "", "timestamp": "2025-03-18T10:08:55", "latitude": 13.936301173638034, "longitude": -89.0259236097336, "attached_notes": []}, {"id": "P1040481.JPG", "mediapath": "content/1742863099/media/P1040481.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040481.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040481.png", "name": "P1040481.JPG", "info": "", "timestamp": "2025-03-18T10:09:06", "latitude": 13.93639598492058, "longitude": -89.02589544653893, "attached_notes": []}, {"id": "P1040482.JPG", "mediapath": "content/1742863099/media/P1040482.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040482.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040482.png", "name": "P1040482.JPG", "info": "", "timestamp": "2025-03-18T10:10:17", "latitude": 13.935730933710294, "longitude": -89.02591556310655, "attached_notes": []}, {"id": "P1040483.JPG", "mediapath": "content/1742863099/media/P1040483.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040483.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040483.png", "name": "P1040483.JPG", "info": "", "timestamp": "2025-03-18T10:10:22", "latitude": 13.935617567741588, "longitude": -89.02606979012491, "attached_notes": []}, {"id": "P1040484.JPG", "mediapath": "content/1742863099/media/P1040484.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040484.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040484.png", "name": "P1040484.JPG", "info": "", "timestamp": "2025-03-18T10:10:31", "latitude": 13.93573867535387, "longitude": -89.02598395943643, "attached_notes": []}, {"id": "P1040485.JPG", "mediapath": "content/1742863099/media/P1040485.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040485.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040485.png", "name": "P1040485.JPG", "info": "", "timestamp": "2025-03-18T10:11:31", "latitude": 13.935409420496198, "longitude": -89.0263929963112, "attached_notes": []}, {"id": "P1040486.JPG", "mediapath": "content/1742863099/media/P1040486.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040486.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040486.png", "name": "P1040486.JPG", "info": "", "timestamp": "2025-03-18T10:11:47", "latitude": 13.935213994980847, "longitude": -89.02616769075395, "attached_notes": []}, {"id": "P1040487.JPG", "mediapath": "content/1742863099/media/P1040487.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040487.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040487.png", "name": "P1040487.JPG", "info": "", "timestamp": "2025-03-18T10:12:59", "latitude": 13.935064266081195, "longitude": -89.02610063552858, "attached_notes": []}, {"id": "P1040488.JPG", "mediapath": "content/1742863099/media/P1040488.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040488.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040488.png", "name": "P1040488.JPG", "info": "", "timestamp": "2025-03-18T10:13:46", "latitude": 13.935108533765984, "longitude": -89.0261033177376, "attached_notes": []}, {"id": "P1040490.JPG", "mediapath": "content/1742863099/media/P1040490.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040490.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040490.png", "name": "P1040490.JPG", "info": "", "timestamp": "2025-03-18T10:21:21", "latitude": 13.934328269262757, "longitude": -89.0248990058899, "attached_notes": []}, {"id": "P1040491.JPG", "mediapath": "content/1742863099/media/P1040491.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040491.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040491.png", "name": "P1040491.JPG", "info": "", "timestamp": "2025-03-18T10:22:14", "latitude": 13.93383351063139, "longitude": -89.02615427970888, "attached_notes": []}, {"id": "P1040492.JPG", "mediapath": "content/1742863099/media/P1040492.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040492.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040492.png", "name": "P1040492.JPG", "info": "", "timestamp": "2025-03-18T10:23:12", "latitude": 13.933789010470315, "longitude": -89.02563393115999, "attached_notes": []}, {"id": "P1040495.JPG", "mediapath": "content/1742863099/media/P1040495.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040495.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040495.png", "name": "P1040495.JPG", "info": "", "timestamp": "2025-03-18T10:26:31", "latitude": 13.9335677218696, "longitude": -89.02552127838136, "attached_notes": []}, {"id": "P1040496.JPG", "mediapath": "content/1742863099/media/P1040496.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040496.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040496.png", "name": "P1040496.JPG", "info": "", "timestamp": "2025-03-18T10:29:23", "latitude": 13.934255176472304, "longitude": -89.02581095695497, "attached_notes": []}, {"id": "P1040498.JPG", "mediapath": "content/1742863099/media/P1040498.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040498.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040498.png", "name": "P1040498.JPG", "info": "", "timestamp": "2025-03-18T10:56:37", "latitude": 13.936903648927546, "longitude": -89.02580156922342, "attached_notes": []}, {"id": "P1040499.JPG", "mediapath": "content/1742863099/media/P1040499.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040499.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040499.png", "name": "P1040499.JPG", "info": "", "timestamp": "2025-03-18T11:01:38", "latitude": 13.936882817238892, "longitude": -89.02586460113527, "attached_notes": []}, {"id": "P1040500.JPG", "mediapath": "content/1742863099/media/P1040500.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040500.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040500.png", "name": "P1040500.JPG", "info": "", "timestamp": "2025-03-18T11:36:13", "latitude": 13.936650349782107, "longitude": -89.02700722217561, "attached_notes": []}, {"id": "P1040501.JPG", "mediapath": "content/1742863099/media/P1040501.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040501.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040501.png", "name": "P1040501.JPG", "info": "", "timestamp": "2025-03-18T11:46:32", "latitude": 13.936890205266668, "longitude": -89.01392877101898, "attached_notes": []}, {"id": "P1040502.JPG", "mediapath": "content/1742863099/media/P1040502.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040502.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040502.png", "name": "P1040502.JPG", "info": "", "timestamp": "2025-03-18T11:50:05", "latitude": 13.937701946301418, "longitude": -89.01354521512987, "attached_notes": []}, {"id": "P1040504.JPG", "mediapath": "content/1742863099/media/P1040504.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040504.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040504.png", "name": "P1040504.JPG", "info": "", "timestamp": "2025-03-18T11:53:47", "latitude": 13.937270383276564, "longitude": -89.01325285434723, "attached_notes": []}, {"id": "P1040505.JPG", "mediapath": "content/1742863099/media/P1040505.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040505.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040505.png", "name": "P1040505.JPG", "info": "", "timestamp": "2025-03-18T11:56:07", "latitude": 13.937303210894434, "longitude": -89.01307046413423, "attached_notes": []}, {"id": "P1040507.JPG", "mediapath": "content/1742863099/media/P1040507.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040507.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040507.png", "name": "P1040507.JPG", "info": "", "timestamp": "2025-03-18T11:56:21", "latitude": 13.937266780093935, "longitude": -89.01307582855225, "attached_notes": []}, {"id": "P1040509.JPG", "mediapath": "content/1742863099/media/P1040509.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040509.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040509.png", "name": "P1040509.JPG", "info": "", "timestamp": "2025-03-18T12:01:09", "latitude": 13.937339641689194, "longitude": -89.01303961873056, "attached_notes": []}, {"id": "P1040512.JPG", "mediapath": "content/1742863099/media/P1040512.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040512.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040512.png", "name": "P1040512.JPG", "info": "", "timestamp": "2025-03-18T12:01:26", "latitude": 13.937331835090792, "longitude": -89.01311874389648, "attached_notes": []}, {"id": "P1040514.JPG", "mediapath": "content/1742863099/media/P1040514.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040514.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040514.png", "name": "P1040514.JPG", "info": "", "timestamp": "2025-03-18T12:06:08", "latitude": 13.937390384572288, "longitude": -89.01313215494157, "attached_notes": []}, {"id": "P1040515.JPG", "mediapath": "content/1742863099/media/P1040515.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040515.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040515.png", "name": "P1040515.JPG", "info": "", "timestamp": "2025-03-18T12:07:56", "latitude": 13.937431343610035, "longitude": -89.013209939003, "attached_notes": []}, {"id": "P1040516.JPG", "mediapath": "content/1742863099/media/P1040516.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040516.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040516.png", "name": "P1040516.JPG", "info": "", "timestamp": "2025-03-18T12:08:02", "latitude": 13.937326976914594, "longitude": -89.01307582855225, "attached_notes": []}, {"id": "P1040519.JPG", "mediapath": "content/1742863099/media/P1040519.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040519.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040519.png", "name": "P1040519.JPG", "info": "", "timestamp": "2025-03-18T12:49:49", "latitude": 13.888376586934298, "longitude": -88.9589421451092, "attached_notes": []}, {"id": "P1040520.JPG", "mediapath": "content/1742863099/media/P1040520.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040520.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040520.png", "name": "P1040520.JPG", "info": "", "timestamp": "2025-03-18T12:50:56", "latitude": 13.88806309606228, "longitude": -88.95905345678331, "attached_notes": []}, {"id": "P1040522.JPG", "mediapath": "content/1742863099/media/P1040522.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040522.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040522.png", "name": "P1040522.JPG", "info": "", "timestamp": "2025-03-18T12:55:31", "latitude": 13.8883365695405, "longitude": -88.9590507745743, "attached_notes": []}, {"id": "P1040523.JPG", "mediapath": "content/1742863099/media/P1040523.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040523.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040523.png", "name": "P1040523.JPG", "info": "", "timestamp": "2025-03-18T12:58:11", "latitude": 13.889044994573622, "longitude": -88.9590695500374, "attached_notes": []}, {"id": "P1040524.JPG", "mediapath": "content/1742863099/media/P1040524.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040524.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040524.png", "name": "P1040524.JPG", "info": "", "timestamp": "2025-03-18T12:59:29", "latitude": 13.888638339773108, "longitude": -88.95912185311319, "attached_notes": []}, {"id": "P1040525.JPG", "mediapath": "content/1742863099/media/P1040525.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040525.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040525.png", "name": "P1040525.JPG", "info": "", "timestamp": "2025-03-18T13:00:27", "latitude": 13.888850268099802, "longitude": -88.95914331078531, "attached_notes": []}, {"id": "P1040527.JPG", "mediapath": "content/1742863099/media/P1040527.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040527.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040527.png", "name": "P1040527.JPG", "info": "", "timestamp": "2025-03-18T13:02:26", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040528.JPG", "mediapath": "content/1742863099/media/P1040528.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040528.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040528.png", "name": "P1040528.JPG", "info": "", "timestamp": "2025-03-18T13:06:47", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040529.JPG", "mediapath": "content/1742863099/media/P1040529.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040529.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040529.png", "name": "P1040529.JPG", "info": "", "timestamp": "2025-03-18T13:07:32", "latitude": 13.890089410636374, "longitude": -88.95839631557466, "attached_notes": []}, {"id": "P1040531.JPG", "mediapath": "content/1742863099/media/P1040531.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040531.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040531.png", "name": "P1040531.JPG", "info": "", "timestamp": "2025-03-18T13:09:10", "latitude": 13.890432201898003, "longitude": -88.95847141742706, "attached_notes": []}, {"id": "P1040533.JPG", "mediapath": "content/1742863099/media/P1040533.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040533.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040533.png", "name": "P1040533.JPG", "info": "", "timestamp": "2025-03-18T13:12:12", "latitude": 13.890518224573114, "longitude": -88.95879328250885, "attached_notes": []}, {"id": "P1040534.JPG", "mediapath": "content/1742863099/media/P1040534.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040534.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040534.png", "name": "P1040534.JPG", "info": "", "timestamp": "2025-03-18T13:12:31", "latitude": 13.890398499133603, "longitude": -88.95892202854158, "attached_notes": []}, {"id": "P1040535.JPG", "mediapath": "content/1742863099/media/P1040535.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040535.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040535.png", "name": "P1040535.JPG", "info": "", "timestamp": "2025-03-18T13:12:40", "latitude": 13.890299595462977, "longitude": -88.95864844322205, "attached_notes": []}, {"id": "P1040536.JPG", "mediapath": "content/1742863099/media/P1040536.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040536.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040536.png", "name": "P1040536.JPG", "info": "", "timestamp": "2025-03-18T13:13:32", "latitude": 13.889839548316953, "longitude": -88.95901858806612, "attached_notes": []}, {"id": "P1040538.JPG", "mediapath": "content/1742863099/media/P1040538.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040538.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040538.png", "name": "P1040538.JPG", "info": "", "timestamp": "2025-03-18T13:21:40", "latitude": 13.888306265225712, "longitude": -88.95898103713989, "attached_notes": []}, {"id": "P1040541.JPG", "mediapath": "content/1742863099/media/P1040541.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040541.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040541.png", "name": "P1040541.JPG", "info": "", "timestamp": "2025-03-18T13:49:47", "latitude": 13.878164562451218, "longitude": -88.96806836128235, "attached_notes": []}, {"id": "P1040542.JPG", "mediapath": "content/1742863099/media/P1040542.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040542.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040542.png", "name": "P1040542.JPG", "info": "", "timestamp": "2025-03-18T13:56:05", "latitude": 13.876207199716955, "longitude": -88.96648049354555, "attached_notes": []}, {"id": "P1040543.JPG", "mediapath": "content/1742863099/media/P1040543.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040543.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040543.png", "name": "P1040543.JPG", "info": "", "timestamp": "2025-03-18T13:58:02", "latitude": 13.876228022811713, "longitude": -88.96601915359497, "attached_notes": []}, {"id": "P1040544.JPG", "mediapath": "content/1742863099/media/P1040544.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040544.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040544.png", "name": "P1040544.JPG", "info": "", "timestamp": "2025-03-18T14:07:32", "latitude": 13.878082361606841, "longitude": -88.96554708480836, "attached_notes": []}, {"id": "P1040545.JPG", "mediapath": "content/1742863099/media/P1040545.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040545.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040545.png", "name": "P1040545.JPG", "info": "", "timestamp": "2025-03-18T14:08:48", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040546.JPG", "mediapath": "content/1742863099/media/P1040546.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040546.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040546.png", "name": "P1040546.JPG", "info": "", "timestamp": "2025-03-18T14:10:59", "latitude": 13.878144830380378, "longitude": -88.96464586257935, "attached_notes": []}, {"id": "P1040547.JPG", "mediapath": "content/1742863099/media/P1040547.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040547.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040547.png", "name": "P1040547.JPG", "info": "", "timestamp": "2025-03-18T14:11:30", "latitude": 13.87766590268651, "longitude": -88.96417379379274, "attached_notes": []}, {"id": "P1040548.JPG", "mediapath": "content/1742863099/media/P1040548.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040548.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040548.png", "name": "P1040548.JPG", "info": "", "timestamp": "2025-03-18T14:17:08", "latitude": 13.875562773714707, "longitude": -88.96342277526857, "attached_notes": []}, {"id": "P1040549.JPG", "mediapath": "content/1742863099/media/P1040549.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040549.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040549.png", "name": "P1040549.JPG", "info": "", "timestamp": "2025-03-18T14:17:36", "latitude": 13.875546267230394, "longitude": -88.96337449550629, "attached_notes": []}, {"id": "P1040551.JPG", "mediapath": "content/1742863099/media/P1040551.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040551.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040551.png", "name": "P1040551.JPG", "info": "", "timestamp": "2025-03-18T14:25:34", "latitude": 13.876418715854069, "longitude": -88.963680267334, "attached_notes": []}, {"id": "P1040552.JPG", "mediapath": "content/1742863099/media/P1040552.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040552.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040552.png", "name": "P1040552.JPG", "info": "", "timestamp": "2025-03-18T14:25:39", "latitude": 13.876439538929818, "longitude": -88.96345496177675, "attached_notes": []}, {"id": "P1040553.JPG", "mediapath": "content/1742863099/media/P1040553.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040553.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040553.png", "name": "P1040553.JPG", "info": "", "timestamp": "2025-03-18T14:30:33", "latitude": 13.87726228924906, "longitude": -88.96338522434235, "attached_notes": []}, {"id": "P1040554.JPG", "mediapath": "content/1742863099/media/P1040554.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040554.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040554.png", "name": "P1040554.JPG", "info": "", "timestamp": "2025-03-18T14:31:04", "latitude": 13.87735599273441, "longitude": -88.96329939365388, "attached_notes": []}, {"id": "P1040555.JPG", "mediapath": "content/1742863099/media/P1040555.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040555.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040555.png", "name": "P1040555.JPG", "info": "", "timestamp": "2025-03-18T15:04:51", "latitude": 13.911159030094895, "longitude": -88.99088859558107, "attached_notes": []}, {"id": "P1040556.JPG", "mediapath": "content/1742863099/media/P1040556.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040556.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040556.png", "name": "P1040556.JPG", "info": "", "timestamp": "2025-03-18T15:05:02", "latitude": 13.894425015976923, "longitude": -89.00153160095215, "attached_notes": []}, {"id": "P1040559.JPG", "mediapath": "content/1742863099/media/P1040559.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040559.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040559.png", "name": "P1040559.JPG", "info": "", "timestamp": "2025-03-18T16:57:13", "latitude": 13.803524274924573, "longitude": -89.17759180068971, "attached_notes": []}, {"id": "P1040562.JPG", "mediapath": "content/1742863099/media/P1040562.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040562.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040562.png", "name": "P1040562.JPG", "info": "", "timestamp": "2025-03-19T14:49:27", "latitude": 13.719176373912749, "longitude": -89.73828345537187, "attached_notes": []}, {"id": "P1040563.JPG", "mediapath": "content/1742863099/media/P1040563.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040563.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040563.png", "name": "P1040563.JPG", "info": "", "timestamp": "2025-03-19T14:51:29", "latitude": 13.718737401832275, "longitude": -89.73901703953744, "attached_notes": []}, {"id": "P1040564.JPG", "mediapath": "content/1742863099/media/P1040564.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040564.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040564.png", "name": "P1040564.JPG", "info": "", "timestamp": "2025-03-19T14:51:51", "latitude": 13.718447640963321, "longitude": -89.7391551733017, "attached_notes": []}, {"id": "P1040565.JPG", "mediapath": "content/1742863099/media/P1040565.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040565.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040565.png", "name": "P1040565.JPG", "info": "", "timestamp": "2025-03-19T14:54:37", "latitude": 13.718921454217858, "longitude": -89.73986327648163, "attached_notes": []}, {"id": "P1040566.JPG", "mediapath": "content/1742863099/media/P1040566.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040566.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040566.png", "name": "P1040566.JPG", "info": "", "timestamp": "2025-03-19T14:54:46", "latitude": 13.718937082071077, "longitude": -89.73981499671937, "attached_notes": []}, {"id": "P1040567.JPG", "mediapath": "content/1742863099/media/P1040567.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040567.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040567.png", "name": "P1040567.JPG", "info": "", "timestamp": "2025-03-19T14:55:57", "latitude": 13.719890247406477, "longitude": -89.73970770835876, "attached_notes": []}, {"id": "P1040568.JPG", "mediapath": "content/1742863099/media/P1040568.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040568.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040568.png", "name": "P1040568.JPG", "info": "", "timestamp": "2025-03-19T14:57:18", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040569.JPG", "mediapath": "content/1742863099/media/P1040569.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040569.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040569.png", "name": "P1040569.JPG", "info": "", "timestamp": "2025-03-19T14:57:36", "latitude": 13.719280762834835, "longitude": -89.74012076854707, "attached_notes": []}, {"id": "P1040570.JPG", "mediapath": "content/1742863099/media/P1040570.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040570.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040570.png", "name": "P1040570.JPG", "info": "", "timestamp": "2025-03-19T14:59:28", "latitude": 13.718733788153665, "longitude": -89.74068939685823, "attached_notes": []}, {"id": "P1040571.JPG", "mediapath": "content/1742863099/media/P1040571.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040571.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040571.png", "name": "P1040571.JPG", "info": "", "timestamp": "2025-03-19T15:00:45", "latitude": 13.718348300469742, "longitude": -89.74071085453035, "attached_notes": []}, {"id": "P1040573.JPG", "mediapath": "content/1742863099/media/P1040573.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040573.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040573.png", "name": "P1040573.JPG", "info": "", "timestamp": "2025-03-19T15:01:33", "latitude": 13.718074426378294, "longitude": -89.74061965942384, "attached_notes": []}, {"id": "P1040574.JPG", "mediapath": "content/1742863099/media/P1040574.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040574.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040574.png", "name": "P1040574.JPG", "info": "", "timestamp": "2025-03-19T15:01:56", "latitude": 13.718045775207932, "longitude": -89.74058210849762, "attached_notes": []}, {"id": "P1040576.JPG", "mediapath": "content/1742863099/media/P1040576.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040576.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040576.png", "name": "P1040576.JPG", "info": "", "timestamp": "2025-03-19T15:03:13", "latitude": 13.717868658804491, "longitude": -89.74069207906724, "attached_notes": []}, {"id": "P1040577.JPG", "mediapath": "content/1742863099/media/P1040577.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040577.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040577.png", "name": "P1040577.JPG", "info": "", "timestamp": "2025-03-19T15:07:44", "latitude": 13.718519848580229, "longitude": -89.74190443754198, "attached_notes": []}, {"id": "P1040581.JPG", "mediapath": "content/1742863099/media/P1040581.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040581.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040581.png", "name": "P1040581.JPG", "info": "", "timestamp": "2025-03-19T15:12:31", "latitude": 13.719051658065402, "longitude": -89.74228799343109, "attached_notes": []}, {"id": "P1040583.JPG", "mediapath": "content/1742863099/media/P1040583.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040583.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040583.png", "name": "P1040583.JPG", "info": "", "timestamp": "2025-03-19T15:12:40", "latitude": 13.719291284900953, "longitude": -89.7423952817917, "attached_notes": []}, {"id": "P1040584.JPG", "mediapath": "content/1742863099/media/P1040584.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040584.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040584.png", "name": "P1040584.JPG", "info": "", "timestamp": "2025-03-19T15:13:27", "latitude": 13.71860626405808, "longitude": -89.742448925972, "attached_notes": []}, {"id": "P1040585.JPG", "mediapath": "content/1742863099/media/P1040585.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040585.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040585.png", "name": "P1040585.JPG", "info": "", "timestamp": "2025-03-19T15:14:52", "latitude": 13.719202755416747, "longitude": -89.74150478839876, "attached_notes": []}, {"id": "P1040586.JPG", "mediapath": "content/1742863099/media/P1040586.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040586.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040586.png", "name": "P1040586.JPG", "info": "", "timestamp": "2025-03-19T15:20:17", "latitude": 13.719504893365913, "longitude": -89.73967552185059, "attached_notes": []}, {"id": "P1040588.JPG", "mediapath": "content/1742863099/media/P1040588.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040588.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040588.png", "name": "P1040588.JPG", "info": "", "timestamp": "2025-03-19T15:24:51", "latitude": 13.718822709910755, "longitude": -89.73839342594147, "attached_notes": []}, {"id": "P1040590.JPG", "mediapath": "content/1742863099/media/P1040590.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040590.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040590.png", "name": "P1040590.JPG", "info": "", "timestamp": "2025-03-19T15:25:04", "latitude": 13.718702896284373, "longitude": -89.73845779895782, "attached_notes": []}, {"id": "P1040595.JPG", "mediapath": "content/1742863099/media/P1040595.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040595.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040595.png", "name": "P1040595.JPG", "info": "", "timestamp": "2025-03-19T15:38:50", "latitude": 13.710976530353566, "longitude": -89.73029851913454, "attached_notes": []}, {"id": "P1040602.JPG", "mediapath": "content/1742863099/media/P1040602.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040602.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040602.png", "name": "P1040602.JPG", "info": "", "timestamp": "2025-03-19T16:00:49", "latitude": 13.762732736063299, "longitude": -89.54762935638429, "attached_notes": []}, {"id": "P1040603.JPG", "mediapath": "content/1742863099/media/P1040603.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040603.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040603.png", "name": "P1040603.JPG", "info": "", "timestamp": "2025-03-19T16:01:09", "latitude": 13.759567925010426, "longitude": -89.54269409179689, "attached_notes": []}, {"id": "P1040605.JPG", "mediapath": "content/1742863099/media/P1040605.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040605.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040605.png", "name": "P1040605.JPG", "info": "", "timestamp": "2025-03-19T16:02:33", "latitude": 13.75510649861011, "longitude": -89.52956199645996, "attached_notes": []}, {"id": "P1040606.JPG", "mediapath": "content/1742863099/media/P1040606.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040606.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040606.png", "name": "P1040606.JPG", "info": "", "timestamp": "2025-03-19T16:05:54", "latitude": 13.74934030190714, "longitude": -89.49870586395265, "attached_notes": []}, {"id": "P1040608.JPG", "mediapath": "content/1742863099/media/P1040608.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040608.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040608.png", "name": "P1040608.JPG", "info": "", "timestamp": "2025-03-19T16:10:46", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040609.JPG", "mediapath": "content/1742863099/media/P1040609.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040609.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040609.png", "name": "P1040609.JPG", "info": "", "timestamp": "2025-03-19T16:10:58", "latitude": 13.745688018791526, "longitude": -89.50086772441865, "attached_notes": []}, {"id": "P1040610.JPG", "mediapath": "content/1742863099/media/P1040610.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040610.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040610.png", "name": "P1040610.JPG", "info": "", "timestamp": "2025-03-19T16:11:59", "latitude": 13.74547431824526, "longitude": -89.50084894895555, "attached_notes": []}, {"id": "P1040611.JPG", "mediapath": "content/1742863099/media/P1040611.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040611.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040611.png", "name": "P1040611.JPG", "info": "", "timestamp": "2025-03-19T16:12:23", "latitude": 13.745500571967192, "longitude": -89.50059950351717, "attached_notes": []}, {"id": "P1040613.JPG", "mediapath": "content/1742863099/media/P1040613.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040613.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040613.png", "name": "P1040613.JPG", "info": "", "timestamp": "2025-03-20T07:29:33", "latitude": 13.819508639319155, "longitude": -89.29481506347658, "attached_notes": []}, {"id": "P1040615.JPG", "mediapath": "content/1742863099/media/P1040615.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040615.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040615.png", "name": "P1040615.JPG", "info": "", "timestamp": "2025-03-20T08:57:24", "latitude": 13.994731391831348, "longitude": -89.55630362033844, "attached_notes": []}, {"id": "P1040616.JPG", "mediapath": "content/1742863099/media/P1040616.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040616.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040616.png", "name": "P1040616.JPG", "info": "", "timestamp": "2025-03-20T08:57:42", "latitude": 13.994825110880194, "longitude": -89.55623656511308, "attached_notes": []}, {"id": "P1040618.JPG", "mediapath": "content/1742863099/media/P1040618.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040618.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040618.png", "name": "P1040618.JPG", "info": "", "timestamp": "2025-03-20T09:00:14", "latitude": 13.994898160315259, "longitude": -89.5560421049595, "attached_notes": []}, {"id": "P1040619.JPG", "mediapath": "content/1742863099/media/P1040619.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040619.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040619.png", "name": "P1040619.JPG", "info": "", "timestamp": "2025-03-20T09:04:15", "latitude": 13.995158488092816, "longitude": -89.55653965473176, "attached_notes": []}, {"id": "P1040620.JPG", "mediapath": "content/1742863099/media/P1040620.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040620.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040620.png", "name": "P1040620.JPG", "info": "", "timestamp": "2025-03-20T09:05:29", "latitude": 13.995188426070845, "longitude": -89.55669924616817, "attached_notes": []}, {"id": "P1040621.JPG", "mediapath": "content/1742863099/media/P1040621.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040621.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040621.png", "name": "P1040621.JPG", "info": "", "timestamp": "2025-03-20T09:06:38", "latitude": 13.994982767184267, "longitude": -89.55643370747568, "attached_notes": []}, {"id": "P1040622.JPG", "mediapath": "content/1742863099/media/P1040622.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040622.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040622.png", "name": "P1040622.JPG", "info": "", "timestamp": "2025-03-20T09:06:53", "latitude": 13.995086691414196, "longitude": -89.5567971467972, "attached_notes": []}, {"id": "P1040625.JPG", "mediapath": "content/1742863099/media/P1040625.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040625.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040625.png", "name": "P1040625.JPG", "info": "", "timestamp": "2025-03-20T09:16:12", "latitude": 13.995356239885362, "longitude": -89.5585459470749, "attached_notes": []}, {"id": "P1040626.JPG", "mediapath": "content/1742863099/media/P1040626.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040626.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040626.png", "name": "P1040626.JPG", "info": "", "timestamp": "2025-03-20T09:23:15", "latitude": 13.995970599443174, "longitude": -89.56076949834825, "attached_notes": []}, {"id": "P1040627.JPG", "mediapath": "content/1742863099/media/P1040627.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040627.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040627.png", "name": "P1040627.JPG", "info": "", "timestamp": "2025-03-20T09:30:21", "latitude": 13.992281283976531, "longitude": -89.56424832344057, "attached_notes": []}, {"id": "P1040628.JPG", "mediapath": "content/1742863099/media/P1040628.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040628.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040628.png", "name": "P1040628.JPG", "info": "", "timestamp": "2025-03-20T09:45:55", "latitude": 13.989916805382073, "longitude": -89.56313252449036, "attached_notes": []}, {"id": "P1040630.JPG", "mediapath": "content/1742863099/media/P1040630.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040630.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040630.png", "name": "P1040630.JPG", "info": "", "timestamp": "2025-03-20T09:52:47", "latitude": 13.993185846323202, "longitude": -89.56072926521303, "attached_notes": []}, {"id": "P1040631.JPG", "mediapath": "content/1742863099/media/P1040631.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040631.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040631.png", "name": "P1040631.JPG", "info": "", "timestamp": "2025-03-20T09:59:55", "latitude": 13.993154627496173, "longitude": -89.56140518188478, "attached_notes": []}, {"id": "P1040633.JPG", "mediapath": "content/1742863099/media/P1040633.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040633.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040633.png", "name": "P1040633.JPG", "info": "", "timestamp": "2025-03-20T10:09:10", "latitude": 13.9867467169605, "longitude": -89.56011772155763, "attached_notes": []}, {"id": "P1040634.JPG", "mediapath": "content/1742863099/media/P1040634.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040634.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040634.png", "name": "P1040634.JPG", "info": "", "timestamp": "2025-03-20T10:15:04", "latitude": 13.988401615254126, "longitude": -89.55738186836244, "attached_notes": []}, {"id": "P1040636.JPG", "mediapath": "content/1742863099/media/P1040636.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040636.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040636.png", "name": "P1040636.JPG", "info": "", "timestamp": "2025-03-20T10:19:07", "latitude": 13.988193867953145, "longitude": -89.55667376518251, "attached_notes": []}, {"id": "P1040637.JPG", "mediapath": "content/1742863099/media/P1040637.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040637.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040637.png", "name": "P1040637.JPG", "info": "", "timestamp": "2025-03-20T10:29:27", "latitude": 13.993868696328146, "longitude": -89.55569073557857, "attached_notes": []}, {"id": "P1040638.JPG", "mediapath": "content/1742863099/media/P1040638.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040638.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040638.png", "name": "P1040638.JPG", "info": "", "timestamp": "2025-03-20T10:30:43", "latitude": 13.994291736714644, "longitude": -89.55567866563798, "attached_notes": []}, {"id": "P1040639.JPG", "mediapath": "content/1742863099/media/P1040639.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040639.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040639.png", "name": "P1040639.JPG", "info": "", "timestamp": "2025-03-20T10:35:44", "latitude": 13.99501507367796, "longitude": -89.55599516630174, "attached_notes": []}, {"id": "P1040641.JPG", "mediapath": "content/1742863099/media/P1040641.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040641.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040641.png", "name": "P1040641.JPG", "info": "", "timestamp": "2025-03-20T11:46:29", "latitude": 13.979948833092834, "longitude": -89.67480897903442, "attached_notes": []}, {"id": "P1040642.JPG", "mediapath": "content/1742863099/media/P1040642.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040642.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040642.png", "name": "P1040642.JPG", "info": "", "timestamp": "2025-03-20T11:56:47", "latitude": 13.979706172845976, "longitude": -89.674276560545, "attached_notes": []}, {"id": "P1040645.JPG", "mediapath": "content/1742863099/media/P1040645.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040645.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040645.png", "name": "P1040645.JPG", "info": "", "timestamp": "2025-03-20T11:58:29", "latitude": 13.97954757595919, "longitude": -89.67461585998537, "attached_notes": []}, {"id": "P1040646.JPG", "mediapath": "content/1742863099/media/P1040646.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040646.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040646.png", "name": "P1040646.JPG", "info": "", "timestamp": "2025-03-20T11:58:55", "latitude": 13.97949810984727, "longitude": -89.67438519001009, "attached_notes": []}, {"id": "P1040647.JPG", "mediapath": "content/1742863099/media/P1040647.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040647.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040647.png", "name": "P1040647.JPG", "info": "", "timestamp": "2025-03-20T11:59:23", "latitude": 13.979259203346249, "longitude": -89.67432081699373, "attached_notes": []}, {"id": "P1040648.JPG", "mediapath": "content/1742863099/media/P1040648.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040648.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040648.png", "name": "P1040648.JPG", "info": "", "timestamp": "2025-03-20T12:00:46", "latitude": 13.979284776032724, "longitude": -89.67462658882143, "attached_notes": []}, {"id": "P1040649.JPG", "mediapath": "content/1742863099/media/P1040649.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040649.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040649.png", "name": "P1040649.JPG", "info": "", "timestamp": "2025-03-20T13:08:23", "latitude": 13.982487094502977, "longitude": -89.67862844467163, "attached_notes": []}, {"id": "P1040650.JPG", "mediapath": "content/1742863099/media/P1040650.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040650.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040650.png", "name": "P1040650.JPG", "info": "", "timestamp": "2025-03-20T13:08:59", "latitude": 13.983341723706376, "longitude": -89.67605352401735, "attached_notes": []}, {"id": "P1040651.JPG", "mediapath": "content/1742863099/media/P1040651.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040651.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040651.png", "name": "P1040651.JPG", "info": "", "timestamp": "2025-03-20T13:10:01", "latitude": 13.982300346802091, "longitude": -89.67382192611696, "attached_notes": []}, {"id": "P1040653.JPG", "mediapath": "content/1742863099/media/P1040653.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040653.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040653.png", "name": "P1040653.JPG", "info": "", "timestamp": "2025-03-20T15:03:03", "latitude": 13.832915171500526, "longitude": -89.25814390182497, "attached_notes": []}, {"id": "P1040654.JPG", "mediapath": "content/1742863099/media/P1040654.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040654.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040654.png", "name": "P1040654.JPG", "info": "", "timestamp": "2025-03-21T08:40:11", "latitude": 13.659842832609447, "longitude": -88.7140417098999, "attached_notes": []}, {"id": "P1040655.JPG", "mediapath": "content/1742863099/media/P1040655.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040655.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040655.png", "name": "P1040655.JPG", "info": "", "timestamp": "2025-03-21T08:48:33", "latitude": 13.65653374094601, "longitude": -88.70756149291994, "attached_notes": []}, {"id": "P1040657.JPG", "mediapath": "content/1742863099/media/P1040657.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040657.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040657.png", "name": "P1040657.JPG", "info": "", "timestamp": "2025-03-21T09:50:00", "latitude": 13.610180902382629, "longitude": -88.57203483581543, "attached_notes": []}, {"id": "P1040658.JPG", "mediapath": "content/1742863099/media/P1040658.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040658.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040658.png", "name": "P1040658.JPG", "info": "", "timestamp": "2025-03-21T09:52:45", "latitude": 13.60951335495433, "longitude": -88.57319355010988, "attached_notes": []}, {"id": "P1040661.JPG", "mediapath": "content/1742863099/media/P1040661.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040661.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040661.png", "name": "P1040661.JPG", "info": "", "timestamp": "2025-03-21T11:46:20", "latitude": 13.476979466363272, "longitude": -88.33316802978517, "attached_notes": []}, {"id": "P1040662.JPG", "mediapath": "content/1742863099/media/P1040662.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040662.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040662.png", "name": "P1040662.JPG", "info": "", "timestamp": "2025-03-21T11:48:27", "latitude": 13.476152915302993, "longitude": -88.33132266998292, "attached_notes": []}, {"id": "P1040663.JPG", "mediapath": "content/1742863099/media/P1040663.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040663.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040663.png", "name": "P1040663.JPG", "info": "", "timestamp": "2025-03-21T11:48:44", "latitude": 13.476257004579475, "longitude": -88.33185911178589, "attached_notes": []}, {"id": "P1040664.JPG", "mediapath": "content/1742863099/media/P1040664.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040664.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040664.png", "name": "P1040664.JPG", "info": "", "timestamp": "2025-03-21T11:56:24", "latitude": 13.477111149521274, "longitude": -88.31600189208986, "attached_notes": []}, {"id": "P1040665.JPG", "mediapath": "content/1742863099/media/P1040665.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040665.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040665.png", "name": "P1040665.JPG", "info": "", "timestamp": "2025-03-21T11:56:38", "latitude": 13.486962767286704, "longitude": -88.31634521484376, "attached_notes": []}, {"id": "P1040666.JPG", "mediapath": "content/1742863099/media/P1040666.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040666.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040666.png", "name": "P1040666.JPG", "info": "", "timestamp": "2025-03-21T11:56:54", "latitude": 13.476659595560006, "longitude": -88.31956386566164, "attached_notes": []}, {"id": "P1040667.JPG", "mediapath": "content/1742863099/media/P1040667.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040667.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040667.png", "name": "P1040667.JPG", "info": "", "timestamp": "2025-03-21T11:57:53", "latitude": 13.475911108360052, "longitude": -88.32921981811525, "attached_notes": []}, {"id": "P1040668.JPG", "mediapath": "content/1742863099/media/P1040668.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040668.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040668.png", "name": "P1040668.JPG", "info": "", "timestamp": "2025-03-21T11:57:59", "latitude": 13.475473585322797, "longitude": -88.32905888557436, "attached_notes": []}, {"id": "P1040669.JPG", "mediapath": "content/1742863099/media/P1040669.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040669.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040669.png", "name": "P1040669.JPG", "info": "", "timestamp": "2025-03-21T12:16:52", "latitude": 13.481546272071029, "longitude": -88.33329677581787, "attached_notes": []}, {"id": "P1040670.JPG", "mediapath": "content/1742863099/media/P1040670.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040670.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040670.png", "name": "P1040670.JPG", "info": "", "timestamp": "2025-03-21T12:20:00", "latitude": 13.482390955449807, "longitude": -88.33344697952272, "attached_notes": []}, {"id": "P1040672.JPG", "mediapath": "content/1742863099/media/P1040672.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040672.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040672.png", "name": "P1040672.JPG", "info": "", "timestamp": "2025-03-21T12:23:55", "latitude": 13.480700291638005, "longitude": -88.33288908004762, "attached_notes": []}, {"id": "P1040675.JPG", "mediapath": "content/1742863099/media/P1040675.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040675.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040675.png", "name": "P1040675.JPG", "info": "", "timestamp": "2025-03-21T12:29:44", "latitude": 13.483164842579473, "longitude": -88.33424091339113, "attached_notes": []}, {"id": "P1040676.JPG", "mediapath": "content/1742863099/media/P1040676.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040676.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040676.png", "name": "P1040676.JPG", "info": "", "timestamp": "2025-03-21T12:35:58", "latitude": 13.486854624404922, "longitude": -88.33505630493164, "attached_notes": []}, {"id": "P1040677.JPG", "mediapath": "content/1742863099/media/P1040677.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040677.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040677.png", "name": "P1040677.JPG", "info": "", "timestamp": "2025-03-22T08:24:38", "latitude": 13.339323286668538, "longitude": -87.8422111272812, "attached_notes": []}, {"id": "P1040681.JPG", "mediapath": "content/1742863099/media/P1040681.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040681.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040681.png", "name": "P1040681.JPG", "info": "", "timestamp": "2025-03-22T08:45:23", "latitude": 13.340904647910612, "longitude": -87.8429299592972, "attached_notes": []}, {"id": "P1040683.JPG", "mediapath": "content/1742863099/media/P1040683.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040683.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040683.png", "name": "P1040683.JPG", "info": "", "timestamp": "2025-03-22T08:46:07", "latitude": 13.340732917302265, "longitude": -87.84261345863342, "attached_notes": []}, {"id": "P1040684.JPG", "mediapath": "content/1742863099/media/P1040684.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040684.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040684.png", "name": "P1040684.JPG", "info": "", "timestamp": "2025-03-22T08:52:41", "latitude": 13.3395165721658, "longitude": -87.84176051616669, "attached_notes": []}, {"id": "P1040685.JPG", "mediapath": "content/1742863099/media/P1040685.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040685.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040685.png", "name": "P1040685.JPG", "info": "", "timestamp": "2025-03-22T08:55:14", "latitude": 13.338654588997182, "longitude": -87.84336146431635, "attached_notes": []}, {"id": "P1040686.JPG", "mediapath": "content/1742863099/media/P1040686.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040686.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040686.png", "name": "P1040686.JPG", "info": "", "timestamp": "2025-03-22T09:00:16", "latitude": 13.335811946242623, "longitude": -87.84160494804382, "attached_notes": []}, {"id": "P1040687.JPG", "mediapath": "content/1742863099/media/P1040687.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040687.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040687.png", "name": "P1040687.JPG", "info": "", "timestamp": "2025-03-22T09:07:35", "latitude": 13.335407526827018, "longitude": -87.84009218215944, "attached_notes": []}, {"id": "P1040689.JPG", "mediapath": "content/1742863099/media/P1040689.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040689.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040689.png", "name": "P1040689.JPG", "info": "", "timestamp": "2025-03-22T09:40:25", "latitude": 13.292148603703497, "longitude": -87.83438444137575, "attached_notes": []}, {"id": "P1040690.JPG", "mediapath": "content/1742863099/media/P1040690.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040690.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040690.png", "name": "P1040690.JPG", "info": "", "timestamp": "2025-03-22T09:40:38", "latitude": 13.3178344625358, "longitude": -87.7635955810547, "attached_notes": []}, {"id": "P1040691.JPG", "mediapath": "content/1742863099/media/P1040691.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040691.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040691.png", "name": "P1040691.JPG", "info": "", "timestamp": "2025-03-22T09:41:22", "latitude": 13.289093171855294, "longitude": -87.7529525756836, "attached_notes": []}, {"id": "P1040692.JPG", "mediapath": "content/1742863099/media/P1040692.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040692.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040692.png", "name": "P1040692.JPG", "info": "", "timestamp": "2025-03-22T09:43:46", "latitude": 13.396653699817678, "longitude": -87.76805877685548, "attached_notes": []}, {"id": "P1040694.JPG", "mediapath": "content/1742863099/media/P1040694.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040694.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040694.png", "name": "P1040694.JPG", "info": "", "timestamp": "2025-03-22T09:48:09", "latitude": 13.293151094533176, "longitude": -87.83379435539247, "attached_notes": []}, {"id": "P1040695.JPG", "mediapath": "content/1742863099/media/P1040695.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040695.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040695.png", "name": "P1040695.JPG", "info": "", "timestamp": "2025-03-22T09:49:04", "latitude": 13.333474384179842, "longitude": -87.81835556030275, "attached_notes": []}, {"id": "P1040698.JPG", "mediapath": "content/1742863099/media/P1040698.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040698.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040698.png", "name": "P1040698.JPG", "info": "", "timestamp": "2025-03-22T09:59:29", "latitude": 13.293320081257445, "longitude": -87.83479213714601, "attached_notes": []}, {"id": "P1040700.JPG", "mediapath": "content/1742863099/media/P1040700.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040700.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040700.png", "name": "P1040700.JPG", "info": "", "timestamp": "2025-03-22T10:05:16", "latitude": 13.295752869802074, "longitude": -87.82205700874329, "attached_notes": []}, {"id": "P1040701.JPG", "mediapath": "content/1742863099/media/P1040701.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040701.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040701.png", "name": "P1040701.JPG", "info": "", "timestamp": "2025-03-22T10:05:25", "latitude": 13.295721537454062, "longitude": -87.82159566879274, "attached_notes": []}, {"id": "P1040702.JPG", "mediapath": "content/1742863099/media/P1040702.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040702.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040702.png", "name": "P1040702.JPG", "info": "", "timestamp": "2025-03-22T11:03:23", "latitude": 13.170646135071827, "longitude": -88.0671961605549, "attached_notes": []}, {"id": "P1040704.JPG", "mediapath": "content/1742863099/media/P1040704.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040704.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040704.png", "name": "P1040704.JPG", "info": "", "timestamp": "2025-03-22T11:05:06", "latitude": 13.170729730893605, "longitude": -88.06702315807344, "attached_notes": []}, {"id": "P1040705.JPG", "mediapath": "content/1742863099/media/P1040705.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040705.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040705.png", "name": "P1040705.JPG", "info": "", "timestamp": "2025-03-22T11:05:58", "latitude": 13.170635327870889, "longitude": -88.06451797485353, "attached_notes": []}, {"id": "P1040706.JPG", "mediapath": "content/1742863099/media/P1040706.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040706.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040706.png", "name": "P1040706.JPG", "info": "", "timestamp": "2025-03-22T11:06:34", "latitude": 13.170848770039376, "longitude": -88.06687831878664, "attached_notes": []}, {"id": "P1040707.JPG", "mediapath": "content/1742863099/media/P1040707.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040707.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040707.png", "name": "P1040707.JPG", "info": "", "timestamp": "2025-03-22T11:06:49", "latitude": 13.170717021156916, "longitude": -88.06713581085206, "attached_notes": []}, {"id": "P1040708.JPG", "mediapath": "content/1742863099/media/P1040708.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040708.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040708.png", "name": "P1040708.JPG", "info": "", "timestamp": "2025-03-22T11:13:59", "latitude": 13.1704975820525, "longitude": -88.06682467460634, "attached_notes": []}, {"id": "P1040709.JPG", "mediapath": "content/1742863099/media/P1040709.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040709.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040709.png", "name": "P1040709.JPG", "info": "", "timestamp": "2025-03-22T11:14:03", "latitude": 13.170445334617696, "longitude": -88.0667495727539, "attached_notes": []}, {"id": "P1040716.JPG", "mediapath": "content/1742863099/media/P1040716.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040716.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040716.png", "name": "P1040716.JPG", "info": "", "timestamp": "2025-03-22T12:22:28", "latitude": 13.351106413243688, "longitude": -88.24832439422609, "attached_notes": []}, {"id": "P1040717.JPG", "mediapath": "content/1742863099/media/P1040717.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040717.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040717.png", "name": "P1040717.JPG", "info": "", "timestamp": "2025-03-22T12:27:38", "latitude": 13.35116906359182, "longitude": -88.2465434074402, "attached_notes": []}, {"id": "P1040718.JPG", "mediapath": "content/1742863099/media/P1040718.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040718.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040718.png", "name": "P1040718.JPG", "info": "", "timestamp": "2025-03-22T12:27:51", "latitude": 13.35119036449894, "longitude": -88.24501991271973, "attached_notes": []}, {"id": "P1040719.JPG", "mediapath": "content/1742863099/media/P1040719.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040719.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040719.png", "name": "P1040719.JPG", "info": "", "timestamp": "2025-03-22T14:04:33", "latitude": 13.503598269683675, "longitude": -88.87142568826677, "attached_notes": []}, {"id": "P1040721.JPG", "mediapath": "content/1742863099/media/P1040721.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040721.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040721.png", "name": "P1040721.JPG", "info": "", "timestamp": "2025-03-22T15:34:29", "latitude": 13.459836836326321, "longitude": -89.06221389770509, "attached_notes": []}, {"id": "P1040722.JPG", "mediapath": "content/1742863099/media/P1040722.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040722.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040722.png", "name": "P1040722.JPG", "info": "", "timestamp": "2025-03-23T09:25:04", "latitude": 13.71627983533926, "longitude": -89.27420496940614, "attached_notes": []}, {"id": "P1040723.JPG", "mediapath": "content/1742863099/media/P1040723.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040723.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040723.png", "name": "P1040723.JPG", "info": "", "timestamp": "2025-03-23T10:21:03", "latitude": 13.7167698436492, "longitude": -89.2745053768158, "attached_notes": []}, {"id": "P1040725.JPG", "mediapath": "content/1742863099/media/P1040725.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040725.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040725.png", "name": "P1040725.JPG", "info": "", "timestamp": "2025-03-23T11:46:30", "latitude": 13.686690163061801, "longitude": -89.25426006317139, "attached_notes": []}, {"id": "P1040726.JPG", "mediapath": "content/1742863099/media/P1040726.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040726.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040726.png", "name": "P1040726.JPG", "info": "", "timestamp": "2025-03-23T11:47:49", "latitude": 13.686383375869058, "longitude": -89.25320863723755, "attached_notes": []}, {"id": "P1040727.JPG", "mediapath": "content/1742863099/media/P1040727.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040727.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040727.png", "name": "P1040727.JPG", "info": "", "timestamp": "2025-03-23T11:48:10", "latitude": 13.686175795510264, "longitude": -89.25288140773775, "attached_notes": []}, {"id": "P1040729.JPG", "mediapath": "content/1742863099/media/P1040729.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040729.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040729.png", "name": "P1040729.JPG", "info": "", "timestamp": "2025-03-23T12:13:06", "latitude": 13.69046899563966, "longitude": -89.25408840179445, "attached_notes": []}, {"id": "P1040730.JPG", "mediapath": "content/1742863099/media/P1040730.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040730.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040730.png", "name": "P1040730.JPG", "info": "", "timestamp": "2025-03-23T12:19:26", "latitude": 13.693964872392003, "longitude": -89.25533294677734, "attached_notes": []}, {"id": "P1040731.JPG", "mediapath": "content/1742863099/media/P1040731.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040731.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040731.png", "name": "P1040731.JPG", "info": "", "timestamp": "2025-03-23T12:21:50", "latitude": 13.69373837008747, "longitude": -89.25311207771303, "attached_notes": []}, {"id": "P1040732.JPG", "mediapath": "content/1742863099/media/P1040732.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040732.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040732.png", "name": "P1040732.JPG", "info": "", "timestamp": "2025-03-23T12:25:04", "latitude": 13.694882421071094, "longitude": -89.25423860549927, "attached_notes": []}, {"id": "P1040734.JPG", "mediapath": "content/1742863099/media/P1040734.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040734.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040734.png", "name": "P1040734.JPG", "info": "", "timestamp": "2025-03-23T12:31:35", "latitude": 13.69232269502081, "longitude": -89.25453901290894, "attached_notes": []}, {"id": "P1040736.JPG", "mediapath": "content/1742863099/media/P1040736.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040736.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040736.png", "name": "P1040736.JPG", "info": "", "timestamp": "2025-03-23T12:37:01", "latitude": 13.686827032287068, "longitude": -89.2512345314026, "attached_notes": []}, {"id": "P1040738.JPG", "mediapath": "content/1742863099/media/P1040738.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040738.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040738.png", "name": "P1040738.JPG", "info": "", "timestamp": "2025-03-23T14:52:51", "latitude": 13.704401751402072, "longitude": -89.24087315797807, "attached_notes": []}, {"id": "P1040739.JPG", "mediapath": "content/1742863099/media/P1040739.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040739.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040739.png", "name": "P1040739.JPG", "info": "", "timestamp": "2025-03-23T14:53:05", "latitude": 13.705257042951647, "longitude": -89.24177169799806, "attached_notes": []}, {"id": "P1040740.JPG", "mediapath": "content/1742863099/media/P1040740.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040740.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040740.png", "name": "P1040740.JPG", "info": "", "timestamp": "2025-03-23T14:53:28", "latitude": 13.706398134972671, "longitude": -89.24280166625978, "attached_notes": []}, {"id": "P1040743.JPG", "mediapath": "content/1742863099/media/P1040743.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040743.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040743.png", "name": "P1040743.JPG", "info": "", "timestamp": "2025-03-23T14:55:05", "latitude": 13.70445427293251, "longitude": -89.24089998006822, "attached_notes": []}, {"id": "P1040744.JPG", "mediapath": "content/1742863099/media/P1040744.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040744.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040744.png", "name": "P1040744.JPG", "info": "", "timestamp": "2025-03-23T15:36:38", "latitude": 13.704417390771928, "longitude": -89.2408061027527, "attached_notes": []}, {"id": "P1040746.JPG", "mediapath": "content/1742863099/media/P1040746.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040746.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040746.png", "name": "P1040746.JPG", "info": "", "timestamp": "2025-03-24T11:42:36", "latitude": 13.445144144350097, "longitude": -89.0547037124634, "attached_notes": []}, {"id": "P1040747.JPG", "mediapath": "content/1742863099/media/P1040747.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040747.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040747.png", "name": "P1040747.JPG", "info": "", "timestamp": "2025-03-24T23:19:49", "latitude": 35.21025878232678, "longitude": -80.94898223876955, "attached_notes": []}], "notes": []}}}
\ No newline at end of file diff --git a/collections_noimgs.json b/collections_noimgs.json new file mode 100644 index 0000000..035fade --- /dev/null +++ b/collections_noimgs.json @@ -0,0 +1 @@ +{"last_modified": "PLACEHOLDER", "collections": {"1742863099": {"id" : "1742863099", "title": "El Salvador", "subtitle": "March 2025 trip to El Salvador", "info": "Additional information", "owner": "john@gmail.com", "editors": ["fred@gmail.com", "mike@gmail.com"], "public": false, "photos": []}}}
\ No newline at end of file diff --git a/content/profile_pictures/placeholder b/content/profile_pictures/placeholder new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/content/profile_pictures/placeholder diff --git a/datatypes.py b/datatypes.py new file mode 100644 index 0000000..9eac1e7 --- /dev/null +++ b/datatypes.py @@ -0,0 +1,13 @@ +from flask_login import UserMixin +from . import db + +class User(UserMixin): + email = "" + password = "" + name = "" + id = "" + def __init__(self, email, password, name): + self.email = email + self.password = password + self.name = name + self.id = email @@ -0,0 +1,506 @@ +# external libraries +from PIL import Image +import exif + +# core libraries +import os.path +from os import mkdir +import json +from datetime import datetime +from time import time, time_ns +import subprocess + +# internal code +from .datatypes import User + +collections = { "last_queried" : {}, "collections" : {} } +users = {} + +THUMBNAIL_SIZE_MAP = (60, 45) +THUMBNAIL_SIZE_GRD = (120, 120) + +# run upon server startup +def startup(): + if not os.path.exists("users.json"): + initialize_users() + load_users() + + +# +# Collections-related functions +# + + +# save collections DB to disk +def save_collections(specific_collection_id=None): + if specific_collection_id: + with open(f"content/{specific_collection_id}/collection.json", "w") as f: + json.dump(collections["collections"][specific_collection_id], f) + return + + for collection_id, collection in collections["collections"].items(): + with open(f"content/{collection_id}/collection.json", "w") as f: + json.dump(collection, f) + +# load collection from disk +# collection_id | str | collection to load +# RETURNS True if collection was loaded, False otherwise +def load_collection(collection_id): + global collections + if os.path.exists(f"content/{collection_id}/collection.json"): + with open(f"content/{collection_id}/collection.json", "r") as f: + collections["collections"][collection_id] = json.load(f) + collections["last_queried"][collection_id] = time() + return True + else: + return False + + +def unload_idle_collections(): + to_remove = [] + for collection_id, age in collections["last_queried"].items(): + if (time() - age) > 300: # 5 minutes of no contact + to_remove.append(collection_id) + for collection_id in to_remove: + del collections["last_queried"][collection_id] + del collections["collections"][collection_id] + +# create an empty collection with placeholder information +# owner_id | str +def create_collection(owner_id): + global collections + collection_id = str(time_ns()) + if collection_id in collections["collections"]: + collection_id += "_" + collections["collections"][collection_id] = \ + { "id" : collection_id, + "title" : "Title", + "subtitle" : "Subtitle", + "info" : "Additional information", + "default_view" : [ 0, 0, 15], # lat, long, zoom + "last_edited" : time(), + "owner" : owner_id, + "editors" : [], + "viewers" : [], + "public" : False, + "media" : [], + "notes" : [], + "routes" : [] + } + mkdir("content/"+collection_id) + mkdir("content/"+collection_id+"/thumbs") + mkdir("content/"+collection_id+"/thumbs/map") + mkdir("content/"+collection_id+"/thumbs/ui") + mkdir("content/"+collection_id+"/media") + unload_idle_collections() + save_collections(collection_id) + +# find collection by collection id +# collection_id | int | the collection id which identifies the desired collection +# RETURNS: None if no such collection, otherwise returns the collection +def get_collection(collection_id): + if collection_id not in collections["collections"]: + if not load_collection(collection_id): + return None + + collections["last_queried"][collection_id] = time() + unload_idle_collections() + + return collections["collections"][collection_id] + +# get collections as a list rather than a dictionary +# RETURNS: collections as a list +def get_collection_list(): + return [ coll for coll_id, coll in collections['collections'].items() ] + + +# set collection to either public or private +# collection_id | str +# public | bool +# RETURNS False if no such collection, otherwise True +def set_collection_public(collection_id, public): + collection = get_collection(collection_id) + if not collection: + return False + collection["public"] = public + collection["last_edited"] = time() + return True + +# set collection info fields (title, subtitle, info) +# collection_id | str +# edits_dict | dict +# RETURNS False if collection not found, otherwise True +def set_collection_info(collection_id, edits_dict): + collection = get_collection(collection_id) + if not collection: + return False + + for key, value in edits_dict.items(): + if key in ["title", "subtitle", "info"]: + collection[key] = value + collection["last_edited"] = time() + + return True + +# whether the given user can edit the given collection +# collection_id | str +# user_email | str +# RETURNS: True/False +def validate_user(collection_id, user_email): + collection = get_collection(collection_id) + if not collection or user_email not in users: + return False + if (user_email not in collection["editors"]) and (user_email != collection["owner"]): + return False + return True + +# set the user permissions for a given collection +# collection_id | str +# user_email | str +# perm | str | invalid permission removes permissions from user +# RETURNS False if invalid command, otherwise True in case of successful change +def set_user_permissions(collection_id, user_email, perm): + collection = get_collection(collection_id) + if not collection: + return False + + collection["last_edited"] = time() + + # reset user perms + while user_email in collection["viewers"]: + collection["viewers"].remove(user_email) + while user_email in collection["editors"]: + collection["editors"].remove(user_email) + + # set user perms to specified value + if perm == "viewer": + collection["viewers"].append(user_email) + elif perm == "editor": + collection["editors"].append(user_email) + + return True + + +# +# User-related functions +# + +# if no user DB exists, create an empty one +def initialize_users(): + global users + users = {} + save_users() + +# save users DB to disk +# *filename | str | filename to save to +def save_users(filename="users.json"): + users_j = {} + # convert User objects to JSON + for user_email, user in users.items(): + users_j[user_email] = {"email" : user.email, + "password" : user.password, + "name" : user.name} + + # save JSON-ified user DB + with open(filename, "w") as f: + json.dump(users_j, f) + +# load collections DB from disk +# *filename | str | filename to load from +def load_users(filename="users.json"): + global users + users = {} # clear user DB + + # load from file + with open(filename, "r") as f: + users_j = json.load(f) + + # convert from pure JSON to User objects + for user_email, user_info in users_j.items(): + users[user_email] = User(email=user_info["email"], + password=user_info["password"], + name=user_info["name"]) + +# returns User class by id (email) +# user_id | str | user email by which the user is identified +# RETURNS: User object if user exists, otherwise None +def get_user(user_id): + if user_id not in users: + return None + return users[user_id] + +# add a new user +# email | str | user's email +# password | str | user's password (hashed) +# name | str | user's real/username +# RETURNS: False if user already exists, True if user has been newly added +def add_user(email, password, name): + global users + if email in users: + return False + users[email] = User(email=email, password=password, name=name) + save_users() + return True + +# returns User class by id (email) +# user_id | str | user email by which the user is identified +# RETURNS: True if user was deleted, False if not found +def delete_user(user_id): + global users + if user_id not in users: + return False + del users[user_id] + save_users() + return True + + +# +# Media-related functions +# + +# adds media to specified collection. info is taken from exif unless file_info is specified +# collection_id | str | collection photo should be added to +# file | file | file uploaded via flask +# *file_info | json | dictionary describing information about the file, optional +def add_media(collection_id, file, file_info=None): + filename = file.filename + + # find valid filename + filename_components = file.filename.split(".") + extension = filename_components[-1].lower() + i = 1 + while os.path.exists("content/"+collection_id+"/media/"+filename): + filename = ".".join(filename_components[:-1]) + " (" + str(i) + ")." + extension + i += 1 + + # save file + file.save(os.path.join("content/"+collection_id+"/media/", filename)) + print(filename) + filename_thumb = ".".join(filename.split(".")[:-1])+".png" + + # generate thumbnails + + if extension in ["mov", "mp4", "webm"]: # generate thumbnail image + is_video = True + video_path = os.path.join("content/"+collection_id+"/media/", filename) + temp_img_path = os.path.join("content/"+collection_id+"/media/", filename+".jpg") + subprocess.call(['ffmpeg', '-i', video_path, '-ss', '00:00:00.000', '-vframes', '1', temp_img_path]) + photo_temp = Image.open(os.path.join("content/"+collection_id+"/media/", filename+".jpg")) + photo = photo_temp.copy() + photo_temp.close() + os.remove(temp_img_path) + else: + is_video = False + photo = Image.open(os.path.join("content/"+collection_id+"/media/", filename_thumb)) + + + photo.thumbnail(THUMBNAIL_SIZE_GRD) + + if is_video: + photo_resize = Image.new("RGBA", THUMBNAIL_SIZE_GRD, (255, 255, 255, 0)) + old_w, old_h = photo.size + if old_w == THUMBNAIL_SIZE_GRD[0]: + photo_resize.paste(photo, (0, int((THUMBNAIL_SIZE_GRD[1] - old_h)/2), old_w, int((THUMBNAIL_SIZE_GRD[1] + old_h)/2))) + else: + photo_resize.paste(photo, (int((THUMBNAIL_SIZE_GRD[0] - old_w)/2), 0, int((THUMBNAIL_SIZE_GRD[0] + old_w)/2), old_h)) + video_icon = Image.open("static/img/video.png") + video_icon = video_icon.convert("RGBA") + video_icon = video_icon.resize(THUMBNAIL_SIZE_GRD) + photo_resize.paste(video_icon, (0, 0, THUMBNAIL_SIZE_GRD[0], THUMBNAIL_SIZE_GRD[1]), video_icon ) + photo = photo_resize + + photo.save(os.path.join("content/"+collection_id+"/thumbs/ui/", filename_thumb), quality=90) + photo.thumbnail(THUMBNAIL_SIZE_MAP) + + old_w, old_h = photo.size + photo_resize = Image.new("RGBA", THUMBNAIL_SIZE_MAP, (255, 255, 255, 0)) + if old_w == THUMBNAIL_SIZE_MAP[0]: + photo_resize.paste(photo, (0, int((THUMBNAIL_SIZE_MAP[1] - old_h)/2), old_w, int((THUMBNAIL_SIZE_MAP[1] + old_h)/2))) + else: + photo_resize.paste(photo, (int((THUMBNAIL_SIZE_MAP[0] - old_w)/2), 0, int((THUMBNAIL_SIZE_MAP[0] + old_w)/2), old_h)) + + + photo_resize.save(os.path.join("content/"+collection_id+"/thumbs/map/", filename_thumb), quality=90) + + photo.close() + photo_resize.close() + + + + # create data structure + media = { + "id" : filename, # does not change + "mediapath" : os.path.join("content/"+collection_id+"/media/", filename), + "thumbbig" : os.path.join("content/"+collection_id+"/thumbs/ui/", filename_thumb), + "thumbsmall" : os.path.join("content/"+collection_id+"/thumbs/map/", filename_thumb), + "name" : filename, + "info" : "", + "timestamp" : "", + "latitude" : None, + "longitude" : None, + "attached_notes" : [], + "is_video" : is_video + } + + # attempt to add info via EXIF + with open(os.path.join("content/"+collection_id+"/media/", filename), "rb") as f: + try: + img_exif = exif.Image(f) + if img_exif.has_exif: + attribs = img_exif.list_all() + if 'datetime_original' in attribs: + timestamp = img_exif.datetime_original.split(" ") + timestamp[0] = timestamp[0].replace(":", "-") + timestamp = "T".join(timestamp) + media["timestamp"] = timestamp + if 'gps_latitude' in attribs: + lat = sum([ val / (60**i) for i, val in enumerate(img_exif.gps_latitude) ]) + long = sum([ val / (60**i) for i, val in enumerate(img_exif.gps_longitude) ]) + media["latitude"] = lat + media["longitude"] = long + except Exception as e: + print(e) + + # manually add file info, if provided + if file_info != None: + for key, value in file_info.items(): + media[key] = value + + # add data struct to collection + collection = get_collection(collection_id) + collections["last_queried"][collection_id] = time() + collection["media"].append(media) + collection["last_edited"] = time() + + save_collections() + +# performs add_media for every file in files +# collection_id | str +# files | [file] +def add_media_bulk(collection_id, files): + for file in files: + add_media(collection_id, file) + +# edit media JSON by collection id + media_id +# collection_id | str +# media_id | str +# attr_dict | dict +# RETURNS: status +def edit_media(collection_id, media_id, attr_dict): + collection = get_collection(collection_id) + + # verify media exists + if not collection: + return {"status" : f"No such collection '{collection_id}'."} + + for index, media in enumerate(collection["media"]): + if media["id"] == media_id: + # update media + for key, value in attr_dict.items(): + if key in collection["media"][index]: + collection["media"][index][key] = value + collection["last_edited"] = time() + collections["last_queried"][collection_id] = time() + save_collections() + return {"status" : "OK"} + + return {"status" : f"No such media '{media_id}'"} + + +# delte media by collection id + media_id +# collection_id | str +# media_id | str +# RETURNS: status +def delete_media(collection_id, media_id): + collection = get_collection(collection_id) + + # verify media exists + if not collection: + return {"status" : f"No such collection '{collection_id}'."} + + attached_notes = [] + for index, media in enumerate(collection["media"]): + if media["id"] == media_id: + # clean up files + files = ["mediapath", "thumbbig", "thumbsmall"] + for file in files: + if os.path.exists(media[file]): + os.remove(media[file]) # remove media + thumbnails + attached_notes = media["attached_notes"] + collection["media"].pop(index) + break + else: + return {"status" : f"No such media '{media_id}'"} + + + + for attached_note in attached_notes: # remove references to media from any notes + for index, note in enumerate(collection['notes']): + if note["id"] == attached_note: + if media_id in note["attached_media"]: + note["attached_media"].pop(note["attached_media"].index(media_id)) + + + + collection["last_edited"] = time() + save_collections() + + return {"status" : "OK"} + + +def add_note(collection_id, note_info=None): + collection = get_collection(collection_id) + + # verify media exists + if not collection: + return {"status" : f"No such collection '{collection_id}'."} + + note = { "id" : str(time_ns()), + "title" : "", + "subtitle" : "", + "datetime_start" : "", + "datetime_end" : "", + "content" : "", + "attached_media" : [] + } + + collection["notes"].append(note) + collection["last_edited"] = time() + save_collections() + + return {"status" : "OK"} + +def edit_note(collection_id, note_id, attr_dict): + collection = get_collection(collection_id) + + # verify media exists + if not collection: + return {"status" : f"No such collection '{collection_id}'."} + + for index, note in enumerate(collection["notes"]): + if note["id"] == note_id: + # update media + for key, value in attr_dict.items(): + if key in collection["notes"][index]: + collection["notes"][index][key] = value + collection["last_edited"] = time() + collections["last_queried"][collection_id] = time() + save_collections() + return {"status" : "OK"} + + return {"status" : f"No such media '{note_id}'"} + +def delete_note(collection_id, note_id): + collection = get_collection(collection_id) + + if not collection: + return False + + for index, note in enumerate(collection["notes"]): + if note["id"] == note_id: + collection["notes"].pop(index) + collection["last_edited"] = time() + collections["last_queried"][collection_id] = time() + return True + + return False
\ No newline at end of file @@ -0,0 +1,170 @@ +## hosts photocosm web server via flask + +# external libraries +from flask import Blueprint, Flask, request, redirect, render_template, jsonify, flash, url_for, send_from_directory +from flask_login import current_user, login_required + +# core libraries +import os.path + +# internal code +from . import db + +main = Blueprint('main', __name__) + +# main page +# GET = get main page +@main.route("/", methods=['GET']) +def home(): + return render_template("home.html", collections=db.get_collection_list()) + +# editor page +@main.route("/editor", methods=['GET']) +def editor(): + collection_id = request.args.get("collection") + if request.method == "GET": + collection = db.get_collection(collection_id) + if not collection: + flash("No such collection exists!") + return redirect(url_for('main.home')) + if not current_user.is_authenticated: + flash("You must be logged in to edit collections!") + return redirect(url_for('auth.login')) + if not db.validate_user(collection_id, current_user.email): + flash("You do not have permission to edit this collection!") + return redirect(url_for('main.home')) + return render_template("editor.html", collection_id=collection_id) + +# get latest collection data (in editor) +@main.route("/editorgetlatestinfo", methods=["POST"]) +@login_required +def editor_request_update(): + content = request.get_json() + if not content or ("collection" not in content) or ("last_updated" not in content): + return jsonify({"status" : "ERROR: Invalid request."}) + + collection_id = content["collection"] + client_last_update = content["last_updated"] + collection = db.get_collection(collection_id) + + if not collection: + return jsonify({"status" : "ERROR: No such collection."}) + if not current_user.is_authenticated: + return jsonify({"status" : "ERROR: You must be logged in to edit collections."}) + if not db.validate_user(collection_id, current_user.email): + return jsonify({"status" : "ERROR: You do not have permission to edit this collection."}) + + if collection["last_edited"] > client_last_update: + data = {"status" : "OK", "update" : True, "collection" : collection} + return jsonify(data) + + return jsonify({"status" : "OK", "update" : False}) + +# upload media to collection from editor +@main.route("/editormediaupload", methods=['POST']) +@login_required +def file_upload(): + collection_id = request.form.get('collection_id') + if not db.validate_user(collection_id, current_user.email): + return jsonify({"STATUS" : "PERMISSION DENIED"}) + + files = request.files.getlist("files") + db.add_media_bulk(collection_id ,files) + + return jsonify({"STATUS" : "OK"}) + +@main.route("/editoreditmedia", methods=['POST']) +@login_required +def edit_media(): + content = request.get_json() + if not content or ("collection" not in content): + return jsonify({"status" : "ERROR: Invalid request."}) + + collection_id = content["collection"] + collection = db.get_collection(collection_id) + + if not collection: + return jsonify({"status" : "ERROR: No such collection."}) + if not current_user.is_authenticated: + return jsonify({"status" : "ERROR: You must be logged in to edit collections."}) + if not db.validate_user(collection_id, current_user.email): + return jsonify({"status" : "ERROR: You do not have permission to edit this collection."}) + + for edit in content["edits"]: + db.edit_media(collection_id, edit["media_id"], edit["changes"]) + + return jsonify({"status" : "OK", "update" : False}) + +@main.route("/editorshare", methods=['POST']) +@login_required +def share(): + content = request.get_json() + if not content or ("collection" not in content): + return jsonify({"status" : "ERROR: Invalid request."}) + + collection_id = content["collection"] + collection = db.get_collection(collection_id) + + if not collection: + return jsonify({"status" : "ERROR: No such collection."}) + if not current_user.is_authenticated: + return jsonify({"status" : "ERROR: You must be logged in to edit collections."}) + if not db.validate_user(collection_id, current_user.email): + return jsonify({"status" : "ERROR: You do not have permission to edit this collection."}) + + if "user_email" in content: + db.set_user_permissions(collection_id, content["user_email"], content["perm"]) + if "public" in content: + db.set_collection_public(collection_id, content["public"]) + + return jsonify({"status" : "OK", "update" : False}) + +@main.route("/editorcollectioninfo", methods=['POST']) +@login_required +def edit_collection_info(): + content = request.get_json() + if not content or ("collection" not in content) or ("edits" not in content): + return jsonify({"status" : "ERROR: Invalid request."}) + + collection_id = content["collection"] + collection = db.get_collection(collection_id) + + if not collection: + return jsonify({"status" : "ERROR: No such collection."}) + if not current_user.is_authenticated: + return jsonify({"status" : "ERROR: You must be logged in to edit collections."}) + if not db.validate_user(collection_id, current_user.email): + return jsonify({"status" : "ERROR: You do not have permission to edit this collection."}) + + db.set_collection_info(collection_id, content["edits"]) + + return jsonify({"status" : "OK", "update" : False}) + +@main.route("/editordeletemedia", methods=['POST']) +@login_required +def delete_media(): + content = request.get_json() + print(content) + if not content or ("collection" not in content): + return jsonify({"status" : "ERROR: Invalid request."}) + + collection_id = content["collection"] + collection = db.get_collection(collection_id) + + if not collection: + return jsonify({"status" : "ERROR: No such collection."}) + if not current_user.is_authenticated: + return jsonify({"status" : "ERROR: You must be logged in to edit collections."}) + if not db.validate_user(collection_id, current_user.email): + return jsonify({"status" : "ERROR: You do not have permission to edit this collection."}) + + for media_id in content["to_be_removed"]: + print(db.delete_media(collection_id, media_id)) + + return jsonify({"status" : "OK", "update" : False}) + +# access media content +@main.route('/content/<path:path>') +def send_content(path): + # Using request args for path will expose you to directory traversal attacks + return send_from_directory('content', path)
\ No newline at end of file diff --git a/static/css/editor.css b/static/css/editor.css new file mode 100644 index 0000000..add8792 --- /dev/null +++ b/static/css/editor.css @@ -0,0 +1,325 @@ + +@font-face { + font-family: "HWYGOTH"; + src: url("/static/fonts/HWYGOTH.ttf"); +} +* { + font-family:HWYGOTH; +} +#map { height: 100%; } +* { +box-sizing: border-box; +} +html{ + padding:0; + margin: 0; + height:100%; +} + +body{ + padding:0; + margin: 0; + height: 100vh; + max-height:100vh; + margin:0px; + display:flex; + flex-direction: column; +} +.page-container { + display: flex; + height:100%; + flex-grow:0; +} +.page-container > div{ + padding: 8px; + } +.left-column { + /* flex:0.75 1 auto; */ + flex-basis:50%; + display: flex; + flex-direction: column; + gap: 5px; + max-height:100%; + min-height:0; +} +.tab-section { + flex: 1 1 50%; + display: flex; + flex-direction: column; + min-height:0; +} +.media-preview { + display: none; + flex: 0 0 50%; + overflow:hidden; + justify-content: center; + align-items: center; + min-height: 0; +} +.right-column { + /* flex:0.25 1 auto; */ + flex-grow:0; + flex-basis:50%; + display: flex; + flex-direction: column; + gap: 5px; +} +.right-column > div{ + border: 3px double lightgray; + padding: 0px; +} +.map-frame { + /* flex:0.2 1 auto; */ + flex-grow:1.0; +} +.content-info { + flex-basis:40%; +} + +.leaflet-popup-content { + color: black; +} +.leaflet-control-layers-overlays > label > span > span { + color: black; +} + + +.tab-header { +overflow: hidden; +border: 1px solid #ccc; +background-color: #f1f1f1; +} + +.tab-header button { +background-color: inherit; +float: left; +border: none; +outline: none; +padding: 14px 16px; +transition: 0.3s; +margin:0; +} + +.tab-header button:hover { +background-color: #ddd; +cursor: pointer; +} + +.tab-header button.active { +background-color: #ccc; +} + +.tab-content { + display: none; + margin:0; + height: 0; + flex-grow: 1; + min-height: 0; + border: 1px solid #ccc; + border-top: none; +} + +.media-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); + gap: 15px; + padding: 20px; + height: 100%; +} + +.media { + position: relative; + border-radius: 5px; + aspect-ratio: 1; + transition: transform 0.2s, box-shadow 0.2s; + user-select: none; +} + +.media > img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +.media p { + margin-top:0; + margin-bottom:0; + text-align:center; + overflow:hidden; + text-overflow:ellipsis; +} + +.media::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + border: 4px solid transparent; + transition: border-color 0.2s; +} + +.media.selected::after { + border-color: #4285f4; +} + +.media:hover { + transform: scale(1.03); + cursor: pointer; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); +} + +.media-timestamp { + color: grey; + font-size: 10pt; +} + +.leaflet-container.crosshair-cursor-enabled { + cursor:crosshair; +} + +.no-hover{ + pointer-events: none; +} + +.content-info-edit { + display: grid; + grid-template-columns: max-content 1fr; + gap: 8px 12px; + align-items: center; +} + +.content-info-edit-label { + margin-left: 10px; +} + +.content-info-edit-field { + margin-right: 10px; +} + +.delete-button { + color:brown; + text-align: right; + margin-right: 10px; + margin-top: 5px; + text-decoration: underline; +} + +.delete-button:hover { + cursor: pointer; +} + +#preview-img { + border-radius: 5px; + cursor: pointer; + transition: 0.3s; +} + +#preview-img:hover {opacity: 0.7;} + +/* The Modal (background) */ +.modal { + display: none; /* Hidden by default */ + position: fixed; /* Stay in place */ + z-index: 10000; /* Sit on top */ + padding-top: 3%; + left: 0; + top: 0; + width: 100%; /* Full width */ + height: 100%; /* Full height */ + overflow: auto; /* Enable scroll if needed */ + background-color: rgb(0,0,0); /* Fallback color */ + background-color: rgba(0,0,0,0.9); /* Black w/ opacity */ +} + +/* Modal Content (image) */ +.modal-content { + margin: auto; + display: block; + width: auto; + height: auto; + max-width: 95%; + max-height: 95%; +} + +/* Add Animation */ +.modal-content, #caption { + -webkit-animation-name: zoom; + -webkit-animation-duration: 0.6s; + animation-name: zoom; + animation-duration: 0.6s; +} + +@-webkit-keyframes zoom { + from {-webkit-transform:scale(0)} + to {-webkit-transform:scale(1)} +} + +@keyframes zoom { + from {transform:scale(0)} + to {transform:scale(1)} +} + +/* 100% Image Width on Smaller Screens */ +@media only screen and (max-width: 700px){ + .modal-content { + width: 100%; + } +} + +.share-box { + display: flex; + flex-direction:column; + width:30%; + min-width: 500px; + height: 70%; + background-color: white; + margin:auto; + border: 3px double lightgray; +} + +.user-share-section { + display: grid; + grid-template-columns: 65% 15% 10%; + grid-auto-rows: min-content; + row-gap: 10px; + column-gap: 5%; + padding: 15px; + flex: 1; + margin:10px; + border: 3px double lightgray; + width:auto; + overflow-y:auto; + overflow-x:hidden; +} + +.user-unshare-button { + cursor: pointer; + color: red; + text-decoration: underline; + margin-top: 0; + margin-bottom: 0; +} + +.collection-box { + display: flex; + flex-direction:column; + width:30%; + min-width: 500px; + height: 20%; + background-color: white; + margin:auto; + border: 3px double lightgray; +} + +.tab-filters { + padding-top:10px; + padding-bottom:10px; + border-bottom: 1px solid #ccc; + display: flex; + flex-direction: row; + padding-left:15px; + padding-right:15px; +}
\ No newline at end of file diff --git a/static/css/leaflet.css b/static/css/leaflet.css new file mode 100644 index 0000000..2961b76 --- /dev/null +++ b/static/css/leaflet.css @@ -0,0 +1,661 @@ +/* required styles */
+
+.leaflet-pane,
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow,
+.leaflet-tile-container,
+.leaflet-pane > svg,
+.leaflet-pane > canvas,
+.leaflet-zoom-box,
+.leaflet-image-layer,
+.leaflet-layer {
+ position: absolute;
+ left: 0;
+ top: 0;
+ }
+.leaflet-container {
+ overflow: hidden;
+ }
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ -webkit-user-drag: none;
+ }
+/* Prevents IE11 from highlighting tiles in blue */
+.leaflet-tile::selection {
+ background: transparent;
+}
+/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
+.leaflet-safari .leaflet-tile {
+ image-rendering: -webkit-optimize-contrast;
+ }
+/* hack that prevents hw layers "stretching" when loading new tiles */
+.leaflet-safari .leaflet-tile-container {
+ width: 1600px;
+ height: 1600px;
+ -webkit-transform-origin: 0 0;
+ }
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+ display: block;
+ }
+/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
+/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
+.leaflet-container .leaflet-overlay-pane svg {
+ max-width: none !important;
+ max-height: none !important;
+ }
+.leaflet-container .leaflet-marker-pane img,
+.leaflet-container .leaflet-shadow-pane img,
+.leaflet-container .leaflet-tile-pane img,
+.leaflet-container img.leaflet-image-layer,
+.leaflet-container .leaflet-tile {
+ max-width: none !important;
+ max-height: none !important;
+ width: auto;
+ padding: 0;
+ }
+
+.leaflet-container img.leaflet-tile {
+ /* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
+ mix-blend-mode: plus-lighter;
+}
+
+.leaflet-container.leaflet-touch-zoom {
+ -ms-touch-action: pan-x pan-y;
+ touch-action: pan-x pan-y;
+ }
+.leaflet-container.leaflet-touch-drag {
+ -ms-touch-action: pinch-zoom;
+ /* Fallback for FF which doesn't support pinch-zoom */
+ touch-action: none;
+ touch-action: pinch-zoom;
+}
+.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.leaflet-container {
+ -webkit-tap-highlight-color: transparent;
+}
+.leaflet-container a {
+ -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
+}
+.leaflet-tile {
+ filter: inherit;
+ visibility: hidden;
+ }
+.leaflet-tile-loaded {
+ visibility: inherit;
+ }
+.leaflet-zoom-box {
+ width: 0;
+ height: 0;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ z-index: 800;
+ }
+/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
+.leaflet-overlay-pane svg {
+ -moz-user-select: none;
+ }
+
+.leaflet-pane { z-index: 400; }
+
+.leaflet-tile-pane { z-index: 200; }
+.leaflet-overlay-pane { z-index: 400; }
+.leaflet-shadow-pane { z-index: 500; }
+.leaflet-marker-pane { z-index: 600; }
+.leaflet-tooltip-pane { z-index: 650; }
+.leaflet-popup-pane { z-index: 700; }
+
+.leaflet-map-pane canvas { z-index: 100; }
+.leaflet-map-pane svg { z-index: 200; }
+
+.leaflet-vml-shape {
+ width: 1px;
+ height: 1px;
+ }
+.lvml {
+ behavior: url(#default#VML);
+ display: inline-block;
+ position: absolute;
+ }
+
+
+/* control positioning */
+
+.leaflet-control {
+ position: relative;
+ z-index: 800;
+ pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
+ pointer-events: auto;
+ }
+.leaflet-top,
+.leaflet-bottom {
+ position: absolute;
+ z-index: 1000;
+ pointer-events: none;
+ }
+.leaflet-top {
+ top: 0;
+ }
+.leaflet-right {
+ right: 0;
+ }
+.leaflet-bottom {
+ bottom: 0;
+ }
+.leaflet-left {
+ left: 0;
+ }
+.leaflet-control {
+ float: left;
+ clear: both;
+ }
+.leaflet-right .leaflet-control {
+ float: right;
+ }
+.leaflet-top .leaflet-control {
+ margin-top: 10px;
+ }
+.leaflet-bottom .leaflet-control {
+ margin-bottom: 10px;
+ }
+.leaflet-left .leaflet-control {
+ margin-left: 10px;
+ }
+.leaflet-right .leaflet-control {
+ margin-right: 10px;
+ }
+
+
+/* zoom and fade animations */
+
+.leaflet-fade-anim .leaflet-popup {
+ opacity: 0;
+ -webkit-transition: opacity 0.2s linear;
+ -moz-transition: opacity 0.2s linear;
+ transition: opacity 0.2s linear;
+ }
+.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
+ opacity: 1;
+ }
+.leaflet-zoom-animated {
+ -webkit-transform-origin: 0 0;
+ -ms-transform-origin: 0 0;
+ transform-origin: 0 0;
+ }
+svg.leaflet-zoom-animated {
+ will-change: transform;
+}
+
+.leaflet-zoom-anim .leaflet-zoom-animated {
+ -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
+ -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
+ transition: transform 0.25s cubic-bezier(0,0,0.25,1);
+ }
+.leaflet-zoom-anim .leaflet-tile,
+.leaflet-pan-anim .leaflet-tile {
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+ }
+
+.leaflet-zoom-anim .leaflet-zoom-hide {
+ visibility: hidden;
+ }
+
+
+/* cursors */
+
+.leaflet-interactive {
+ cursor: pointer;
+ }
+.leaflet-grab {
+ cursor: -webkit-grab;
+ cursor: -moz-grab;
+ cursor: grab;
+ }
+.leaflet-crosshair,
+.leaflet-crosshair .leaflet-interactive {
+ cursor: crosshair;
+ }
+.leaflet-popup-pane,
+.leaflet-control {
+ cursor: auto;
+ }
+.leaflet-dragging .leaflet-grab,
+.leaflet-dragging .leaflet-grab .leaflet-interactive,
+.leaflet-dragging .leaflet-marker-draggable {
+ cursor: move;
+ cursor: -webkit-grabbing;
+ cursor: -moz-grabbing;
+ cursor: grabbing;
+ }
+
+/* marker & overlays interactivity */
+.leaflet-marker-icon,
+.leaflet-marker-shadow,
+.leaflet-image-layer,
+.leaflet-pane > svg path,
+.leaflet-tile-container {
+ pointer-events: none;
+ }
+
+.leaflet-marker-icon.leaflet-interactive,
+.leaflet-image-layer.leaflet-interactive,
+.leaflet-pane > svg path.leaflet-interactive,
+svg.leaflet-image-layer.leaflet-interactive path {
+ pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
+ pointer-events: auto;
+ }
+
+/* visual tweaks */
+
+.leaflet-container {
+ background: #ddd;
+ outline-offset: 1px;
+ }
+.leaflet-container a {
+ color: #0078A8;
+ }
+.leaflet-zoom-box {
+ border: 2px dotted #38f;
+ background: rgba(255,255,255,0.5);
+ }
+
+
+/* general typography */
+.leaflet-container {
+ font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
+ font-size: 12px;
+ font-size: 0.75rem;
+ line-height: 1.5;
+ }
+
+
+/* general toolbar styles */
+
+.leaflet-bar {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.65);
+ border-radius: 4px;
+ }
+.leaflet-bar a {
+ background-color: #fff;
+ border-bottom: 1px solid #ccc;
+ width: 26px;
+ height: 26px;
+ line-height: 26px;
+ display: block;
+ text-align: center;
+ text-decoration: none;
+ color: black;
+ }
+.leaflet-bar a,
+.leaflet-control-layers-toggle {
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ display: block;
+ }
+.leaflet-bar a:hover,
+.leaflet-bar a:focus {
+ background-color: #f4f4f4;
+ }
+.leaflet-bar a:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ }
+.leaflet-bar a:last-child {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-bottom: none;
+ }
+.leaflet-bar a.leaflet-disabled {
+ cursor: default;
+ background-color: #f4f4f4;
+ color: #bbb;
+ }
+
+.leaflet-touch .leaflet-bar a {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+ }
+.leaflet-touch .leaflet-bar a:first-child {
+ border-top-left-radius: 2px;
+ border-top-right-radius: 2px;
+ }
+.leaflet-touch .leaflet-bar a:last-child {
+ border-bottom-left-radius: 2px;
+ border-bottom-right-radius: 2px;
+ }
+
+/* zoom control */
+
+.leaflet-control-zoom-in,
+.leaflet-control-zoom-out {
+ font: bold 18px 'Lucida Console', Monaco, monospace;
+ text-indent: 1px;
+ }
+
+.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
+ font-size: 22px;
+ }
+
+
+/* layers control */
+
+.leaflet-control-layers {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.4);
+ background: #fff;
+ border-radius: 5px;
+ }
+.leaflet-control-layers-toggle {
+ background-image: url(images/layers.png);
+ width: 36px;
+ height: 36px;
+ }
+.leaflet-retina .leaflet-control-layers-toggle {
+ background-image: url(images/layers-2x.png);
+ background-size: 26px 26px;
+ }
+.leaflet-touch .leaflet-control-layers-toggle {
+ width: 44px;
+ height: 44px;
+ }
+.leaflet-control-layers .leaflet-control-layers-list,
+.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
+ display: none;
+ }
+.leaflet-control-layers-expanded .leaflet-control-layers-list {
+ display: block;
+ position: relative;
+ }
+.leaflet-control-layers-expanded {
+ padding: 6px 10px 6px 6px;
+ color: #333;
+ background: #fff;
+ }
+.leaflet-control-layers-scrollbar {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ padding-right: 5px;
+ }
+.leaflet-control-layers-selector {
+ margin-top: 2px;
+ position: relative;
+ top: 1px;
+ }
+.leaflet-control-layers label {
+ display: block;
+ font-size: 13px;
+ font-size: 1.08333em;
+ }
+.leaflet-control-layers-separator {
+ height: 0;
+ border-top: 1px solid #ddd;
+ margin: 5px -10px 5px -6px;
+ }
+
+/* Default icon URLs */
+.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
+ background-image: url(images/marker-icon.png);
+ }
+
+
+/* attribution and scale controls */
+
+.leaflet-container .leaflet-control-attribution {
+ background: #fff;
+ background: rgba(255, 255, 255, 0.8);
+ margin: 0;
+ }
+.leaflet-control-attribution,
+.leaflet-control-scale-line {
+ padding: 0 5px;
+ color: #333;
+ line-height: 1.4;
+ }
+.leaflet-control-attribution a {
+ text-decoration: none;
+ }
+.leaflet-control-attribution a:hover,
+.leaflet-control-attribution a:focus {
+ text-decoration: underline;
+ }
+.leaflet-attribution-flag {
+ display: inline !important;
+ vertical-align: baseline !important;
+ width: 1em;
+ height: 0.6669em;
+ }
+.leaflet-left .leaflet-control-scale {
+ margin-left: 5px;
+ }
+.leaflet-bottom .leaflet-control-scale {
+ margin-bottom: 5px;
+ }
+.leaflet-control-scale-line {
+ border: 2px solid #777;
+ border-top: none;
+ line-height: 1.1;
+ padding: 2px 5px 1px;
+ white-space: nowrap;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ background: rgba(255, 255, 255, 0.8);
+ text-shadow: 1px 1px #fff;
+ }
+.leaflet-control-scale-line:not(:first-child) {
+ border-top: 2px solid #777;
+ border-bottom: none;
+ margin-top: -2px;
+ }
+.leaflet-control-scale-line:not(:first-child):not(:last-child) {
+ border-bottom: 2px solid #777;
+ }
+
+.leaflet-touch .leaflet-control-attribution,
+.leaflet-touch .leaflet-control-layers,
+.leaflet-touch .leaflet-bar {
+ box-shadow: none;
+ }
+.leaflet-touch .leaflet-control-layers,
+.leaflet-touch .leaflet-bar {
+ border: 2px solid rgba(0,0,0,0.2);
+ background-clip: padding-box;
+ }
+
+
+/* popup */
+
+.leaflet-popup {
+ position: absolute;
+ text-align: center;
+ margin-bottom: 20px;
+ }
+.leaflet-popup-content-wrapper {
+ padding: 1px;
+ text-align: left;
+ border-radius: 12px;
+ }
+.leaflet-popup-content {
+ margin: 13px 24px 13px 20px;
+ line-height: 1.3;
+ font-size: 13px;
+ font-size: 1.08333em;
+ min-height: 1px;
+ }
+.leaflet-popup-content p {
+ margin: 17px 0;
+ margin: 1.3em 0;
+ }
+.leaflet-popup-tip-container {
+ width: 40px;
+ height: 20px;
+ position: absolute;
+ left: 50%;
+ margin-top: -1px;
+ margin-left: -20px;
+ overflow: hidden;
+ pointer-events: none;
+ }
+.leaflet-popup-tip {
+ width: 17px;
+ height: 17px;
+ padding: 1px;
+
+ margin: -10px auto 0;
+ pointer-events: auto;
+
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+ }
+.leaflet-popup-content-wrapper,
+.leaflet-popup-tip {
+ background: white;
+ color: #333;
+ box-shadow: 0 3px 14px rgba(0,0,0,0.4);
+ }
+.leaflet-container a.leaflet-popup-close-button {
+ position: absolute;
+ top: 0;
+ right: 0;
+ border: none;
+ text-align: center;
+ width: 24px;
+ height: 24px;
+ font: 16px/24px Tahoma, Verdana, sans-serif;
+ color: #757575;
+ text-decoration: none;
+ background: transparent;
+ }
+.leaflet-container a.leaflet-popup-close-button:hover,
+.leaflet-container a.leaflet-popup-close-button:focus {
+ color: #585858;
+ }
+.leaflet-popup-scrolled {
+ overflow: auto;
+ }
+
+.leaflet-oldie .leaflet-popup-content-wrapper {
+ -ms-zoom: 1;
+ }
+.leaflet-oldie .leaflet-popup-tip {
+ width: 24px;
+ margin: 0 auto;
+
+ -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
+ filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
+ }
+
+.leaflet-oldie .leaflet-control-zoom,
+.leaflet-oldie .leaflet-control-layers,
+.leaflet-oldie .leaflet-popup-content-wrapper,
+.leaflet-oldie .leaflet-popup-tip {
+ border: 1px solid #999;
+ }
+
+
+/* div icon */
+
+.leaflet-div-icon {
+ background: #fff;
+ border: 1px solid #666;
+ }
+
+
+/* Tooltip */
+/* Base styles for the element that has a tooltip */
+.leaflet-tooltip {
+ position: absolute;
+ padding: 6px;
+ background-color: #fff;
+ border: 1px solid #fff;
+ border-radius: 3px;
+ color: #222;
+ white-space: nowrap;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ pointer-events: none;
+ box-shadow: 0 1px 3px rgba(0,0,0,0.4);
+ }
+.leaflet-tooltip.leaflet-interactive {
+ cursor: pointer;
+ pointer-events: auto;
+ }
+.leaflet-tooltip-top:before,
+.leaflet-tooltip-bottom:before,
+.leaflet-tooltip-left:before,
+.leaflet-tooltip-right:before {
+ position: absolute;
+ pointer-events: none;
+ border: 6px solid transparent;
+ background: transparent;
+ content: "";
+ }
+
+/* Directions */
+
+.leaflet-tooltip-bottom {
+ margin-top: 6px;
+}
+.leaflet-tooltip-top {
+ margin-top: -6px;
+}
+.leaflet-tooltip-bottom:before,
+.leaflet-tooltip-top:before {
+ left: 50%;
+ margin-left: -6px;
+ }
+.leaflet-tooltip-top:before {
+ bottom: 0;
+ margin-bottom: -12px;
+ border-top-color: #fff;
+ }
+.leaflet-tooltip-bottom:before {
+ top: 0;
+ margin-top: -12px;
+ margin-left: -6px;
+ border-bottom-color: #fff;
+ }
+.leaflet-tooltip-left {
+ margin-left: -6px;
+}
+.leaflet-tooltip-right {
+ margin-left: 6px;
+}
+.leaflet-tooltip-left:before,
+.leaflet-tooltip-right:before {
+ top: 50%;
+ margin-top: -6px;
+ }
+.leaflet-tooltip-left:before {
+ right: 0;
+ margin-right: -12px;
+ border-left-color: #fff;
+ }
+.leaflet-tooltip-right:before {
+ left: 0;
+ margin-left: -12px;
+ border-right-color: #fff;
+ }
+
+/* Printing */
+
+@media print {
+ /* Prevent printers from removing background-images of controls. */
+ .leaflet-control {
+ -webkit-print-color-adjust: exact;
+ print-color-adjust: exact;
+ }
+ }
diff --git a/static/css/navbar.css b/static/css/navbar.css new file mode 100644 index 0000000..9109333 --- /dev/null +++ b/static/css/navbar.css @@ -0,0 +1,54 @@ + +@font-face { + font-family: "HWYGOTH"; + src: url("/static/fonts/HWYGOTH.ttf"); +} + +/* Add a black background color to the top navigation */ +.topnav { +background-color: #163314; +overflow: hidden; +flex-shrink: 0; +display: flex; +} + +/* Style the links inside the navigation bar */ +.topnav a { + float: left; + color: #f2f2f2; + text-align: center; + padding: 14px 16px; + text-decoration: none; + font-size: 17px; + font-family:HWYGOTH; + cursor: pointer; +} + +/* Change the color of links on hover */ +.topnav a:hover { + background-color: #ddd; + color: black; +} + +/* Add a color to the active/current link */ +.topnav a.active { + background-color: #2a572a; + color: white; +} +/* Create a right-aligned (split) link inside the navigation bar */ +.topnav a.split { + float: right; + background-color: #163314; + color: white; +} +.topnav a.split:hover { + background-color: #ddd; + color: black; +} + +.topnav a.collection-title { + background-color: #2a572a; + color: white; + cursor: pointer; + flex: 1; +}
\ No newline at end of file diff --git a/static/css/simplemde.css b/static/css/simplemde.css new file mode 100644 index 0000000..fb0e4c7 --- /dev/null +++ b/static/css/simplemde.css @@ -0,0 +1,328 @@ +.CodeMirror { + height: auto; + min-height: 300px; + border: 1px solid #ddd; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + padding: 10px; + font: inherit; + z-index: 1; +} + +.CodeMirror-scroll { + min-height: 300px +} + +.CodeMirror-fullscreen { + background: #fff; + position: fixed !important; + top: 50px; + left: 0; + right: 0; + bottom: 0; + height: auto; + z-index: 9; +} + +.CodeMirror-sided { + width: 50% !important; +} + +.editor-toolbar { + position: relative; + opacity: .6; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; + padding: 0 10px; + border-top: 1px solid #bbb; + border-left: 1px solid #bbb; + border-right: 1px solid #bbb; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.editor-toolbar:after, +.editor-toolbar:before { + display: block; + content: ' '; + height: 1px; +} + +.editor-toolbar:before { + margin-bottom: 8px +} + +.editor-toolbar:after { + margin-top: 8px +} + +.editor-toolbar:hover, +.editor-wrapper input.title:focus, +.editor-wrapper input.title:hover { + opacity: .8 +} + +.editor-toolbar.fullscreen { + width: 100%; + height: 50px; + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; + padding-top: 10px; + padding-bottom: 10px; + box-sizing: border-box; + background: #fff; + border: 0; + position: fixed; + top: 0; + left: 0; + opacity: 1; + z-index: 9; +} + +.editor-toolbar.fullscreen::before { + width: 20px; + height: 50px; + background: -moz-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 1)), color-stop(100%, rgba(255, 255, 255, 0))); + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); + background: -o-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); + background: -ms-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); + background: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); + position: fixed; + top: 0; + left: 0; + margin: 0; + padding: 0; +} + +.editor-toolbar.fullscreen::after { + width: 20px; + height: 50px; + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%); + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 1))); + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%); + background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%); + background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%); + position: fixed; + top: 0; + right: 0; + margin: 0; + padding: 0; +} + +.editor-toolbar a { + display: inline-block; + text-align: center; + text-decoration: none!important; + color: #2c3e50!important; + width: 30px; + height: 30px; + margin: 0; + border: 1px solid transparent; + border-radius: 3px; + cursor: pointer; +} + +.editor-toolbar a.active, +.editor-toolbar a:hover { + background: #fcfcfc; + border-color: #95a5a6; +} + +.editor-toolbar a:before { + line-height: 30px +} + +.editor-toolbar i.separator { + display: inline-block; + width: 0; + border-left: 1px solid #d9d9d9; + border-right: 1px solid #fff; + color: transparent; + text-indent: -10px; + margin: 0 6px; +} + +.editor-toolbar a.fa-header-x:after { + font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; + font-size: 65%; + vertical-align: text-bottom; + position: relative; + top: 2px; +} + +.editor-toolbar a.fa-header-1:after { + content: "1"; +} + +.editor-toolbar a.fa-header-2:after { + content: "2"; +} + +.editor-toolbar a.fa-header-3:after { + content: "3"; +} + +.editor-toolbar a.fa-header-bigger:after { + content: "â–²"; +} + +.editor-toolbar a.fa-header-smaller:after { + content: "â–¼"; +} + +.editor-toolbar.disabled-for-preview a:not(.no-disable) { + pointer-events: none; + background: #fff; + border-color: transparent; + text-shadow: inherit; +} + +@media only screen and (max-width: 700px) { + .editor-toolbar a.no-mobile { + display: none; + } +} + +.editor-statusbar { + padding: 8px 10px; + font-size: 12px; + color: #959694; + text-align: right; +} + +.editor-statusbar span { + display: inline-block; + min-width: 4em; + margin-left: 1em; +} + +.editor-statusbar .lines:before { + content: 'lines: ' +} + +.editor-statusbar .words:before { + content: 'words: ' +} + +.editor-statusbar .characters:before { + content: 'characters: ' +} + +.editor-preview { + padding: 10px; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background: #fafafa; + z-index: 7; + overflow: auto; + display: none; + box-sizing: border-box; +} + +.editor-preview-side { + padding: 10px; + position: fixed; + bottom: 0; + width: 50%; + top: 50px; + right: 0; + background: #fafafa; + z-index: 9; + overflow: auto; + display: none; + box-sizing: border-box; + border: 1px solid #ddd; +} + +.editor-preview-active-side { + display: block +} + +.editor-preview-active { + display: block +} + +.editor-preview>p, +.editor-preview-side>p { + margin-top: 0 +} + +.editor-preview pre, +.editor-preview-side pre { + background: #eee; + margin-bottom: 10px; +} + +.editor-preview table td, +.editor-preview table th, +.editor-preview-side table td, +.editor-preview-side table th { + border: 1px solid #ddd; + padding: 5px; +} + +.CodeMirror .CodeMirror-code .cm-tag { + color: #63a35c; +} + +.CodeMirror .CodeMirror-code .cm-attribute { + color: #795da3; +} + +.CodeMirror .CodeMirror-code .cm-string { + color: #183691; +} + +.CodeMirror .CodeMirror-selected { + background: #d9d9d9; +} + +.CodeMirror .CodeMirror-code .cm-header-1 { + font-size: 200%; + line-height: 200%; +} + +.CodeMirror .CodeMirror-code .cm-header-2 { + font-size: 160%; + line-height: 160%; +} + +.CodeMirror .CodeMirror-code .cm-header-3 { + font-size: 125%; + line-height: 125%; +} + +.CodeMirror .CodeMirror-code .cm-header-4 { + font-size: 110%; + line-height: 110%; +} + +.CodeMirror .CodeMirror-code .cm-comment { + background: rgba(0, 0, 0, .05); + border-radius: 2px; +} + +.CodeMirror .CodeMirror-code .cm-link { + color: #7f8c8d; +} + +.CodeMirror .CodeMirror-code .cm-url { + color: #aab2b3; +} + +.CodeMirror .CodeMirror-code .cm-strikethrough { + text-decoration: line-through; +} + +.CodeMirror .CodeMirror-placeholder { + opacity: .5; +}
\ No newline at end of file diff --git a/static/fonts/HWYGOTH.ttf b/static/fonts/HWYGOTH.ttf Binary files differnew file mode 100644 index 0000000..20ac3e2 --- /dev/null +++ b/static/fonts/HWYGOTH.ttf diff --git a/static/img/favicon.ico b/static/img/favicon.ico Binary files differnew file mode 100644 index 0000000..7f391c2 --- /dev/null +++ b/static/img/favicon.ico diff --git a/static/img/marker-icon-black.png b/static/img/marker-icon-black.png Binary files differnew file mode 100644 index 0000000..23c94cf --- /dev/null +++ b/static/img/marker-icon-black.png diff --git a/static/img/marker-icon-blue.png b/static/img/marker-icon-blue.png Binary files differnew file mode 100644 index 0000000..0015b64 --- /dev/null +++ b/static/img/marker-icon-blue.png diff --git a/static/img/marker-icon-green.png b/static/img/marker-icon-green.png Binary files differnew file mode 100644 index 0000000..c359abb --- /dev/null +++ b/static/img/marker-icon-green.png diff --git a/static/img/marker-icon-grey.png b/static/img/marker-icon-grey.png Binary files differnew file mode 100644 index 0000000..43b3eb4 --- /dev/null +++ b/static/img/marker-icon-grey.png diff --git a/static/img/marker-icon-orange.png b/static/img/marker-icon-orange.png Binary files differnew file mode 100644 index 0000000..c3c8632 --- /dev/null +++ b/static/img/marker-icon-orange.png diff --git a/static/img/marker-icon-red.png b/static/img/marker-icon-red.png Binary files differnew file mode 100644 index 0000000..1c26e9f --- /dev/null +++ b/static/img/marker-icon-red.png diff --git a/static/img/marker-icon-yellow.png b/static/img/marker-icon-yellow.png Binary files differnew file mode 100644 index 0000000..8b677d9 --- /dev/null +++ b/static/img/marker-icon-yellow.png diff --git a/static/img/marker-shadow.png b/static/img/marker-shadow.png Binary files differnew file mode 100644 index 0000000..84c5808 --- /dev/null +++ b/static/img/marker-shadow.png diff --git a/static/img/marker_background.png b/static/img/marker_background.png Binary files differnew file mode 100644 index 0000000..2c1f436 --- /dev/null +++ b/static/img/marker_background.png diff --git a/static/img/no-datetime.png b/static/img/no-datetime.png Binary files differnew file mode 100644 index 0000000..89d92c7 --- /dev/null +++ b/static/img/no-datetime.png diff --git a/static/img/no-location.png b/static/img/no-location.png Binary files differnew file mode 100644 index 0000000..c3108f2 --- /dev/null +++ b/static/img/no-location.png diff --git a/static/img/picker.png b/static/img/picker.png Binary files differnew file mode 100644 index 0000000..30679e2 --- /dev/null +++ b/static/img/picker.png diff --git a/static/img/response.json b/static/img/response.json new file mode 100644 index 0000000..ca66456 --- /dev/null +++ b/static/img/response.json @@ -0,0 +1,46160 @@ +{ + "code": "Ok", + "trips": [ + { + "geometry": "kdraGf`upLa@KVuAbCjAB@ANG`@CNCNCPADAHAHAD?J?F?J?L@P@D@FBBFDHHFLXf@Td@Vf@HLFJFJLPFHd@r@LPRZd@p@BDJNLRFFBFDHFLBDfAfCb@dAQPEDONSRKJMNKLGDABc@b@OPGHo@v@KFOJMFA?OFQ@MDOHMHKIALCFEFCBGDCBEBIBA@?DCF?AA@GBC?E@A?A?C@C@KDKAA@EHDZA?A@KHMAAA?@I}@aB\\`B]H|@A?@@PBHGBC?C??E[DI@AJ@JEBABA@?@?DAB?FC@A?@BG?E@AHCDCBCFEBCDGBG@MJHLINILEPANG@?LGNKJGn@w@FINQb@c@@CFEJMLOJKRSNODEPQDLb@|@?D@F@D@FFPBFBJHT@B@DBDFGBHHRXr@LRHLl@zAHPFL`@~@BFGDMJO]kBfBAAWm@[XGMFLZYVl@@@jBgBN\\LKBHBHDHBHDJP`@r@~A@D@B@@JTBB@BB@B@B@D@B?D@l@?F?D?DAJDDBPFXJJDRHLDRFVDPDPBTDTBF?F@F@b@?V?TAN?B?jCKBAB?B?B?BADAVIAW?W?OA}@?E?K?M?IB?B?D?D?B?B?V?Z?~BCRAtAAPHDD@D@B@PDz@@f@?DBfAB~@@FJA?@B?xA@?G?FyAAC??AK@DND?dDAD@H?JvB?D@J?J?jCDbA?F?JDv@\\dFHhAFdA@F@HBZ@\\Fz@H|@FC@A~@]@?v@[@FFCPfAHr@@DBTDTDXDZ@D@HVpBXpB@P@DBL@L^zCN`AALTFPFLFJF???A?A?A@?BA@A@ABA@A?A@CDBJKDCDAJGDADBKFGBCBEBCBCBA@A@?@?@@@?@@?BCBCBA?ADABC@ABA@A?A???AA?A?A?EBEDEBGDEFEDGHEHEHEJCJCHCHAHAH?@AF?HAJ?F?F?H@H?F@F?@?@@@@???@A?CCO?A?C?C?E?C?C?AAA??AAA??@A@AB?F?D@F?D?F@F@NBFBLBJ@L@L?HAH?HAJAJAHA@AFCFCHCDABDFJPNTLXNVHRFRDPDPHZFZJf@Fb@Jf@RfAP~@FXKDQFUJC@ESGYMs@Km@EOE[Mo@Ii@GWEUEOEOEMGOEKIQKOKKIMGKW^V_@FJHLJJJNHPDJFNDLDNDNDTFVHh@Ln@DZDNJl@Lr@FXDRBATKPGJEFb@Lr@Jp@Nz@Nv@Lt@H`@DXDPHd@FANIJEAI[cBz@]X~AJA@HvBzLBABAhAc@BADAJIJE`Aa@z@]BALGHC`Aa@BNrBhLBPBN~AbJBPbAa@DAJEDCFCRGBL?@VtA?D@A@?A?A@?EWuA?ACMPIDABCFAJG|@]HEx@YDCLGLE~@]v@[DARIQ}@o@wDAEEWGYWyAm@kDAGEUk@cDO{@CKESNGvAi@LEj@UPIXKHCp@YZKJEJENGDABADAD?B?B?GKGQEIEMEQEYEUGWKu@Io@OeAIm@?W?OBM@C@EFKHGjCgAPGLGRILILM^U\\MlAe@|@]TIRKLEZKjAg@HEJCt@Yd@Sh@SPGLG~@_@HCl@WLEJEpBs@RIREFGNOV]HK\\e@j@q@LOV]Za@dAsABCJOHIDGTYDIBIBIJBBQP_ADQEPQ~@CPKCCHCHEHUXEFIHKNCBeArA[`@W\\MNk@p@]d@IJW\\ONGFSDSHqBr@KDMDm@VIBBP`AxFBLJGBNPhAFZJp@BJBN@FDNBLBTBJF^BLBJDPLz@Nx@BNOPIJQTMRABGTDFBDpAbBJLFHtAjBHJDFxAlBHJDFvAnBFFFFJL~@nA@@HJMTqDfGOVEKEEADg@x@MPe@z@EJGJLPJLBBh@t@BDbDdEJLFHLPINqAvBABKRQTKRi@z@CDk@`Ac@r@CFAHAJIbAu@xIKhAAPH@z@L\\HNF~@f@vCbBB@ER?@o@hCCFERWAEFKRNNZl@Rp@Np@RlAJn@BZSLIHQXGTG`@Ij@Kf@[v@QPQPa@X?CMk@?EAIC@E?CACAB@B@D?BA@H?DLj@?BPl@Pp@]jBMFBP[LMFiAb@uAh@sAf@iAb@IDKDgA`@CKi@}CBQQgAmAh@VxAf@lCBREBKDOFE@k@Ta@Ny@\\KDIDaDnAwAj@EBMJ}@_AGGMOUYm@q@sAuA[_@]W[_@GEEEGEEAEAEAA?W?E?@S?S?UEwI?GAU?S?IEqE?W?Q?S@w@?Y?M?I?SAiC?i@?_@?I?C?Y?SICEBK??W?VQ?K@CAC?GA@XI?G?sA@u@BGBEBEFCDCDABAFCHAJ?JLr@P|@F\\F\\DXH`@KDIDAB?F@j@@x@@z@?xCEvAYpL?FAZ]tJCp@GzA?FAPAPu@pP?D?B?V?HAL?FAFCLCNEPGLGLININAB?D?B@DGPAFABCLCLAL?LQtGAJF?l@Fn@BTB@Ov@JEj@F?B?H?CTRBD@NBL@pAPx@JxATPBZDl@FjAN~@LNBx@HF@F?@L?@?Dm@fKCTJ@F?P@R@`CAn@CF?H?HA?H?B?D@FXzAJd@\\rBJh@bAvFZfBp@vD?@BLBNd@lCFXBPFb@H`@dArGZjBBJlALD@XBHb@f@tCv@bEFZ^nBX|Ad@bCLv@@DIBC@@BAB?DKPOZWh@ADIPGLCFA@A?A?EJcA}@GGe@c@s@o@SQe@c@GGSQsEeEKKmBrEgAlCAPUGsBg@i@MsA]YIUGWEOAOCO@{ALuBV{BViCRG@o@Dc@Cs@IOAALG~@OvB?JAJGz@LBOtBANMAEAgAMEA?JGx@CZ?X?N@PDVBNGRCJE\\GECAMEENCHCJGRET?HALKjBW~DCh@InAIlAMpBARARa@vGCj@AFAJMAALObCYlEPAVAJcBH@j@Fk@GK~A?FCXI@WDCb@S~C?FMlBIrAAHC\\APAZQfCCf@G`AAr@Cp@?RABAx@C`@AT?FAD?LEl@Lb@HXBF^pAFVBFBLBHb@dBHZNv@Pl@BLRt@Vz@FVH\\h@vBBJd@hBT~@HZDNPp@Nv@@FBLFf@DRAJ?LJvAB`@F^Jh@Lb@Pd@L`@Rn@HPHHb@rADN\\dATr@Pd@JJHBHB@?J?HCHEHKB[z@TNiAOhA{@UCZIJIDIBK?A??C?G@@LCNMBODc@Eb@CNOLMBAA?F?BICICKKQe@Us@]eAMNa@d@m@f@Q?O?]KyAs@oAi@GEGCc@Sa@QGEIC_@Qa@QIEGEa@Qa@QIEGCgB{@gBy@KG@EKGgAc@gAc@ICkAk@GAw@]e@SMECXGz@KAEl@Dm@J@]lEWvCAHAPATADi@pHGl@G`AAZGf@ADADADCLuBgA{Ay@UKECi@W[OOIg@YOI]QiDiBAAOIg@WQK_@S}A{@CAKIMG?Q?QAMAOCMCKCMYqCAKCOIy@UuBE]Gk@Is@?CMaAAMEa@CQe@cEGk@Ca@E[E_@KiAMoAAMO{AEm@Ec@Cc@AO?EAQCYAOEq@MuBGaAImAEm@Eu@?AAMC_@OuBEg@Ek@?AIgAGs@CQAYA[A]Aa@?]?[@[@Y@]@G@O@WBa@BYDY@QViBBS@M@K?M?K?M?KAKEmACeAEw@Cu@Ce@Cu@ASA_@Eu@PA?KAGAe@@d@@F?JQ@Dt@@^?DAD?DADCBABC@A@A@C@E@C?CAC?CACAWa@KQU_@GK_BaCEGMQWa@GGIKQSGIGIWc@wBeDU[KQKOKMMOKMKMMOKKy@w@eAcAw@s@SUe@e@SSACUSKKqBoBOQEC[YEE]UaAy@gA{@qAiAUQBI@I?E@G@E?C@G?G@G?E@I?E@E?I?E?I@K?M?MAM?_@Aa@MeCA]A]A]?_@?]?]@[@[@c@B_@B]D_@Da@D_@F[DUSMeB{@GEMEwBgACCKEOIw@a@KEKGECECEECAAC@Kf@gD@MIGGKYa@GEGEI?i@H]DA?A?A?AAA?AAAA?AEGCEAAACACAAAA?AAAAAAAAAAAAA?AAA?CAA?A?C?C?A?C?A?C?A?A@A?A?C?ABMMCiB_@oJ}AOIMCCBI@IAiAUQCUACAm@Gk@Gw@Mi@GMCG[E]c@}CMeAM_AAIEa@WkBAOe@eDAMAMSuAK{@Ky@CWMy@c@kDCUK_AYmBMq@G_@K{@AECQAIAKAIAEAG[gCM{@AEQeAO_AUwASAyDbAm@Po@NIBE?E?CAoAm@_@SOI{@c@GE_@Q_Ae@wAw@MGFW@GRy@F[j@kCBOBG@INq@H[Pq@d@sBFW@MFQVy@@GT}@@OLo@@ERw@DQp@aCMKe@YTu@GOFNUt@d@Xa@nAOt@[rACHIDAP?RMCEB@VA^CZIx@GPALGVe@rBQp@IZOp@AHCFCNk@jCGZSx@AFGVIZAFi@rBEXGd@AFCPO`AE\\ObAObAMdAG\\AJCJOlACJAJCVa@|CCLEVCVEXWfBMx@QpAIl@[`CAJMr@Q~@Mf@Mj@ITMb@ABCJJJXTBCHHB?VN@BTL?BUO?BTNJCXT`@\\f@\\B@EHQTPUDIBBFBMPk@t@MNEHQRc@l@[`@GJ[`@[`@QTEFOREFEDIJGHEFSVEFk@r@k@v@y@dAm@x@IHY`@KLCBE@EBKBg@LGBG?E?YGGAACKMSd@_@v@MXKVa@x@eA~Bi@hAq@|Au@fAD`@AB@@?@BBAD@BB@BAFA@GAF?B?B?BC@C@IBE?E?CC?C?C?B?BBB?RSDUDOFMDSJKWMYUk@[q@GMEG@I?GCYCQGQIOSe@Q_@IQIQQa@MUEM[ZIHy@z@_AbAEBg@l@c@j@GHEDW\\QRIHq@n@yArA{ArAGDMLOJe@ToB`AUNKMg@i@IGy@}@OSi@i@cAiAG?MOCCAAA?C?A@A@ADS`@o@jBEPM\\GRg@zAGRO^_@lAOb@CFEJKVAFCDKZAd@?L@RI@GDFEHANvBFn@RnBj@hAP^|A~C@DDJDHfDpGDLGHQRsA~Aq@t@HRFLzAtCxApCn@nAf@`At@~AHNR?D?J?Bj@?H?F?FErACnAAJ?RI`C?PPA`FKdEKN?l@Aj@AD?D?F?BA^A\\ALA|BA`@Ab@CB??L?^dAC?J?b@?c@?KeAB?_@?MC?c@Ba@@}B@M@]@_@@C@G?E?E?k@@m@@O?eEJaFJQ@Cj@IlDAV?LIjEAXCnAGfBAVGzAALAV?NK?]@e@@SHQNMVG^EVCXCJGNSASAQ?e@BUDQFOJ]Va@j@q@jCGVAb@?~ACRGNCDUlA?rAAPQFE?MFMNOHQ@QBIFGHGLE@GBx@pG?`@DN@LG?SCSAM?G@E?IBIBMFKFSNIJEDC@g@RE@C@G?G?C?C@E@C@GDGFQTCDMLmBt@sAf@QNONKLOVSLYJ[PE@C?C@EAM?a@LC@C@a@LgA`@OFc@POJKNKVSz@KV]TsBp@sBv@oBr@sBt@{@Xm@PIB@\\Db@HhAPvA@J@FLhAThBVlBNtAVvBh@dER|Ax@~GD\\PvAD`@Bf@Dj@@Ze@|ASd@Qb@u@vBe@tAg@rAu@nBs@dBmAhCc@fAO`@Mb@eBhGK^K`@}@vECHCHGDGDG@GAW@FFj@r@Cb@WlA_@jBe@|B]jB_@fBUbA[~AEVUbASt@Qr@QNK@YBQ?GbAMdAOp@Wz@a@bAa@v@m@`Ao@|@q@j@c@VQFWJ_A\\WJ@MBOO{@Gc@Ak@Ea@I]YyAIk@Eo@Cw@B}@y@EYDUCGCFBTBXEx@DC|@Bv@Dn@Hj@XxAH\\D`@@j@Fb@Nz@CNALULo@^w@x@EJa@t@m@|Am@zAKXGP_A`CaAdCeAnCcAzC{@fCYv@[|@[t@aAdCSb@s@jB_A|BELUKQEQCO@OFMFIHIJILWr@MLKHQJMFSHKGKEMCKE_@I]EUASAM@Q?Q@QBODOBODODOFQHOHMJ]V_Ar@GF_Ap@aAt@{AlAk@d@c@XIFGDYP_@Ry@^c@N]LUFmAXg@Lq@NKBiBb@kBd@gAVYFQBMBE?G@G?GAOCCAIAMGA?MGIZKb@YfAGRCVCPCRA`@?`@BlAFzA?\\?`@CZEZI\\IX_@r@o@hAm@bAU`@I@C?EAA?G?KAIn@ADGb@A@ObA]tBObAAJAJANAX?VDvB@fA?d@Ap@Cr@?B?XCnAC|@?\\EnAC~@?L?TAFCbAARC`@ANIz@E\\ALUEaAQMCMCCLAN}@tEa@bBaAzCcBlGCLGPaDhMqBdIc@|AUj@U^g@|@i@v@MEG?C?B?F?LDh@w@BJLn@DhAb@lAXnAANCHKFKFMDKDMJIHIJ?HDP?H?PEFRt@B\\R@RLd@~ADJ\\]TWPSRTRPL?DDLDh@Jb@JB@p@Nf@F`@Jx@NhCl@LBh@Ll@Nx@Lj@Hn@@N@b@Bh@Fz@Rb@Th@Xd@NJDZL~@Rj@NB@F@PBVFn@\\^TTLV`@T`@NVNVtA|BlApBRZJP~@`Br@jALTj@dAv@tAtAdC\\j@Zd@FLb@t@Zp@^v@rAfDDLZz@Tt@BNPx@HX`@bBH^^nAJVJPJRLPJLLLRLHFFBNHLFVJd@Rx@Zz@\\NFi@rCMt@g@rCOv@Mt@g@zCcA`Fu@`EOv@_@hCSzACTWtB]tCWbCk@`FE^CL?DCLQ`BGp@AHCd@El@CZGn@zBXI`CJ?J?d@?z@BF?j@Fd@DLBr@Lf@H`BZz@PjATNDfA\\x@\\RHn@VDB\\LVJHDt@ZPFj@TRHp@VD@p@TB@F@b@NND~@RFBPDTDNBv@RVDTRf@Jx@P`ARr@N^?r@NTFXDZDZ?Z?tKm@PA\\Cd@CF?PAPA\\CJ?H?^?jA@|D?tB@b@?bB@~AAlAAzB@J?x@?P?b@@@?@?t@BN@T@d@DtAPH@bBRf@Dn@FJ@VJTDd@D^B\\FZFXHXNXRZTTVVXf@l@@BJJTTVVXPVL`@LtAn@HB@@HBfDxA\\NtAl@n@Xh@Vf@TnB|@JDbDzAjB|@jAj@`@NZJlAZl@PNDNBTDTDjAJRJl@\\XNDBHFDBDB`Ab@ZLPHRFPDRF^Hz@PnAXt@PhAVhAV~A^b@L~@Rj@LRF`ARhBb@hDv@bB^F@hB`@HBJ@D@T@H@J?r@DJ?jAF`AFBVN~C@\\?^?^O|PAZ|BDFXFZJ^L`@Rh@HRN\\JVLXLZlApC~@xBHTHZBX@XBVh@bD?HBPLFdChAbBv@NF|@`@JFd@RD@D?B?F?F?RADADA~@c@DCLIJE\\OHCNCFAB?B?F@@?FBJDZp@l@pAJXHVHTVx@BFLZDT@DFXFZFZBZB\\D\\@\\Bb@Bf@@j@@h@@v@@f@?j@?p@A~@Ap@?n@CnAAf@?`@?^@\\@X@P@PDb@D`@D\\D^Jj@DVBR@VBR@T?Z?V@nCGl@Gf@KfAGp@CVAD?D?D?DAD?FAFAFAHAFADCFAFGZAH?D?F@FBH@JTb@DFHJHFHDJFVHr@P\\LZRJFNJLJJRDJFPJZHTFVFTNt@TdAz@xEBp@?ZAXATCXCRETK`@YjAGRETCRCNAR?N?P?ZHjDBb@BTBXDZFVHXHTJTJPJPNPNPNLTPPJPHPFPFTDZDxB\\v@JrAPRDRFRHNHPJLJLJLLJLJNx@lADHP^NZFNTd@Rd@BJHTHTDHL\\L\\HXJZL`@Rz@Lv@Hr@Hp@?JBj@B`A@p@?\\@`B?hA@p@@n@?L@T@j@DhABdA@R@^?N@^Al@EnAEpAAf@?f@?d@?J?^@r@DvA@`@?D?V@`@A`@A^Ad@Ev@Al@GfBMrCEt@Cp@Cn@Aj@An@ItFCfB?p@Ah@@T@V@RBR@PBPDVDVDZ@FBRBXB\\BZBj@@bA@t@@x@?n@d@?vBE\\?b@C^A^C^C\\?Z@V@TBZD`@HXHD@\\J^L`@NPHPH^RNFh@XrAr@`D~ArJ`FBBBB@BBB@B?D@D@D@RD?D@F?D?D@F@D?F@FBD?DBD@D@FBHBFDf@h@DDBFDDFHBD@DBB@BBFBFHVBFBFBHRv@Fd@BJBNBJBLBJ\\fAJ^HXJ^Rl@vAfEH\\`@nAPn@Nf@FPDLDJ@BFPFHFLJNNVNRPT?@NTNRJVNVNTXb@pBvCv@hAFHLNRVRRTVVT^\\hAbAx@t@FF|@|@~@~@DDfGbGRPRRRPPNTPVPVPTLRLTJTLTJTJXJVJ^Jx@RLDnAXz@PZFZD\\FfALRBR@T@T@T?TAVCZCVCVEZIXITIVKVKx@_@PGPEPEPEPCDAVCpAIrAIfAIRAR?R?J?D?P?R@R@bADl@DR@jBJp@@?XAbC?\\BnH@|B?X@V?V@X?H@L@T?RBT@TBR@PBTDTBTNbAF\\FZDXFTFXFZFRJ^J\\HTJVHVNXP\\PZT\\TXTVXV|ArAr@l@x@r@RRZ^|@nAb@p@v@pAr@fA`@l@v@nAh@z@T^`@p@Xb@p@jADFLRhBvCrAvBzAbCRXhBjDzCrF|CtF^p@R^dAfBZj@Zf@Xb@V^PRNTx@fAz@hAbBzB`@j@TZBBZ`@nA|ABDTXl@p@LNLPLPLRLRHNJR@@DJFNHNFRHRHRBJDJJ\\FTVv@Nb@HRDLFNFPn@zAJVLTLVJVLVJVNXP^x@xAn@fApFnJlBbDNZNXLVLZN\\Pf@Pb@Nf@Nd@L`@JZFVFRDPDPFTDTDVDVDXDZBXB\\D^B^@\\@Z@Z@\\?\\?ZAzB?lAA`@?pC?Z@X?\\@`@B^Bt@@ZB`@B`@h@vHD^BZB\\j@jFlAdLJx@@LP|ALrAFh@BXZfD@LFj@Fh@Fd@Fb@H`@H^H\\`@`BH\\FVHZF\\F\\F`@Fh@PrAFl@BLBJ@LBHBJDJBJDJ^~@Rf@FNFLFJDJh@lAhAfCj@nAvAbD~@zBfAbCb@dAzAbDZr@LXHRl@pAr@|AXn@`@z@h@hAZp@z@nB`AtBhAcAFGHEFEHEDCDCFCFCHCFAHC\\IDAZGHCHCFCHCFEFCHEHGFGFEHIFIHKFIFIR[@C^i@^o@BGJOHODMFMDKL_@`@qANe@LYJUNUPSPMLINENELAJA@?AcABMCL@bAA?K@M@ODODMHMe@COCSUsJCu@Aw@Cm@Aw@Ci@Ak@Cg@Eg@Gk@c@eDWkBGi@Eg@E_@A[AU?S?Q?S@UFyC@k@@]?U@W?[@_@?c@@{@DmD@c@RiS@s@?W@S?O?QAQ?OAQ?MAKAMAMCOAQk@mEg@_EOeAC]Ee@Ec@GkAc@aHO}BIDKDqDdB{@`@kBz@g@TOFMDOFKDAGAGAECGGIGIGI_CeCSWMOMWGMCMAMAQCg@IoBA_@?_@AWCUCSCQCMEMGMIOQWQOc@c@WSWYSY[c@]i@SUSUOKMGQEOEOGKGOKMKKMOSMQKSs@mBCOAO@Q@QTaCNuAD]f@wEDa@Fe@Fa@F]F]H_@V}ABMHc@H[DYFYFYDYD]B[D_@B[?U?YASCSKy@E]E]CWO{BQsBGs@Ei@AGEe@E_@Ia@GYGYIUi@aBYy@e@{ASk@IUACM[MWIOKKIIIEMEKCQEOGMGMEMK}@k@EEMIMMMKIIKMECSW]c@uCuDOOQMQIWIuAc@RoAb@qC^mCZkBPoAL{AHmB?qA?y@G{@Kw@g@}AI[eAqC[y@k@uAAE_A{BGQMYUm@Ia@AEIqA@}BBuGHiDk@C{@MwBg@o@SFw@HeBB_@FuAHmCBgAFe@L_AXkATq@\\w@x@sAz@sABC^aAHUb@aAPc@^g@Zi@OeAMu@IQEMWY_@]{AiA]a@Oc@EOKo@Gy@?C@e@Dk@Hc@Hi@Hm@@Q@KC_@E_@iBsCEGEGEEGGEEGEWSu@k@GGIG[[?I?G?GAGAEAGAGCGCECGEKGKGIGIIKMOg@i@EGEGEECGCGCGCGCIAIAIAKAG?K@I?K@OBQ@M@MNaABQBSBUBS@M@M?M@M?K?MAOEmAAO?M?O@K?M?K@I@I@MBQBOBOBQBQH]F]H_@x@{DDOBQPeABULo@BODQNs@d@aC~@mEDYDUDUD]Hy@Dw@?K@_@@SBWDUH[L]Ra@^o@RYNUJSJODKJWPs@He@BS@EB]Dk@?ID}@Bu@@M@O@I@MBOR{ADSBSHk@BOBM@OBQDc@BYFs@BMJaA@M@K@M@M@M?MFaB@a@@M?M?M?K?K?M?IAI?KAIS{CAMAO?MAM?OAO?K?M?K?I@M?I?K?I?I?KAI?IWmDAK?K?K?I@K?K@I@I@K@I@IBKBKDKlA_EtAoENg@x@eCl@oBHYHWDOBMDKBMBM@K@K@K@MBo@BUBk@Bi@?AJ}B@M@QHeCBk@@g@FwB@[@O?Q@g@@a@?I?KAG?IAGI{@?IAIAK?IAM?MAM?M@O?K@K@IPs@@I@I@I@I?I?I?I?MG}@AYAWEuAAUAQCSAQCSGk@CSCUC[A[Ca@Cc@SwDCg@G_AAI?M@G@G@GBIFSBEFMCCEEECEECCEEGGCCUWOQIM{AeBMQIKGIEGAAEIEGEICGACEICGEKCKEKCOCOCMCOCM?EAEAG?EAE?EAG?E?GAG?KAG?KASAo@AKEkAC}@Cg@Cc@GgA?EAI?ICQAMAGAOCOCMEUAKCKEOAGI[IYGSGWCICKESa@gBQu@G[IYKg@CMEMCMGMEKEKEIGKIKk@{@c@k@S]Qc@GOGMQ[ACCCEKIMKQJOHMFGDGBCBCBEDEHG`@]HIHGFIHIFKDIFKDIDMFMBKBKBKDW~BmGHUHSJYJWJULYR_@JQLSJQLQLOLQNQJMJKHGJKJGt@g@JGHEHENGTINGNENGPEPENC~@SNCNELGLGNGLINININKLKNMLKJKJIJOJKHMFKFMDKDKDMBOBMDM@MBM@M@M?K?M?O?KAOAQAQCQCQIq@CSCQASCQAQ?SAQ?S?S?S@S?S@S@S@S@O@QBQBQBSBSBUPaABSBS@QBS@U@Q?U?S?S?SAUASASCUCUCQAOCOEQCOESESGOEQEOo@qBGOEOCOCSCQCQASAUAQAQ?S?O@k@?U?U@U@U@U@QBS@UDSBWDUBSDWFUR_AF[FYF[F[F[D[F[D[DYBYDYBYD]@[B]B[?[@Y@Y?W?]@c@AcD@{G@Q?Q@S@S@QBQ@SBQBQDODODOFOFMFOHMFKHMHKFId@k@HKHKLOJMHOHOLUzAeCLUNSJQNSLQLQZ_@FGFIFGFGFGb@_@HGHI`@a@HGHGHGJGJCJELEJCLAHAJ?J?J@HBJDd@PHBJBHBJ@H@F@L?Ee@KyAG_AAUTE^ED?HAHAB?rBM|AMh@E?H?FBd@@B@DDLBFDH@B?@BBBDDD@BvDhFwDiFACEECECC?AACEICGEMAEACCe@?G?ITAAM?M@O?OHwA@M?O@QAa@CmBj@In@Kr@KdASbDw@LEJEFODMDc@BMBMBMBKDKv@qBDKBMBKDMDU@KBK@GNkA?IAuA?k@?U?W?Q@W?WBa@D{@@a@JcB@S?Q@Q?O?M?O?MAKAIAGAIAGCIEICGEGGGU[e@m@qA_BMQ]_@KQcAuAP[DKDKDIDIf@aAHQJS]]?Gr@{A_CaCJk@CACC}@_AEEGGIGGECEEEEGCCCEyByBsBsBACCC?EAC?EAE?CFgCBk@@u@@G@I@G@EFQBGDMCCKGIIKICCEEGIIIGGEEEGIKGEIMGGASCICIGMCMAIAGCK?I@G@GBKM?GAK?C?E?O?UAM@q@?KAG?S?S?OAOCQCOCMEGAIEGCGCOGMGMICAMIOKGECCMKGICCECACIKIKIKIMGMIOIQIQISAEGMCISg@EGEISe@CIOYO_@CIQ]CGiAwBQ]Q]Yi@IQIMq@sAEIQYiAwBe@_Aw@{ASc@S_@MU[m@KQaAeBEIAAGKEIGGGGSUGIWWIKmBiBGGIEOKMI_B}@GEIEKIMIm@c@IGIIMKOMSSQSUUSUSU}AmBaAkACCMOKMMMMMOOOMcAaAg@e@{AsAi@i@?A[YaA}@GIKIo@m@_@]IISS[YEECCAAAE?EAE?GAE?MC@CAC?E?C?EACAC?CAIAYEg@ICA_@EEe@AQGm@Ec@C]CYEe@Q{BEk@AMAUAMAGGy@Ew@Gu@I}@QkBGc@Ga@YsC?GEWGm@QmBQmBe@uFGq@WqCW_DCYCYCWCYA]GgACYG}AM{BAUAQAQAQE[CWK{@E]C_@C[Iy@ASCSC[Gs@IaAOiBIoAC]AUAW?U?U@UBUBSBSb@{BJs@Hm@@W@a@?a@Ck@Gi@Qu@GWK]Oc@GUIYESESGWCUCW?GAOEe@[}F?IMmB~@cATY`C{CRUJMPWNWNYHYHSr@aCPk@DQDOv@oCBMZcABKV}@FSFQHSN_@BGf@kA~@{BJS@AFMLSNULQNQNORQVSVQTORMLGRIRIz@]FAp@UHCJAL?J?J@HBJFLHVTHDHDFBF?H@d@APAHALCJCJCHCZIJCJCASAECUC[Ku@]kCCYCKFA@ADCxBgB~@y@lB}AJKHIHOLQSUOOAA@@NNRTMPINIHKJmB|A_Ax@yBfBEBA@G@E_@]mCCUG]CQFCFEBE@C@E@GAIAIAGAAACCAAAC?CAE@E@GD?EGSGUIWk@mBGQGSIOGOMSMUy@qAFKHMxCkFIOGOIOKOMUWa@IBK@OAQAOCOGMEMKOMKOgCqDYc@}@mAW_@Ya@[e@W_@S[Q[OWMUS_@IMKIINMRk@z@UZEJEHEHMKEFABAHADCD_@`@STABEDGHEJCLALCNA`@ALCLCLELGNMRMGKEICI?G?AWAWAWCUCMAGEUIWJG@ADGl@_ABC@C@E@E?E@E?EAE?CAEAEAC?Ak@gAj@fA?@@B@D@D?B@D?DAD?DADADABCBm@~@EFA@KFHVDT@FBLBT@V@V@V?TARARCRCTETERA@GRGNIPKPILMNON_@`@IH[XQRQRQRMPKNMPMTKTKTMXkAzCKVKZIXGXGXEZEXE\\CXCXATK@E?E@UBQBODMHYNmC`B[PsBpAe@Xc@VYLYNOFGBYLIDg@P{CbAYJ_@NODKFCMGUEa@Aa@HsAPcAyBg@sB_Bi@a@U]EUEUA_@D_@LONONWDQF]s@k@ICG?GAK?K?G?I?AjAA`@Q?I?u@L]VU\\Sp@Ov@AL@MNw@Rq@T]\\Wt@MH??U@OE?iHeDCCCCAE@Ef@iCf@aCFUQKQIDMl@cCFg@@a@Cq@Ac@@YVsAXaBBIDIDG?ADCHCPEJCJEHEFGf@e@BGBA@CHKCMG_@Wg@C[?ALaAF_@H[J[R_@\\o@TYr@g@d@[^_@RYXq@No@FUGSCIGUK]IYAECMCSC_@A[A[?Y@Y@YDUDWZyABKBIv@qDBMGEq@[MGSIOKCAKGMIUQe@a@e@_@OOQOuB_CUWuB}BCCC?I?AWGuAKeAGc@CQAKIg@Oo@Ia@k@cB_@y@IQMUw@mAk@o@QQQO]Y]W]SYSGEJGNHOIKFSMN[BEVg@Rg@Ve@BERc@N[FIDKp@yANc@Pa@J]FKDKZs@N[Te@DIlAcCZ{@`@mA`@kAJYDOTk@FM^m@|@qALO`BaCPYLQBEBGR_@DGNWJUFKBGRa@N[DIRa@@EHSHUHUFWFSDYDWDS?CBYH_AFcAFy@Fs@\\qE@MD}@Bk@Bk@?k@Cs@Ci@Iq@Ie@CWGi@?MAK?U@O?G?GDa@Hk@X}@Ti@b@_Ab@s@l@{@PUDEnAqARSNMh@i@@ATUHIBCh@k@v@u@~@u@\\WLIDJDDJLV`@^h@n@~@^l@Vf@JVJLHJl@h@Z`@n@~@BKPg@n@{Bl@qBFSDQFBtAz@~@l@DDGPHFHBD?B?B?@ABC@A@C?C?E@A?C@A@C@?DAB?@?BABA@A@A@E?E?E?E?C@E@C@ABAC@A@ABAD?B?D?D?DADA@A@C@C@A?C?E@A?ABA@?BA@?D?BABA@CBA@C?C?E?ICIGFQEE_Am@uA{@GCFQl@yBDM]W{B{AGCECyA_AYSWSCCGCKWS]IOCEMC@q@?IE[?EAKAKIa@CSI_@I_@EK[k@AAcAcBiA}AW_@KOQY]m@S[Wc@KSYe@_@eA_@oAGWACI_@CYCWCm@Aw@@_A?A?I@OB_@F_APaBF[@MBK@GFSP[\\i@Xi@j@sAPg@L]L_@Tw@XeABIDMNc@Rs@Lc@FOHSXs@GG?AA?AAA?kBw@]Om@WCJp@Xq@YBKKGDU@GDEFGFG\\QTKTId@Od@IPEDADC@ANQSUu@u@WYqBuBS[KUCEOUHOEMDLINeAkAOGUKOQqAqAw@{@OQKKGGII[_@q@u@EEGI_@a@m@o@KKNWd@cAh@gA`@{@`@{@Vk@HW\\kAV_Af@gBv@qCJa@ZcAHYTw@Rw@Tw@b@{Ap@aC@GBG_Ai@aB_AMKeBaAe@YGCMKUMc@WBKPk@@CBA@CD?`Ad@FBX_ADOf@}AFULUPW^MLGrAzET~@L^HVTp@Rl@FQBIFSHS\\UHGJAJ?N?f@ZJBLBPJDBzAx@PJRJdAj@TLlAp@nAr@HDFQFOh@qBb@yABQPHQIDOJk@F]Ji@BKJg@Jq@n@cEF_@Da@B[D_@@Uh@TTH`Bd@h@RLHd@~@@@JPTX`@f@NNYv@CF]bAQh@Pi@\\cABGXw@NYn@sBNg@DQZR\\PZPzBjAFSZcA^oA?CBIHUFWFWVaA\\qAV_ADODKwBeAa@U[YWUk@q@a@e@]g@Yi@Ui@Kc@Oy@Km@SqAM_AKu@Gu@OoACUHSJWJc@DS@GNg@Ps@DU@E@O^WX[l@k@FIR[f@_Ap@kAh@_A^q@JSHWTmAXeCv@VhA`@p@Rf@PbBj@|Ad@jBp@HDVHb@NPFTNXTLJZZJJp@l@~@x@r@x@^l@?@zAzBbA|AT\\|@rAh@v@BFPVT\\PVb@t@^i@R[f@w@T]PQl@o@\\[nAgAVUbAy@XYLSDHRVh@r@VXNF^Lf@NF@~@XdA^VL~Ar@RHf@F^F@?f@BNAb@AF?XBXBVHFBTH^LXBTAVIVOV]Vg@HKJOn@f@jAv@j@b@\\Tj@`@`Ax@|@l@BB|@p@NPFRDd@@TVEl@G\\E\\GXGb@IVITIRKRKROTSPQTURUd@m@`@k@\\g@LQJQrBqCt@kAxB_DvAoBFIJOLSLSR[P]L[LYVm@Z}@r@gBR_@pAgC`CwEd@aAFIDGFGFEHCHEHAJCJAJAJAH@R@vBd@lAVVFHBXFtCn@dB^D@ND`@HHBdATpG~AtA\\lAXtA^rAVRDNBb@JRBTDh@L@?zEbA~AZj@NhATv@N\\HD_@mAWsAYC?uA[QEiAUqDw@a@KgAU]Gy@QOESCICKCA?q@O{Aa@uD_AqD{@qA[GAWGFW?EAEAGCEW]EGEEIGcBy@aCmAEECECIGOCMCOCQ?S?QAOAQCOAOESEQEQMa@OY_@i@IKYe@MQY_@c@o@Wc@MQm@kAEIm@iAUa@KSMWo@sAWq@Mg@Ko@CQEi@Gc@Gq@AEK_AGWKc@c@oAACMYQa@q@iAIMg@w@q@}@c@i@CCGGGIcAmAMOCC]c@SWi@w@_@m@?AKQ{@{AGIOWEIYg@OW]s@??Q]kB}Ck@kAg@_A]u@u@oBWo@ISUq@CCMYq@mASY]c@CCWYEGmAuAGIYYa@_@q@_@e@UwAo@a@QgB}@u@_@SKQIKGMIw@m@q@i@QOYUSQGCECIAGCECGCAAECmAcAKI]YIGGGEGEECIUe@AAGMUi@Wk@MWMUOUOSOQQQQOSOQMaBeAi@_@IG}ByASMQOQQQQOQUYU[KOCEEIOUk@eACE[YSSGGECICE?IAI?E?C?WDQBK@YBMAOAWEc@Kk@OKCeAUICICOGWIQKINs@z@i@t@]h@EHs@hASZMf@Qr@Mn@uAoA_@Yc@_@UQTPb@^^XtAnALo@Ps@Lg@R[r@iADI\\i@h@u@r@{@HOo@e@DO^aBlCwKJc@BITaALi@ZeA@EDOFG?UAaDFAt@AP?X?IWGWEWEWG]C[E[C]AQAS?y@@IAa@?WC}C?O?MAK?MAKAKAICK?yA@K?I@I?K?K?MAUCw@@E@E@E@E@E?E?E?E?G?EAEAEAEAEACAECCAEECACCACCEAO_@EEGGEECCCECGAGIYEICIEGEEGICGEIEIEKGKGKGKEIEGEGGIEGEGIIGGIEIGGGIGGEGCECCCICGEICGCECICGCGAGAGAICIAIAIASASASCSAUAY?SAO?O@_@?M@O?I?K?O?Y?S?Q?QAM?MA?N?D?HKREHIDAA@@HEDIJS?I?E?OK?KAMA[AUC[Cc@I_@I_@Ki@OSIQISGUMi@WSKUMUQMIQOSSOMa@a@s@s@UU]c@GKGIGICEEGOWMU{@{AYm@O[GOWm@KYIWIWCWCK?EEQMi@G]I_@AGG_@G?E?E?E?]@K?CmCAmB?EAsBAeC?QAcACeF?Q?OA_AAkBAw@?w@AeA?UAaBAO?MAkFA{CgDBaDDcDBeDDcA@G?I?aAHK?Y?a@@yA@E?S?O@E?uC@aDDyCDI?S?cEDcCBeA@S?yBBO@a@?O?Q@OBA?KBO@ODMDQFMFOFMHOJMHMLKJMLKLKNILKPINwAdCqBnDKHKJMLMRc@v@CFMROOQSCEEGCEAGAGCGGc@AI?KAM?MAsAAM?KAOAGEW?k@e@c@aCyBEGCGCGEMCGEEkDeDQOIJKJa@^kAfAG?IBGBs@j@EIC@CAGBIBCFBGHCBXC@EDEDAFMl@a@lBAB]fASOOMOE{CsBr@cCs@bCzCrBNDNLRNOf@VP|@n@RLDF@?DHBJ@J@H?JA`C?T?RANANCXARCNCNCLELM\\EHITMPKRGPPLRLv@h@DDJFNL@@JJJJLLJN`@h@LRV\\HJZ`@`@d@FHDFLNKTsA`Dk@pACDCFQ`@MZCBMZaAzBw@fBCFIRGPINK\\KXeDhJUP]|@e@xAOb@Sh@Sh@Yx@KX[|@a@jAu@vB[x@EJ@Vk@|Ag@rAq@lBADCFCFGLMXo@`BGNIP}@`C}@|BENELEHAHCFI`@ET]bBCNCRERDLDH@@BNDNDRTrA@JZbBBP@DHZHTFRNb@HLDFJPJPLRPRRTVXTVZNPJRFJBNDNFCRDFLDMEEGQGGh@CL?DAFCLQrAMBy@N_Dp@G@I@DnA@LOEYGOIk@e@OOGIEJo@~AIPKIe@nA[z@EHGBMMCJIIw@s@yAcB}CrHMV\\\\b@`@LJDBJHTN`@PVL@@rAh@LF\\LZNp@TPFD@\\JLD`AX@?j@J^F`@HD@RDKTKbDMjFA^A\\?TAHAF?BADCFFHJ@@mAL??S?R?d@?f@@X?LNCH?D@D?hA_@H??D@FBn@@R@RFp@@LHj@LCFC@?ZGxAtBb@j@x@dAh@t@BDVZd@p@FHbC`DvAjBLPPVLPSFm@Vl@WRGMQQWMQJQ@I@I?E?w@?g@GCe@q@g@o@mA_BCMCUKBCWC[a@eEUoBAMQyA?C@C?CBCNKBCNMTSTWCUG]DYI@{C`@i@FKBOBC@KB_@J{@X[Lk@POBaA\\_@JOBE@ODMB[HKBC?E@SBgAh@aBt@g@TuAl@QJqB|@cAb@c@POBKDEBOD]NKBE?GAGCECAAIOCSg@aEQcAAGAKAILEk@}DLCMBa@{Ca@sCACOC?EKm@Ga@Ia@Mg@Mo@Os@ScACKIWK]Y}@Ia@FC[mAZlAGBe@mBS{@CO?MAO@MH_@b@gC@CDWDO`@_CRiA@IZcBHBBSH_@DUBOGGo@q@c@Ym@OOC]C_A?YAO?CN[fCAFS~@I^CLQp@CFKKF]\\qARo@@E\\qC@?AO?CJAH?FBRB?{ACGC?E@CB?FH??QIGC?AC@BB?HF?PI??GBCDAB?DGAAAAACAAWe@EIACAEGSW?C?A?C?eDn@E@i@HE@QDOBIBEQA??AAUMDLEESAAACAIk@RC@E?C@E?I@E?C?E@C@E?GBGBE@CBE@a@P_A`@A@C@A@C@i@iAWi@ISEKIMIOWk@KSUe@KUKTGPa@v@ADE@C?EACAECGCKG]S]SIEc@YKGKGa@UGCIC]O?GD@FDB@CAGEEA?FI?e@?k@E_@Ay@CWACBGBCB??CDBE??BCFCBCMAIEWI_BcAECMECFe@vAsAhEG?iAGACRw@Sv@@BEFG?IAcCKs@GG?Q`@KHIIGECCC@e@NcAXEg@Eq@IaBCy@`@J", + "legs": [ + { + "steps": [ + { + "geometry": "kdraGf`upLa@K", + "maneuver": { + "bearing_after": 14, + "bearing_before": 0, + "location": [ + -71.055561, + 42.368861 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 14 + ], + "location": [ + -71.055561, + 42.368861 + ] + } + ], + "weight": 22.4, + "duration": 22.4, + "distance": 19.2 + }, + { + "geometry": "meraGz_upLVuA", + "maneuver": { + "bearing_after": 111, + "bearing_before": 12, + "location": [ + -71.055504, + 42.369029 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 195, + 270 + ], + "location": [ + -71.055504, + 42.369029 + ] + } + ], + "weight": 13.5, + "duration": 13.5, + "distance": 38 + }, + { + "geometry": "udraGd}tpLbCjAB@", + "maneuver": { + "bearing_after": 202, + "bearing_before": 111, + "location": [ + -71.055074, + 42.368906 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 210, + 285 + ], + "location": [ + -71.055074, + 42.368906 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 105, + 210, + 285 + ], + "location": [ + -71.055446, + 42.368251 + ] + } + ], + "weight": 22.9, + "duration": 22.9, + "distance": 82.2 + }, + { + "geometry": "m`raGr_upLANG`@CNCNCPADAHAHAD?J?F?J?L@P@D@FBBFDHH", + "maneuver": { + "bearing_after": 285, + "bearing_before": 206, + "location": [ + -71.055464, + 42.368225 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 105, + 285 + ], + "location": [ + -71.055464, + 42.368225 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 210, + 330 + ], + "location": [ + -71.05651, + 42.368354 + ] + } + ], + "weight": 29.1, + "duration": 29.1, + "distance": 104.3 + }, + { + "geometry": "o`raGxfupLFLXf@Td@Vf@HLFJFJLPFHd@r@LPRZd@p@BDJNLR", + "maneuver": { + "bearing_after": 236, + "bearing_before": 212, + "location": [ + -71.056607, + 42.368239 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Commercial Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 60, + 150, + 240 + ], + "location": [ + -71.056607, + 42.368239 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.057398, + 42.367754 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 255 + ], + "location": [ + -71.058088, + 42.367243 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 150, + 225, + 315 + ], + "location": [ + -71.058446, + 42.366971 + ] + } + ], + "weight": 71.6, + "duration": 71.6, + "distance": 218.8 + }, + { + "geometry": "cxqaG|rupLFFBFDHFLBDfAfCb@dA", + "maneuver": { + "bearing_after": 230, + "bearing_before": 223, + "location": [ + -71.058545, + 42.366896 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Causeway Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 165, + 225, + 330 + ], + "location": [ + -71.058545, + 42.366896 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 135, + 240 + ], + "location": [ + -71.059463, + 42.366389 + ] + } + ], + "weight": 35.1, + "duration": 35.1, + "distance": 128.8 + }, + { + "geometry": "ysqaGxzupLQPEDONSRKJMNKLGDABc@b@OPGHo@v@KFOJMFA?OFQ@MDOHMH", + "maneuver": { + "bearing_after": 323, + "bearing_before": 234, + "location": [ + -71.059808, + 42.366213 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lovejoy Wharf", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 330 + ], + "location": [ + -71.059808, + 42.366213 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 150, + 315 + ], + "location": [ + -71.060168, + 42.366569 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 300, + 345 + ], + "location": [ + -71.061112, + 42.367512 + ] + } + ], + "weight": 56.300000000, + "duration": 56.300000000, + "distance": 226.4 + }, + { + "geometry": "k~qaG`dvpLKI", + "maneuver": { + "bearing_after": 32, + "bearing_before": 327, + "location": [ + -71.061294, + 42.367897 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 150, + 315 + ], + "location": [ + -71.061294, + 42.367897 + ] + } + ], + "weight": 13.4, + "duration": 13.4, + "distance": 7.7 + }, + { + "geometry": "w~qaGvcvpLALCFEFCBGDCBEBIB", + "maneuver": { + "bearing_after": 286, + "bearing_before": 32, + "location": [ + -71.061243, + 42.367955 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Paul Revere Landing Park", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 105, + 210, + 285 + ], + "location": [ + -71.061243, + 42.367955 + ] + } + ], + "weight": 11.9, + "duration": 11.9, + "distance": 35.1 + }, + { + "geometry": "c`raGjevpLA@?DCF", + "maneuver": { + "bearing_after": 286, + "bearing_before": 343, + "location": [ + -71.061503, + 42.368184 + ], + "modifier": "left", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 165, + 285 + ], + "location": [ + -71.061503, + 42.368184 + ] + } + ], + "weight": 7.8, + "duration": 7.8, + "distance": 7 + }, + { + "geometry": "i`raGzevpL?AA@GBC?E@A?A?", + "maneuver": { + "bearing_after": 345, + "bearing_before": 292, + "location": [ + -71.061576, + 42.368207 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 113, + 327, + 341, + 346 + ], + "location": [ + -71.061576, + 42.368207 + ] + } + ], + "weight": 10.2, + "duration": 10.2, + "distance": 14.1 + }, + { + "geometry": "aaraG`fvpLC@C@KDKAA@EHDZ", + "maneuver": { + "bearing_after": 341, + "bearing_before": 343, + "location": [ + -71.061612, + 42.368327 + ], + "modifier": "left", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 165, + 180, + 195, + 345 + ], + "location": [ + -71.061612, + 42.368327 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + true, + true + ], + "bearings": [ + 150, + 180, + 285 + ], + "location": [ + -71.06166, + 42.368495 + ] + } + ], + "weight": 41, + "duration": 41, + "distance": 36.7 + }, + { + "geometry": "cbraGpgvpLA?A@KHMAAA?@", + "maneuver": { + "bearing_after": 329, + "bearing_before": 257, + "location": [ + -71.061848, + 42.368503 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 285, + 315, + 330 + ], + "location": [ + -71.061848, + 42.368503 + ] + } + ], + "weight": 16.9, + "duration": 16.9, + "distance": 19 + }, + { + "geometry": "ccraGzgvpLI}@aB\\", + "maneuver": { + "bearing_after": 77, + "bearing_before": 0, + "location": [ + -71.061896, + 42.36866 + ], + "modifier": "right", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 78, + 180, + 190, + 198 + ], + "location": [ + -71.061896, + 42.36866 + ] + } + ], + "weight": 72.9, + "duration": 72.9, + "distance": 81 + }, + { + "geometry": "ofraGzfvpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 347, + "location": [ + -71.061735, + 42.369195 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 167 + ], + "location": [ + -71.061735, + 42.369195 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Commercial Street, Lovejoy Wharf", + "weight": 425, + "duration": 425, + "distance": 1018.4 + }, + { + "steps": [ + { + "geometry": "ofraGzfvpL`B]H|@", + "maneuver": { + "bearing_after": 167, + "bearing_before": 0, + "location": [ + -71.061735, + 42.369195 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 167 + ], + "location": [ + -71.061735, + 42.369195 + ] + } + ], + "weight": 76.5, + "duration": 76.5, + "distance": 81 + }, + { + "geometry": "ccraGzgvpLA?@@PBHGBC?C??", + "maneuver": { + "bearing_after": 196, + "bearing_before": 257, + "location": [ + -71.061896, + 42.36866 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 78, + 180, + 190, + 198 + ], + "location": [ + -71.061896, + 42.36866 + ] + } + ], + "weight": 21, + "duration": 21, + "distance": 24.3 + }, + { + "geometry": "cbraGpgvpLE[DI", + "maneuver": { + "bearing_after": 77, + "bearing_before": 135, + "location": [ + -71.061848, + 42.368503 + ], + "modifier": "left", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 285, + 315, + 330 + ], + "location": [ + -71.061848, + 42.368503 + ] + } + ], + "weight": 17.9, + "duration": 17.9, + "distance": 17 + }, + { + "geometry": "cbraGjfvpL@AJ@JEBABA", + "maneuver": { + "bearing_after": 175, + "bearing_before": 104, + "location": [ + -71.06166, + 42.368495 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + true + ], + "bearings": [ + 150, + 180, + 285 + ], + "location": [ + -71.06166, + 42.368495 + ] + } + ], + "weight": 17.7, + "duration": 17.7, + "distance": 19.7 + }, + { + "geometry": "aaraG`fvpL@?@?DAB?FC@A?@", + "maneuver": { + "bearing_after": 163, + "bearing_before": 161, + "location": [ + -71.061612, + 42.368327 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 165, + 180, + 195, + 345 + ], + "location": [ + -71.061612, + 42.368327 + ] + } + ], + "weight": 13.1, + "duration": 13.1, + "distance": 14.1 + }, + { + "geometry": "i`raGzevpLBG?E@A", + "maneuver": { + "bearing_after": 112, + "bearing_before": 165, + "location": [ + -71.061576, + 42.368207 + ], + "modifier": "left", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 113, + 327, + 341, + 346 + ], + "location": [ + -71.061576, + 42.368207 + ] + } + ], + "weight": 8, + "duration": 8, + "distance": 7 + }, + { + "geometry": "c`raGjevpLHCDCBCFEBCDGBG@M", + "maneuver": { + "bearing_after": 163, + "bearing_before": 106, + "location": [ + -71.061503, + 42.368184 + ], + "modifier": "right", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Paul Revere Landing Park", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 165, + 285 + ], + "location": [ + -71.061503, + 42.368184 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 105, + 300 + ], + "location": [ + -71.061314, + 42.367971 + ] + } + ], + "weight": 14.7, + "duration": 14.7, + "distance": 35.1 + }, + { + "geometry": "w~qaGvcvpLJH", + "maneuver": { + "bearing_after": 212, + "bearing_before": 106, + "location": [ + -71.061243, + 42.367955 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 105, + 210, + 285 + ], + "location": [ + -71.061243, + 42.367955 + ] + } + ], + "weight": 6.2, + "duration": 6.2, + "distance": 7.7 + }, + { + "geometry": "k~qaG`dvpLLINILEPANG@?LGNKJG", + "maneuver": { + "bearing_after": 147, + "bearing_before": 212, + "location": [ + -71.061294, + 42.367897 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 150, + 315 + ], + "location": [ + -71.061294, + 42.367897 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 165, + 300, + 345 + ], + "location": [ + -71.061112, + 42.367512 + ] + } + ], + "weight": 17.5, + "duration": 17.5, + "distance": 73.1 + }, + { + "geometry": "qzqaG`bvpLn@w@FINQb@c@@CFEJMLOJKRSNODEPQ", + "maneuver": { + "bearing_after": 139, + "bearing_before": 147, + "location": [ + -71.060966, + 42.367292 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lovejoy Wharf", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 135, + 330 + ], + "location": [ + -71.060966, + 42.367292 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 315 + ], + "location": [ + -71.060168, + 42.366569 + ] + } + ], + "weight": 40.8, + "duration": 40.8, + "distance": 153.2 + }, + { + "geometry": "ysqaGxzupLDLb@|@", + "maneuver": { + "bearing_after": 233, + "bearing_before": 143, + "location": [ + -71.059808, + 42.366213 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Causeway Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 240, + 330 + ], + "location": [ + -71.059808, + 42.366213 + ] + } + ], + "weight": 9.5, + "duration": 9.5, + "distance": 39.4 + }, + { + "geometry": "orqaGd}upL?D@F@D@FFPBFBJHT@B@DBD", + "maneuver": { + "bearing_after": 243, + "bearing_before": 233, + "location": [ + -71.060194, + 42.366004 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Causeway Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 150, + 225, + 240 + ], + "location": [ + -71.060194, + 42.366004 + ] + } + ], + "weight": 20.8, + "duration": 20.8, + "distance": 48.5 + }, + { + "geometry": "gqqaGl`vpLFG", + "maneuver": { + "bearing_after": 143, + "bearing_before": 239, + "location": [ + -71.060713, + 42.365801 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Legends Way", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 150, + 240, + 330 + ], + "location": [ + -71.060713, + 42.365801 + ] + } + ], + "weight": 5.6, + "duration": 5.6, + "distance": 5.6 + }, + { + "geometry": "_qqaGd`vpLBHHRXr@LRHLl@zAHPFL`@~@BF", + "maneuver": { + "bearing_after": 234, + "bearing_before": 143, + "location": [ + -71.060674, + 42.36576 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Connect Historic Boston Bicycle Trail", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240, + 330 + ], + "location": [ + -71.060674, + 42.36576 + ] + } + ], + "weight": 42.5, + "duration": 42.5, + "distance": 157.7 + }, + { + "geometry": "ykqaG|ivpLGDMJO]kBfB", + "maneuver": { + "bearing_after": 327, + "bearing_before": 233, + "location": [ + -71.062227, + 42.364932 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 150, + 240, + 330 + ], + "location": [ + -71.062227, + 42.364932 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 150, + 240, + 330 + ], + "location": [ + -71.062262, + 42.364973 + ] + } + ], + "weight": 36.8, + "duration": 36.8, + "distance": 103.8 + }, + { + "geometry": "kpqaGxlvpLAA", + "maneuver": { + "bearing_after": 57, + "bearing_before": 323, + "location": [ + -71.062691, + 42.365662 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 150, + 330 + ], + "location": [ + -71.062691, + 42.365662 + ] + } + ], + "weight": 1.3, + "duration": 1.3, + "distance": 1.5 + }, + { + "geometry": "mpqaGvlvpLWm@", + "maneuver": { + "bearing_after": 53, + "bearing_before": 57, + "location": [ + -71.062676, + 42.365669 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 60, + 240 + ], + "location": [ + -71.062676, + 42.365669 + ] + } + ], + "weight": 14, + "duration": 14, + "distance": 23.2 + }, + { + "geometry": "eqqaGhkvpL[X", + "maneuver": { + "bearing_after": 323, + "bearing_before": 53, + "location": [ + -71.062447, + 42.36579 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 240, + 330 + ], + "location": [ + -71.062447, + 42.36579 + ] + } + ], + "weight": 8.6, + "duration": 8.6, + "distance": 18.8 + }, + { + "geometry": "arqaGblvpLGM", + "maneuver": { + "bearing_after": 53, + "bearing_before": 323, + "location": [ + -71.06258, + 42.365928 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 150, + 330 + ], + "location": [ + -71.06258, + 42.365928 + ] + } + ], + "weight": 1.8, + "duration": 1.8, + "distance": 7.5 + }, + { + "geometry": "irqaGtkvpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 54, + "location": [ + -71.062507, + 42.365968 + ], + "modifier": "straight", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 234 + ], + "location": [ + -71.062507, + 42.365968 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Lovejoy Wharf, Connect Historic Boston Bicycle Trail", + "weight": 374.3, + "duration": 374.3, + "distance": 838.2 + }, + { + "steps": [ + { + "geometry": "irqaGtkvpLFL", + "maneuver": { + "bearing_after": 234, + "bearing_before": 0, + "location": [ + -71.062507, + 42.365968 + ], + "modifier": "straight", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 234 + ], + "location": [ + -71.062507, + 42.365968 + ] + } + ], + "weight": 10, + "duration": 10, + "distance": 7.5 + }, + { + "geometry": "arqaGblvpLZY", + "maneuver": { + "bearing_after": 143, + "bearing_before": 233, + "location": [ + -71.06258, + 42.365928 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 150, + 330 + ], + "location": [ + -71.06258, + 42.365928 + ] + } + ], + "weight": 8.7, + "duration": 8.7, + "distance": 18.8 + }, + { + "geometry": "eqqaGhkvpLVl@", + "maneuver": { + "bearing_after": 233, + "bearing_before": 143, + "location": [ + -71.062447, + 42.36579 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 240, + 330 + ], + "location": [ + -71.062447, + 42.36579 + ] + } + ], + "weight": 5.6, + "duration": 5.6, + "distance": 23.2 + }, + { + "geometry": "mpqaGvlvpL@@", + "maneuver": { + "bearing_after": 237, + "bearing_before": 233, + "location": [ + -71.062676, + 42.365669 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 60, + 240 + ], + "location": [ + -71.062676, + 42.365669 + ] + } + ], + "weight": 10.3, + "duration": 10.3, + "distance": 1.5 + }, + { + "geometry": "kpqaGxlvpLjBgBN\\LK", + "maneuver": { + "bearing_after": 143, + "bearing_before": 237, + "location": [ + -71.062691, + 42.365662 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 150, + 330 + ], + "location": [ + -71.062691, + 42.365662 + ] + } + ], + "weight": 39, + "duration": 39, + "distance": 98.4 + }, + { + "geometry": "alqaGbjvpLBHBHDHBHDJP`@r@~A@D@B@@JT", + "maneuver": { + "bearing_after": 236, + "bearing_before": 147, + "location": [ + -71.062262, + 42.364973 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Causeway Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240, + 330 + ], + "location": [ + -71.062262, + 42.364973 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 135, + 240 + ], + "location": [ + -71.062407, + 42.364903 + ] + } + ], + "weight": 26.5, + "duration": 26.5, + "distance": 108.4 + }, + { + "geometry": "qhqaGzpvpLBB@BB@B@B@D@B?D@l@?F?D?DAJDDBPFXJJDRHLDRFVDPDPBTDTBF?F@F@b@?V?TAN?B?jCKBAB?B?B?BADAVI", + "maneuver": { + "bearing_after": 209, + "bearing_before": 233, + "location": [ + -71.063337, + 42.364411 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Staniford Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 180, + 210, + 330 + ], + "location": [ + -71.063337, + 42.364411 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 105, + 180, + 315 + ], + "location": [ + -71.063412, + 42.364316 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 105, + 180 + ], + "location": [ + -71.063432, + 42.364006 + ] + }, + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 30, + 105, + 195 + ], + "location": [ + -71.063419, + 42.363913 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.063863, + 42.362222 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 90, + 165, + 270, + 345 + ], + "location": [ + -71.06377, + 42.361288 + ] + } + ], + "weight": 95.3, + "duration": 95.3, + "distance": 368.1 + }, + { + "geometry": "itpaGfsvpLAW?W?OA}@?E?K?M?I", + "maneuver": { + "bearing_after": 85, + "bearing_before": 163, + "location": [ + -71.063724, + 42.361171 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Cambridge Street", + "intersections": [ + { + "out": 1, + "in": 4, + "entry": [ + true, + true, + true, + true, + false + ], + "bearings": [ + 30, + 90, + 165, + 270, + 345 + ], + "location": [ + -71.063724, + 42.361171 + ] + } + ], + "weight": 40.2, + "duration": 40.2, + "distance": 69.6 + }, + { + "geometry": "mtpaG~mvpLB?B?D?D?B?B?V?Z?~BCRAtAA", + "maneuver": { + "bearing_after": 180, + "bearing_before": 88, + "location": [ + -71.062879, + 42.361191 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bowdoin Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.062879, + 42.361191 + ] + } + ], + "weight": 43, + "duration": 43, + "distance": 175.1 + }, + { + "geometry": "sjpaGvmvpLPHDD@D@B@PDz@@f@?DBfAB~@@F", + "maneuver": { + "bearing_after": 220, + "bearing_before": 178, + "location": [ + -71.062842, + 42.359615 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Derne Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 165, + 180, + 225 + ], + "location": [ + -71.062842, + 42.359615 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 105, + 270 + ], + "location": [ + -71.06306, + 42.359466 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.063556, + 42.359428 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.06395, + 42.359408 + ] + } + ], + "weight": 41, + "duration": 41, + "distance": 130.8 + }, + { + "geometry": "cipaG|vvpLJA?@B?xA@", + "maneuver": { + "bearing_after": 168, + "bearing_before": 262, + "location": [ + -71.064314, + 42.359376 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 165, + 240, + 345 + ], + "location": [ + -71.064314, + 42.359376 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 180, + 270, + 345 + ], + "location": [ + -71.064299, + 42.35932 + ] + } + ], + "weight": 64.3, + "duration": 64.3, + "distance": 59.4 + }, + { + "geometry": "yepaG~vvpL?G", + "maneuver": { + "bearing_after": 78, + "bearing_before": 180, + "location": [ + -71.064318, + 42.358845 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 75, + 180 + ], + "location": [ + -71.064318, + 42.358845 + ] + } + ], + "weight": 3.1, + "duration": 3.1, + "distance": 3.4 + }, + { + "geometry": "yepaGvvvpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 79, + "location": [ + -71.064277, + 42.358851 + ], + "modifier": "straight", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 259 + ], + "location": [ + -71.064277, + 42.358851 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Staniford Street, Bowdoin Street", + "weight": 387, + "duration": 387, + "distance": 1064.2 + }, + { + "steps": [ + { + "geometry": "yepaGvvvpL?F", + "maneuver": { + "bearing_after": 259, + "bearing_before": 0, + "location": [ + -71.064277, + 42.358851 + ], + "modifier": "straight", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 259 + ], + "location": [ + -71.064277, + 42.358851 + ] + } + ], + "weight": 8.5, + "duration": 8.5, + "distance": 3.4 + }, + { + "geometry": "yepaG~vvpLyAAC??AK@", + "maneuver": { + "bearing_after": 0, + "bearing_before": 258, + "location": [ + -71.064318, + 42.358845 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 75, + 180 + ], + "location": [ + -71.064318, + 42.358845 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 180, + 270, + 345 + ], + "location": [ + -71.064299, + 42.35932 + ] + } + ], + "weight": 64.8, + "duration": 64.8, + "distance": 59.4 + }, + { + "geometry": "cipaG|vvpLDN", + "maneuver": { + "bearing_after": 244, + "bearing_before": 348, + "location": [ + -71.064314, + 42.359376 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Derne Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 90, + 165, + 240, + 345 + ], + "location": [ + -71.064314, + 42.359376 + ] + } + ], + "weight": 5.9, + "duration": 5.9, + "distance": 6.4 + }, + { + "geometry": "}hpaGlwvpLD?dDAD@H?", + "maneuver": { + "bearing_after": 180, + "bearing_before": 244, + "location": [ + -71.064385, + 42.359352 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Hancock Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 60, + 180, + 270 + ], + "location": [ + -71.064385, + 42.359352 + ] + } + ], + "weight": 28.1, + "duration": 28.1, + "distance": 104.2 + }, + { + "geometry": "acpaGlwvpLJvB?D@J?J?jCDbA?F?JDv@\\dFHhAFdA@F@HBZ@\\Fz@H|@", + "maneuver": { + "bearing_after": 261, + "bearing_before": 185, + "location": [ + -71.064393, + 42.358414 + ], + "modifier": "right", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Mount Vernon Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 0, + 255 + ], + "location": [ + -71.064393, + 42.358414 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.065077, + 42.358344 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 165, + 255 + ], + "location": [ + -71.066284, + 42.358307 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.068522, + 42.358023 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.068806, + 42.357986 + ] + } + ], + "weight": 109.700000000, + "duration": 109.700000000, + "distance": 418.2 + }, + { + "geometry": "{_paGzvwpLFC@A~@]", + "maneuver": { + "bearing_after": 163, + "bearing_before": 258, + "location": [ + -71.069415, + 42.357904 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.069415, + 42.357904 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.069399, + 42.357862 + ] + } + ], + "weight": 39.699999999, + "duration": 39.699999999, + "distance": 44 + }, + { + "geometry": "q}oaGvuwpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 160, + "location": [ + -71.069242, + 42.357529 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 340 + ], + "location": [ + -71.069242, + 42.357529 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Hancock Street, Mount Vernon Street", + "weight": 256.7, + "duration": 256.7, + "distance": 635.8 + }, + { + "steps": [ + { + "geometry": "q}oaGvuwpL@?v@[", + "maneuver": { + "bearing_after": 162, + "bearing_before": 0, + "location": [ + -71.069242, + 42.357529 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 162 + ], + "location": [ + -71.069242, + 42.357529 + ] + } + ], + "weight": 35, + "duration": 35, + "distance": 34 + }, + { + "geometry": "w{oaGztwpL@F", + "maneuver": { + "bearing_after": 251, + "bearing_before": 158, + "location": [ + -71.069099, + 42.357242 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.069099, + 42.357242 + ] + } + ], + "weight": 11.5, + "duration": 11.5, + "distance": 3.6 + }, + { + "geometry": "u{oaGbuwpLFC", + "maneuver": { + "bearing_after": 161, + "bearing_before": 251, + "location": [ + -71.069141, + 42.357232 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "West Cedar Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.069141, + 42.357232 + ] + } + ], + "weight": 5.5, + "duration": 5.5, + "distance": 5.3 + }, + { + "geometry": "m{oaG~twpLPfAHr@@DBTDTDXDZ@D@HVpBXpB@P@DBL@L^zCN`AAL", + "maneuver": { + "bearing_after": 251, + "bearing_before": 161, + "location": [ + -71.069122, + 42.357186 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Chestnut Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.069122, + 42.357186 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.069875, + 42.357018 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.070293, + 42.35692 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.071669, + 42.356624 + ] + } + ], + "weight": 100.1, + "duration": 100.1, + "distance": 325.9 + }, + { + "geometry": "kvoaGvlxpLTFPFLFJF", + "maneuver": { + "bearing_after": 199, + "bearing_before": 254, + "location": [ + -71.072921, + 42.356381 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "ref": "MA 28", + "driving_side": "right", + "name": "David G. Mugar Way", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 75, + 195 + ], + "location": [ + -71.072921, + 42.356381 + ] + } + ], + "weight": 38.4, + "duration": 38.4, + "distance": 39.2 + }, + { + "geometry": "itoaGvmxpL???A?A?A@?BA@A@ABA@A?A@CDBJKDCDAJGDADB", + "maneuver": { + "bearing_after": 144, + "bearing_before": 199, + "location": [ + -71.073083, + 42.356051 + ], + "modifier": "slight left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 150, + 210 + ], + "location": [ + -71.073083, + 42.356051 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 165, + 330 + ], + "location": [ + -71.072973, + 42.355957 + ] + } + ], + "weight": 24.6, + "duration": 24.6, + "distance": 47.6 + }, + { + "geometry": "aroaGllxpLKFGBCBEBCBCBA@A@?@?@@@?@@?BCBCBA?ADABC@ABA@A?A???AA?A?A?EBEDEBGDEFEDGHEHEHEJCJCHCHAHAH?@AF?HAJ?F?F?H@H?F@F?@?@@@@???@A?CCO?A?C?C?E?C?C?AAA??AAA??@A@AB?F?D@F?D?F@F@N", + "maneuver": { + "bearing_after": 331, + "bearing_before": 174, + "location": [ + -71.072866, + 42.355693 + ], + "modifier": "sharp right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 165, + 330 + ], + "location": [ + -71.072866, + 42.355693 + ] + } + ], + "weight": 196.2, + "duration": 196.2, + "distance": 218 + }, + { + "geometry": "auoaGbtxpLBFBLBJ@L@L?HAH?HAJAJAHA@AFCFCHCDAB", + "maneuver": { + "bearing_after": 241, + "bearing_before": 260, + "location": [ + -71.074096, + 42.356172 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dr. Paul Dudley White Path", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 75, + 240 + ], + "location": [ + -71.074096, + 42.356172 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 90, + 285 + ], + "location": [ + -71.074464, + 42.356093 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 225, + 285 + ], + "location": [ + -71.074621, + 42.356109 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 105, + 300 + ], + "location": [ + -71.074729, + 42.356132 + ] + } + ], + "weight": 24.1, + "duration": 24.1, + "distance": 72.7 + }, + { + "geometry": "kuoaGfyxpLDFJPNTLXNVHRFRDPDPHZFZJf@Fb@Jf@RfAP~@FX", + "maneuver": { + "bearing_after": 226, + "bearing_before": 306, + "location": [ + -71.074916, + 42.35622 + ], + "modifier": "left", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dr. Paul Dudley White Path", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 225, + 315 + ], + "location": [ + -71.074916, + 42.35622 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 150, + 225 + ], + "location": [ + -71.075052, + 42.356127 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 120, + 240 + ], + "location": [ + -71.075614, + 42.355808 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.076272, + 42.355603 + ] + } + ], + "weight": 61, + "duration": 61, + "distance": 236.8 + }, + { + "geometry": "mooaGbiypLKDQFUJC@", + "maneuver": { + "bearing_after": 337, + "bearing_before": 248, + "location": [ + -71.077458, + 42.355274 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.077458, + 42.355274 + ] + } + ], + "weight": 15.5, + "duration": 15.5, + "distance": 32.4 + }, + { + "geometry": "eqoaG~iypLESGYMs@Km@EOE[Mo@Ii@GWEUEOEOEMGOEKIQKOKKIMGK", + "maneuver": { + "bearing_after": 66, + "bearing_before": 338, + "location": [ + -71.077595, + 42.355547 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 165, + 255, + 345 + ], + "location": [ + -71.077595, + 42.355547 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 270 + ], + "location": [ + -71.075381, + 42.356327 + ] + } + ], + "weight": 61.5, + "duration": 61.5, + "distance": 219.5 + }, + { + "geometry": "svoaGh{xpLW^", + "maneuver": { + "bearing_after": 312, + "bearing_before": 45, + "location": [ + -71.075248, + 42.356423 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 135, + 225, + 315 + ], + "location": [ + -71.075248, + 42.356423 + ] + } + ], + "weight": 4.5, + "duration": 4.5, + "distance": 18.6 + }, + { + "geometry": "kwoaGh|xpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 313, + "location": [ + -71.075414, + 42.356537 + ], + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 133 + ], + "location": [ + -71.075414, + 42.356537 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Chestnut Street, Dr. Paul Dudley White Path", + "weight": 577.9, + "duration": 577.9, + "distance": 1253.6 + }, + { + "steps": [ + { + "geometry": "kwoaGh|xpLV_@", + "maneuver": { + "bearing_after": 133, + "bearing_before": 0, + "location": [ + -71.075414, + 42.356537 + ], + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 133 + ], + "location": [ + -71.075414, + 42.356537 + ] + } + ], + "weight": 9, + "duration": 9, + "distance": 18.6 + }, + { + "geometry": "svoaGh{xpLFJHLJJJNHPDJFNDLDNDNDTFVHh@Ln@DZDNJl@Lr@FXDR", + "maneuver": { + "bearing_after": 225, + "bearing_before": 132, + "location": [ + -71.075248, + 42.356423 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 135, + 225, + 315 + ], + "location": [ + -71.075248, + 42.356423 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 225, + 270 + ], + "location": [ + -71.075381, + 42.356327 + ] + } + ], + "weight": 60.4, + "duration": 60.4, + "distance": 219.5 + }, + { + "geometry": "eqoaG~iypLBATKPGJE", + "maneuver": { + "bearing_after": 158, + "bearing_before": 246, + "location": [ + -71.077595, + 42.355547 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 165, + 255, + 345 + ], + "location": [ + -71.077595, + 42.355547 + ] + } + ], + "weight": 16, + "duration": 16, + "distance": 32.4 + }, + { + "geometry": "mooaGbiypLFb@Lr@Jp@Nz@Nv@Lt@H`@DXDPHd@", + "maneuver": { + "bearing_after": 250, + "bearing_before": 157, + "location": [ + -71.077458, + 42.355274 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dr. Paul Dudley White Path", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.077458, + 42.355274 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 210, + 255, + 345 + ], + "location": [ + -71.079171, + 42.354824 + ] + } + ], + "weight": 53.3, + "duration": 53.3, + "distance": 186.1 + }, + { + "geometry": "}koaGjvypLFANIJE", + "maneuver": { + "bearing_after": 157, + "bearing_before": 248, + "location": [ + -71.079584, + 42.354707 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.079584, + 42.354707 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.079565, + 42.354671 + ] + } + ], + "weight": 13.5, + "duration": 13.5, + "distance": 21.5 + }, + { + "geometry": "yjoaGxuypLAI", + "maneuver": { + "bearing_after": 68, + "bearing_before": 158, + "location": [ + -71.079493, + 42.354526 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 255, + 285, + 345 + ], + "location": [ + -71.079493, + 42.354526 + ] + } + ], + "weight": 1.1, + "duration": 1.1, + "distance": 4.4 + }, + { + "geometry": "{joaGnuypL[cBz@]X~AJA", + "maneuver": { + "bearing_after": 68, + "bearing_before": 68, + "location": [ + -71.079443, + 42.35454 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 75, + 255 + ], + "location": [ + -71.079443, + 42.35454 + ] + } + ], + "weight": 125.3, + "duration": 125.3, + "distance": 127.5 + }, + { + "geometry": "uhoaGjtypL@HvBzL", + "maneuver": { + "bearing_after": 248, + "bearing_before": 167, + "location": [ + -71.079255, + 42.354194 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Back Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.079255, + 42.354194 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.079311, + 42.354179 + ] + } + ], + "weight": 56.900000000, + "duration": 56.900000000, + "distance": 199.2 + }, + { + "geometry": "{doaGpbzpLBABAhAc@BADAJIJE`Aa@z@]BALGHC`Aa@", + "maneuver": { + "bearing_after": 154, + "bearing_before": 248, + "location": [ + -71.081529, + 42.353584 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Exeter Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 150, + 255 + ], + "location": [ + -71.081529, + 42.353584 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 330 + ], + "location": [ + -71.081263, + 42.35306 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + false, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.080864, + 42.352282 + ] + } + ], + "weight": 52.4, + "duration": 52.4, + "distance": 200.1 + }, + { + "geometry": "kznaGd}ypLBNrBhLBP", + "maneuver": { + "bearing_after": 248, + "bearing_before": 158, + "location": [ + -71.080673, + 42.351899 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Public Alley 426", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.080673, + 42.351899 + ] + } + ], + "weight": 48.3, + "duration": 48.3, + "distance": 201.1 + }, + { + "geometry": "ovnaGpkzpLBN~AbJBP", + "maneuver": { + "bearing_after": 247, + "bearing_before": 250, + "location": [ + -71.082968, + 42.35128 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Public Alley 427", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.082968, + 42.35128 + ] + } + ], + "weight": 49.5, + "duration": 49.5, + "distance": 170.7 + }, + { + "geometry": "gsnaGvwzpLbAa@DAJEDCFCRG", + "maneuver": { + "bearing_after": 158, + "bearing_before": 250, + "location": [ + -71.084917, + 42.350758 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Gloucester Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.084917, + 42.350758 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.084708, + 42.350333 + ] + } + ], + "weight": 40.3, + "duration": 40.3, + "distance": 70.5 + }, + { + "geometry": "oonaG|uzpLBL?@VtA?D", + "maneuver": { + "bearing_after": 248, + "bearing_before": 160, + "location": [ + -71.084625, + 42.350161 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.084625, + 42.350161 + ] + } + ], + "weight": 42.7, + "duration": 42.7, + "distance": 47.3 + }, + { + "geometry": "snnaGhyzpL@A@?", + "maneuver": { + "bearing_after": 239, + "bearing_before": 250, + "location": [ + -71.085165, + 42.350015 + ], + "modifier": "slight left", + "type": "fork" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 240, + 255 + ], + "location": [ + -71.085165, + 42.350015 + ] + } + ], + "weight": 1.8, + "duration": 1.8, + "distance": 2.1 + }, + { + "geometry": "onnaGfyzpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 185, + "location": [ + -71.085166, + 42.349997 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 5 + ], + "location": [ + -71.085166, + 42.349997 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Dr. Paul Dudley White Path, Back Street", + "weight": 570.5, + "duration": 570.5, + "distance": 1500.9 + }, + { + "steps": [ + { + "geometry": "onnaGfyzpLA?A@?EWuA?ACM", + "maneuver": { + "bearing_after": 5, + "bearing_before": 0, + "location": [ + -71.085166, + 42.349997 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 5 + ], + "location": [ + -71.085166, + 42.349997 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 240, + 255 + ], + "location": [ + -71.085165, + 42.350015 + ] + } + ], + "weight": 48.599999999, + "duration": 48.599999999, + "distance": 49.4 + }, + { + "geometry": "oonaG|uzpLPIDABCFAJG|@]HEx@YDCLGLE~@]v@[DARI", + "maneuver": { + "bearing_after": 158, + "bearing_before": 68, + "location": [ + -71.084625, + 42.350161 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Gloucester Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.084625, + 42.350161 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.084537, + 42.349982 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.084133, + 42.349167 + ] + } + ], + "weight": 97.199999999, + "duration": 97.199999999, + "distance": 211.4 + }, + { + "geometry": "idnaGlpzpLQ}@o@wDAEEWGYWyAm@kDAGEUk@cDO{@CKES", + "maneuver": { + "bearing_after": 68, + "bearing_before": 158, + "location": [ + -71.083749, + 42.348373 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Boylston Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.083749, + 42.348373 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.081789, + 42.348896 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.080775, + 42.349171 + ] + } + ], + "weight": 112.800000000, + "duration": 112.800000000, + "distance": 372.4 + }, + { + "geometry": "oknaGzuypLNGvAi@LEj@UPIXKHCp@YZKJEJENGDABADAD?B?B?", + "maneuver": { + "bearing_after": 158, + "bearing_before": 68, + "location": [ + -71.079501, + 42.349515 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Exeter Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.079501, + 42.349515 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.079106, + 42.348705 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 165, + 210, + 345 + ], + "location": [ + -71.07873, + 42.347934 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 165, + 225, + 345 + ], + "location": [ + -71.078691, + 42.347854 + ] + } + ], + "weight": 84.5, + "duration": 84.5, + "distance": 213.5 + }, + { + "geometry": "c`naGrpypLGKGQEIEMEQEYEUGWKu@Io@OeAIm@", + "maneuver": { + "bearing_after": 52, + "bearing_before": 170, + "location": [ + -71.078658, + 42.347701 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 9", + "driving_side": "right", + "name": "Stuart Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 225, + 345 + ], + "location": [ + -71.078658, + 42.347701 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 315 + ], + "location": [ + -71.077937, + 42.347965 + ] + } + ], + "weight": 38.8, + "duration": 38.8, + "distance": 160.2 + }, + { + "geometry": "icnaGheypL?W?OBM@C@EFKHGjCgAPGLGRILILM^U\\MlAe@|@]TIRKLEZKjAg@HEJCt@Yd@Sh@SPGLG~@_@HCl@WLEJEpBs@RI", + "maneuver": { + "bearing_after": 101, + "bearing_before": 73, + "location": [ + -71.076852, + 42.348209 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dartmouth Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 75, + 105, + 255 + ], + "location": [ + -71.076852, + 42.348209 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 165, + 330, + 345 + ], + "location": [ + -71.075714, + 42.346819 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 165, + 225, + 345 + ], + "location": [ + -71.075246, + 42.345864 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.075095, + 42.34555 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.074872, + 42.345115 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.074717, + 42.344788 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.074475, + 42.344301 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.074108, + 42.343558 + ] + } + ], + "weight": 165.9, + "duration": 165.9, + "distance": 664.3 + }, + { + "geometry": "uamaG`rxpLREFGNOV]HK\\e@j@q@LOV]Za@dAsABCJOHIDGTYDIBIBI", + "maneuver": { + "bearing_after": 163, + "bearing_before": 160, + "location": [ + -71.073773, + 42.342828 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "West Dedham Street", + "intersections": [ + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 60, + 165, + 240, + 345 + ], + "location": [ + -71.073773, + 42.342828 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.07347, + 42.342489 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 315 + ], + "location": [ + -71.073407, + 42.342441 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.072046, + 42.341306 + ] + } + ], + "weight": 65.3, + "duration": 65.3, + "distance": 264.1 + }, + { + "geometry": "qvlaG~dxpLJB", + "maneuver": { + "bearing_after": 188, + "bearing_before": 133, + "location": [ + -71.071681, + 42.341053 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 315 + ], + "location": [ + -71.071681, + 42.341053 + ] + } + ], + "weight": 7.9, + "duration": 7.9, + "distance": 6.9 + }, + { + "geometry": "evlaGbexpLBQP_ADQ", + "maneuver": { + "bearing_after": 111, + "bearing_before": 188, + "location": [ + -71.071695, + 42.340992 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 150, + 300 + ], + "location": [ + -71.071695, + 42.340992 + ] + } + ], + "weight": 39.8, + "duration": 39.8, + "distance": 44.1 + }, + { + "geometry": "iulaG~axpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 116, + "location": [ + -71.071196, + 42.34085 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 296 + ], + "location": [ + -71.071196, + 42.34085 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Boylston Street, Dartmouth Street", + "weight": 660.8, + "duration": 660.8, + "distance": 1986.3 + }, + { + "steps": [ + { + "geometry": "iulaG~axpLEPQ~@CP", + "maneuver": { + "bearing_after": 296, + "bearing_before": 0, + "location": [ + -71.071196, + 42.34085 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 296 + ], + "location": [ + -71.071196, + 42.34085 + ] + } + ], + "weight": 43, + "duration": 43, + "distance": 44.1 + }, + { + "geometry": "evlaGbexpLKC", + "maneuver": { + "bearing_after": 8, + "bearing_before": 291, + "location": [ + -71.071695, + 42.340992 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 150, + 300 + ], + "location": [ + -71.071695, + 42.340992 + ] + } + ], + "weight": 9.4, + "duration": 9.4, + "distance": 6.9 + }, + { + "geometry": "qvlaG~dxpLCHCHEHUXEFIHKNCBeArA[`@W\\MNk@p@]d@IJW\\ONGFSD", + "maneuver": { + "bearing_after": 313, + "bearing_before": 8, + "location": [ + -71.071681, + 42.341053 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "West Dedham Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 195, + 315 + ], + "location": [ + -71.071681, + 42.341053 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.072046, + 42.341306 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 135, + 315 + ], + "location": [ + -71.073407, + 42.342441 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.07347, + 42.342489 + ] + } + ], + "weight": 65.399999999, + "duration": 65.399999999, + "distance": 264.1 + }, + { + "geometry": "uamaG`rxpLSHqBr@KDMDm@VIB", + "maneuver": { + "bearing_after": 340, + "bearing_before": 343, + "location": [ + -71.073773, + 42.342828 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dartmouth Street", + "intersections": [ + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 165, + 240, + 345 + ], + "location": [ + -71.073773, + 42.342828 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.074108, + 42.343558 + ] + } + ], + "weight": 38.6, + "duration": 38.6, + "distance": 127 + }, + { + "geometry": "mhmaGfuxpLBP`AxFBL", + "maneuver": { + "bearing_after": 250, + "bearing_before": 340, + "location": [ + -71.074284, + 42.343906 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 255, + 345 + ], + "location": [ + -71.074284, + 42.343906 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.074368, + 42.343885 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 345 + ], + "location": [ + -71.075623, + 42.343556 + ] + } + ], + "weight": 38.8, + "duration": 38.8, + "distance": 122.6 + }, + { + "geometry": "cfmaG`~xpLJG", + "maneuver": { + "bearing_after": 156, + "bearing_before": 250, + "location": [ + -71.075687, + 42.34354 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "West Canton Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 150, + 330 + ], + "location": [ + -71.075687, + 42.34354 + ] + } + ], + "weight": 6.5, + "duration": 6.5, + "distance": 7.5 + }, + { + "geometry": "wemaGx}xpLBNPhAFZJp@BJBN@FDNBLBTBJF^BLBJDPLz@Nx@BN", + "maneuver": { + "bearing_after": 250, + "bearing_before": 156, + "location": [ + -71.07565, + 42.343478 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 135, + 255, + 330 + ], + "location": [ + -71.07565, + 42.343478 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 345 + ], + "location": [ + -71.075729, + 42.343458 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 150, + 255 + ], + "location": [ + -71.076099, + 42.343366 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 330 + ], + "location": [ + -71.076489, + 42.343267 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 345 + ], + "location": [ + -71.076554, + 42.34325 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 240, + 330 + ], + "location": [ + -71.076625, + 42.343229 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 330 + ], + "location": [ + -71.076932, + 42.343146 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 330 + ], + "location": [ + -71.077217, + 42.343065 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 345 + ], + "location": [ + -71.077282, + 42.343046 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 345 + ], + "location": [ + -71.077367, + 42.343024 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 330 + ], + "location": [ + -71.077673, + 42.342946 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 135, + 255, + 315 + ], + "location": [ + -71.077961, + 42.342868 + ] + } + ], + "weight": 52.199999999, + "duration": 52.199999999, + "distance": 208.9 + }, + { + "geometry": "yamaGvlypLOPIJQTMRABGT", + "maneuver": { + "bearing_after": 316, + "bearing_before": 251, + "location": [ + -71.078038, + 42.34285 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "West Newton Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 240, + 315 + ], + "location": [ + -71.078038, + 42.34285 + ] + } + ], + "weight": 19.6, + "duration": 19.6, + "distance": 56.4 + }, + { + "geometry": "}cmaGxoypLDFBDpAbBJLFHtAjBHJDFxAlBHJDFvAnBFFFFJL~@nA@@HJ", + "maneuver": { + "bearing_after": 222, + "bearing_before": 295, + "location": [ + -71.078533, + 42.343193 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 28", + "driving_side": "right", + "name": "Columbus Avenue", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 120, + 225, + 315 + ], + "location": [ + -71.078533, + 42.343193 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 120, + 225, + 315 + ], + "location": [ + -71.079172, + 42.342674 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.07982, + 42.342148 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.080468, + 42.341622 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 135, + 225, + 315 + ], + "location": [ + -71.081106, + 42.341109 + ] + } + ], + "weight": 96.9, + "duration": 96.9, + "distance": 385.8 + }, + { + "geometry": "}slaGpczpLMTqDfGOV", + "maneuver": { + "bearing_after": 310, + "bearing_before": 222, + "location": [ + -71.081689, + 42.34063 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Massachusetts Avenue", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.081689, + 42.34063 + ] + } + ], + "weight": 65, + "duration": 65, + "distance": 171.9 + }, + { + "geometry": "mzlaGfmzpLEKEE", + "maneuver": { + "bearing_after": 46, + "bearing_before": 310, + "location": [ + -71.083235, + 42.341668 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.083235, + 42.341668 + ] + } + ], + "weight": 11.2, + "duration": 11.2, + "distance": 9.2 + }, + { + "geometry": "yzlaGtlzpLADg@x@", + "maneuver": { + "bearing_after": 312, + "bearing_before": 46, + "location": [ + -71.083154, + 42.341725 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 60, + 135, + 225, + 315 + ], + "location": [ + -71.083154, + 42.341725 + ] + } + ], + "weight": 31.6, + "duration": 31.6, + "distance": 35 + }, + { + "geometry": "c|laGtnzpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 313, + "location": [ + -71.083465, + 42.34194 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 133 + ], + "location": [ + -71.083465, + 42.34194 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "West Dedham Street, Columbus Avenue", + "weight": 478.2, + "duration": 478.2, + "distance": 1439.3 + }, + { + "steps": [ + { + "geometry": "c|laGtnzpLMPe@z@EJGJ", + "maneuver": { + "bearing_after": 313, + "bearing_before": 0, + "location": [ + -71.083465, + 42.34194 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 313 + ], + "location": [ + -71.083465, + 42.34194 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 120, + 225, + 315 + ], + "location": [ + -71.08392, + 42.342233 + ] + } + ], + "weight": 58.7, + "duration": 58.7, + "distance": 56.3 + }, + { + "geometry": "e~laGzqzpLLPJLBBh@t@BDbDdEJLFHLP", + "maneuver": { + "bearing_after": 220, + "bearing_before": 309, + "location": [ + -71.083981, + 42.342272 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Saint Botolph Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 300 + ], + "location": [ + -71.083981, + 42.342272 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.084072, + 42.342197 + ] + } + ], + "weight": 55.800000000, + "duration": 55.800000000, + "distance": 206.1 + }, + { + "geometry": "sulaGj|zpLINqAvBABKRQTKRi@z@CDk@`Ac@r@CFAHAJIbAu@xIKhAAP", + "maneuver": { + "bearing_after": 312, + "bearing_before": 222, + "location": [ + -71.085662, + 42.340898 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Gainsborough Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.085662, + 42.340898 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.086459, + 42.341432 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.086569, + 42.341517 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.087331, + 42.342027 + ] + } + ], + "weight": 136.7, + "duration": 136.7, + "distance": 441.6 + }, + { + "geometry": "o`maGdy{pLH@z@L\\HNF~@f@vCbBB@", + "maneuver": { + "bearing_after": 188, + "bearing_before": 281, + "location": [ + -71.090265, + 42.342641 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Hemenway Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.090265, + 42.342641 + ] + } + ], + "weight": 52.6, + "duration": 52.6, + "distance": 202.4 + }, + { + "geometry": "_vlaGt~{pLER?@o@hCCFERWAEFKR", + "maneuver": { + "bearing_after": 293, + "bearing_before": 205, + "location": [ + -71.091154, + 42.340955 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.091154, + 42.340955 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.091247, + 42.340987 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.09199, + 42.341246 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 165, + 225, + 315 + ], + "location": [ + -71.092122, + 42.341427 + ] + } + ], + "weight": 36.7, + "duration": 36.7, + "distance": 114.4 + }, + { + "geometry": "iylaGje|pLNNZl@Rp@Np@RlAJn@BZ", + "maneuver": { + "bearing_after": 219, + "bearing_before": 310, + "location": [ + -71.092218, + 42.341489 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lost Emerald Necklace", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 135, + 225, + 300 + ], + "location": [ + -71.092218, + 42.341489 + ] + } + ], + "weight": 38.5, + "duration": 38.5, + "distance": 148.1 + }, + { + "geometry": "uulaGfo|pLSLIH", + "maneuver": { + "bearing_after": 331, + "bearing_before": 254, + "location": [ + -71.093802, + 42.340905 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 330 + ], + "location": [ + -71.093802, + 42.340905 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 150, + 240, + 330 + ], + "location": [ + -71.09387, + 42.341005 + ] + } + ], + "weight": 5.6, + "duration": 5.6, + "distance": 19.7 + }, + { + "geometry": "svlaG~o|pLQX", + "maneuver": { + "bearing_after": 310, + "bearing_before": 326, + "location": [ + -71.093917, + 42.34106 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 150, + 315 + ], + "location": [ + -71.093917, + 42.34106 + ] + } + ], + "weight": 13.5, + "duration": 13.5, + "distance": 14.9 + }, + { + "geometry": "ewlaGxp|pLGTG`@", + "maneuver": { + "bearing_after": 298, + "bearing_before": 310, + "location": [ + -71.094051, + 42.34115 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 135, + 300 + ], + "location": [ + -71.094051, + 42.34115 + ] + } + ], + "weight": 6.8, + "duration": 6.8, + "distance": 24.6 + }, + { + "geometry": "uwlaGpr|pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 287, + "location": [ + -71.094327, + 42.341231 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 107 + ], + "location": [ + -71.094327, + 42.341231 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Saint Botolph Street, Gainsborough Street", + "weight": 404.9, + "duration": 404.9, + "distance": 1228.1 + }, + { + "steps": [ + { + "geometry": "uwlaGpr|pLIj@Kf@[v@", + "maneuver": { + "bearing_after": 287, + "bearing_before": 0, + "location": [ + -71.094327, + 42.341231 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 287 + ], + "location": [ + -71.094327, + 42.341231 + ] + } + ], + "weight": 18, + "duration": 18, + "distance": 64.3 + }, + { + "geometry": "gylaG|v|pLQPQPa@X", + "maneuver": { + "bearing_after": 322, + "bearing_before": 302, + "location": [ + -71.095027, + 42.341477 + ], + "modifier": "slight right", + "type": "fork" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 285, + 330 + ], + "location": [ + -71.095027, + 42.341477 + ] + } + ], + "weight": 16.3, + "duration": 16.3, + "distance": 46.5 + }, + { + "geometry": "m{laGzx|pL?CMk@", + "maneuver": { + "bearing_after": 67, + "bearing_before": 329, + "location": [ + -71.095339, + 42.341825 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 150, + 240, + 330 + ], + "location": [ + -71.095339, + 42.341825 + ] + } + ], + "weight": 7.4, + "duration": 7.4, + "distance": 21.1 + }, + { + "geometry": "{{laGjw|pL?EAI", + "maneuver": { + "bearing_after": 74, + "bearing_before": 67, + "location": [ + -71.095101, + 42.341896 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 75, + 255 + ], + "location": [ + -71.095101, + 42.341896 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 75, + 150, + 255 + ], + "location": [ + -71.095065, + 42.341903 + ] + } + ], + "weight": 10.5, + "duration": 10.5, + "distance": 6.9 + }, + { + "geometry": "}{laGzv|pLC@E?CACA", + "maneuver": { + "bearing_after": 7, + "bearing_before": 71, + "location": [ + -71.095021, + 42.341913 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 135, + 255 + ], + "location": [ + -71.095021, + 42.341913 + ] + } + ], + "weight": 9, + "duration": 9, + "distance": 10.3 + }, + { + "geometry": "o|laGxv|pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 26, + "location": [ + -71.095003, + 42.342001 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 206 + ], + "location": [ + -71.095003, + 42.342001 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "", + "weight": 61.2, + "duration": 61.2, + "distance": 149.1 + }, + { + "steps": [ + { + "geometry": "o|laGxv|pLB@B@D?BA", + "maneuver": { + "bearing_after": 206, + "bearing_before": 0, + "location": [ + -71.095003, + 42.342001 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 206 + ], + "location": [ + -71.095003, + 42.342001 + ] + } + ], + "weight": 11.2, + "duration": 11.2, + "distance": 10.3 + }, + { + "geometry": "}{laGzv|pL@H?D", + "maneuver": { + "bearing_after": 251, + "bearing_before": 187, + "location": [ + -71.095021, + 42.341913 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 135, + 255 + ], + "location": [ + -71.095021, + 42.341913 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 75, + 150, + 255 + ], + "location": [ + -71.095065, + 42.341903 + ] + } + ], + "weight": 6.199999999, + "duration": 6.199999999, + "distance": 6.9 + }, + { + "geometry": "{{laGjw|pLLj@?BPl@Pp@", + "maneuver": { + "bearing_after": 247, + "bearing_before": 254, + "location": [ + -71.095101, + 42.341896 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 75, + 255 + ], + "location": [ + -71.095101, + 42.341896 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 240, + 330 + ], + "location": [ + -71.095339, + 42.341825 + ] + } + ], + "weight": 19.3, + "duration": 19.3, + "distance": 65.7 + }, + { + "geometry": "izlaGz{|pL]jB", + "maneuver": { + "bearing_after": 289, + "bearing_before": 241, + "location": [ + -71.095824, + 42.341648 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 105, + 240, + 285 + ], + "location": [ + -71.095824, + 42.341648 + ] + } + ], + "weight": 14.2, + "duration": 14.2, + "distance": 47.7 + }, + { + "geometry": "g{laGf_}pLMF", + "maneuver": { + "bearing_after": 336, + "bearing_before": 289, + "location": [ + -71.096364, + 42.341802 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 105, + 255, + 330 + ], + "location": [ + -71.096364, + 42.341802 + ] + } + ], + "weight": 9.1, + "duration": 9.1, + "distance": 7.8 + }, + { + "geometry": "u{laGn_}pLBP", + "maneuver": { + "bearing_after": 251, + "bearing_before": 336, + "location": [ + -71.096402, + 42.341866 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Park Drive", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 345 + ], + "location": [ + -71.096402, + 42.341866 + ] + } + ], + "weight": 7.8, + "duration": 7.8, + "distance": 7.7 + }, + { + "geometry": "q{laG``}pL[LMFiAb@uAh@sAf@iAb@IDKDgA`@", + "maneuver": { + "bearing_after": 338, + "bearing_before": 251, + "location": [ + -71.096491, + 42.341845 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Jersey Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.096491, + 42.341845 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.096562, + 42.34199 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.096988, + 42.342863 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.097396, + 42.343698 + ] + } + ], + "weight": 68.199999999, + "duration": 68.199999999, + "distance": 268.2 + }, + { + "geometry": "wimaG~f}pLCKi@}CBQQgA", + "maneuver": { + "bearing_after": 64, + "bearing_before": 338, + "location": [ + -71.0976, + 42.344115 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Private Alley 937", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 165, + 255, + 345 + ], + "location": [ + -71.0976, + 42.344115 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 240, + 345 + ], + "location": [ + -71.097542, + 42.344135 + ] + } + ], + "weight": 36.4, + "duration": 36.4, + "distance": 114.1 + }, + { + "geometry": "skmaGz~|pLmAh@", + "maneuver": { + "bearing_after": 337, + "bearing_before": 70, + "location": [ + -71.0963, + 42.344416 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.0963, + 42.344416 + ] + } + ], + "weight": 19.5, + "duration": 19.5, + "distance": 47.4 + }, + { + "geometry": "anmaGd`}pLVxA", + "maneuver": { + "bearing_after": 248, + "bearing_before": 337, + "location": [ + -71.096512, + 42.344813 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.096512, + 42.344813 + ] + } + ], + "weight": 35.5, + "duration": 35.5, + "distance": 39.3 + }, + { + "geometry": "immaG~b}pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 250, + "location": [ + -71.096959, + 42.344689 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 70 + ], + "location": [ + -71.096959, + 42.344689 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Jersey Street, Private Alley 937", + "weight": 227.4, + "duration": 227.4, + "distance": 615 + }, + { + "steps": [ + { + "geometry": "immaG~b}pLf@lCBR", + "maneuver": { + "bearing_after": 249, + "bearing_before": 0, + "location": [ + -71.096959, + 42.344689 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 249 + ], + "location": [ + -71.096959, + 42.344689 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 330 + ], + "location": [ + -71.097674, + 42.34449 + ] + } + ], + "weight": 68.3, + "duration": 68.3, + "distance": 71.5 + }, + { + "geometry": "}kmaG`h}pLEBKDOFE@k@Ta@Ny@\\KDIDaDnAwAj@EBMJ", + "maneuver": { + "bearing_after": 340, + "bearing_before": 253, + "location": [ + -71.097773, + 42.344468 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Jersey Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.097773, + 42.344468 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.097817, + 42.344558 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.098241, + 42.345414 + ] + } + ], + "weight": 69.5, + "duration": 69.5, + "distance": 278.9 + }, + { + "geometry": "qzmaGpo}pL}@_AGGMOUYm@q@sAuA[_@]W[_@GEEEGEEAEAEAA?W?E?", + "maneuver": { + "bearing_after": 37, + "bearing_before": 327, + "location": [ + -71.098972, + 42.346814 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Brookline Avenue", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 150, + 210, + 315 + ], + "location": [ + -71.098972, + 42.346814 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.098525, + 42.347228 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 120, + 210 + ], + "location": [ + -71.097437, + 42.348277 + ] + } + ], + "weight": 69.6, + "duration": 69.6, + "distance": 269.1 + }, + { + "geometry": "{fnaGfd}pL@S?S?UEwI?GAU?S?IEqE?W?Q?S@w@?Y?M?I?SAiC?i@?_@?I?C?Y?S", + "maneuver": { + "bearing_after": 94, + "bearing_before": 358, + "location": [ + -71.097164, + 42.348782 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 2", + "driving_side": "right", + "name": "Commonwealth Avenue", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true, + true + ], + "bearings": [ + 30, + 90, + 180, + 255, + 285 + ], + "location": [ + -71.097164, + 42.348782 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.094975, + 42.348806 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.092843, + 42.348833 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.091578, + 42.348843 + ] + } + ], + "weight": 140.1, + "duration": 140.1, + "distance": 469.1 + }, + { + "geometry": "ggnaGv`|pLICEBK?", + "maneuver": { + "bearing_after": 357, + "bearing_before": 90, + "location": [ + -71.091476, + 42.348843 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 195, + 270 + ], + "location": [ + -71.091476, + 42.348843 + ] + } + ], + "weight": 18.9, + "duration": 18.9, + "distance": 15.4 + }, + { + "geometry": "chnaGv`|pL?W", + "maneuver": { + "bearing_after": 90, + "bearing_before": 351, + "location": [ + -71.091479, + 42.348977 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 165 + ], + "location": [ + -71.091479, + 42.348977 + ] + } + ], + "weight": 8.9, + "duration": 8.9, + "distance": 10 + }, + { + "geometry": "chnaG~_|pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 90, + "location": [ + -71.091358, + 42.348977 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 270 + ], + "location": [ + -71.091358, + 42.348977 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Brookline Avenue, Commonwealth Avenue", + "weight": 375.3, + "duration": 375.3, + "distance": 1114 + }, + { + "steps": [ + { + "geometry": "chnaG~_|pL?V", + "maneuver": { + "bearing_after": 270, + "bearing_before": 0, + "location": [ + -71.091358, + 42.348977 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 270 + ], + "location": [ + -71.091358, + 42.348977 + ] + } + ], + "weight": 13, + "duration": 13, + "distance": 10 + }, + { + "geometry": "chnaGv`|pLQ?K@CAC?GA", + "maneuver": { + "bearing_after": 357, + "bearing_before": 270, + "location": [ + -71.091479, + 42.348977 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 165 + ], + "location": [ + -71.091479, + 42.348977 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180 + ], + "location": [ + -71.091483, + 42.349072 + ] + } + ], + "weight": 33.2, + "duration": 33.2, + "distance": 25.6 + }, + { + "geometry": "qinaGt`|pL@X", + "maneuver": { + "bearing_after": 268, + "bearing_before": 7, + "location": [ + -71.091468, + 42.349206 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 2", + "driving_side": "right", + "name": "Commonwealth Avenue", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 195, + 270 + ], + "location": [ + -71.091468, + 42.349206 + ] + } + ], + "weight": 6.7, + "duration": 6.7, + "distance": 10.5 + }, + { + "geometry": "oinaGna|pLI?G?sA@u@BGBEBEFCDCDABAFCHAJ?J", + "maneuver": { + "bearing_after": 357, + "bearing_before": 268, + "location": [ + -71.091595, + 42.349204 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Charlesgate East", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.091595, + 42.349204 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180 + ], + "location": [ + -71.091613, + 42.349709 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 285 + ], + "location": [ + -71.091794, + 42.350129 + ] + } + ], + "weight": 33.7, + "duration": 33.7, + "distance": 125.8 + }, + { + "geometry": "qonaG~c|pLLr@P|@F\\F\\DXH`@", + "maneuver": { + "bearing_after": 248, + "bearing_before": 285, + "location": [ + -71.091996, + 42.350172 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beacon Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 105, + 255 + ], + "location": [ + -71.091996, + 42.350172 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 75, + 180, + 255 + ], + "location": [ + -71.092873, + 42.349929 + ] + } + ], + "weight": 30.7, + "duration": 30.7, + "distance": 102.9 + }, + { + "geometry": "qmnaGhk|pLKDIDAB?F@j@@x@@z@?xCEvAYpL?FAZ]tJCp@GzA?FAPAPu@pP?D?B?V", + "maneuver": { + "bearing_after": 337, + "bearing_before": 248, + "location": [ + -71.093166, + 42.349849 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bay State Road", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.093166, + 42.349849 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 150, + 270 + ], + "location": [ + -71.095309, + 42.349969 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 150, + 270, + 330 + ], + "location": [ + -71.097658, + 42.350114 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 90, + 195, + 285 + ], + "location": [ + -71.100365, + 42.350326 + ] + } + ], + "weight": 211.3, + "duration": 211.3, + "distance": 859 + }, + { + "geometry": "irnaGnk~pL?HAL?FAFCLCNEPGLGLININAB?D?B@DGPAFABCLCLAL?LQtG", + "maneuver": { + "bearing_after": 271, + "bearing_before": 271, + "location": [ + -71.103436, + 42.350613 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bay State Road", + "intersections": [ + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 195, + 270 + ], + "location": [ + -71.103436, + 42.350613 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 90, + 195, + 285 + ], + "location": [ + -71.10356, + 42.350617 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 240, + 315 + ], + "location": [ + -71.104103, + 42.350828 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 210, + 300 + ], + "location": [ + -71.104276, + 42.350878 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 285 + ], + "location": [ + -71.104409, + 42.350933 + ] + } + ], + "weight": 55.9, + "duration": 55.9, + "distance": 231.7 + }, + { + "geometry": "gunaGb|~pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 275, + "location": [ + -71.106096, + 42.351083 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bay State Road", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 95 + ], + "location": [ + -71.106096, + 42.351083 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Beacon Street, Bay State Road", + "weight": 384.5, + "duration": 384.5, + "distance": 1365.3 + }, + { + "steps": [ + { + "geometry": "gunaGb|~pLAJ", + "maneuver": { + "bearing_after": 275, + "bearing_before": 0, + "location": [ + -71.106096, + 42.351083 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bay State Road", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 275 + ], + "location": [ + -71.106096, + 42.351083 + ] + } + ], + "weight": 9.2, + "duration": 9.2, + "distance": 4.9 + }, + { + "geometry": "iunaGn|~pLF?l@Fn@BTB", + "maneuver": { + "bearing_after": 185, + "bearing_before": 274, + "location": [ + -71.106155, + 42.351087 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.106155, + 42.351087 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 180, + 255 + ], + "location": [ + -71.106161, + 42.351048 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 120, + 180, + 315 + ], + "location": [ + -71.106197, + 42.350819 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 45, + 195 + ], + "location": [ + -71.106215, + 42.350578 + ] + } + ], + "weight": 29.9, + "duration": 29.9, + "distance": 69.3 + }, + { + "geometry": "mqnaG~|~pL@Ov@J", + "maneuver": { + "bearing_after": 120, + "bearing_before": 189, + "location": [ + -71.106244, + 42.350467 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Marsh Plaza", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 120, + 285 + ], + "location": [ + -71.106244, + 42.350467 + ] + } + ], + "weight": 38.4, + "duration": 38.4, + "distance": 37.9 + }, + { + "geometry": "sonaGz|~pLEj@", + "maneuver": { + "bearing_after": 278, + "bearing_before": 188, + "location": [ + -71.106221, + 42.350183 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 10, + 99, + 279, + 279 + ], + "location": [ + -71.106221, + 42.350183 + ] + } + ], + "weight": 26.6, + "duration": 26.6, + "distance": 18.3 + }, + { + "geometry": "yonaGf~~pLF?B?H?", + "maneuver": { + "bearing_after": 178, + "bearing_before": 278, + "location": [ + -71.10644, + 42.350209 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 180, + 285 + ], + "location": [ + -71.10644, + 42.350209 + ] + } + ], + "weight": 15.7, + "duration": 15.7, + "distance": 11.7 + }, + { + "geometry": "conaGf~~pLCT", + "maneuver": { + "bearing_after": 278, + "bearing_before": 180, + "location": [ + -71.10644, + 42.350104 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "Commonwealth Avenue", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 105, + 180, + 285 + ], + "location": [ + -71.10644, + 42.350104 + ] + } + ], + "weight": 10.6, + "duration": 10.6, + "distance": 9.1 + }, + { + "geometry": "gonaG|~~pLRBD@NBL@pAPx@JxATPBZDl@FjAN~@LNBx@HF@F?", + "maneuver": { + "bearing_after": 188, + "bearing_before": 278, + "location": [ + -71.106549, + 42.350118 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Saint Mary's Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.106549, + 42.350118 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.106595, + 42.349911 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.106886, + 42.348597 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 285 + ], + "location": [ + -71.107042, + 42.34785 + ] + } + ], + "weight": 86.800000000, + "duration": 86.800000000, + "distance": 341.9 + }, + { + "geometry": "g|maG|b_qL@L?@?Dm@fKCT", + "maneuver": { + "bearing_after": 258, + "bearing_before": 185, + "location": [ + -71.107188, + 42.347077 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Ivy Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 75, + 165, + 255 + ], + "location": [ + -71.107188, + 42.347077 + ] + } + ], + "weight": 53.1, + "duration": 53.1, + "distance": 182.3 + }, + { + "geometry": "w}maGpp_qLJ@F?P@R@`CAn@CF?H?HA", + "maneuver": { + "bearing_after": 184, + "bearing_before": 278, + "location": [ + -71.109371, + 42.347316 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Carlton Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 180, + 285 + ], + "location": [ + -71.109371, + 42.347316 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 180, + 255 + ], + "location": [ + -71.109385, + 42.346381 + ] + } + ], + "weight": 38.8, + "duration": 38.8, + "distance": 145.9 + }, + { + "geometry": "oumaGnp_qL?H?B?D@FXzAJd@\\rBJh@bAvFZfBp@vD?@BLBNd@lCFXBPFb@H`@dArGZjBBJ", + "maneuver": { + "bearing_after": 262, + "bearing_before": 175, + "location": [ + -71.109358, + 42.346004 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 165, + 270 + ], + "location": [ + -71.109358, + 42.346004 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 165, + 255 + ], + "location": [ + -71.10943, + 42.345998 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.11015, + 42.345802 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.110727, + 42.345646 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.110941, + 42.345587 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 195, + 255, + 345 + ], + "location": [ + -71.11218, + 42.345245 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.11362, + 42.344863 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.113704, + 42.344842 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.11378, + 42.344822 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 330 + ], + "location": [ + -71.114494, + 42.344628 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 330 + ], + "location": [ + -71.11462, + 42.344594 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 330 + ], + "location": [ + -71.114711, + 42.344571 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 330 + ], + "location": [ + -71.114885, + 42.344526 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 330 + ], + "location": [ + -71.115059, + 42.344481 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 75, + 255 + ], + "location": [ + -71.116442, + 42.344126 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 75, + 180, + 255 + ], + "location": [ + -71.116975, + 42.34399 + ] + } + ], + "weight": 165.399999999, + "duration": 165.399999999, + "distance": 672.8 + }, + { + "geometry": "yhmaGn`aqLlALD@XB", + "maneuver": { + "bearing_after": 187, + "bearing_before": 250, + "location": [ + -71.117044, + 42.343972 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Saint Paul Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 75, + 180 + ], + "location": [ + -71.117044, + 42.343972 + ] + } + ], + "weight": 36, + "duration": 36, + "distance": 62.2 + }, + { + "geometry": "kemaGbaaqLHb@f@tCv@bEFZ^nBX|Ad@bCLv@@D", + "maneuver": { + "bearing_after": 248, + "bearing_before": 187, + "location": [ + -71.117142, + 42.343417 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beacon Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 75, + 180, + 255 + ], + "location": [ + -71.117142, + 42.343417 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.11807, + 42.343165 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.119191, + 42.342852 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 300 + ], + "location": [ + -71.119751, + 42.342694 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 75, + 150, + 255 + ], + "location": [ + -71.120223, + 42.342562 + ] + } + ], + "weight": 112.999999999, + "duration": 112.999999999, + "distance": 356.4 + }, + { + "geometry": "i~laGlzaqLIBC@", + "maneuver": { + "bearing_after": 340, + "bearing_before": 248, + "location": [ + -71.121191, + 42.342293 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 345 + ], + "location": [ + -71.121191, + 42.342293 + ] + } + ], + "weight": 10.4, + "duration": 10.4, + "distance": 7.4 + }, + { + "geometry": "w~laGrzaqL@BAB?D", + "maneuver": { + "bearing_after": 278, + "bearing_before": 340, + "location": [ + -71.121221, + 42.342356 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 165, + 285 + ], + "location": [ + -71.121221, + 42.342356 + ] + } + ], + "weight": 5.3, + "duration": 5.3, + "distance": 5.5 + }, + { + "geometry": "w~laG`{aqLKPOZWh@", + "maneuver": { + "bearing_after": 309, + "bearing_before": 278, + "location": [ + -71.121285, + 42.342364 + ], + "modifier": "slight right", + "type": "fork" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 255, + 315 + ], + "location": [ + -71.121285, + 42.342364 + ] + } + ], + "weight": 41.9, + "duration": 41.9, + "distance": 46.6 + }, + { + "geometry": "k`maGx}aqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 306, + "location": [ + -71.121734, + 42.342619 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 126 + ], + "location": [ + -71.121734, + 42.342619 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Saint Mary's Street, Beacon Street", + "weight": 681.1, + "duration": 681.1, + "distance": 1972.3 + }, + { + "steps": [ + { + "geometry": "k`maGx}aqLADIPGLCFA@A?A?EJ", + "maneuver": { + "bearing_after": 306, + "bearing_before": 0, + "location": [ + -71.121734, + 42.342619 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 306 + ], + "location": [ + -71.121734, + 42.342619 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 135, + 300 + ], + "location": [ + -71.12197, + 42.342767 + ] + } + ], + "weight": 33.5, + "duration": 33.5, + "distance": 32.5 + }, + { + "geometry": "oamaGt_bqLcA}@GGe@c@s@o@SQe@c@GGSQsEeEKK", + "maneuver": { + "bearing_after": 33, + "bearing_before": 305, + "location": [ + -71.122034, + 42.342801 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Green Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.122034, + 42.342801 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.121503, + 42.343372 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.12117, + 42.34373 + ] + } + ], + "weight": 85.2, + "duration": 85.2, + "distance": 321.2 + }, + { + "geometry": "kpmaGxqaqLmBrEgAlCAP", + "maneuver": { + "bearing_after": 305, + "bearing_before": 33, + "location": [ + -71.119813, + 42.345177 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dwight Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.119813, + 42.345177 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 270, + 300 + ], + "location": [ + -71.120871, + 42.345734 + ] + } + ], + "weight": 49.5, + "duration": 49.5, + "distance": 184.8 + }, + { + "geometry": "cvmaGl}aqLUGsBg@i@MsA]YIUGWEOAOCO@{ALuBV{BViCRG@o@Dc@Cs@IOA", + "maneuver": { + "bearing_after": 14, + "bearing_before": 279, + "location": [ + -71.12167, + 42.346099 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Babcock Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.12167, + 42.346099 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 75, + 195 + ], + "location": [ + -71.121205, + 42.347423 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.12108, + 42.347856 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 180, + 270, + 345 + ], + "location": [ + -71.12114, + 42.34848 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 270, + 345 + ], + "location": [ + -71.12126, + 42.34907 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 165, + 270 + ], + "location": [ + -71.12138, + 42.34969 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 180, + 270 + ], + "location": [ + -71.12148, + 42.35038 + ] + } + ], + "weight": 145.5, + "duration": 145.5, + "distance": 573.2 + }, + { + "geometry": "{unaG~{aqLALG~@OvB?JAJGz@LBOtBAN", + "maneuver": { + "bearing_after": 279, + "bearing_before": 7, + "location": [ + -71.121439, + 42.351178 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 195, + 285 + ], + "location": [ + -71.121439, + 42.351178 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.121512, + 42.351188 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 180, + 285 + ], + "location": [ + -71.121828, + 42.351229 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 105, + 180, + 285 + ], + "location": [ + -71.122429, + 42.351306 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.122485, + 42.351314 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 180, + 285 + ], + "location": [ + -71.122545, + 42.351321 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.123461, + 42.351366 + ] + } + ], + "weight": 47.6, + "duration": 47.6, + "distance": 181.6 + }, + { + "geometry": "cwnaGbibqLMAEAgAMEA", + "maneuver": { + "bearing_after": 7, + "bearing_before": 278, + "location": [ + -71.123542, + 42.351376 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Naples Road", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.123542, + 42.351376 + ] + } + ], + "weight": 21.8, + "duration": 21.8, + "distance": 54.9 + }, + { + "geometry": "eznaGnhbqL?JGx@CZ?X?L", + "maneuver": { + "bearing_after": 277, + "bearing_before": 8, + "location": [ + -71.123442, + 42.351865 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195, + 270 + ], + "location": [ + -71.123442, + 42.351865 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 195, + 285 + ], + "location": [ + -71.123504, + 42.351871 + ] + } + ], + "weight": 51.7, + "duration": 51.7, + "distance": 57.4 + }, + { + "geometry": "qznaGxlbqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 269, + "location": [ + -71.124132, + 42.351932 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 89 + ], + "location": [ + -71.124132, + 42.351932 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Green Street, Babcock Street", + "weight": 434.8, + "duration": 434.8, + "distance": 1405.7 + }, + { + "steps": [ + { + "geometry": "qznaGzlbqL@PDVBN", + "maneuver": { + "bearing_after": 262, + "bearing_before": 0, + "location": [ + -71.124132, + 42.351932 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 262 + ], + "location": [ + -71.124132, + 42.351932 + ] + } + ], + "weight": 24.6, + "duration": 24.6, + "distance": 25.8 + }, + { + "geometry": "eznaGtnbqLGRCJE\\", + "maneuver": { + "bearing_after": 299, + "bearing_before": 247, + "location": [ + -71.12443, + 42.351867 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 240, + 300 + ], + "location": [ + -71.12443, + 42.351867 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 120, + 225, + 285 + ], + "location": [ + -71.124525, + 42.351907 + ] + } + ], + "weight": 30.1, + "duration": 30.1, + "distance": 28.1 + }, + { + "geometry": "wznaGrpbqLGECAME", + "maneuver": { + "bearing_after": 22, + "bearing_before": 286, + "location": [ + -71.124744, + 42.351963 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 30", + "driving_side": "right", + "name": "Commonwealth Avenue", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + false, + true + ], + "bearings": [ + 30, + 105, + 225, + 285 + ], + "location": [ + -71.124744, + 42.351963 + ] + } + ], + "weight": 14.6, + "duration": 14.6, + "distance": 14.9 + }, + { + "geometry": "q{naGdpbqLENCHCJGRET", + "maneuver": { + "bearing_after": 295, + "bearing_before": 37, + "location": [ + -71.124673, + 42.352086 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 4, + "in": 2, + "entry": [ + false, + true, + true, + true, + true + ], + "bearings": [ + 60, + 90, + 225, + 270, + 300 + ], + "location": [ + -71.124673, + 42.352086 + ] + } + ], + "weight": 9, + "duration": 9, + "distance": 36.4 + }, + { + "geometry": "m|naGtrbqL?HALKjBW~DCh@InAIlAMpBARARa@vGCj@AFAJ", + "maneuver": { + "bearing_after": 275, + "bearing_before": 295, + "location": [ + -71.125071, + 42.352228 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "Brighton Avenue", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 120, + 270 + ], + "location": [ + -71.125071, + 42.352228 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.125186, + 42.352239 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.1269, + 42.352442 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.127692, + 42.352535 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.128359, + 42.352618 + ] + } + ], + "weight": 125.399999999, + "duration": 125.399999999, + "distance": 426.2 + }, + { + "geometry": "g`oaGrrcqLMA", + "maneuver": { + "bearing_after": 8, + "bearing_before": 278, + "location": [ + -71.13018, + 42.352836 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Linden Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.13018, + 42.352836 + ] + } + ], + "weight": 10.2, + "duration": 10.2, + "distance": 8.3 + }, + { + "geometry": "u`oaGprcqLALObC", + "maneuver": { + "bearing_after": 278, + "bearing_before": 8, + "location": [ + -71.130165, + 42.35291 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.130165, + 42.35291 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.130239, + 42.352919 + ] + } + ], + "weight": 54.9, + "duration": 54.9, + "distance": 61 + }, + { + "geometry": "gaoaGbwcqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 279, + "location": [ + -71.130896, + 42.352999 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 99 + ], + "location": [ + -71.130896, + 42.352999 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Commonwealth Avenue, Brighton Avenue", + "weight": 268.8, + "duration": 268.8, + "distance": 600.7 + }, + { + "steps": [ + { + "geometry": "gaoaGbwcqLYlE", + "maneuver": { + "bearing_after": 279, + "bearing_before": 0, + "location": [ + -71.130896, + 42.352999 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 279 + ], + "location": [ + -71.130896, + 42.352999 + ] + } + ], + "weight": 88.9, + "duration": 88.9, + "distance": 86.2 + }, + { + "geometry": "aboaGp}cqLPAVA", + "maneuver": { + "bearing_after": 174, + "bearing_before": 278, + "location": [ + -71.131929, + 42.353125 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 180, + 285 + ], + "location": [ + -71.131929, + 42.353125 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 105, + 180, + 285 + ], + "location": [ + -71.131919, + 42.35304 + ] + } + ], + "weight": 26.7, + "duration": 26.7, + "distance": 22.8 + }, + { + "geometry": "w`oaGl}cqLJcB", + "maneuver": { + "bearing_after": 98, + "bearing_before": 175, + "location": [ + -71.131908, + 42.35292 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "Brighton Avenue", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 105, + 180, + 285 + ], + "location": [ + -71.131908, + 42.35292 + ] + } + ], + "weight": 14.2, + "duration": 14.2, + "distance": 41.8 + }, + { + "geometry": "k`oaGhzcqLH@j@F", + "maneuver": { + "bearing_after": 187, + "bearing_before": 98, + "location": [ + -71.131406, + 42.352864 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.131406, + 42.352864 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.131417, + 42.352808 + ] + } + ], + "weight": 7.5, + "duration": 7.5, + "distance": 31.4 + }, + { + "geometry": "u~naGrzcqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 189, + "location": [ + -71.131464, + 42.352585 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 9 + ], + "location": [ + -71.131464, + 42.352585 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Brighton Avenue", + "weight": 137.3, + "duration": 137.3, + "distance": 182.2 + }, + { + "steps": [ + { + "geometry": "u~naGrzcqLk@G", + "maneuver": { + "bearing_after": 9, + "bearing_before": 0, + "location": [ + -71.131464, + 42.352585 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 9 + ], + "location": [ + -71.131464, + 42.352585 + ] + } + ], + "weight": 14.2, + "duration": 14.2, + "distance": 25.1 + }, + { + "geometry": "a`oaGjzcqLK~A?FCX", + "maneuver": { + "bearing_after": 278, + "bearing_before": 8, + "location": [ + -71.131417, + 42.352808 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.131417, + 42.352808 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 105, + 285 + ], + "location": [ + -71.131903, + 42.352868 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 165, + 270 + ], + "location": [ + -71.131941, + 42.352873 + ] + } + ], + "weight": 51.3, + "duration": 51.3, + "distance": 54.1 + }, + { + "geometry": "q`oaGl~cqLI@WD", + "maneuver": { + "bearing_after": 347, + "bearing_before": 277, + "location": [ + -71.132065, + 42.352885 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Harvard Avenue", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 165, + 270, + 345 + ], + "location": [ + -71.132065, + 42.352885 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 105, + 165, + 285, + 345 + ], + "location": [ + -71.132081, + 42.35294 + ] + } + ], + "weight": 10.1, + "duration": 10.1, + "distance": 19.8 + }, + { + "geometry": "saoaGt~cqLCb@S~C?FMlBIrAAHC\\APAZQfCCf@G`AAr@Cp@?RABAx@C`@AT?FAD?LEl@", + "maneuver": { + "bearing_after": 278, + "bearing_before": 350, + "location": [ + -71.132106, + 42.353061 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "Brighton Avenue", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 105, + 165, + 285, + 345 + ], + "location": [ + -71.132106, + 42.353061 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.13439, + 42.353337 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 270, + 330 + ], + "location": [ + -71.136656, + 42.353552 + ] + } + ], + "weight": 143.399999999, + "duration": 143.399999999, + "distance": 433 + }, + { + "geometry": "ceoaGd_eqLLb@HXBF^pAFVBFBLBHb@dBHZNv@Pl@BLRt@Vz@FVH\\h@vBBJd@hBT~@HZDNPp@Nv@@FBLFf@DR", + "maneuver": { + "bearing_after": 241, + "bearing_before": 277, + "location": [ + -71.137307, + 42.353617 + ], + "modifier": "slight left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Cambridge Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 105, + 240, + 270 + ], + "location": [ + -71.137307, + 42.353617 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 105, + 240, + 285 + ], + "location": [ + -71.137488, + 42.353548 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 165, + 240 + ], + "location": [ + -71.138345, + 42.353218 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 165, + 240 + ], + "location": [ + -71.138997, + 42.352992 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 165, + 240 + ], + "location": [ + -71.139576, + 42.352798 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 165, + 240, + 345 + ], + "location": [ + -71.140269, + 42.352543 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 345 + ], + "location": [ + -71.141607, + 42.352072 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.14299, + 42.351636 + ] + } + ], + "weight": 128.6, + "duration": 128.6, + "distance": 526.2 + }, + { + "geometry": "qxnaGhcfqLAJ?LJvAB`@F^Jh@Lb@Pd@L`@Rn@HPHHb@rADN\\dATr@Pd@", + "maneuver": { + "bearing_after": 274, + "bearing_before": 251, + "location": [ + -71.143089, + 42.351613 + ], + "modifier": "slight right", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Cambridge Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 240, + 270, + 345 + ], + "location": [ + -71.143089, + 42.351613 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 225, + 330 + ], + "location": [ + -71.144984, + 42.351106 + ] + }, + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 75, + 150, + 240 + ], + "location": [ + -71.145122, + 42.351012 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 315 + ], + "location": [ + -71.145621, + 42.3508 + ] + } + ], + "weight": 77.1, + "duration": 77.1, + "distance": 307.6 + }, + { + "geometry": "iqnaGbxfqLJJHBHB@?J?HCHEHK", + "maneuver": { + "bearing_after": 203, + "bearing_before": 239, + "location": [ + -71.146417, + 42.350454 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 210, + 240 + ], + "location": [ + -71.146417, + 42.350454 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 90, + 180, + 255 + ], + "location": [ + -71.14652, + 42.350287 + ] + } + ], + "weight": 47.1, + "duration": 47.1, + "distance": 47.5 + }, + { + "geometry": "}nnaG`xfqLB[", + "maneuver": { + "bearing_after": 99, + "bearing_before": 158, + "location": [ + -71.146412, + 42.350067 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Warren Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 105, + 195, + 285, + 345 + ], + "location": [ + -71.146412, + 42.350067 + ] + } + ], + "weight": 7.6, + "duration": 7.6, + "distance": 12.2 + }, + { + "geometry": "ynnaGdwfqLz@T", + "maneuver": { + "bearing_after": 195, + "bearing_before": 99, + "location": [ + -71.146266, + 42.350046 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.146266, + 42.350046 + ] + } + ], + "weight": 16.4, + "duration": 16.4, + "distance": 34.1 + }, + { + "geometry": "}lnaGzwfqLNiA", + "maneuver": { + "bearing_after": 106, + "bearing_before": 195, + "location": [ + -71.14638, + 42.349751 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.14638, + 42.349751 + ] + } + ], + "weight": 7.6, + "duration": 7.6, + "distance": 32 + }, + { + "geometry": "mlnaGpufqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 107, + "location": [ + -71.146009, + 42.349667 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 287 + ], + "location": [ + -71.146009, + 42.349667 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Brighton Avenue, Cambridge Street", + "weight": 503.4, + "duration": 503.4, + "distance": 1491.5 + }, + { + "steps": [ + { + "geometry": "mlnaGpufqLOhA", + "maneuver": { + "bearing_after": 287, + "bearing_before": 0, + "location": [ + -71.146009, + 42.349667 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 287 + ], + "location": [ + -71.146009, + 42.349667 + ] + } + ], + "weight": 11.7, + "duration": 11.7, + "distance": 32 + }, + { + "geometry": "}lnaGzwfqL{@U", + "maneuver": { + "bearing_after": 15, + "bearing_before": 286, + "location": [ + -71.14638, + 42.349751 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.14638, + 42.349751 + ] + } + ], + "weight": 17.5, + "duration": 17.5, + "distance": 34.1 + }, + { + "geometry": "ynnaGdwfqLCZ", + "maneuver": { + "bearing_after": 279, + "bearing_before": 15, + "location": [ + -71.146266, + 42.350046 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Warren Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.146266, + 42.350046 + ] + } + ], + "weight": 4.7, + "duration": 4.7, + "distance": 12.2 + }, + { + "geometry": "}nnaG`xfqLIJIDIBK?A?", + "maneuver": { + "bearing_after": 338, + "bearing_before": 279, + "location": [ + -71.146412, + 42.350067 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 105, + 195, + 285, + 345 + ], + "location": [ + -71.146412, + 42.350067 + ] + } + ], + "weight": 10.7, + "duration": 10.7, + "distance": 26.8 + }, + { + "geometry": "ipnaGvxfqL?C?G", + "maneuver": { + "bearing_after": 81, + "bearing_before": 352, + "location": [ + -71.14652, + 42.350287 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 90, + 180, + 255 + ], + "location": [ + -71.14652, + 42.350287 + ] + } + ], + "weight": 9.5, + "duration": 9.5, + "distance": 5.3 + }, + { + "geometry": "ipnaGjxfqL@@LCNMBODc@", + "maneuver": { + "bearing_after": 177, + "bearing_before": 81, + "location": [ + -71.146456, + 42.350293 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 180, + 270 + ], + "location": [ + -71.146456, + 42.350293 + ] + } + ], + "weight": 37.8, + "duration": 37.8, + "distance": 41.9 + }, + { + "geometry": "_onaGfvfqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 101, + "location": [ + -71.146124, + 42.350083 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 281 + ], + "location": [ + -71.146124, + 42.350083 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Warren Street", + "weight": 91.9, + "duration": 91.9, + "distance": 152.3 + }, + { + "steps": [ + { + "geometry": "_onaGfvfqLEb@CNOLMBAA", + "maneuver": { + "bearing_after": 281, + "bearing_before": 0, + "location": [ + -71.146124, + 42.350083 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 281 + ], + "location": [ + -71.146124, + 42.350083 + ] + } + ], + "weight": 47.1, + "duration": 47.1, + "distance": 41.9 + }, + { + "geometry": "ipnaGjxfqL?F?B", + "maneuver": { + "bearing_after": 261, + "bearing_before": 357, + "location": [ + -71.146456, + 42.350293 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 180, + 270 + ], + "location": [ + -71.146456, + 42.350293 + ] + } + ], + "weight": 12.6, + "duration": 12.6, + "distance": 5.3 + }, + { + "geometry": "ipnaGvxfqLICICKK", + "maneuver": { + "bearing_after": 23, + "bearing_before": 261, + "location": [ + -71.14652, + 42.350287 + ], + "modifier": "sharp right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 90, + 180, + 255 + ], + "location": [ + -71.14652, + 42.350287 + ] + } + ], + "weight": 5.5, + "duration": 5.5, + "distance": 20.7 + }, + { + "geometry": "iqnaGbxfqLQe@Us@]eA", + "maneuver": { + "bearing_after": 59, + "bearing_before": 23, + "location": [ + -71.146417, + 42.350454 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Cambridge Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 210, + 240 + ], + "location": [ + -71.146417, + 42.350454 + ] + } + ], + "weight": 30.4, + "duration": 30.4, + "distance": 76 + }, + { + "geometry": "osnaGbsfqLMNa@d@m@f@Q?O?]KyAs@oAi@GEGCc@Sa@QGEIC_@Qa@QIEGEa@Qa@QIEGCgB{@gBy@KG", + "maneuver": { + "bearing_after": 319, + "bearing_before": 59, + "location": [ + -71.145621, + 42.3508 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dustin Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 240, + 315 + ], + "location": [ + -71.145621, + 42.3508 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 195, + 285 + ], + "location": [ + -71.145531, + 42.352483 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 210, + 285 + ], + "location": [ + -71.145294, + 42.352911 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 195, + 285 + ], + "location": [ + -71.145055, + 42.35334 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 195, + 285 + ], + "location": [ + -71.144817, + 42.353773 + ] + } + ], + "weight": 123.800000000, + "duration": 123.800000000, + "distance": 500.3 + }, + { + "geometry": "emoaG`jfqL@E", + "maneuver": { + "bearing_after": 106, + "bearing_before": 22, + "location": [ + -71.144174, + 42.354909 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "North Beacon Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 210, + 285 + ], + "location": [ + -71.144174, + 42.354909 + ] + } + ], + "weight": 8.6, + "duration": 8.6, + "distance": 3.2 + }, + { + "geometry": "cmoaGzifqLKGgAc@gAc@", + "maneuver": { + "bearing_after": 19, + "bearing_before": 106, + "location": [ + -71.144137, + 42.3549 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Hichborn Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.144137, + 42.3549 + ] + } + ], + "weight": 22.2, + "duration": 22.2, + "distance": 92.8 + }, + { + "geometry": "_roaGjgfqLICkAk@GAw@]e@SME", + "maneuver": { + "bearing_after": 22, + "bearing_before": 19, + "location": [ + -71.143741, + 42.355682 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "New Balance Way", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false, + true + ], + "bearings": [ + 30, + 90, + 150, + 195, + 330 + ], + "location": [ + -71.143741, + 42.355682 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 90, + 210, + 270 + ], + "location": [ + -71.143716, + 42.355725 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 135, + 210 + ], + "location": [ + -71.143498, + 42.356108 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.143238, + 42.35662 + ] + } + ], + "weight": 38.099999999, + "duration": 38.099999999, + "distance": 120 + }, + { + "geometry": "ixoaG`dfqLCXGz@", + "maneuver": { + "bearing_after": 279, + "bearing_before": 15, + "location": [ + -71.143212, + 42.356687 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Guest Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.143212, + 42.356687 + ] + } + ], + "weight": 12.2, + "duration": 12.2, + "distance": 35.7 + }, + { + "geometry": "uxoaGvffqLKA", + "maneuver": { + "bearing_after": 4, + "bearing_before": 279, + "location": [ + -71.143637, + 42.356748 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 105, + 285 + ], + "location": [ + -71.143637, + 42.356748 + ] + } + ], + "weight": 13.5, + "duration": 13.5, + "distance": 6.8 + }, + { + "geometry": "ayoaGtffqLEl@", + "maneuver": { + "bearing_after": 279, + "bearing_before": 4, + "location": [ + -71.14363, + 42.356809 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 105, + 180, + 285 + ], + "location": [ + -71.14363, + 42.356809 + ] + } + ], + "weight": 17.6, + "duration": 17.6, + "distance": 19.5 + }, + { + "geometry": "gyoaGbhfqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 281, + "location": [ + -71.143863, + 42.356842 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 101 + ], + "location": [ + -71.143863, + 42.356842 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Dustin Street, New Balance Way", + "weight": 331.6, + "duration": 331.6, + "distance": 922.1 + }, + { + "steps": [ + { + "geometry": "gyoaGbhfqLDm@", + "maneuver": { + "bearing_after": 101, + "bearing_before": 0, + "location": [ + -71.143863, + 42.356842 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 101 + ], + "location": [ + -71.143863, + 42.356842 + ] + } + ], + "weight": 21.3, + "duration": 21.3, + "distance": 19.5 + }, + { + "geometry": "ayoaGtffqLJ@", + "maneuver": { + "bearing_after": 184, + "bearing_before": 99, + "location": [ + -71.14363, + 42.356809 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 105, + 180, + 285 + ], + "location": [ + -71.14363, + 42.356809 + ] + } + ], + "weight": 11, + "duration": 11, + "distance": 6.8 + }, + { + "geometry": "uxoaGvffqL]lEWvCAHAPATADi@pHGl@G`AAZGf@ADADADCL", + "maneuver": { + "bearing_after": 281, + "bearing_before": 184, + "location": [ + -71.143637, + 42.356748 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Guest Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 105, + 285 + ], + "location": [ + -71.143637, + 42.356748 + ] + }, + { + "out": 1, + "classes": [ + "tunnel" + ], + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 105, + 285 + ], + "location": [ + -71.147935, + 42.357364 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 105, + 285 + ], + "location": [ + -71.148136, + 42.357403 + ] + } + ], + "weight": 100.6, + "duration": 100.6, + "distance": 392.3 + }, + { + "geometry": "a}oaGzcgqLuBgA{Ay@UKECi@W[O", + "maneuver": { + "bearing_after": 23, + "bearing_before": 292, + "location": [ + -71.148301, + 42.357451 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Market Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.148301, + 42.357451 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 9, + 22, + 205 + ], + "location": [ + -71.147648, + 42.358496 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 105, + 210, + 285 + ], + "location": [ + -71.14745, + 42.358851 + ] + } + ], + "weight": 64, + "duration": 64, + "distance": 187.5 + }, + { + "geometry": "ufpaG`~fqLOIg@YOI]QiDiBAAOIg@WQK_@S}A{@CAKIMG", + "maneuver": { + "bearing_after": 23, + "bearing_before": 23, + "location": [ + -71.147365, + 42.358989 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Leo M Birmingham Parkway", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 225 + ], + "location": [ + -71.147365, + 42.358989 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 90, + 210 + ], + "location": [ + -71.147139, + 42.35935 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.146458, + 42.36044 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 90, + 210 + ], + "location": [ + -71.146176, + 42.360887 + ] + } + ], + "weight": 95.700000000, + "duration": 95.700000000, + "distance": 309.4 + }, + { + "geometry": "mvpaGbtfqL?Q?QAMAOCMCKCMYqCAKCOIy@UuBE]Gk@Is@?CMaAAMEa@CQe@cEGk@Ca@E[E_@KiAMoAAMO{AEm@Ec@Cc@AO?EAQCYAOEq@MuBGaAImAEm@Eu@?AAMC_@OuBEg@Ek@?AIgAGs@CQAYA[A]Aa@?]?[@[@Y@]@G@O@WBa@BYDY@QViBBS@M@K?M?K?M?KAKEmACeAEw@Cu@Ce@Cu@ASA_@Eu@", + "maneuver": { + "bearing_after": 90, + "bearing_before": 25, + "location": [ + -71.145775, + 42.361512 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Western Avenue", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 90, + 210, + 270 + ], + "location": [ + -71.145775, + 42.361512 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 270 + ], + "location": [ + -71.145248, + 42.361589 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.144518, + 42.36172 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.143496, + 42.361912 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.142873, + 42.362029 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 180, + 255 + ], + "location": [ + -71.140676, + 42.362441 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.139681, + 42.362613 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.138625, + 42.362773 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.137376, + 42.362915 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 75, + 195, + 255 + ], + "location": [ + -71.135331, + 42.363175 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.133601, + 42.363386 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.132221, + 42.363264 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 165, + 270 + ], + "location": [ + -71.131235, + 42.363085 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 270, + 315 + ], + "location": [ + -71.131046, + 42.363095 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 90, + 225, + 270 + ], + "location": [ + -71.129761, + 42.363201 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 270, + 315 + ], + "location": [ + -71.129199, + 42.363246 + ] + } + ], + "weight": 357.400000000, + "duration": 357.400000000, + "distance": 1428.8 + }, + { + "geometry": "qaqaGxicqLPA", + "maneuver": { + "bearing_after": 172, + "bearing_before": 81, + "location": [ + -71.128768, + 42.363286 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Travis Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.128768, + 42.363286 + ] + } + ], + "weight": 10.8, + "duration": 10.8, + "distance": 9.9 + }, + { + "geometry": "_aqaGvicqL?KAGAe@", + "maneuver": { + "bearing_after": 82, + "bearing_before": 172, + "location": [ + -71.128755, + 42.363197 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.128755, + 42.363197 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.12866, + 42.363205 + ] + } + ], + "weight": 21, + "duration": 21, + "distance": 23.4 + }, + { + "geometry": "caqaG|gcqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 83, + "location": [ + -71.128473, + 42.363221 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 263 + ], + "location": [ + -71.128473, + 42.363221 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Guest Street, Western Avenue", + "weight": 681.8, + "duration": 681.8, + "distance": 2377.6 + }, + { + "steps": [ + { + "geometry": "caqaG|gcqL@d@@F?J", + "maneuver": { + "bearing_after": 263, + "bearing_before": 0, + "location": [ + -71.128473, + 42.363221 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 263 + ], + "location": [ + -71.128473, + 42.363221 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.12866, + 42.363205 + ] + } + ], + "weight": 25.3, + "duration": 25.3, + "distance": 23.4 + }, + { + "geometry": "_aqaGvicqLQ@", + "maneuver": { + "bearing_after": 352, + "bearing_before": 262, + "location": [ + -71.128755, + 42.363197 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Travis Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.128755, + 42.363197 + ] + } + ], + "weight": 11, + "duration": 11, + "distance": 9.9 + }, + { + "geometry": "qaqaGxicqLDt@@^", + "maneuver": { + "bearing_after": 261, + "bearing_before": 352, + "location": [ + -71.128768, + 42.363286 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Western Avenue", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.128768, + 42.363286 + ] + } + ], + "weight": 9.6, + "duration": 9.6, + "distance": 35.8 + }, + { + "geometry": "iaqaGnlcqL?DAD?DADCBABC@A@A@C@E@C?CAC?CACA", + "maneuver": { + "bearing_after": 307, + "bearing_before": 262, + "location": [ + -71.129199, + 42.363246 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 270, + 315 + ], + "location": [ + -71.129199, + 42.363246 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 60, + 120, + 255 + ], + "location": [ + -71.129383, + 42.363331 + ] + } + ], + "weight": 12, + "duration": 12, + "distance": 36.9 + }, + { + "geometry": "ybqaGrmcqLWa@KQU_@GK_BaCEGMQWa@GGIKQSGIGIWc@wBeDU[KQKOKMMOKMKMMOKKy@w@eAcAw@s@SUe@e@SSACUSKKqBoBOQEC[YEE]UaAy@", + "maneuver": { + "bearing_after": 45, + "bearing_before": 354, + "location": [ + -71.129377, + 42.363487 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "North Harvard Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 180, + 225 + ], + "location": [ + -71.129377, + 42.363487 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.129208, + 42.36361 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.128212, + 42.364333 + ] + } + ], + "weight": 192.4, + "duration": 192.4, + "distance": 793.1 + }, + { + "geometry": "ydraG`gbqLgA{@qAiAUQ", + "maneuver": { + "bearing_after": 32, + "bearing_before": 32, + "location": [ + -71.12321, + 42.368934 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "John F. Kennedy Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 30, + 210 + ], + "location": [ + -71.12321, + 42.368934 + ] + } + ], + "weight": 32.6, + "duration": 32.6, + "distance": 115.1 + }, + { + "geometry": "ijraGhbbqLBI@I?E@G@E?C@G?G@G?E@I?E@E?I?E?I@K?M?MAM?_@Aa@MeCA]A]A]?_@?]?]@[@[@c@B_@B]D_@Da@D_@F[DU", + "maneuver": { + "bearing_after": 106, + "bearing_before": 32, + "location": [ + -71.122454, + 42.369806 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "ref": "US 3; MA 2", + "driving_side": "right", + "name": "Memorial Drive", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 105, + 210, + 285 + ], + "location": [ + -71.122454, + 42.369806 + ] + } + ], + "weight": 93.5, + "duration": 93.5, + "distance": 360 + }, + { + "geometry": "_iraGlgaqLSMeB{@GEMEwBgACCKEOIw@a@KEKGECECEECAAC", + "maneuver": { + "bearing_after": 22, + "bearing_before": 105, + "location": [ + -71.118145, + 42.369596 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Plympton Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 285 + ], + "location": [ + -71.118145, + 42.369596 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 105, + 210, + 285 + ], + "location": [ + -71.117753, + 42.370254 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.117057, + 42.371419 + ] + } + ], + "weight": 61.6, + "duration": 61.6, + "distance": 244.7 + }, + { + "geometry": "ouraGv_aqL@Kf@gD@M", + "maneuver": { + "bearing_after": 108, + "bearing_before": 29, + "location": [ + -71.11692, + 42.371602 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bow Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 105, + 210, + 285 + ], + "location": [ + -71.11692, + 42.371602 + ] + } + ], + "weight": 24.7, + "duration": 24.7, + "distance": 84 + }, + { + "geometry": "ctraGty`qLIGGKYa@GEGEI?i@H]DA?A?A?AAA?AAAA?AEGCEAAACACAAAA?AAAAAAAAAAAAA?AAA?CAA?A?C?C?A?C?A?C?A?A@A?A?C?ABM", + "maneuver": { + "bearing_after": 40, + "bearing_before": 106, + "location": [ + -71.115947, + 42.371376 + ], + "modifier": "left", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bow Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 210, + 285 + ], + "location": [ + -71.115947, + 42.371376 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 135, + 225 + ], + "location": [ + -71.115684, + 42.371601 + ] + }, + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false, + true + ], + "bearings": [ + 45, + 135, + 195, + 225, + 315 + ], + "location": [ + -71.115594, + 42.372206 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 111, + 280, + 290 + ], + "location": [ + -71.115219, + 42.372329 + ] + } + ], + "weight": 46.599999999, + "duration": 46.599999999, + "distance": 149 + }, + { + "geometry": "}yraGtt`qLMCiB_@oJ}AOI", + "maneuver": { + "bearing_after": 12, + "bearing_before": 109, + "location": [ + -71.115147, + 42.372309 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Quincy Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.115147, + 42.372309 + ] + } + ], + "weight": 70.6, + "duration": 70.6, + "distance": 285.8 + }, + { + "geometry": "uisaGhp`qLMCCBI@IAiAUQCUACAm@Gk@Gw@Mi@GMC", + "maneuver": { + "bearing_after": 14, + "bearing_before": 19, + "location": [ + -71.114454, + 42.374829 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Quincy Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false, + true + ], + "bearings": [ + 15, + 30, + 120, + 195, + 315 + ], + "location": [ + -71.114454, + 42.374829 + ] + }, + { + "out": 0, + "in": 5, + "entry": [ + true, + true, + true, + true, + true, + false, + true, + true, + true + ], + "bearings": [ + 15, + 75, + 105, + 135, + 180, + 195, + 255, + 285, + 315 + ], + "location": [ + -71.114324, + 42.375481 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 195, + 210 + ], + "location": [ + -71.114258, + 42.375843 + ] + } + ], + "weight": 53.599999999, + "duration": 53.599999999, + "distance": 203 + }, + { + "geometry": "{tsaG`n`qLG[E]c@}CMeAM_AAIEa@WkBAOe@eDAMAMSuAK{@Ky@CWMy@c@kDCUK_AYmB", + "maneuver": { + "bearing_after": 73, + "bearing_before": 8, + "location": [ + -71.114091, + 42.376624 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Kirkland Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 195, + 255 + ], + "location": [ + -71.114091, + 42.376624 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.112657, + 42.376944 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 195, + 255 + ], + "location": [ + -71.112337, + 42.377008 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.111583, + 42.377166 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.111496, + 42.377184 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.110596, + 42.37738 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 195, + 255 + ], + "location": [ + -71.109388, + 42.377634 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.109102, + 42.377696 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.108128, + 42.377904 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 135, + 255 + ], + "location": [ + -71.10781, + 42.377963 + ] + } + ], + "weight": 140.5, + "duration": 140.5, + "distance": 585.6 + }, + { + "geometry": "a~saGjc_qLMq@G_@K{@AECQAIAKAIAEAG[gCM{@AEQeAO_AUwA", + "maneuver": { + "bearing_after": 70, + "bearing_before": 71, + "location": [ + -71.107264, + 42.378094 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Washington Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 150, + 255 + ], + "location": [ + -71.107264, + 42.378094 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 135, + 255, + 315 + ], + "location": [ + -71.106378, + 42.378298 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.10522, + 42.378554 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.10519, + 42.378561 + ] + } + ], + "weight": 92.2, + "duration": 92.2, + "distance": 275.5 + }, + { + "geometry": "wbtaGno~pLSAyDbAm@Po@NIBE?E?CAoAm@_@SOI{@c@GE_@Q_Ae@wAw@MG", + "maneuver": { + "bearing_after": 0, + "bearing_before": 70, + "location": [ + -71.104076, + 42.378843 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dane Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 75, + 180, + 255 + ], + "location": [ + -71.104076, + 42.378843 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 255, + 345 + ], + "location": [ + -71.104497, + 42.380096 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 120, + 165, + 285 + ], + "location": [ + -71.104604, + 42.380418 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 195, + 285 + ], + "location": [ + -71.104003, + 42.381454 + ] + } + ], + "weight": 109.1, + "duration": 109.1, + "distance": 426.1 + }, + { + "geometry": "gytaGfk~pLFW@GRy@F[j@kCBOBG@INq@H[Pq@d@sBFW@MFQVy@@GT}@@OLo@@ERw@DQp@aC", + "maneuver": { + "bearing_after": 112, + "bearing_before": 23, + "location": [ + -71.103399, + 42.382436 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Somerville Avenue", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.103399, + 42.382436 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.102034, + 42.382008 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.1013, + 42.381756 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210, + 285 + ], + "location": [ + -71.100527, + 42.381515 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 120, + 300 + ], + "location": [ + -71.100442, + 42.381482 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 300 + ], + "location": [ + -71.099804, + 42.381244 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 285, + 330 + ], + "location": [ + -71.099483, + 42.38116 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 195, + 300 + ], + "location": [ + -71.099166, + 42.381051 + ] + } + ], + "weight": 117.8, + "duration": 117.8, + "distance": 449.9 + }, + { + "geometry": "yntaGdl}pLMKe@Y", + "maneuver": { + "bearing_after": 29, + "bearing_before": 116, + "location": [ + -71.098427, + 42.380769 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bow Market Way", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.098427, + 42.380769 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.098369, + 42.380842 + ] + } + ], + "weight": 15.9, + "duration": 15.9, + "distance": 32.3 + }, + { + "geometry": "mptaG~j}pLTu@GO", + "maneuver": { + "bearing_after": 118, + "bearing_before": 26, + "location": [ + -71.098241, + 42.381025 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 120, + 210 + ], + "location": [ + -71.098241, + 42.381025 + ] + } + ], + "weight": 7.9, + "duration": 7.9, + "distance": 33.3 + }, + { + "geometry": "_ptaGxh}pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 53, + "location": [ + -71.097894, + 42.380957 + ], + "modifier": "straight", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 233 + ], + "location": [ + -71.097894, + 42.380957 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "North Harvard Street, Kirkland Street", + "weight": 1116.9, + "duration": 1116.9, + "distance": 4143.4 + }, + { + "steps": [ + { + "geometry": "_ptaGxh}pLFNUt@", + "maneuver": { + "bearing_after": 233, + "bearing_before": 0, + "location": [ + -71.097894, + 42.380957 + ], + "modifier": "straight", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 233 + ], + "location": [ + -71.097894, + 42.380957 + ] + } + ], + "weight": 16.4, + "duration": 16.4, + "distance": 33.3 + }, + { + "geometry": "mptaG~j}pLd@X", + "maneuver": { + "bearing_after": 206, + "bearing_before": 298, + "location": [ + -71.098241, + 42.381025 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bow Market Way", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 120, + 210 + ], + "location": [ + -71.098241, + 42.381025 + ] + } + ], + "weight": 12.6, + "duration": 12.6, + "distance": 22.9 + }, + { + "geometry": "gotaGxk}pLa@nAOt@[rACHID", + "maneuver": { + "bearing_after": 298, + "bearing_before": 206, + "location": [ + -71.098369, + 42.380842 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.098369, + 42.380842 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.099039, + 42.381094 + ] + } + ], + "weight": 101.9, + "duration": 101.9, + "distance": 110.7 + }, + { + "geometry": "crtaGbs}pLAP?R", + "maneuver": { + "bearing_after": 274, + "bearing_before": 320, + "location": [ + -71.099541, + 42.381303 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 135, + 270 + ], + "location": [ + -71.099541, + 42.381303 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 90, + 150, + 270 + ], + "location": [ + -71.09963, + 42.381308 + ] + } + ], + "weight": 18.799999999, + "duration": 18.799999999, + "distance": 15.5 + }, + { + "geometry": "ertaGht}pLMCEB", + "maneuver": { + "bearing_after": 11, + "bearing_before": 274, + "location": [ + -71.099728, + 42.381314 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 90, + 165 + ], + "location": [ + -71.099728, + 42.381314 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 195, + 270, + 330 + ], + "location": [ + -71.09971, + 42.381379 + ] + } + ], + "weight": 16.4, + "duration": 16.4, + "distance": 11 + }, + { + "geometry": "yrtaGht}pL@VA^CZIx@", + "maneuver": { + "bearing_after": 261, + "bearing_before": 331, + "location": [ + -71.09973, + 42.381408 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bow Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 150, + 270, + 330 + ], + "location": [ + -71.09973, + 42.381408 + ] + } + ], + "weight": 14.5, + "duration": 14.5, + "distance": 59.8 + }, + { + "geometry": "gstaGvx}pLGPALGVe@rBQp@IZOp@AHCFCNk@jCGZSx@AFGVIZAFi@rBEXGd@AFCPO`AE\\ObAObAMdAG\\AJCJOlACJAJCVa@|CCLEVCVEXWfBMx@QpAIl@[`CAJMr@Q~@Mf@Mj@ITMb@ABCJ", + "maneuver": { + "bearing_after": 296, + "bearing_before": 281, + "location": [ + -71.100442, + 42.381482 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Somerville Avenue", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 120, + 300 + ], + "location": [ + -71.100442, + 42.381482 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 285 + ], + "location": [ + -71.100527, + 42.381515 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.1013, + 42.381756 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.102034, + 42.382008 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.103399, + 42.382436 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 120, + 285 + ], + "location": [ + -71.104164, + 42.382709 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.105091, + 42.382923 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 105, + 285 + ], + "location": [ + -71.105429, + 42.382998 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.106334, + 42.383202 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.1069, + 42.383327 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 105, + 285 + ], + "location": [ + -71.108004, + 42.383565 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 210, + 285 + ], + "location": [ + -71.108766, + 42.383741 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.109056, + 42.383805 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 105, + 285 + ], + "location": [ + -71.10947, + 42.3839 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 210, + 285 + ], + "location": [ + -71.109704, + 42.383953 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 300 + ], + "location": [ + -71.110986, + 42.384259 + ] + } + ], + "weight": 274.299999999, + "duration": 274.299999999, + "distance": 996.2 + }, + { + "geometry": "mfuaGr_`qLJJXT", + "maneuver": { + "bearing_after": 213, + "bearing_before": 302, + "location": [ + -71.111775, + 42.384554 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Sacramento Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.111775, + 42.384554 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.111837, + 42.384487 + ] + } + ], + "weight": 12.100000000, + "duration": 12.100000000, + "distance": 26.1 + }, + { + "geometry": "geuaGt``qLBCHHB?", + "maneuver": { + "bearing_after": 137, + "bearing_before": 213, + "location": [ + -71.111954, + 42.38436 + ], + "modifier": "left", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 30, + 135 + ], + "location": [ + -71.111954, + 42.38436 + ] + } + ], + "weight": 16.9, + "duration": 16.9, + "distance": 11.5 + }, + { + "geometry": "uduaGz``qLVN@BTL?BUO?BTNJCXT`@\\f@\\B@", + "maneuver": { + "bearing_after": 206, + "bearing_before": 196, + "location": [ + -71.111975, + 42.384271 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "classes": [ + "tunnel" + ], + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 30, + 210 + ], + "location": [ + -71.111975, + 42.384271 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 180, + 210 + ], + "location": [ + -71.112061, + 42.384145 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 30, + 210 + ], + "location": [ + -71.112165, + 42.383974 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 210, + 315 + ], + "location": [ + -71.112278, + 42.383842 + ] + } + ], + "weight": 39.8, + "duration": 39.8, + "distance": 136 + }, + { + "geometry": "q_uaGtd`qLEHQT", + "maneuver": { + "bearing_after": 315, + "bearing_before": 208, + "location": [ + -71.112592, + 42.383449 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 135, + 210, + 315 + ], + "location": [ + -71.112592, + 42.383449 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 135, + 315 + ], + "location": [ + -71.112635, + 42.383482 + ] + } + ], + "weight": 16.9, + "duration": 16.9, + "distance": 18.7 + }, + { + "geometry": "i`uaGte`qL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 318, + "location": [ + -71.112746, + 42.383573 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 138 + ], + "location": [ + -71.112746, + 42.383573 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Somerville Avenue, Sacramento Street", + "weight": 540.6, + "duration": 540.6, + "distance": 1441.6 + }, + { + "steps": [ + { + "geometry": "i`uaGte`qLPUDI", + "maneuver": { + "bearing_after": 138, + "bearing_before": 0, + "location": [ + -71.112746, + 42.383573 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 138 + ], + "location": [ + -71.112746, + 42.383573 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 135, + 315 + ], + "location": [ + -71.112635, + 42.383482 + ] + } + ], + "weight": 19.6, + "duration": 19.6, + "distance": 18.7 + }, + { + "geometry": "q_uaGtd`qLBBFB", + "maneuver": { + "bearing_after": 208, + "bearing_before": 135, + "location": [ + -71.112592, + 42.383449 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Sacramento Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 135, + 210, + 315 + ], + "location": [ + -71.112592, + 42.383449 + ] + } + ], + "weight": 7.9, + "duration": 7.9, + "distance": 7.2 + }, + { + "geometry": "e_uaG|d`qLMPk@t@MNEHQRc@l@[`@GJ[`@[`@QTEFOREFEDIJGHEFSVEFk@r@k@v@y@dAm@x@IHY`@KLCBE@EBKBg@LGBG?E?YGGAACKM", + "maneuver": { + "bearing_after": 316, + "bearing_before": 208, + "location": [ + -71.112634, + 42.383392 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beacon Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 135, + 315 + ], + "location": [ + -71.112634, + 42.383392 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.113073, + 42.383746 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 135, + 315 + ], + "location": [ + -71.113623, + 42.384191 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 135, + 315 + ], + "location": [ + -71.114126, + 42.384597 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.114309, + 42.384744 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 135, + 315 + ], + "location": [ + -71.114607, + 42.384988 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.115192, + 42.385461 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.116046, + 42.386156 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 165, + 285 + ], + "location": [ + -71.116284, + 42.386637 + ] + } + ], + "weight": 133.5, + "duration": 133.5, + "distance": 507.1 + }, + { + "geometry": "euuaGzz`qLSd@_@v@MXKVa@x@eA~Bi@hAq@|Au@fA", + "maneuver": { + "bearing_after": 306, + "bearing_before": 39, + "location": [ + -71.116143, + 42.386907 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Somerville Avenue", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 225, + 300 + ], + "location": [ + -71.116143, + 42.386907 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.116742, + 42.38724 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 120, + 300 + ], + "location": [ + -71.117153, + 42.387469 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 120, + 315 + ], + "location": [ + -71.11779, + 42.387817 + ] + } + ], + "weight": 76.9, + "duration": 76.9, + "distance": 297.6 + }, + { + "geometry": "m_vaGtlaqLD`@AB@@?@BBAD@BB@BAFA", + "maneuver": { + "bearing_after": 255, + "bearing_before": 313, + "location": [ + -71.118992, + 42.388549 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 135, + 255, + 330 + ], + "location": [ + -71.118992, + 42.388549 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 135, + 315 + ], + "location": [ + -71.119159, + 42.388518 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.119178, + 42.388532 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 120, + 210 + ], + "location": [ + -71.119223, + 42.388504 + ] + } + ], + "weight": 47.500000000, + "duration": 47.500000000, + "distance": 34 + }, + { + "geometry": "s~uaGjnaqL@G", + "maneuver": { + "bearing_after": 102, + "bearing_before": 182, + "location": [ + -71.119263, + 42.38842 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 105, + 165, + 270 + ], + "location": [ + -71.119263, + 42.38842 + ] + } + ], + "weight": 3.4, + "duration": 3.4, + "distance": 3.7 + }, + { + "geometry": "q~uaGbnaqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 104, + "location": [ + -71.119219, + 42.388412 + ], + "modifier": "straight", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 284 + ], + "location": [ + -71.119219, + 42.388412 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Beacon Street, Somerville Avenue", + "weight": 288.8, + "duration": 288.8, + "distance": 868.4 + }, + { + "steps": [ + { + "geometry": "q~uaGbnaqLAF?B?B?B", + "maneuver": { + "bearing_after": 284, + "bearing_before": 0, + "location": [ + -71.119219, + 42.388412 + ], + "modifier": "straight", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 284 + ], + "location": [ + -71.119219, + 42.388412 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 105, + 165, + 270 + ], + "location": [ + -71.119263, + 42.38842 + ] + } + ], + "weight": 13.2, + "duration": 13.2, + "distance": 8.6 + }, + { + "geometry": "s~uaGvnaqLC@C@IBE?E?", + "maneuver": { + "bearing_after": 341, + "bearing_before": 262, + "location": [ + -71.119321, + 42.388415 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 165, + 345 + ], + "location": [ + -71.119321, + 42.388415 + ] + } + ], + "weight": 20.2, + "duration": 20.2, + "distance": 18 + }, + { + "geometry": "q_vaG~naqLCC?C?C", + "maneuver": { + "bearing_after": 84, + "bearing_before": 355, + "location": [ + -71.119358, + 42.388572 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 90, + 180, + 270, + 345 + ], + "location": [ + -71.119358, + 42.388572 + ] + } + ], + "weight": 4.7, + "duration": 4.7, + "distance": 5.2 + }, + { + "geometry": "u_vaGrnaqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 90, + "location": [ + -71.119303, + 42.38859 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 270 + ], + "location": [ + -71.119303, + 42.38859 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "", + "weight": 38.1, + "duration": 38.1, + "distance": 31.8 + }, + { + "steps": [ + { + "geometry": "u_vaGrnaqL?B?BBB?R", + "maneuver": { + "bearing_after": 270, + "bearing_before": 0, + "location": [ + -71.119303, + 42.38859 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 270 + ], + "location": [ + -71.119303, + 42.38859 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 180, + 270, + 345 + ], + "location": [ + -71.119358, + 42.388572 + ] + } + ], + "weight": 15.7, + "duration": 15.7, + "distance": 13.8 + }, + { + "geometry": "q_vaGroaqLSDUDOFMDSJ", + "maneuver": { + "bearing_after": 348, + "bearing_before": 270, + "location": [ + -71.119462, + 42.388572 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 2A", + "driving_side": "right", + "name": "Massachusetts Avenue", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 165, + 270, + 345 + ], + "location": [ + -71.119462, + 42.388572 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 105, + 165, + 300, + 345 + ], + "location": [ + -71.119486, + 42.388665 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 165, + 345 + ], + "location": [ + -71.119521, + 42.388777 + ] + } + ], + "weight": 15.6, + "duration": 15.6, + "distance": 52.8 + }, + { + "geometry": "mbvaGxpaqLKWMYUk@[q@GMEG@I?GCYCQGQIOSe@Q_@IQIQQa@MUEM", + "maneuver": { + "bearing_after": 53, + "bearing_before": 337, + "location": [ + -71.119645, + 42.389026 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 165, + 330 + ], + "location": [ + -71.119645, + 42.389026 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 60, + 150, + 240, + 330 + ], + "location": [ + -71.119532, + 42.389087 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.119398, + 42.389158 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.118929, + 42.389412 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 90, + 225, + 255 + ], + "location": [ + -71.118769, + 42.389472 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 150, + 270 + ], + "location": [ + -71.118731, + 42.389469 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 255 + ], + "location": [ + -71.118507, + 42.389509 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.118337, + 42.389598 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.118147, + 42.389699 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.117985, + 42.389789 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.117809, + 42.389885 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 150, + 240 + ], + "location": [ + -71.117643, + 42.389977 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 150, + 225, + 330 + ], + "location": [ + -71.117526, + 42.390045 + ] + } + ], + "weight": 61.3, + "duration": 61.3, + "distance": 218.2 + }, + { + "geometry": "_ivaGbcaqL[ZIHy@z@_AbAEBg@l@c@j@GHEDW\\QRIHq@n@yArA{ArAGDMLOJe@ToB`AUN", + "maneuver": { + "bearing_after": 322, + "bearing_before": 52, + "location": [ + -71.117458, + 42.390084 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Elm Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 150, + 225, + 330 + ], + "location": [ + -71.117458, + 42.390084 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 135, + 330 + ], + "location": [ + -71.117651, + 42.39027 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 150, + 240, + 315 + ], + "location": [ + -71.117952, + 42.390561 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 135, + 330 + ], + "location": [ + -71.118286, + 42.390879 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 150, + 240, + 315 + ], + "location": [ + -71.118314, + 42.390908 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 135, + 270, + 315 + ], + "location": [ + -71.118806, + 42.391328 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.118991, + 42.391475 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 240, + 330 + ], + "location": [ + -71.119093, + 42.39157 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 150, + 330 + ], + "location": [ + -71.11938, + 42.391868 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 150, + 330 + ], + "location": [ + -71.1198, + 42.392323 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 150, + 225, + 330 + ], + "location": [ + -71.120219, + 42.392779 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 150, + 330 + ], + "location": [ + -71.120249, + 42.392815 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 150, + 240, + 330 + ], + "location": [ + -71.120487, + 42.393159 + ] + } + ], + "weight": 125.7, + "duration": 125.7, + "distance": 505.7 + }, + { + "geometry": "m`waGrxaqLKMg@i@IGy@}@OSi@i@cAiA", + "maneuver": { + "bearing_after": 36, + "bearing_before": 330, + "location": [ + -71.120899, + 42.393826 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Cutter Avenue", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 150, + 210, + 330 + ], + "location": [ + -71.120899, + 42.393826 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 120, + 225, + 300 + ], + "location": [ + -71.120623, + 42.394091 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.119955, + 42.394716 + ] + } + ], + "weight": 43.800000000, + "duration": 43.800000000, + "distance": 174.2 + }, + { + "geometry": "chwaGlpaqLG?MOCCAAA?C?A@A@ADS`@", + "maneuver": { + "bearing_after": 30, + "bearing_before": 36, + "location": [ + -71.119594, + 42.39506 + ], + "modifier": "slight left", + "type": "fork" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 45, + 225 + ], + "location": [ + -71.119594, + 42.39506 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 120, + 210, + 300 + ], + "location": [ + -71.119488, + 42.395189 + ] + } + ], + "weight": 31.1, + "duration": 31.1, + "distance": 45.5 + }, + { + "geometry": "_jwaGbqaqLo@jBEPM\\GRg@zAGRO^_@lAOb@CFEJKVAFCDKZ", + "maneuver": { + "bearing_after": 299, + "bearing_before": 306, + "location": [ + -71.119703, + 42.395363 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Highland Avenue", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 120, + 300 + ], + "location": [ + -71.119703, + 42.395363 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.120475, + 42.395697 + ] + } + ], + "weight": 81.5, + "duration": 81.5, + "distance": 248.8 + }, + { + "geometry": "cqwaGjabqLAd@?L@R", + "maneuver": { + "bearing_after": 271, + "bearing_before": 300, + "location": [ + -71.122301, + 42.396503 + ], + "modifier": "slight left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dover Street", + "intersections": [ + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 195, + 270, + 300 + ], + "location": [ + -71.122301, + 42.396503 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 150, + 270, + 330 + ], + "location": [ + -71.122561, + 42.396511 + ] + } + ], + "weight": 12.600000000, + "duration": 12.600000000, + "distance": 29.3 + }, + { + "geometry": "cqwaGrcbqLI@GD", + "maneuver": { + "bearing_after": 345, + "bearing_before": 262, + "location": [ + -71.122656, + 42.396504 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 165, + 255, + 345 + ], + "location": [ + -71.122656, + 42.396504 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 165, + 255, + 330 + ], + "location": [ + -71.122671, + 42.396549 + ] + } + ], + "weight": 9.5, + "duration": 9.5, + "distance": 10.4 + }, + { + "geometry": "uqwaGzcbqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 329, + "location": [ + -71.122704, + 42.396589 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 149 + ], + "location": [ + -71.122704, + 42.396589 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Elm Street, Highland Avenue", + "weight": 396.8, + "duration": 396.8, + "distance": 1298.5 + }, + { + "steps": [ + { + "geometry": "uqwaGzcbqLFEHA", + "maneuver": { + "bearing_after": 149, + "bearing_before": 0, + "location": [ + -71.122704, + 42.396589 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 149 + ], + "location": [ + -71.122704, + 42.396589 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 60, + 165, + 255, + 330 + ], + "location": [ + -71.122671, + 42.396549 + ] + } + ], + "weight": 13.8, + "duration": 13.8, + "distance": 10.4 + }, + { + "geometry": "cqwaGrcbqLNvBFn@RnBj@hAP^|A~C@DDJDHfDpGDL", + "maneuver": { + "bearing_after": 257, + "bearing_before": 165, + "location": [ + -71.122656, + 42.396504 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dover Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 90, + 165, + 255, + 345 + ], + "location": [ + -71.122656, + 42.396504 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.123258, + 42.396415 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 135, + 240, + 315 + ], + "location": [ + -71.125476, + 42.395459 + ] + } + ], + "weight": 108.1, + "duration": 108.1, + "distance": 424.6 + }, + { + "geometry": "_ewaGp~bqLGHQRsA~Aq@t@", + "maneuver": { + "bearing_after": 319, + "bearing_before": 230, + "location": [ + -71.126965, + 42.394557 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 2A", + "driving_side": "right", + "name": "Massachusetts Avenue", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.126965, + 42.394557 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.127119, + 42.394692 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.127598, + 42.395112 + ] + } + ], + "weight": 39.3, + "duration": 39.3, + "distance": 116.2 + }, + { + "geometry": "_jwaGddcqLHRFLzAtCxApCn@nAf@`At@~AHN", + "maneuver": { + "bearing_after": 236, + "bearing_before": 320, + "location": [ + -71.127866, + 42.395362 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Rice Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 240, + 315 + ], + "location": [ + -71.127866, + 42.395362 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 135, + 225, + 315 + ], + "location": [ + -71.127971, + 42.395311 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.129521, + 42.394363 + ] + } + ], + "weight": 79.7, + "duration": 79.7, + "distance": 311.6 + }, + { + "geometry": "__waGpvcqLR?D?J?", + "maneuver": { + "bearing_after": 178, + "bearing_before": 232, + "location": [ + -71.13081, + 42.393601 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Cedar Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 60, + 180 + ], + "location": [ + -71.13081, + 42.393601 + ] + } + ], + "weight": 8.6, + "duration": 8.6, + "distance": 21.4 + }, + { + "geometry": "y}vaGpvcqLBj@?H?F?FErACnAAJ?RI`C?P", + "maneuver": { + "bearing_after": 261, + "bearing_before": 181, + "location": [ + -71.130812, + 42.393408 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Rindge Avenue", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 105, + 270 + ], + "location": [ + -71.130812, + 42.393408 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 165, + 270 + ], + "location": [ + -71.131028, + 42.393388 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 165, + 270, + 345 + ], + "location": [ + -71.132044, + 42.393446 + ] + } + ], + "weight": 52.3, + "duration": 52.3, + "distance": 170.7 + }, + { + "geometry": "k~vaGncdqLPA`FKdEKN?l@Aj@AD?D?F?BA^A\\ALA|BA`@Ab@CB?", + "maneuver": { + "bearing_after": 178, + "bearing_before": 274, + "location": [ + -71.132876, + 42.3935 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Sherman Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.132876, + 42.3935 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 105, + 180 + ], + "location": [ + -71.132752, + 42.391206 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 105, + 180, + 285 + ], + "location": [ + -71.132694, + 42.390262 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 180, + 285 + ], + "location": [ + -71.132676, + 42.389632 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180 + ], + "location": [ + -71.132653, + 42.389279 + ] + } + ], + "weight": 117.2, + "duration": 117.2, + "distance": 471.3 + }, + { + "geometry": "{cvaG`bdqL?L?^", + "maneuver": { + "bearing_after": 267, + "bearing_before": 177, + "location": [ + -71.132652, + 42.389261 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 180, + 270 + ], + "location": [ + -71.132652, + 42.389261 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.132716, + 42.389259 + ] + } + ], + "weight": 13.200000000, + "duration": 13.200000000, + "distance": 18.9 + }, + { + "geometry": "{cvaGncdqLdAC", + "maneuver": { + "bearing_after": 177, + "bearing_before": 268, + "location": [ + -71.132881, + 42.389256 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.132881, + 42.389256 + ] + } + ], + "weight": 13.3, + "duration": 13.3, + "distance": 38 + }, + { + "geometry": "uavaGjcdqL?J?b@", + "maneuver": { + "bearing_after": 267, + "bearing_before": 177, + "location": [ + -71.132861, + 42.388914 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.132861, + 42.388914 + ] + } + ], + "weight": 17.6, + "duration": 17.6, + "distance": 19.5 + }, + { + "geometry": "uavaGzddqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 268, + "location": [ + -71.133098, + 42.388907 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 88 + ], + "location": [ + -71.133098, + 42.388907 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Dover Street, Sherman Street", + "weight": 463.1, + "duration": 463.1, + "distance": 1602.6 + }, + { + "steps": [ + { + "geometry": "uavaGzddqL?c@?K", + "maneuver": { + "bearing_after": 88, + "bearing_before": 0, + "location": [ + -71.133098, + 42.388907 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 88 + ], + "location": [ + -71.133098, + 42.388907 + ] + } + ], + "weight": 25.9, + "duration": 25.9, + "distance": 19.5 + }, + { + "geometry": "uavaGjcdqLeAB", + "maneuver": { + "bearing_after": 357, + "bearing_before": 87, + "location": [ + -71.132861, + 42.388914 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.132861, + 42.388914 + ] + } + ], + "weight": 13.4, + "duration": 13.4, + "distance": 38 + }, + { + "geometry": "{cvaGncdqL?_@?M", + "maneuver": { + "bearing_after": 88, + "bearing_before": 357, + "location": [ + -71.132881, + 42.389256 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.132881, + 42.389256 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.132716, + 42.389259 + ] + } + ], + "weight": 12.899999999, + "duration": 12.899999999, + "distance": 18.9 + }, + { + "geometry": "{cvaG`bdqLC?c@Ba@@}B@M@]@_@@C@G?E?E?k@@m@@O?eEJaFJQ@", + "maneuver": { + "bearing_after": 357, + "bearing_before": 87, + "location": [ + -71.132652, + 42.389261 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Sherman Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 180, + 270 + ], + "location": [ + -71.132652, + 42.389261 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180 + ], + "location": [ + -71.132653, + 42.389279 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 180, + 285 + ], + "location": [ + -71.132676, + 42.389632 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 105, + 180, + 285 + ], + "location": [ + -71.132694, + 42.390262 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 105, + 180 + ], + "location": [ + -71.132752, + 42.391206 + ] + } + ], + "weight": 122.100000000, + "duration": 122.100000000, + "distance": 471.3 + }, + { + "geometry": "k~vaGncdqLCj@IlDAV?LIjEAXCnAGfBAVGzAALAV?N", + "maneuver": { + "bearing_after": 275, + "bearing_before": 358, + "location": [ + -71.132876, + 42.3935 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Rindge Avenue", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.132876, + 42.3935 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.133103, + 42.393518 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.134161, + 42.393579 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.135183, + 42.393631 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 285 + ], + "location": [ + -71.136229, + 42.393701 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.136809, + 42.393752 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.136998, + 42.393767 + ] + } + ], + "weight": 89, + "duration": 89, + "distance": 347.9 + }, + { + "geometry": "a`waGv}dqLK?]@e@@SHQNMVG^EVCXCJGN", + "maneuver": { + "bearing_after": 358, + "bearing_before": 275, + "location": [ + -71.137083, + 42.393774 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.137083, + 42.393774 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.137084, + 42.393828 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 135, + 180, + 345 + ], + "location": [ + -71.137103, + 42.394171 + ] + } + ], + "weight": 33.1, + "duration": 33.1, + "distance": 129.2 + }, + { + "geometry": "cewaGzbeqLSASAQ?e@BUDQFOJ]Va@j@", + "maneuver": { + "bearing_after": 2, + "bearing_before": 302, + "location": [ + -71.137898, + 42.394584 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 120, + 210 + ], + "location": [ + -71.137898, + 42.394584 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 45, + 180 + ], + "location": [ + -71.137889, + 42.394678 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 165, + 345 + ], + "location": [ + -71.137927, + 42.395166 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 150, + 315 + ], + "location": [ + -71.138148, + 42.395486 + ] + } + ], + "weight": 32.099999999, + "duration": 32.099999999, + "distance": 132 + }, + { + "geometry": "{kwaGxeeqLq@jCGVAb@?~ACRGNCDUlA?rAAP", + "maneuver": { + "bearing_after": 293, + "bearing_before": 316, + "location": [ + -71.138371, + 42.395662 + ], + "modifier": "slight left", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Minuteman\/Linear Park Connector", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 135, + 300 + ], + "location": [ + -71.138371, + 42.395662 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 270, + 315 + ], + "location": [ + -71.139366, + 42.395963 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 120, + 285 + ], + "location": [ + -71.140062, + 42.396038 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true, + true + ], + "bearings": [ + 75, + 105, + 180, + 270, + 345 + ], + "location": [ + -71.140453, + 42.396148 + ] + } + ], + "weight": 56.8, + "duration": 56.8, + "distance": 225.2 + }, + { + "geometry": "_owaG~ueqLQFE?MFMNOHQ@QBIFGHGLE@GBx@pG?`@DN@L", + "maneuver": { + "bearing_after": 341, + "bearing_before": 275, + "location": [ + -71.140958, + 42.396157 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Minuteman\/Linear Park Connector", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 150, + 345 + ], + "location": [ + -71.140958, + 42.396157 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 135, + 255, + 300 + ], + "location": [ + -71.141373, + 42.396839 + ] + } + ], + "weight": 63.3, + "duration": 63.3, + "distance": 234.7 + }, + { + "geometry": "mqwaGfcfqLG?SCSAM?G@E?IBIBMFKFSNIJEDC@g@RE@C@G?G?C?C@E@C@GDGFQTCDMLmBt@sAf@", + "maneuver": { + "bearing_after": 4, + "bearing_before": 253, + "location": [ + -71.143078, + 42.396551 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Minuteman Bikeway", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 75, + 150, + 270 + ], + "location": [ + -71.143078, + 42.396551 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 165, + 315 + ], + "location": [ + -71.143719, + 42.397974 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 165, + 345 + ], + "location": [ + -71.144055, + 42.398588 + ] + } + ], + "weight": 71.5, + "duration": 71.5, + "distance": 297.2 + }, + { + "geometry": "y`xaGrjfqLQNONKLOVSLYJ[PE@C?C@EAM?", + "maneuver": { + "bearing_after": 323, + "bearing_before": 338, + "location": [ + -71.144261, + 42.399014 + ], + "modifier": "slight left", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Minuteman Bikeway", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 330, + 345 + ], + "location": [ + -71.144261, + 42.399014 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 120, + 135, + 330 + ], + "location": [ + -71.144614, + 42.39932 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.144744, + 42.39955 + ] + } + ], + "weight": 26.5, + "duration": 26.5, + "distance": 108.2 + }, + { + "geometry": "cfxaGfnfqLa@LC@C@a@LgA`@OFc@POJKNKVSz@KV", + "maneuver": { + "bearing_after": 341, + "bearing_before": 4, + "location": [ + -71.144835, + 42.399855 + ], + "modifier": "slight left", + "type": "fork" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 180, + 345 + ], + "location": [ + -71.144835, + 42.399855 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.144915, + 42.400045 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 315, + 345 + ], + "location": [ + -71.144926, + 42.400069 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.145001, + 42.40024 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.145169, + 42.400597 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 150, + 315 + ], + "location": [ + -71.145357, + 42.400943 + ] + } + ], + "weight": 46.8, + "duration": 46.8, + "distance": 188.6 + }, + { + "geometry": "snxaGjufqL]TsBp@sBv@oBr@sBt@{@Xm@PIB", + "maneuver": { + "bearing_after": 331, + "bearing_before": 300, + "location": [ + -71.145981, + 42.401219 + ], + "modifier": "slight right", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Margaret Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 120, + 330 + ], + "location": [ + -71.145981, + 42.401219 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 150, + 255, + 345 + ], + "location": [ + -71.146086, + 42.401369 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 255, + 345 + ], + "location": [ + -71.146339, + 42.401952 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 255, + 345 + ], + "location": [ + -71.146621, + 42.40253 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 255, + 345 + ], + "location": [ + -71.146876, + 42.403092 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 255, + 345 + ], + "location": [ + -71.147147, + 42.403672 + ] + } + ], + "weight": 92.4, + "duration": 92.4, + "distance": 356.7 + }, + { + "geometry": "qayaGd~fqL@\\Db@HhAPvA@J@FLhAThBVlBNtAVvBh@dER|Ax@~GD\\PvAD`@", + "maneuver": { + "bearing_after": 260, + "bearing_before": 341, + "location": [ + -71.147394, + 42.404252 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lake Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.147394, + 42.404252 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.147543, + 42.404235 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.148531, + 42.404074 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.148632, + 42.404054 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.149532, + 42.403869 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.150507, + 42.403668 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.1521, + 42.403343 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.152565, + 42.403242 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.154158, + 42.402924 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.154598, + 42.402833 + ] + } + ], + "weight": 150.9, + "duration": 150.9, + "distance": 628.8 + }, + { + "geometry": "oxxaGhlhqLBf@Dj@@Z", + "maneuver": { + "bearing_after": 261, + "bearing_before": 253, + "location": [ + -71.154774, + 42.402795 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lake Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 74, + 248, + 262 + ], + "location": [ + -71.154774, + 42.402795 + ] + } + ], + "weight": 11.7, + "duration": 11.7, + "distance": 46.2 + }, + { + "geometry": "cxxaGxohqLe@|ASd@Qb@u@vBe@tAg@rAu@nBs@dBmAhCc@fAO`@Mb@eBhGK^K`@}@vECHCHGDGDG@GAW@", + "maneuver": { + "bearing_after": 296, + "bearing_before": 261, + "location": [ + -71.15533, + 42.40274 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 270, + 300 + ], + "location": [ + -71.15533, + 42.40274 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 120, + 300 + ], + "location": [ + -71.156165, + 42.403117 + ] + } + ], + "weight": 201.5, + "duration": 201.5, + "distance": 757.8 + }, + { + "geometry": "inyaGv_jqLFFj@r@", + "maneuver": { + "bearing_after": 219, + "bearing_before": 357, + "location": [ + -71.162997, + 42.406288 + ], + "modifier": "sharp left", + "type": "turn" + }, + "mode": "pushing bike", + "ref": "MA 60", + "driving_side": "right", + "name": "Pleasant Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 180, + 225 + ], + "location": [ + -71.162997, + 42.406288 + ] + } + ], + "weight": 36.1, + "duration": 36.1, + "distance": 38.1 + }, + { + "geometry": "ulyaGrajqLCb@WlA_@jBe@|B]jB_@fBUbA[~AEVUbASt@Qr@", + "maneuver": { + "bearing_after": 279, + "bearing_before": 220, + "location": [ + -71.163298, + 42.406028 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Concord Turnpike West Service Road", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 225, + 285 + ], + "location": [ + -71.163298, + 42.406028 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 105, + 225, + 285 + ], + "location": [ + -71.163478, + 42.406052 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 105, + 285 + ], + "location": [ + -71.163865, + 42.406166 + ] + } + ], + "weight": 99.8, + "duration": 99.8, + "distance": 410.2 + }, + { + "geometry": "iuyaGl~jqLQNK@YBQ?", + "maneuver": { + "bearing_after": 347, + "bearing_before": 295, + "location": [ + -71.167914, + 42.407411 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Spring Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 300, + 345 + ], + "location": [ + -71.167914, + 42.407411 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 165, + 225 + ], + "location": [ + -71.168021, + 42.40769 + ] + } + ], + "weight": 17.6, + "duration": 17.6, + "distance": 43.2 + }, + { + "geometry": "swyaGb_kqLGbAMdAOp@Wz@a@bAa@v@m@`Ao@|@q@j@c@VQFWJ_A\\WJ", + "maneuver": { + "bearing_after": 278, + "bearing_before": 1, + "location": [ + -71.168016, + 42.407783 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Spring Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 180, + 285 + ], + "location": [ + -71.168016, + 42.407783 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.168963, + 42.40797 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 285, + 345 + ], + "location": [ + -71.170902, + 42.40942 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 165, + 345 + ], + "location": [ + -71.170958, + 42.409536 + ] + } + ], + "weight": 98.3, + "duration": 98.3, + "distance": 378.2 + }, + { + "geometry": "kezaGxrkqL@MBO", + "maneuver": { + "bearing_after": 99, + "bearing_before": 340, + "location": [ + -71.171169, + 42.409976 + ], + "modifier": "sharp right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 165, + 330 + ], + "location": [ + -71.171169, + 42.409976 + ] + } + ], + "weight": 4.9, + "duration": 4.9, + "distance": 13.1 + }, + { + "geometry": "eezaGzqkqLO{@Gc@Ak@Ea@I]", + "maneuver": { + "bearing_after": 70, + "bearing_before": 105, + "location": [ + -71.171016, + 42.40995 + ], + "modifier": "slight left", + "type": "fork" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 120, + 285 + ], + "location": [ + -71.171016, + 42.40995 + ] + } + ], + "weight": 24.3, + "duration": 24.3, + "distance": 87.7 + }, + { + "geometry": "ofzaGnkkqLYyAIk@Eo@Cw@B}@", + "maneuver": { + "bearing_after": 68, + "bearing_before": 64, + "location": [ + -71.169996, + 42.410158 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Ring Path", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 240, + 300 + ], + "location": [ + -71.169996, + 42.410158 + ] + } + ], + "weight": 43.2, + "duration": 43.2, + "distance": 126.9 + }, + { + "geometry": "ygzaGbbkqLy@EYDUCGC", + "maneuver": { + "bearing_after": 4, + "bearing_before": 92, + "location": [ + -71.168503, + 42.410373 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 120, + 270 + ], + "location": [ + -71.168503, + 42.410373 + ] + } + ], + "weight": 17.7, + "duration": 17.7, + "distance": 63.8 + }, + { + "geometry": "kkzaGzakqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 19, + "location": [ + -71.168458, + 42.410941 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 199 + ], + "location": [ + -71.168458, + 42.410941 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Sherman Street, Lake Street", + "weight": 1391.8, + "duration": 1391.8, + "distance": 5161.2 + }, + { + "steps": [ + { + "geometry": "kkzaGzakqLFBTBXEx@D", + "maneuver": { + "bearing_after": 199, + "bearing_before": 0, + "location": [ + -71.168458, + 42.410941 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 199 + ], + "location": [ + -71.168458, + 42.410941 + ] + } + ], + "weight": 21.8, + "duration": 21.8, + "distance": 63.8 + }, + { + "geometry": "ygzaGbbkqLC|@Bv@Dn@Hj@XxAH\\D`@@j@Fb@Nz@CNAL", + "maneuver": { + "bearing_after": 272, + "bearing_before": 184, + "location": [ + -71.168503, + 42.410373 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Ring Path", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 120, + 270 + ], + "location": [ + -71.168503, + 42.410373 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 240, + 300 + ], + "location": [ + -71.169996, + 42.410158 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 120, + 285 + ], + "location": [ + -71.171016, + 42.40995 + ] + } + ], + "weight": 65.2, + "duration": 65.2, + "distance": 227.6 + }, + { + "geometry": "kezaGxrkqLULo@^w@x@EJa@t@m@|Am@zAKX", + "maneuver": { + "bearing_after": 334, + "bearing_before": 279, + "location": [ + -71.171169, + 42.409976 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Spring Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 165, + 330 + ], + "location": [ + -71.171169, + 42.409976 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 150, + 210, + 330 + ], + "location": [ + -71.17124, + 42.410088 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 135, + 315 + ], + "location": [ + -71.171745, + 42.41064 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 120, + 210, + 300 + ], + "location": [ + -71.172494, + 42.411044 + ] + } + ], + "weight": 53.599999999, + "duration": 53.599999999, + "distance": 222.4 + }, + { + "geometry": "ymzaGv~kqLGP_A`CaAdCeAnCcAzC{@fCYv@[|@[t@aAdCSb@s@jB_A|BEL", + "maneuver": { + "bearing_after": 302, + "bearing_before": 302, + "location": [ + -71.173076, + 42.41133 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Eastern Avenue", + "intersections": [ + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 120, + 210, + 300 + ], + "location": [ + -71.173076, + 42.41133 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.173815, + 42.411694 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 120, + 210, + 300 + ], + "location": [ + -71.174489, + 42.412023 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.176673, + 42.413008 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.17753, + 42.413415 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 120, + 300 + ], + "location": [ + -71.178195, + 42.413752 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.178384, + 42.413846 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.178917, + 42.414112 + ] + } + ], + "weight": 157.299999999, + "duration": 157.299999999, + "distance": 641.7 + }, + { + "geometry": "ka{aGrgmqLUKQEQCO@OFMFIHIJILWr@", + "maneuver": { + "bearing_after": 23, + "bearing_before": 303, + "location": [ + -71.179624, + 42.414464 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Park Circle", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 24, + 29, + 124, + 217 + ], + "location": [ + -71.179624, + 42.414464 + ] + } + ], + "weight": 25.9, + "duration": 25.9, + "distance": 107.1 + }, + { + "geometry": "if{aGfjmqLMLKHQJMFSH", + "maneuver": { + "bearing_after": 323, + "bearing_before": 302, + "location": [ + -71.180037, + 42.415246 + ], + "modifier": "slight right", + "type": "fork" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Park Circle", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 285, + 330 + ], + "location": [ + -71.180037, + 42.415246 + ] + } + ], + "weight": 12.6, + "duration": 12.6, + "distance": 49 + }, + { + "geometry": "wh{aG|kmqLKGKEMCKE_@I]EUASAM@Q?Q@QBODOBODODOFQHOHMJ]V_Ar@GF_Ap@aAt@{AlAk@d@c@XIFGDYP_@Ry@^c@N]LUFmAXg@Lq@NKBiBb@kBd@gAVYFQBMBE?G@G?GAOCCAIAMGA?MG", + "maneuver": { + "bearing_after": 15, + "bearing_before": 337, + "location": [ + -71.180309, + 42.415636 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Park Avenue", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 165, + 210, + 285 + ], + "location": [ + -71.180309, + 42.415636 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180 + ], + "location": [ + -71.180094, + 42.416408 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 150, + 240, + 330 + ], + "location": [ + -71.180816, + 42.417856 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 150, + 330 + ], + "location": [ + -71.181382, + 42.418546 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 150, + 240, + 330 + ], + "location": [ + -71.182129, + 42.419462 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 165, + 240, + 345 + ], + "location": [ + -71.183002, + 42.421422 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 180, + 255 + ], + "location": [ + -71.183571, + 42.423293 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.18354, + 42.423391 + ] + } + ], + "weight": 237.9, + "duration": 237.9, + "distance": 949.2 + }, + { + "geometry": "mz|aGp_nqLIZKb@YfAGRCVCPCRA`@?`@BlAFzA?\\?`@CZEZI\\IX_@r@o@hAm@bAU`@", + "maneuver": { + "bearing_after": 293, + "bearing_before": 21, + "location": [ + -71.183452, + 42.42359 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Paul Revere Road", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 195, + 300 + ], + "location": [ + -71.183452, + 42.42359 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 270, + 315 + ], + "location": [ + -71.186871, + 42.424185 + ] + } + ], + "weight": 96.4, + "duration": 96.4, + "distance": 396.6 + }, + { + "geometry": "ya}aGlznqLI@C?EAA?G?KA", + "maneuver": { + "bearing_after": 0, + "bearing_before": 312, + "location": [ + -71.187754, + 42.424774 + ], + "modifier": "right", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Paul Revere Road", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 135, + 315 + ], + "location": [ + -71.187754, + 42.424774 + ] + } + ], + "weight": 12.3, + "duration": 12.3, + "distance": 23 + }, + { + "geometry": "cc}aGjznqLIn@ADGb@A@ObA]tBObAAJAJANAX?VDvB@fA?d@Ap@Cr@?B?XCnAC|@?\\EnAC~@?L?TAFCbAARC`@ANIz@E\\AL", + "maneuver": { + "bearing_after": 285, + "bearing_before": 5, + "location": [ + -71.187738, + 42.42498 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Massachusetts Avenue", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 180, + 285 + ], + "location": [ + -71.187738, + 42.42498 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 150, + 285 + ], + "location": [ + -71.188008, + 42.425037 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 255, + 285 + ], + "location": [ + -71.188193, + 42.425084 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 105, + 285 + ], + "location": [ + -71.189587, + 42.425423 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.190879, + 42.425403 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.192585, + 42.425474 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.19338, + 42.42552 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 210, + 285 + ], + "location": [ + -71.194135, + 42.425576 + ] + } + ], + "weight": 144.799999999, + "duration": 144.799999999, + "distance": 586.1 + }, + { + "geometry": "og}aGbfpqLUEaAQMCMC", + "maneuver": { + "bearing_after": 11, + "bearing_before": 284, + "location": [ + -71.194736, + 42.425679 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bow Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.194736, + 42.425679 + ] + } + ], + "weight": 23.1, + "duration": 23.1, + "distance": 65.7 + }, + { + "geometry": "ck}aGbepqLCLAN}@tEa@bBaAzCcBlGCLGPaDhMqBdIc@|AUj@U^g@|@i@v@", + "maneuver": { + "bearing_after": 285, + "bearing_before": 9, + "location": [ + -71.194582, + 42.426259 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Minuteman Bikeway", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.194582, + 42.426259 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.198495, + 42.427624 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 120, + 300 + ], + "location": [ + -71.200884, + 42.428467 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 240, + 315 + ], + "location": [ + -71.203665, + 42.42964 + ] + } + ], + "weight": 211.1, + "duration": 211.1, + "distance": 872.1 + }, + { + "geometry": "qa~aGt_rqLMEG?C?", + "maneuver": { + "bearing_after": 11, + "bearing_before": 313, + "location": [ + -71.20395, + 42.429845 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "White trail", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 135, + 315 + ], + "location": [ + -71.20395, + 42.429845 + ] + } + ], + "weight": 4.2, + "duration": 4.2, + "distance": 15.1 + }, + { + "geometry": "kb~aGn_rqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 7, + "location": [ + -71.203921, + 42.429978 + ], + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "White trail", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 187 + ], + "location": [ + -71.203921, + 42.429978 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Park Avenue, Minuteman Bikeway", + "weight": 1066.2, + "duration": 1066.2, + "distance": 4219.4 + }, + { + "steps": [ + { + "geometry": "kb~aGn_rqLB?F?LD", + "maneuver": { + "bearing_after": 187, + "bearing_before": 0, + "location": [ + -71.203921, + 42.429978 + ], + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "White trail", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 187 + ], + "location": [ + -71.203921, + 42.429978 + ] + } + ], + "weight": 7.7, + "duration": 7.7, + "distance": 15.1 + }, + { + "geometry": "qa~aGt_rqLh@w@", + "maneuver": { + "bearing_after": 133, + "bearing_before": 191, + "location": [ + -71.20395, + 42.429845 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Minuteman Bikeway", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 135, + 315 + ], + "location": [ + -71.20395, + 42.429845 + ] + } + ], + "weight": 14.4, + "duration": 14.4, + "distance": 32.7 + }, + { + "geometry": "g`~aG|}qqLBJLn@DhAb@lAXnA", + "maneuver": { + "bearing_after": 246, + "bearing_before": 133, + "location": [ + -71.203665, + 42.42964 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 135, + 240, + 315 + ], + "location": [ + -71.203665, + 42.42964 + ] + } + ], + "weight": 118.9, + "duration": 118.9, + "distance": 131.3 + }, + { + "geometry": "q}}aG`grqLANCHKFKFMDKDMJIHIJ?HDP?H?PEFRt@B\\", + "maneuver": { + "bearing_after": 286, + "bearing_before": 246, + "location": [ + -71.205128, + 42.429207 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 210, + 285 + ], + "location": [ + -71.205128, + 42.429207 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 120, + 240 + ], + "location": [ + -71.205888, + 42.429657 + ] + } + ], + "weight": 45.7, + "duration": 45.7, + "distance": 130.6 + }, + { + "geometry": "s_~aGlnrqLR@RLd@~ADJ", + "maneuver": { + "bearing_after": 184, + "bearing_before": 262, + "location": [ + -71.206306, + 42.429543 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Adams School Road", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 180, + 345 + ], + "location": [ + -71.206306, + 42.429543 + ] + } + ], + "weight": 27.5, + "duration": 27.5, + "distance": 74.6 + }, + { + "geometry": "_}}aGhrrqL\\]TWPS", + "maneuver": { + "bearing_after": 143, + "bearing_before": 240, + "location": [ + -71.206933, + 42.429124 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 4; MA 225", + "driving_side": "right", + "name": "Massachusetts Avenue", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 150, + 330 + ], + "location": [ + -71.206933, + 42.429124 + ] + } + ], + "weight": 16.9, + "duration": 16.9, + "distance": 49.5 + }, + { + "geometry": "yz}aG~orqLRTRPL?DDLDh@Jb@JB@p@Nf@F`@Jx@NhCl@LBh@Ll@Nx@Lj@Hn@@N@b@Bh@Fz@Rb@Th@Xd@NJDZL~@Rj@NB@F@PBVFn@\\^TTL", + "maneuver": { + "bearing_after": 215, + "bearing_before": 139, + "location": [ + -71.206564, + 42.428773 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 4; MA 225", + "driving_side": "right", + "name": "Pleasant Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 135, + 210, + 315 + ], + "location": [ + -71.206564, + 42.428773 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 60, + 195, + 300 + ], + "location": [ + -71.206763, + 42.428501 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 270 + ], + "location": [ + -71.206883, + 42.428192 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 225 + ], + "location": [ + -71.207025, + 42.427735 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 300 + ], + "location": [ + -71.208233, + 42.423782 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 300 + ], + "location": [ + -71.208427, + 42.42326 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.208508, + 42.423038 + ] + } + ], + "weight": 181.2, + "duration": 181.2, + "distance": 754.6 + }, + { + "geometry": "cr|aGv~rqLV`@T`@NVNVtA|BlApBRZJP~@`Br@jALTj@dAv@tAtAdC\\j@Zd@FLb@t@Zp@^v@rAfDDLZz@Tt@BNPx@HX`@bBH^^nAJVJPJRLPJLLLRLHFFBNHLFVJd@Rx@Zz@\\NF", + "maneuver": { + "bearing_after": 225, + "bearing_before": 205, + "location": [ + -71.208917, + 42.422263 + ], + "modifier": "slight right", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Pleasant Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 210, + 225 + ], + "location": [ + -71.208917, + 42.422263 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 120, + 225 + ], + "location": [ + -71.209376, + 42.421949 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 225, + 330 + ], + "location": [ + -71.212691, + 42.419739 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.213364, + 42.419305 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 150, + 240, + 330 + ], + "location": [ + -71.217124, + 42.417474 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 210, + 300 + ], + "location": [ + -71.218145, + 42.41695 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 105, + 195 + ], + "location": [ + -71.218497, + 42.416422 + ] + } + ], + "weight": 276.8, + "duration": 276.8, + "distance": 1135.5 + }, + { + "geometry": "gh{aGh}tqLi@rCMt@g@rCOv@Mt@g@zCcA`Fu@`EOv@_@hCSzACTWtB]tCWbCk@`FE^CL?DCLQ`BGp@AHCd@El@CZGn@", + "maneuver": { + "bearing_after": 289, + "bearing_before": 199, + "location": [ + -71.218928, + 42.415564 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Concord Avenue", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.218928, + 42.415564 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 180, + 285 + ], + "location": [ + -71.219938, + 42.415838 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.221228, + 42.416188 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 105, + 210, + 285 + ], + "location": [ + -71.224114, + 42.416999 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.226991, + 42.417626 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.230085, + 42.418203 + ] + } + ], + "weight": 252.5, + "duration": 252.5, + "distance": 1016.7 + }, + { + "geometry": "iy{aGzfwqLzBXI`C", + "maneuver": { + "bearing_after": 188, + "bearing_before": 279, + "location": [ + -71.2307, + 42.418287 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.2307, + 42.418287 + ] + } + ], + "weight": 39.7, + "duration": 39.7, + "distance": 123.5 + }, + { + "geometry": "wu{aGvkwqLJ?J?d@?z@BF?j@Fd@DLBr@Lf@H`BZz@PjATNDfA\\x@\\RHn@VDB\\LVJHDt@ZPF", + "maneuver": { + "bearing_after": 177, + "bearing_before": 275, + "location": [ + -71.231484, + 42.417724 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Waltham Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180 + ], + "location": [ + -71.231484, + 42.417724 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 195, + 285, + 315 + ], + "location": [ + -71.232231, + 42.414517 + ] + } + ], + "weight": 125.4, + "duration": 125.4, + "distance": 521.4 + }, + { + "geometry": "kyzaGttwqLj@TRHp@VD@p@TB@F@b@NND~@RFBPDTDNBv@RVD", + "maneuver": { + "bearing_after": 199, + "bearing_before": 199, + "location": [ + -71.232914, + 42.413183 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lexington Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 15, + 195 + ], + "location": [ + -71.232914, + 42.413183 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 120, + 195, + 285 + ], + "location": [ + -71.233021, + 42.412964 + ] + } + ], + "weight": 63.6, + "duration": 63.6, + "distance": 256.5 + }, + { + "geometry": "qkzaG`zwqLTRf@Jx@P`ARr@N^?r@NTFXDZDZ?Z?tKm@PA\\Cd@CF?PAPA\\CJ?H?^?jA@|D?tB@b@?bB@~AAlAAzB@J?x@?P?b@@@?@?t@BN@T@d@DtAPH@bBRf@Dn@FJ@", + "maneuver": { + "bearing_after": 195, + "bearing_before": 192, + "location": [ + -71.23377, + 42.410966 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lexington Street", + "intersections": [ + { + "out": 4, + "in": 0, + "entry": [ + false, + true, + true, + true, + true, + true + ], + "bearings": [ + 13, + 98, + 139, + 190, + 196, + 293 + ], + "location": [ + -71.23377, + 42.410966 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 30, + 195 + ], + "location": [ + -71.234202, + 42.409616 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 180, + 270 + ], + "location": [ + -71.234377, + 42.408696 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 180, + 270 + ], + "location": [ + -71.234119, + 42.406427 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180 + ], + "location": [ + -71.234099, + 42.406241 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.234072, + 42.40427 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 285 + ], + "location": [ + -71.234073, + 42.402126 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 300 + ], + "location": [ + -71.234249, + 42.399793 + ] + } + ], + "weight": 333.9, + "duration": 333.9, + "distance": 1367.7 + }, + { + "geometry": "c_xaGf~wqLVJTDd@D^B\\FZFXHXNXRZTTVVXf@l@@BJJTTVVXPVL`@LtAn@HB@@HBfDxA\\NtAl@n@Xh@Vf@TnB|@JDbDzAjB|@jAj@`@NZJlAZl@PNDNBTDTDjAJ", + "maneuver": { + "bearing_after": 194, + "bearing_before": 185, + "location": [ + -71.23444, + 42.398744 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lexington Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 150, + 180, + 195 + ], + "location": [ + -71.23444, + 42.398744 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 150, + 210 + ], + "location": [ + -71.235558, + 42.396837 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 30, + 195 + ], + "location": [ + -71.236017, + 42.39619 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 300 + ], + "location": [ + -71.23684, + 42.394659 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 300 + ], + "location": [ + -71.237739, + 42.393017 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 210, + 240 + ], + "location": [ + -71.238536, + 42.391599 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 345 + ], + "location": [ + -71.238844, + 42.391045 + ] + } + ], + "weight": 268.3, + "duration": 268.3, + "distance": 1108.3 + }, + { + "geometry": "qevaGr|xqLRJl@\\XNDBHFDBDB`Ab@ZLPHRFPDRF^Hz@PnAXt@PhAVhAV~A^b@L~@Rj@LRF`ARhBb@hDv@bB^F@hB`@HBJ@D@T@H@J?r@DJ?jAF`AF", + "maneuver": { + "bearing_after": 205, + "bearing_before": 185, + "location": [ + -71.239295, + 42.389534 + ], + "modifier": "slight right", + "type": "fork" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bacon Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 165, + 210, + 300 + ], + "location": [ + -71.239295, + 42.389534 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 90, + 210 + ], + "location": [ + -71.239514, + 42.3892 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.239588, + 42.389068 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 270 + ], + "location": [ + -71.240148, + 42.387916 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.240459, + 42.386954 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 285 + ], + "location": [ + -71.240583, + 42.386581 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.241103, + 42.385007 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 285 + ], + "location": [ + -71.241137, + 42.384907 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.24142, + 42.384049 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 180, + 315 + ], + "location": [ + -71.242071, + 42.382017 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.242128, + 42.381511 + ] + } + ], + "weight": 247.799999999, + "duration": 247.799999999, + "distance": 1010.4 + }, + { + "geometry": "sntaGxnyqLBVN~C@\\?^?^O|PAZ", + "maneuver": { + "bearing_after": 261, + "bearing_before": 184, + "location": [ + -71.242207, + 42.380737 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Guinan Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 180, + 255 + ], + "location": [ + -71.242207, + 42.380737 + ] + } + ], + "weight": 95.6, + "duration": 95.6, + "distance": 363.4 + }, + { + "geometry": "ontaGhjzqL|BD", + "maneuver": { + "bearing_after": 181, + "bearing_before": 271, + "location": [ + -71.246607, + 42.380715 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Hammond Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 300 + ], + "location": [ + -71.246607, + 42.380715 + ] + } + ], + "weight": 18.7, + "duration": 18.7, + "distance": 69.6 + }, + { + "geometry": "qjtaGnjzqLFXFZJ^L`@Rh@HRN\\JVLXLZlApC~@xBHTHZBX@XBVh@bD?HBP", + "maneuver": { + "bearing_after": 243, + "bearing_before": 181, + "location": [ + -71.246638, + 42.380089 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Elson Road", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 180, + 240 + ], + "location": [ + -71.246638, + 42.380089 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 315 + ], + "location": [ + -71.247237, + 42.379877 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 60, + 240 + ], + "location": [ + -71.24755, + 42.379732 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 330 + ], + "location": [ + -71.248817, + 42.379062 + ] + } + ], + "weight": 102, + "duration": 102, + "distance": 413.7 + }, + { + "geometry": "w_taGze{qLLFdChAbBv@NF|@`@JFd@RD@D?B?F?F?", + "maneuver": { + "bearing_after": 203, + "bearing_before": 255, + "location": [ + -71.251022, + 42.37836 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Prospect Hill Road", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 75, + 210 + ], + "location": [ + -71.251022, + 42.37836 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 195, + 285 + ], + "location": [ + -71.251064, + 42.37829 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 105, + 210, + 270 + ], + "location": [ + -71.251708, + 42.377116 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 120, + 195 + ], + "location": [ + -71.251753, + 42.377036 + ] + } + ], + "weight": 60.699999999, + "duration": 60.699999999, + "distance": 243.4 + }, + { + "geometry": "_ssaGll{qLRADADA~@c@DCLIJE\\OHCNCFAB?B?F@@?FBJD", + "maneuver": { + "bearing_after": 175, + "bearing_before": 180, + "location": [ + -71.252071, + 42.37632 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.252071, + 42.37632 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 75, + 165, + 270 + ], + "location": [ + -71.252061, + 42.376219 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 60, + 150, + 255, + 345 + ], + "location": [ + -71.251864, + 42.375843 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 165, + 255, + 330 + ], + "location": [ + -71.251761, + 42.375682 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 165, + 255, + 345 + ], + "location": [ + -71.251682, + 42.375529 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 150, + 165, + 345 + ], + "location": [ + -71.251657, + 42.375479 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 45, + 195, + 240 + ], + "location": [ + -71.251639, + 42.375284 + ] + } + ], + "weight": 33.2, + "duration": 33.2, + "distance": 135.8 + }, + { + "geometry": "yksaG`j{qLZp@l@pAJXHVHTVx@BFLZDT@DFXFZFZBZB\\D\\@\\Bb@Bf@@j@@h@@v@@f@?j@?p@A~@Ap@?n@CnAAf@?`@?^@\\@X@P@PDb@D`@D\\D^Jj@DVBR@VBR@T?Z?V@nC", + "maneuver": { + "bearing_after": 230, + "bearing_before": 201, + "location": [ + -71.251694, + 42.375167 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "Weston Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 60, + 225 + ], + "location": [ + -71.251694, + 42.375167 + ] + }, + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true, + true + ], + "bearings": [ + 60, + 120, + 180, + 240, + 345 + ], + "location": [ + -71.253182, + 42.374431 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.25402, + 42.374225 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.255127, + 42.374128 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.256395, + 42.374119 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 210, + 270 + ], + "location": [ + -71.257294, + 42.374149 + ] + } + ], + "weight": 188, + "duration": 188, + "distance": 775.2 + }, + { + "geometry": "ocsaGhb}qLGl@Gf@KfAGp@CVAD?D?D?DAD?FAFAFAHAFADCFAF", + "maneuver": { + "bearing_after": 282, + "bearing_before": 268, + "location": [ + -71.260693, + 42.373843 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 270, + 285 + ], + "location": [ + -71.260693, + 42.373843 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 105, + 285 + ], + "location": [ + -71.261117, + 42.373916 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 120, + 285 + ], + "location": [ + -71.262, + 42.374056 + ] + } + ], + "weight": 33.300000000, + "duration": 33.300000000, + "distance": 138.3 + }, + { + "geometry": "kesaGnl}qLGZAH?D?F@FBH@J", + "maneuver": { + "bearing_after": 288, + "bearing_before": 293, + "location": [ + -71.262319, + 42.37414 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 285, + 315 + ], + "location": [ + -71.262319, + 42.37414 + ] + } + ], + "weight": 9.4, + "duration": 9.4, + "distance": 35.1 + }, + { + "geometry": "mesaG`o}qLTb@DFHJHFHDJFVHr@P\\LZRJFNJLJ", + "maneuver": { + "bearing_after": 230, + "bearing_before": 264, + "location": [ + -71.262728, + 42.374149 + ], + "modifier": "slight left", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Tavern Road", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 225 + ], + "location": [ + -71.262728, + 42.374149 + ] + }, + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 180, + 210 + ], + "location": [ + -71.263255, + 42.373415 + ] + } + ], + "weight": 57, + "duration": 57, + "distance": 157.4 + }, + { + "geometry": "w}raGlt}qLJRDJFPJZHTFVFTNt@TdAz@xE", + "maneuver": { + "bearing_after": 232, + "bearing_before": 212, + "location": [ + -71.263592, + 42.372918 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "Weston Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 45, + 150, + 225 + ], + "location": [ + -71.263592, + 42.372918 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 150, + 240 + ], + "location": [ + -71.263747, + 42.372829 + ] + } + ], + "weight": 72.300000000, + "duration": 72.300000000, + "distance": 221.3 + }, + { + "geometry": "uxraGtc~qLBp@?ZAXATCXCRETK`@YjAGRETCRCNAR?N?P?Z", + "maneuver": { + "bearing_after": 265, + "bearing_before": 248, + "location": [ + -71.266034, + 42.372105 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "Weston Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true, + true + ], + "bearings": [ + 75, + 195, + 240, + 270, + 330 + ], + "location": [ + -71.266034, + 42.372105 + ] + } + ], + "weight": 47.6, + "duration": 47.6, + "distance": 199 + }, + { + "geometry": "a{raGdr~qLHjDBb@BTBXDZFVHXHTJTJPJPNPNPNLTPPJPHPFPFTDZDxB\\", + "maneuver": { + "exit": 1, + "bearing_after": 262, + "bearing_before": 267, + "location": [ + -71.26835, + 42.372485 + ], + "modifier": "straight", + "type": "rotary" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "Weston Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + false, + true + ], + "bearings": [ + 90, + 105, + 270 + ], + "location": [ + -71.26835, + 42.372485 + ] + } + ], + "rotary_name": "Weston Street", + "weight": 89.2, + "duration": 89.2, + "distance": 371.5 + }, + { + "geometry": "knraGvc_rLv@J", + "maneuver": { + "exit": 1, + "bearing_after": 188, + "bearing_before": 191, + "location": [ + -71.271161, + 42.370456 + ], + "modifier": "straight", + "type": "exit rotary" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "Weston Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 180, + 195 + ], + "location": [ + -71.271161, + 42.370456 + ] + } + ], + "weight": 7.5, + "duration": 7.5, + "distance": 31.1 + }, + { + "geometry": "slraGbd_rLrAPRDRFRHNHPJLJLJLLJLJNx@lADHP^NZFNTd@Rd@BJHTHTDHL\\L\\HXJZL`@Rz@Lv@Hr@Hp@?JBj@B`A@p@?\\@`B?hA@p@@n@?L@T@j@DhABdA@R@^?N@^Al@EnAEpAAf@?f@?d@?J?^@r@DvA@`@?D?V@`@A`@A^Ad@Ev@Al@GfBMrCEt@Cp@Cn@Aj@An@ItFCfB?p@Ah@@T@V@RBR@PBPDVDVDZ@FBRBXB\\BZBj@@bA@t@@x@?n@", + "maneuver": { + "bearing_after": 188, + "bearing_before": 188, + "location": [ + -71.271219, + 42.370179 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "ref": "US 20", + "driving_side": "right", + "name": "Boston Post Road", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 15, + 195 + ], + "location": [ + -71.271219, + 42.370179 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 60, + 225 + ], + "location": [ + -71.272267, + 42.368674 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.275849, + 42.367438 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.279849, + 42.367341 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 195, + 270 + ], + "location": [ + -71.28243, + 42.367325 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 270, + 315 + ], + "location": [ + -71.282776, + 42.36735 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.283808, + 42.367434 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 75, + 255 + ], + "location": [ + -71.288309, + 42.367638 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 210, + 270, + 300 + ], + "location": [ + -71.290357, + 42.367369 + ] + } + ], + "weight": 433.2, + "duration": 433.2, + "distance": 1771.5 + }, + { + "geometry": "_{qaG`_crLd@?vBE\\?b@C^A^C^C\\?Z@V@TBZD`@HXHD@\\J^L`@NPHPH^RNFh@XrAr@`D~ArJ`FBBBB@BBB@B?D@D@D@R", + "maneuver": { + "bearing_after": 177, + "bearing_before": 267, + "location": [ + -71.290894, + 42.367358 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Wellesley Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 180, + 270, + 345 + ], + "location": [ + -71.290894, + 42.367358 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 75, + 180 + ], + "location": [ + -71.290885, + 42.367173 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 15, + 180 + ], + "location": [ + -71.290857, + 42.366571 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 135, + 210, + 300 + ], + "location": [ + -71.29142, + 42.363872 + ] + } + ], + "weight": 204, + "duration": 204, + "distance": 826.4 + }, + { + "geometry": "{opaGtpcrLD?D@F?D?D@F@D?F@FBD?DBD@D@FBHBFD", + "maneuver": { + "bearing_after": 184, + "bearing_before": 258, + "location": [ + -71.293714, + 42.360457 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Wellesley Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 75, + 180 + ], + "location": [ + -71.293714, + 42.360457 + ] + } + ], + "weight": 15.3, + "duration": 15.3, + "distance": 63.3 + }, + { + "geometry": "klpaGvqcrLf@h@DDBFDDFHBD@DBB@BBFBFHVBFBFBHRv@Fd@BJBNBJBLBJ\\fAJ^HXJ^Rl@vAfEH\\`@nAPn@Nf@FPDLDJ@BFPFHFLJNNVNRPT?@NTNRJVNVNTXb@pBvCv@hAFHLNRVRRTVVT^\\hAbAx@t@FF|@|@~@~@DDfGbGRPRRRPPNTPVPVPTLRLTJTLTJTJXJVJ^Jx@RLDnAXz@PZFZD\\FfALRBR@T@T@T?TAVCZCVCVEZIXITIVKVKx@_@PGPEPEPEPCDAVCpAIrAIfAIRAR?R?J?D?P?R@R@bADl@DR@jBJp@@", + "maneuver": { + "bearing_after": 217, + "bearing_before": 195, + "location": [ + -71.293875, + 42.359903 + ], + "modifier": "right", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Wellesley Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 210, + 225 + ], + "location": [ + -71.293875, + 42.359903 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 120, + 240 + ], + "location": [ + -71.294295, + 42.359545 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 75, + 255 + ], + "location": [ + -71.294953, + 42.35927 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 240, + 330 + ], + "location": [ + -71.295275, + 42.359192 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.303247, + 42.353951 + ] + } + ], + "weight": 565.5, + "duration": 565.5, + "distance": 2330.1 + }, + { + "geometry": "qbmaGh{erL?XAbC?\\BnH@|B?X@V?V@X?H@L@T?RBT@TBR@PBTDTBTNbAF\\FZDXFTFXFZFRJ^J\\HTJVHVNXP\\PZT\\TXTVXV|ArAr@l@x@r@RRZ^|@nAb@p@v@pAr@fA`@l@v@nAh@z@T^`@p@Xb@p@jADFLRhBvCrAvBzAbCRXhBjDzCrF|CtF^p@R^dAfBZj@Zf@Xb@V^PRNTx@fAz@hAbBzB`@j@TZBBZ`@nA|ABDTXl@p@LNLPLPLRLRHNJR", + "maneuver": { + "bearing_after": 270, + "bearing_before": 181, + "location": [ + -71.305652, + 42.342969 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 30", + "driving_side": "right", + "name": "South Avenue", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.305652, + 42.342969 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.310086, + 42.342829 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 285 + ], + "location": [ + -71.311971, + 42.342264 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 225, + 315 + ], + "location": [ + -71.312339, + 42.342072 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 150, + 210, + 345 + ], + "location": [ + -71.314063, + 42.340409 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 90, + 225 + ], + "location": [ + -71.319796, + 42.33631 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.320793, + 42.33568 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 225, + 330 + ], + "location": [ + -71.322009, + 42.334902 + ] + } + ], + "weight": 592.300000000, + "duration": 592.300000000, + "distance": 2467.1 + }, + { + "geometry": "yqjaGnjjrL@@DJFNHNFRHRHRBJDJJ\\FTVv@Nb@HRDLFNFPn@zAJVLTLVJVLVJVNXP^x@xAn@fApFnJlBbDNZNXLVLZN\\Pf@Pb@Nf@Nd@L`@JZFVFRDPDPFTDTDVDVDXDZBXB\\D^B^@\\@Z@Z@\\?\\?ZAzB?lAA`@?pC?Z@X?\\@`@B^Bt@@ZB`@B`@h@vHD^BZB\\j@jFlAdLJx@@LP|ALrAFh@BXZfD@LFj@Fh@Fd@Fb@H`@H^H\\`@`BH\\FVHZF\\F\\F`@Fh@PrAFl@BLBJ@LBH", + "maneuver": { + "bearing_after": 233, + "bearing_before": 229, + "location": [ + -71.328556, + 42.330049 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "ref": "MA 30", + "driving_side": "right", + "name": "Commonwealth Road", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 45, + 240 + ], + "location": [ + -71.328556, + 42.330049 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.32947, + 42.329625 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 330 + ], + "location": [ + -71.330028, + 42.329384 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 225, + 315 + ], + "location": [ + -71.331728, + 42.328472 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.340184, + 42.324877 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.344528, + 42.324567 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 75, + 255 + ], + "location": [ + -71.349522, + 42.323657 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.349862, + 42.323599 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 255, + 345 + ], + "location": [ + -71.352951, + 42.322833 + ] + } + ], + "weight": 569.8, + "duration": 569.8, + "distance": 2365.6 + }, + { + "geometry": "mbiaGxlorLBJDJBJDJ^~@Rf@FNFLFJDJh@lAhAfCj@nAvAbD~@zBfAbCb@dAzAbDZr@LXHRl@pAr@|AXn@`@z@h@hAZp@z@nB`AtB", + "maneuver": { + "bearing_after": 237, + "bearing_before": 251, + "location": [ + -71.354533, + 42.322467 + ], + "modifier": "slight left", + "type": "fork" + }, + "mode": "cycling", + "ref": "MA 30", + "driving_side": "right", + "name": "Commonwealth Road", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 240, + 255 + ], + "location": [ + -71.354533, + 42.322467 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 345 + ], + "location": [ + -71.355442, + 42.322026 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 315 + ], + "location": [ + -71.360303, + 42.319404 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 135, + 240 + ], + "location": [ + -71.36079, + 42.319135 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 330 + ], + "location": [ + -71.362834, + 42.318003 + ] + } + ], + "weight": 241.1, + "duration": 241.1, + "distance": 963 + }, + { + "geometry": "qbhaGzgqrLhAcAFGHEFEHEDCDCFCFCHCFAHC\\IDAZGHCHCFCHCFEFCHEHG", + "maneuver": { + "bearing_after": 144, + "bearing_before": 232, + "location": [ + -71.363981, + 42.317371 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 27", + "driving_side": "right", + "name": "Main Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 150, + 240, + 330 + ], + "location": [ + -71.363981, + 42.317371 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 165, + 255, + 345 + ], + "location": [ + -71.363327, + 42.316386 + ] + } + ], + "weight": 44.6, + "duration": 44.6, + "distance": 186 + }, + { + "geometry": "aygaGfbqrLFGFEHIFIHKFIFIR[@C^i@^o@BGJOHODMFMDKL_@`@qANe@LYJUNUPSPMLINENELAJA@?", + "maneuver": { + "bearing_after": 146, + "bearing_before": 150, + "location": [ + -71.363083, + 42.315854 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "ref": "MA 27", + "driving_side": "right", + "name": "North Main Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 150, + 330 + ], + "location": [ + -71.363083, + 42.315854 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.362592, + 42.315437 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 210, + 315 + ], + "location": [ + -71.361803, + 42.314918 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.361742, + 42.314887 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.361168, + 42.314645 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 165, + 330 + ], + "location": [ + -71.360459, + 42.314184 + ] + } + ], + "weight": 87.4, + "duration": 87.4, + "distance": 331.1 + }, + { + "geometry": "ilgaG`qprLAcABM", + "maneuver": { + "bearing_after": 88, + "bearing_before": 174, + "location": [ + -71.360332, + 42.313811 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180 + ], + "location": [ + -71.360332, + 42.313811 + ] + } + ], + "weight": 8.2, + "duration": 8.2, + "distance": 34.5 + }, + { + "geometry": "glgaGnnprL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 108, + "location": [ + -71.359917, + 42.313798 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 288 + ], + "location": [ + -71.359917, + 42.313798 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Wellesley Street, Commonwealth Road", + "weight": 5596.2, + "duration": 5596.2, + "distance": 22221.6 + }, + { + "steps": [ + { + "geometry": "glgaGnnprLCL@bA", + "maneuver": { + "bearing_after": 288, + "bearing_before": 0, + "location": [ + -71.359917, + 42.313798 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 288 + ], + "location": [ + -71.359917, + 42.313798 + ] + } + ], + "weight": 12, + "duration": 12, + "distance": 34.5 + }, + { + "geometry": "ilgaG`qprLA?K@M@ODODMH", + "maneuver": { + "bearing_after": 354, + "bearing_before": 268, + "location": [ + -71.360332, + 42.313811 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 27", + "driving_side": "right", + "name": "North Main Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180 + ], + "location": [ + -71.360332, + 42.313811 + ] + } + ], + "weight": 13.4, + "duration": 13.4, + "distance": 43.1 + }, + { + "geometry": "sngaGzqprLMe@COCSUsJCu@Aw@Cm@Aw@Ci@Ak@Cg@Eg@Gk@c@eDWkBGi@Eg@E_@A[AU?S?Q?S@UFyC@k@@]?U@W?[@_@?c@@{@DmD@c@RiS@s@?W@S?O?QAQ?OAQ?MAKAMAMCOAQk@mEg@_EOeAC]Ee@Ec@GkAc@aHO}B", + "maneuver": { + "bearing_after": 63, + "bearing_before": 345, + "location": [ + -71.360459, + 42.314184 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Pine Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 165, + 330 + ], + "location": [ + -71.360459, + 42.314184 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 75, + 270 + ], + "location": [ + -71.35674, + 42.314488 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 75, + 255 + ], + "location": [ + -71.355291, + 42.314756 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.352756, + 42.314953 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.350507, + 42.314869 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.350328, + 42.314863 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 180, + 270 + ], + "location": [ + -71.346043, + 42.314771 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.344695, + 42.31504 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.343739, + 42.315243 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.343242, + 42.315344 + ] + } + ], + "weight": 413.299999999, + "duration": 413.299999999, + "distance": 1676.1 + }, + { + "geometry": "cxgaGptlrLIDKDqDdB{@`@kBz@g@TOFMDOFKD", + "maneuver": { + "bearing_after": 336, + "bearing_before": 80, + "location": [ + -71.340407, + 42.315699 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Oak Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 150, + 255, + 330 + ], + "location": [ + -71.340407, + 42.315699 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 150, + 255, + 330 + ], + "location": [ + -71.34098, + 42.316703 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 150, + 345 + ], + "location": [ + -71.341149, + 42.317001 + ] + } + ], + "weight": 71, + "duration": 71, + "distance": 280.2 + }, + { + "geometry": "ufhaGr|lrLAGAGAECGGIGIGI_CeCSWMOMWGMCMAMAQCg@IoBA_@?_@AWCUCSCQCMEMGMIOQWQOc@c@WSWYSY[c@]i@SUSUOKMGQEOEOGKGOKMKKMOSMQKSs@mBCOAO@Q@QTaCNuAD]f@wEDa@Fe@Fa@F]F]H_@V}ABMHc@H[DYFYFYDYD]B[D_@B[?U?YASCSKy@E]E]CWO{BQsBGs@Ei@AGEe@E_@Ia@GYGYIUi@aBYy@e@{ASk@IUACM[MWIOKKIIIEMEKCQEOGMGMEMK}@k@EEMIMMMKIIKMECSW]c@uCuDOOQMQIWIuAc@", + "maneuver": { + "bearing_after": 64, + "bearing_before": 338, + "location": [ + -71.341697, + 42.318032 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Winter Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 165, + 345 + ], + "location": [ + -71.341697, + 42.318032 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 225, + 330 + ], + "location": [ + -71.340412, + 42.319083 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 255 + ], + "location": [ + -71.335544, + 42.321807 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.334133, + 42.321569 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 180, + 285 + ], + "location": [ + -71.331593, + 42.321006 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 105, + 285 + ], + "location": [ + -71.331524, + 42.320988 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 270 + ], + "location": [ + -71.329848, + 42.32065 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.329063, + 42.320796 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.328315, + 42.320904 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.327742, + 42.320987 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 150, + 255 + ], + "location": [ + -71.326713, + 42.321176 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 135, + 240 + ], + "location": [ + -71.32585, + 42.321516 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 135, + 210 + ], + "location": [ + -71.324301, + 42.322301 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 195, + 315 + ], + "location": [ + -71.321989, + 42.324934 + ] + } + ], + "weight": 506.499999999, + "duration": 506.499999999, + "distance": 2090 + }, + { + "geometry": "otiaGh`irLRoAb@qC^mCZkBPoAL{AHmB?qA?y@G{@Kw@g@}AI[eAqC[y@k@uAAE_A{BGQMYUm@Ia@AEIqA@}BBuGHiD", + "maneuver": { + "bearing_after": 108, + "bearing_before": 16, + "location": [ + -71.321809, + 42.32536 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Radcliffe Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.321809, + 42.32536 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 180, + 285 + ], + "location": [ + -71.319968, + 42.32492 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.317612, + 42.324568 + ] + } + ], + "weight": 255.9, + "duration": 255.9, + "distance": 1031.1 + }, + { + "geometry": "yyiaGbwfrLk@C{@MwBg@o@S", + "maneuver": { + "bearing_after": 2, + "bearing_before": 92, + "location": [ + -71.310098, + 42.326209 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Wellesley Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 195, + 270 + ], + "location": [ + -71.310098, + 42.326209 + ] + } + ], + "weight": 41, + "duration": 41, + "distance": 155.1 + }, + { + "geometry": "ibjaGttfrLFw@HeBB_@FuAHmCBgAFe@L_AXkATq@\\w@x@sAz@sABC^aAHUb@aAPc@^g@Zi@", + "maneuver": { + "bearing_after": 101, + "bearing_before": 16, + "location": [ + -71.30971, + 42.327571 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Woodchester Drive", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 105, + 195 + ], + "location": [ + -71.30971, + 42.327571 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.30637, + 42.32711 + ] + } + ], + "weight": 141.600000000, + "duration": 141.600000000, + "distance": 574.8 + }, + { + "geometry": "cuiaGrnerLOeAMu@IQEMWY_@]{AiA]a@Oc@EOKo@Gy@?C@e@Dk@Hc@Hi@Hm@@Q@KC_@E_@", + "maneuver": { + "bearing_after": 71, + "bearing_before": 130, + "location": [ + -71.303618, + 42.325459 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Ledgewood Road", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 315 + ], + "location": [ + -71.303618, + 42.325459 + ] + } + ], + "weight": 94, + "duration": 94, + "distance": 388.6 + }, + { + "geometry": "m|iaGdvdrLiBsCEGEGEEGGEEGEWSu@k@GGIG[[", + "maneuver": { + "bearing_after": 45, + "bearing_before": 73, + "location": [ + -71.299707, + 42.326634 + ], + "modifier": "slight left", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Shady Hill Road", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 180, + 255 + ], + "location": [ + -71.299707, + 42.326634 + ] + } + ], + "weight": 48.1, + "duration": 48.1, + "distance": 194.5 + }, + { + "geometry": "{djaGzldrL?I?G?GAGAEAGAGCGCECGEKGKGIGIIKMOg@i@EGEGEECGCGCGCGCIAIAIAKAG?K@I?K@OBQ@M@MNaABQBSBUBS@M@M?M@M?K?MAOEmAAO?M?O@K?M?K@I@I@MBQBOBOBQBQH]F]H_@x@{DDOBQPeABULo@BODQNs@d@aC~@mEDYDUDUD]Hy@Dw@?K@_@@SBWDUH[L]Ra@^o@RYNUJSJODKJWPs@He@BS@EB]Dk@?ID}@Bu@@M@O@I@MBOR{ADSBSHk@BOBM@OBQDc@BYFs@BMJaA@M@K@M@M@M?MFaB@a@@M?M?M?K?K?M?IAI?KAIS{CAMAO?MAM?OAO?K?M?K?I@M?I?K?I?I?KAI?IWmDAK?K?K?I@K?K@I@I@K@I@IBKBKDKlA_EtAoENg@x@eCl@oBHYHWDOBMDKBMBM@K@K@K@MBo@BUBk@Bi@?AJ}B@M@QHeCBk@@g@FwB@[@O?Q@g@@a@?I?KAG?IAGI{@?IAIAK?IAM?MAM?M@O?K@K@IPs@@I@I@I@I?I?I?I?MG}@AYAWEuAAUAQCSAQCSGk@CSCUC[A[Ca@Cc@SwDCg@G_AAI", + "maneuver": { + "bearing_after": 88, + "bearing_before": 35, + "location": [ + -71.298223, + 42.32798 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Glen Road", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 210, + 270 + ], + "location": [ + -71.298223, + 42.32798 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 105, + 300 + ], + "location": [ + -71.29206, + 42.327956 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 105, + 210, + 285 + ], + "location": [ + -71.291706, + 42.327872 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 285, + 315 + ], + "location": [ + -71.291362, + 42.327782 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 270 + ], + "location": [ + -71.288121, + 42.326941 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 105, + 270 + ], + "location": [ + -71.284752, + 42.325828 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 105, + 285 + ], + "location": [ + -71.282892, + 42.32545 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.281329, + 42.325241 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 285, + 315 + ], + "location": [ + -71.277367, + 42.325491 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.276021, + 42.324991 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 120, + 300 + ], + "location": [ + -71.274109, + 42.324191 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 285, + 330 + ], + "location": [ + -71.272696, + 42.3237 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 180, + 285 + ], + "location": [ + -71.272462, + 42.323675 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 195, + 285 + ], + "location": [ + -71.271211, + 42.32355 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.270453, + 42.323492 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.270028, + 42.32346 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.269286, + 42.323407 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 90, + 270 + ], + "location": [ + -71.269121, + 42.323399 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 150, + 270 + ], + "location": [ + -71.268746, + 42.323382 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 180, + 270 + ], + "location": [ + -71.2686, + 42.323387 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.266857, + 42.323327 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 180, + 270 + ], + "location": [ + -71.265598, + 42.323444 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.26488, + 42.323565 + ] + } + ], + "weight": 743.9, + "duration": 743.9, + "distance": 3101.5 + }, + { + "geometry": "yjiaGfo}qL?M@G@G@GBIFSBEFM", + "maneuver": { + "bearing_after": 92, + "bearing_before": 80, + "location": [ + -71.262761, + 42.323805 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Glen Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 90, + 255, + 345 + ], + "location": [ + -71.262761, + 42.323805 + ] + } + ], + "weight": 17.9, + "duration": 17.9, + "distance": 40.9 + }, + { + "geometry": "{iiaGnl}qLCCEEECEECCEEGGCCUWOQIM{AeBMQIKGIEGAAEIEGEICGACEICGEKCKEKCOCOCMCOCM?EAEAG?EAE?EAG?E?GAG?KAG?KASAo@AKEkAC}@Cg@Cc@GgA?EAI?ICQAMAGAOCOCMEUAKCKEOAGI[IYGSGWCICKESa@gBQu@G[IYKg@CMEMCMGMEKEKEIGKIKk@{@c@k@S]", + "maneuver": { + "bearing_after": 33, + "bearing_before": 122, + "location": [ + -71.262316, + 42.323664 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 16", + "driving_side": "right", + "name": "Washington Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.262316, + 42.323664 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 135, + 210, + 300 + ], + "location": [ + -71.262222, + 42.323765 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.261986, + 42.323986 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.261316, + 42.324575 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 165, + 270 + ], + "location": [ + -71.258943, + 42.325247 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 75, + 180, + 255 + ], + "location": [ + -71.257755, + 42.325364 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 240, + 330 + ], + "location": [ + -71.256382, + 42.325767 + ] + } + ], + "weight": 198.600000000, + "duration": 198.600000000, + "distance": 827.4 + }, + { + "geometry": "w~iaGbw{qLQc@GOGMQ[ACCCEKIMKQ", + "maneuver": { + "bearing_after": 53, + "bearing_before": 43, + "location": [ + -71.253784, + 42.327002 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "ref": "MA 16", + "driving_side": "right", + "name": "Washington Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 60, + 225 + ], + "location": [ + -71.253784, + 42.327002 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 45, + 180, + 225 + ], + "location": [ + -71.253144, + 42.327366 + ] + } + ], + "weight": 22.9, + "duration": 22.9, + "distance": 77.6 + }, + { + "geometry": "majaGpr{qLJOHMFGDGBCBCBEDEHG`@]HIHGFIHIFKDIFKDIDMFMBKBKBKDW~BmGHUHSJYJWJULYR_@JQLSJQLQLOLQNQJMJKHGJKJGt@g@JGHEHENGTINGNENGPEPENC~@SNCNELGLGNGLINININKLKNMLKJKJIJOJKHMFKFMDKDKDMBOBMDM@MBM@M@M?K?M?O?KAOAQAQCQCQIq@CSCQASCQAQ?SAQ?S?S?S@S?S@S@S@S@O@QBQBQBSBSBUPaABSBS@QBS@U@Q?U?S?S?SAUASASCUCUCQAOCOEQCOESESGOEQEOo@qBGOEOCOCSCQCQASAUAQAQ?S?O@k@?U?U@U@U@U@QBS@UDSBWDUBSDWFUR_AF[FYF[F[F[D[F[D[DYBYDYBYD]@[B]B[?[@Y@Y?W?]@c@AcD@{G@Q?Q@S@S@QBQ@SBQBQDODODOFOFMFOHMFKHMHKFId@k@HKHKLOJMHOHOLUzAeCLUNSJQNSLQLQZ_@FGFIFGFGFGb@_@HGHI`@a@HGHGHGJGJCJELEJCLAHAJ?J?J@HBJDd@PHBJBHBJ@H@F@L?", + "maneuver": { + "bearing_after": 136, + "bearing_before": 46, + "location": [ + -71.253047, + 42.327434 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Quinobequin Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.253047, + 42.327434 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 150, + 285, + 315 + ], + "location": [ + -71.252799, + 42.327231 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 120, + 285, + 300 + ], + "location": [ + -71.251675, + 42.326448 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 315 + ], + "location": [ + -71.248665, + 42.324712 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 330 + ], + "location": [ + -71.248227, + 42.324077 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 255, + 330 + ], + "location": [ + -71.244933, + 42.321834 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 105, + 270 + ], + "location": [ + -71.243676, + 42.32182 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.243413, + 42.321774 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 240, + 330 + ], + "location": [ + -71.239722, + 42.322136 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 120, + 285 + ], + "location": [ + -71.236976, + 42.32204 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 90, + 285 + ], + "location": [ + -71.234588, + 42.321477 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.233596, + 42.321434 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.232778, + 42.321439 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 135, + 315 + ], + "location": [ + -71.228983, + 42.320287 + ] + } + ], + "weight": 687.499999999, + "duration": 687.499999999, + "distance": 2816.1 + }, + { + "geometry": "iahaGbovqLEe@KyAG_AAU", + "maneuver": { + "bearing_after": 78, + "bearing_before": 185, + "location": [ + -71.226904, + 42.317169 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Boylston Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 75, + 180 + ], + "location": [ + -71.226904, + 42.317169 + ] + } + ], + "weight": 26, + "duration": 26, + "distance": 90.2 + }, + { + "geometry": "ebhaGlhvqLTE^ED?HAHAB?rBM|AMh@E", + "maneuver": { + "bearing_after": 171, + "bearing_before": 80, + "location": [ + -71.225826, + 42.317308 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Chestnut Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 90, + 165, + 255, + 345 + ], + "location": [ + -71.225826, + 42.317308 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 180, + 255, + 345 + ], + "location": [ + -71.225759, + 42.316957 + ] + } + ], + "weight": 49.2, + "duration": 49.2, + "distance": 187.4 + }, + { + "geometry": "uwgaGzfvqL?H?FBd@@B@DDLBFDH@B?@BBBDDD", + "maneuver": { + "bearing_after": 262, + "bearing_before": 174, + "location": [ + -71.225581, + 42.315631 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 180, + 270 + ], + "location": [ + -71.225581, + 42.315631 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.22615, + 42.315458 + ] + } + ], + "weight": 15.6, + "duration": 15.6, + "distance": 56.3 + }, + { + "geometry": "mvgaGrjvqL@B", + "maneuver": { + "bearing_after": 223, + "bearing_before": 222, + "location": [ + -71.226182, + 42.315433 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 45, + 225 + ], + "location": [ + -71.226182, + 42.315433 + ] + } + ], + "weight": 2.1, + "duration": 2.1, + "distance": 2.3 + }, + { + "geometry": "kvgaGvjvqLvDhF", + "maneuver": { + "bearing_after": 222, + "bearing_before": 223, + "location": [ + -71.226202, + 42.315418 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Echo Bridge", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 45, + 225 + ], + "location": [ + -71.226202, + 42.315418 + ] + } + ], + "weight": 38.6, + "duration": 38.6, + "distance": 139.6 + }, + { + "geometry": "spgaG`rvqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 223, + "location": [ + -71.227365, + 42.314504 + ], + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Echo Bridge", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 43 + ], + "location": [ + -71.227365, + 42.314504 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Glen Road, Quinobequin Road", + "weight": 3399.1, + "duration": 3399.1, + "distance": 13807.3 + }, + { + "steps": [ + { + "geometry": "spgaG`rvqLwDiF", + "maneuver": { + "bearing_after": 43, + "bearing_before": 0, + "location": [ + -71.227365, + 42.314504 + ], + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Echo Bridge", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 43 + ], + "location": [ + -71.227365, + 42.314504 + ] + } + ], + "weight": 38.6, + "duration": 38.6, + "distance": 139.6 + }, + { + "geometry": "kvgaGvjvqLAC", + "maneuver": { + "bearing_after": 43, + "bearing_before": 42, + "location": [ + -71.226202, + 42.315418 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 45, + 225 + ], + "location": [ + -71.226202, + 42.315418 + ] + } + ], + "weight": 2.1, + "duration": 2.1, + "distance": 2.3 + }, + { + "geometry": "mvgaGrjvqLEECECC?AACEICGEMAEACCe@?G?I", + "maneuver": { + "bearing_after": 42, + "bearing_before": 43, + "location": [ + -71.226182, + 42.315433 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 45, + 225 + ], + "location": [ + -71.226182, + 42.315433 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.22615, + 42.315458 + ] + } + ], + "weight": 19.900000000, + "duration": 19.900000000, + "distance": 56.3 + }, + { + "geometry": "uwgaGzfvqLTA", + "maneuver": { + "bearing_after": 174, + "bearing_before": 82, + "location": [ + -71.225581, + 42.315631 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Chestnut Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 180, + 270 + ], + "location": [ + -71.225581, + 42.315631 + ] + } + ], + "weight": 10.9, + "duration": 10.9, + "distance": 11.9 + }, + { + "geometry": "_wgaGxfvqLAM?M@O?OHwA@M?O@QAa@CmB", + "maneuver": { + "bearing_after": 85, + "bearing_before": 174, + "location": [ + -71.225567, + 42.315524 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Summer Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 90, + 165 + ], + "location": [ + -71.225567, + 42.315524 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.224422, + 42.315457 + ] + } + ], + "weight": 37.3, + "duration": 37.3, + "distance": 140.9 + }, + { + "geometry": "wvgaGd|uqLj@In@Kr@KdASbDw@LEJEFODMDc@BMBMBMBKDKv@qBDKBMBKDMDU@KBK@GNkA", + "maneuver": { + "bearing_after": 170, + "bearing_before": 85, + "location": [ + -71.223865, + 42.315479 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "High Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 90, + 165, + 270, + 345 + ], + "location": [ + -71.223865, + 42.315479 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 165, + 345 + ], + "location": [ + -71.223818, + 42.315259 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 165, + 255, + 345 + ], + "location": [ + -71.223697, + 42.314763 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 105, + 285 + ], + "location": [ + -71.221664, + 42.312842 + ] + } + ], + "weight": 102.699999999, + "duration": 102.699999999, + "distance": 426.1 + }, + { + "geometry": "oegaG~juqL?IAuA?k@?U?W?Q@W?WBa@D{@@a@JcB@S?Q@Q?O?M?O?MAKAIAGAIAGCIEICGEGGGU[e@m@qA_BMQ]_@KQcAuA", + "maneuver": { + "bearing_after": 88, + "bearing_before": 105, + "location": [ + -71.22112, + 42.312719 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Elliot Street", + "intersections": [ + { + "out": 1, + "in": 4, + "entry": [ + true, + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270, + 285 + ], + "location": [ + -71.22112, + 42.312719 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.219685, + 42.3127 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 120, + 255 + ], + "location": [ + -71.217943, + 42.312616 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 180, + 240 + ], + "location": [ + -71.217679, + 42.312766 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 330 + ], + "location": [ + -71.217538, + 42.312882 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.217314, + 42.313069 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.216742, + 42.313553 + ] + } + ], + "weight": 122.200000000, + "duration": 122.200000000, + "distance": 490.9 + }, + { + "geometry": "cngaGjktqLP[DKDKDIDIf@aAHQJS", + "maneuver": { + "bearing_after": 127, + "bearing_before": 42, + "location": [ + -71.216058, + 42.314103 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Columbia Avenue", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.216058, + 42.314103 + ] + } + ], + "weight": 31.2, + "duration": 31.2, + "distance": 93.2 + }, + { + "geometry": "{jgaGzetqL]]?Gr@{A", + "maneuver": { + "bearing_after": 35, + "bearing_before": 127, + "location": [ + -71.215178, + 42.313577 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Chandler Place", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 210, + 315 + ], + "location": [ + -71.215178, + 42.313577 + ] + } + ], + "weight": 29, + "duration": 29, + "distance": 71.6 + }, + { + "geometry": "ejgaGxatqL_CaC", + "maneuver": { + "bearing_after": 36, + "bearing_before": 126, + "location": [ + -71.21453, + 42.313473 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Upper Falls Greenway", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.21453, + 42.313473 + ] + } + ], + "weight": 34.7, + "duration": 34.7, + "distance": 88.6 + }, + { + "geometry": "engaGv}sqLJk@", + "maneuver": { + "bearing_after": 109, + "bearing_before": 36, + "location": [ + -71.213883, + 42.31411 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 105, + 210 + ], + "location": [ + -71.213883, + 42.31411 + ] + } + ], + "weight": 10.7, + "duration": 10.7, + "distance": 19.3 + }, + { + "geometry": "ymgaGj|sqLCACC}@_AEEGGIGGECEEEEGCCCEyByBsBsBACCC?EAC?EAE?CFgCBk@@u@@G@I@G@EFQBGDM", + "maneuver": { + "bearing_after": 32, + "bearing_before": 109, + "location": [ + -71.213663, + 42.314051 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 195, + 285 + ], + "location": [ + -71.213663, + 42.314051 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 195, + 270 + ], + "location": [ + -71.210977, + 42.315875 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.210764, + 42.315863 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 120, + 210, + 300 + ], + "location": [ + -71.210244, + 42.315771 + ] + } + ], + "weight": 103.700000000, + "duration": 103.700000000, + "distance": 397.7 + }, + { + "geometry": "gxgaGhfsqLCCKGIIKICCEEGIIIGGEEEGIKGEIMGG", + "maneuver": { + "bearing_after": 32, + "bearing_before": 122, + "location": [ + -71.210133, + 42.315718 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Needham Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.210133, + 42.315718 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 300 + ], + "location": [ + -71.209616, + 42.316235 + ] + } + ], + "weight": 21.2, + "duration": 21.2, + "distance": 85.5 + }, + { + "geometry": "a|gaGlbsqLASCICIGMCMAIAGCK?I@G@GBK", + "maneuver": { + "bearing_after": 74, + "bearing_before": 40, + "location": [ + -71.209506, + 42.316329 + ], + "modifier": "slight right", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Needham Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 75, + 225, + 315 + ], + "location": [ + -71.209506, + 42.316329 + ] + } + ], + "weight": 45.2, + "duration": 45.2, + "distance": 59.9 + }, + { + "geometry": "w|gaGd~rqLM?GAK?C?E?O?UAM@q@?KAG?S?S?OAOCQCOCMEGAIEGCGCOGMGMICAMIOKGECCMKGICCECACIKIKIKIMGMIOIQIQISAEGMCISg@", + "maneuver": { + "bearing_after": 2, + "bearing_before": 106, + "location": [ + -71.208829, + 42.316444 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Winchester Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 75, + 180, + 285 + ], + "location": [ + -71.208829, + 42.316444 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 120, + 180, + 285 + ], + "location": [ + -71.208821, + 42.316551 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 75, + 180, + 210 + ], + "location": [ + -71.208818, + 42.316922 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.208326, + 42.318492 + ] + } + ], + "weight": 88.3, + "duration": 88.3, + "distance": 367.7 + }, + { + "geometry": "mnhaGpsrqLEGEISe@CIOYO_@CIQ]CGiAwBQ]Q]Yi@IQIMq@sAEIQYiAwBe@_Aw@{ASc@S_@MU[m@KQaAeBEIAAGKEIGGGGSUGIWWIKmBiBGGIEOKMI_B}@GEIEKIMIm@c@IGIIMKOMSSQSUUSUSU}AmBaAkACCMOKMMMMMOOOMcAaAg@e@{AsAi@i@?A[YaA}@GIKIo@m@_@]IISS[YEECCAA", + "maneuver": { + "bearing_after": 53, + "bearing_before": 54, + "location": [ + -71.207134, + 42.319272 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Centre Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 135, + 240 + ], + "location": [ + -71.207134, + 42.319272 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 240, + 315 + ], + "location": [ + -71.206667, + 42.319528 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 150, + 225, + 330 + ], + "location": [ + -71.205069, + 42.320474 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.204528, + 42.320802 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.203799, + 42.321255 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.203022, + 42.321727 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 330 + ], + "location": [ + -71.202842, + 42.321834 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.202342, + 42.322141 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 120, + 210 + ], + "location": [ + -71.201485, + 42.32272 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 225, + 315 + ], + "location": [ + -71.20138, + 42.322819 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 195, + 210 + ], + "location": [ + -71.200545, + 42.32367 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.200071, + 42.324386 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.199704, + 42.324852 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 210 + ], + "location": [ + -71.199262, + 42.325299 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 225 + ], + "location": [ + -71.197872, + 42.326516 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 285 + ], + "location": [ + -71.197134, + 42.327288 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.196706, + 42.327745 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.196001, + 42.328473 + ] + } + ], + "weight": 362.2, + "duration": 362.2, + "distance": 1498.3 + }, + { + "geometry": "_mjaGdipqLAE?EAE?GAE?M", + "maneuver": { + "bearing_after": 77, + "bearing_before": 37, + "location": [ + -71.195226, + 42.329278 + ], + "modifier": "slight right", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Centre Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 75, + 225 + ], + "location": [ + -71.195226, + 42.329278 + ] + } + ], + "weight": 9.7, + "duration": 9.7, + "distance": 18.8 + }, + { + "geometry": "emjaGvgpqLC@CAC?E?C?EACAC?CAIAYEg@ICA_@E", + "maneuver": { + "bearing_after": 7, + "bearing_before": 77, + "location": [ + -71.195004, + 42.329311 + ], + "modifier": "left", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Centre Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 105, + 165, + 255 + ], + "location": [ + -71.195004, + 42.329311 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 30, + 195 + ], + "location": [ + -71.19496, + 42.329556 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 195, + 210 + ], + "location": [ + -71.194925, + 42.329687 + ] + } + ], + "weight": 25.299999999, + "duration": 25.299999999, + "distance": 85.7 + }, + { + "geometry": "}qjaGvfpqLEe@AQGm@Ec@C]CYEe@Q{BEk@AMAUAMAGGy@Ew@Gu@I}@QkBGc@Ga@YsC?GEWGm@QmBQmBe@uFGq@WqCW_DCYCYCWCYA]GgACYG}AM{BAUAQAQAQE[CWK{@E]C_@C[Iy@ASCSC[Gs@IaAOiBIoAC]AUAW?U?U@UBUBSBSb@{BJs@Hm@@W@a@?a@Ck@Gi@Qu@GWK]Oc@GUIYESESGWCUCW?GAOEe@[}F?IMmB", + "maneuver": { + "bearing_after": 77, + "bearing_before": 7, + "location": [ + -71.194842, + 42.330072 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beacon Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 75, + 195, + 255 + ], + "location": [ + -71.194842, + 42.330072 + ] + }, + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 150, + 225, + 255 + ], + "location": [ + -71.194325, + 42.330151 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 75, + 255 + ], + "location": [ + -71.192838, + 42.330366 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true, + true + ], + "bearings": [ + 75, + 120, + 255, + 300, + 330 + ], + "location": [ + -71.192259, + 42.330448 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 75, + 255 + ], + "location": [ + -71.190859, + 42.330664 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 225, + 255 + ], + "location": [ + -71.190683, + 42.3307 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.189614, + 42.330896 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 75, + 255 + ], + "location": [ + -71.188279, + 42.331122 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 180, + 255 + ], + "location": [ + -71.187045, + 42.331314 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 330 + ], + "location": [ + -71.186801, + 42.331352 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.18607, + 42.331466 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 180, + 255 + ], + "location": [ + -71.184252, + 42.331721 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 315 + ], + "location": [ + -71.18412, + 42.331735 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 75, + 105, + 255 + ], + "location": [ + -71.181639, + 42.332074 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 150, + 255, + 330 + ], + "location": [ + -71.181246, + 42.332133 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 150, + 255 + ], + "location": [ + -71.181149, + 42.332147 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 240, + 255 + ], + "location": [ + -71.180749, + 42.332207 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.17989, + 42.332336 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 255, + 330 + ], + "location": [ + -71.176198, + 42.332195 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 75, + 255 + ], + "location": [ + -71.173376, + 42.332789 + ] + } + ], + "weight": 475.000000000, + "duration": 475.000000000, + "distance": 1866.6 + }, + { + "geometry": "kckaGz|kqL~@cATY`C{CRUJMPWNWNYHYHSr@aCPk@DQDOv@oCBMZcABKV}@FSFQHSN_@BGf@kA~@{BJS@AFMLSNULQNQNORQVSVQTORMLGRIRIz@]FAp@UHCJAL?J?J@HBJFLHVTHDHDFBF?H@d@APAHALCJCJCHCZIJCJC", + "maneuver": { + "bearing_after": 140, + "bearing_before": 80, + "location": [ + -71.172783, + 42.332858 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Hammond Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 135, + 255, + 315 + ], + "location": [ + -71.172783, + 42.332858 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 135, + 225, + 315 + ], + "location": [ + -71.172313, + 42.33243 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 120, + 225, + 315 + ], + "location": [ + -71.171106, + 42.331452 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.169875, + 42.330922 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.169707, + 42.330857 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.168522, + 42.330401 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 120, + 210, + 300 + ], + "location": [ + -71.167762, + 42.330068 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 165, + 270, + 345 + ], + "location": [ + -71.165336, + 42.32788 + ] + } + ], + "weight": 266, + "duration": 266, + "distance": 1071.6 + }, + { + "geometry": "ixiaGfnjqLASAECUC[Ku@]kCCYCK", + "maneuver": { + "bearing_after": 74, + "bearing_before": 164, + "location": [ + -71.165315, + 42.325965 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Middlesex Road", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.165315, + 42.325965 + ] + } + ], + "weight": 35.5, + "duration": 35.5, + "distance": 130.9 + }, + { + "geometry": "gziaGrdjqLFA@ADCxBgB~@y@lB}AJKHIHOLQ", + "maneuver": { + "bearing_after": 161, + "bearing_before": 73, + "location": [ + -71.163783, + 42.326275 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dunster Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.163783, + 42.326275 + ] + } + ], + "weight": 66.6, + "duration": 66.6, + "distance": 238.9 + }, + { + "geometry": "aoiaGrziqLSUOOAA", + "maneuver": { + "bearing_after": 39, + "bearing_before": 132, + "location": [ + -71.162181, + 42.324491 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 315 + ], + "location": [ + -71.162181, + 42.324491 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 225, + 315 + ], + "location": [ + -71.16207, + 42.324591 + ] + } + ], + "weight": 6.5, + "duration": 6.5, + "distance": 26.9 + }, + { + "geometry": "gpiaGjyiqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 32, + "location": [ + -71.16198, + 42.324682 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 212 + ], + "location": [ + -71.16198, + 42.324682 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Centre Street, Beacon Street", + "weight": 1944.5, + "duration": 1944.5, + "distance": 7389.2 + }, + { + "steps": [ + { + "geometry": "gpiaGjyiqL@@NNRT", + "maneuver": { + "bearing_after": 212, + "bearing_before": 0, + "location": [ + -71.16198, + 42.324682 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 212 + ], + "location": [ + -71.16198, + 42.324682 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 225, + 315 + ], + "location": [ + -71.16207, + 42.324591 + ] + } + ], + "weight": 11.1, + "duration": 11.1, + "distance": 26.9 + }, + { + "geometry": "aoiaGrziqLMPINIHKJmB|A_Ax@yBfBEBA@G@", + "maneuver": { + "bearing_after": 312, + "bearing_before": 219, + "location": [ + -71.162181, + 42.324491 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dunster Road", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 135, + 315 + ], + "location": [ + -71.162181, + 42.324491 + ] + } + ], + "weight": 61.8, + "duration": 61.8, + "distance": 238.9 + }, + { + "geometry": "gziaGrdjqLE_@]mCCUG]CQ", + "maneuver": { + "bearing_after": 73, + "bearing_before": 341, + "location": [ + -71.163783, + 42.326275 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Middlesex Road", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.163783, + 42.326275 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.162796, + 42.326482 + ] + } + ], + "weight": 28.9, + "duration": 28.9, + "distance": 105 + }, + { + "geometry": "{{iaG~|iqLFCFEBE@C@E@GAIAIAGAAACCAAAC?CAE@E@GD", + "maneuver": { + "bearing_after": 156, + "bearing_before": 71, + "location": [ + -71.16256, + 42.326538 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 150, + 255 + ], + "location": [ + -71.16256, + 42.326538 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 135, + 255, + 330 + ], + "location": [ + -71.162535, + 42.326495 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 180, + 255, + 330 + ], + "location": [ + -71.162214, + 42.326586 + ] + } + ], + "weight": 18.2, + "duration": 18.2, + "distance": 56 + }, + { + "geometry": "m|iaG~ziqL?EGSGUIWk@mBGQGSIOGOMSMUy@qA", + "maneuver": { + "bearing_after": 67, + "bearing_before": 336, + "location": [ + -71.162238, + 42.326627 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Middlesex Road", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 150, + 255 + ], + "location": [ + -71.162238, + 42.326627 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.161137, + 42.327062 + ] + } + ], + "weight": 49.2, + "duration": 49.2, + "distance": 189 + }, + { + "geometry": "kbjaGfoiqLFKHMxCkF", + "maneuver": { + "bearing_after": 130, + "bearing_before": 45, + "location": [ + -71.160364, + 42.327582 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Circuit Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.160364, + 42.327582 + ] + } + ], + "weight": 41.8, + "duration": 41.8, + "distance": 144.8 + }, + { + "geometry": "_}iaG`giqLIOGOIOKOMUWa@", + "maneuver": { + "bearing_after": 47, + "bearing_before": 130, + "location": [ + -71.159046, + 42.32672 + ], + "modifier": "left", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Circuit Road", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.159046, + 42.32672 + ] + } + ], + "weight": 18.8, + "duration": 18.8, + "distance": 65.7 + }, + { + "geometry": "m_jaGhciqLIBK@OAQAOCOGMEMKOMKOgCqDYc@}@mAW_@Ya@[e@W_@S[Q[OWMUS_@IMKI", + "maneuver": { + "bearing_after": 348, + "bearing_before": 45, + "location": [ + -71.158453, + 42.327114 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Spooner Road", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 135, + 225, + 345 + ], + "location": [ + -71.158453, + 42.327114 + ] + } + ], + "weight": 110.4, + "duration": 110.4, + "distance": 429 + }, + { + "geometry": "qqjaGdohqLINMRk@z@UZEJEHEH", + "maneuver": { + "bearing_after": 313, + "bearing_before": 36, + "location": [ + -71.155225, + 42.330007 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Reservoir Road", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 120, + 225, + 315 + ], + "location": [ + -71.155225, + 42.330007 + ] + } + ], + "weight": 25.4, + "duration": 25.4, + "distance": 88.6 + }, + { + "geometry": "}tjaG`thqLMK", + "maneuver": { + "bearing_after": 30, + "bearing_before": 302, + "location": [ + -71.15601, + 42.33055 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Middlesex Road", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.15601, + 42.33055 + ] + } + ], + "weight": 9, + "duration": 9, + "distance": 9.5 + }, + { + "geometry": "kujaGtshqLEFAB", + "maneuver": { + "bearing_after": 309, + "bearing_before": 30, + "location": [ + -71.155951, + 42.330623 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 135, + 210, + 315 + ], + "location": [ + -71.155951, + 42.330623 + ] + } + ], + "weight": 5.5, + "duration": 5.5, + "distance": 5.8 + }, + { + "geometry": "sujaG`thqLAHADCD_@`@STABEDGHEJCLALCNA`@ALCLCLELGNMR", + "maneuver": { + "bearing_after": 293, + "bearing_before": 309, + "location": [ + -71.156005, + 42.330657 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 210, + 300 + ], + "location": [ + -71.156005, + 42.330657 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 165, + 330 + ], + "location": [ + -71.156123, + 42.330698 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 135, + 285, + 315 + ], + "location": [ + -71.156418, + 42.330973 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 135, + 315 + ], + "location": [ + -71.156445, + 42.330997 + ] + } + ], + "weight": 39.800000000, + "duration": 39.800000000, + "distance": 142.8 + }, + { + "geometry": "wyjaGx|hqLMGKEICI?G?", + "maneuver": { + "bearing_after": 25, + "bearing_before": 307, + "location": [ + -71.157412, + 42.331316 + ], + "modifier": "right", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Reservoir Road", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 135, + 210, + 330 + ], + "location": [ + -71.157412, + 42.331316 + ] + } + ], + "weight": 11.2, + "duration": 11.2, + "distance": 32.1 + }, + { + "geometry": "m{jaGf|hqLAWAWAWCUCMAGEUIW", + "maneuver": { + "bearing_after": 88, + "bearing_before": 7, + "location": [ + -71.157319, + 42.331592 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beacon Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.157319, + 42.331592 + ] + } + ], + "weight": 19.9, + "duration": 19.9, + "distance": 69.2 + }, + { + "geometry": "m|jaGdwhqLJG@ADGl@_ABC@C@E@E?E@E?EAE?CAEAEAC?Ak@gA", + "maneuver": { + "bearing_after": 146, + "bearing_before": 66, + "location": [ + -71.156514, + 42.331745 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.156514, + 42.331745 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 60, + 135, + 255, + 330 + ], + "location": [ + -71.156455, + 42.331679 + ] + } + ], + "weight": 28.6, + "duration": 28.6, + "distance": 118 + }, + { + "geometry": "s{jaGhphqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 51, + "location": [ + -71.155413, + 42.33162 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 231 + ], + "location": [ + -71.155413, + 42.33162 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Middlesex Road, Spooner Road", + "weight": 479.6, + "duration": 479.6, + "distance": 1721.3 + }, + { + "steps": [ + { + "geometry": "s{jaGhphqLj@fA?@@B@D@D?B@D?DAD?DADADABCBm@~@EFA@KF", + "maneuver": { + "bearing_after": 231, + "bearing_before": 0, + "location": [ + -71.155413, + 42.33162 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 231 + ], + "location": [ + -71.155413, + 42.33162 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 135, + 255, + 330 + ], + "location": [ + -71.156455, + 42.331679 + ] + } + ], + "weight": 35.2, + "duration": 35.2, + "distance": 118 + }, + { + "geometry": "m|jaGdwhqLHVDT@FBLBT@V@V@V?TARARCRCTETERA@GRGNIPKPILMNON_@`@IH[XQRQRQRMPKNMPMTKTKTMXkAzCKVKZIXGXGXEZEXE\\CXCXAT", + "maneuver": { + "bearing_after": 246, + "bearing_before": 326, + "location": [ + -71.156514, + 42.331745 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beacon Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.156514, + 42.331745 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.157319, + 42.331592 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 165, + 285 + ], + "location": [ + -71.157633, + 42.331611 + ] + } + ], + "weight": 138.8, + "duration": 138.8, + "distance": 568.3 + }, + { + "geometry": "gjkaG~ziqLK@E?E@UBQBODMHYNmC`B[PsBpAe@X", + "maneuver": { + "bearing_after": 352, + "bearing_before": 281, + "location": [ + -71.162237, + 42.333956 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Chestnut Hill Driveway", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 105, + 270 + ], + "location": [ + -71.162237, + 42.333956 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 150, + 165, + 330 + ], + "location": [ + -71.162456, + 42.334559 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 150, + 330 + ], + "location": [ + -71.163446, + 42.335992 + ] + } + ], + "weight": 65.5, + "duration": 65.5, + "distance": 272.5 + }, + { + "geometry": "cxkaGjcjqLc@VYLYNOFGBYLIDg@P{CbAYJ_@NODKF", + "maneuver": { + "bearing_after": 331, + "bearing_before": 331, + "location": [ + -71.163576, + 42.336182 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Saint Thomas More Road", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 150, + 330 + ], + "location": [ + -71.163576, + 42.336182 + ] + } + ], + "weight": 65.2, + "duration": 65.2, + "distance": 255 + }, + { + "geometry": "qelaG`jjqLCMGUEa@Aa@HsAPcA", + "maneuver": { + "bearing_after": 66, + "bearing_before": 338, + "location": [ + -71.164649, + 42.338332 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 165, + 330 + ], + "location": [ + -71.164649, + 42.338332 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 240, + 330 + ], + "location": [ + -71.164582, + 42.338353 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 105, + 270 + ], + "location": [ + -71.164126, + 42.338429 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.163711, + 42.338383 + ] + } + ], + "weight": 36, + "duration": 36, + "distance": 109.7 + }, + { + "geometry": "ielaG`bjqLyBg@sB_Bi@a@U]EUEUA_@D_@LONONWDQF]", + "maneuver": { + "bearing_after": 12, + "bearing_before": 109, + "location": [ + -71.163367, + 42.338289 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 195, + 285 + ], + "location": [ + -71.163367, + 42.338289 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 225, + 270 + ], + "location": [ + -71.162369, + 42.339799 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 255, + 315 + ], + "location": [ + -71.161554, + 42.33961 + ] + } + ], + "weight": 77.1, + "duration": 77.1, + "distance": 292.2 + }, + { + "geometry": "cmlaGduiqLs@k@ICG?GAK?K?G?I?", + "maneuver": { + "bearing_after": 30, + "bearing_before": 109, + "location": [ + -71.16131, + 42.339537 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 135, + 210, + 285 + ], + "location": [ + -71.16131, + 42.339537 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.161063, + 42.339933 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.161061, + 42.33999 + ] + } + ], + "weight": 25.4, + "duration": 25.4, + "distance": 72.3 + }, + { + "geometry": "{plaGrsiqLAjAA`@", + "maneuver": { + "bearing_after": 271, + "bearing_before": 0, + "location": [ + -71.161057, + 42.34014 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "ref": "MA 30", + "driving_side": "right", + "name": "Commonwealth Avenue", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.161057, + 42.34014 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.161435, + 42.340152 + ] + } + ], + "weight": 15, + "duration": 15, + "distance": 45.7 + }, + { + "geometry": "_qlaG`wiqLQ?I?u@L]VU\\Sp@Ov@AL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 271, + "location": [ + -71.161611, + 42.340158 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.161611, + 42.340158 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.16161, + 42.340253 + ] + } + ], + "weight": 32.8, + "duration": 32.8, + "distance": 136.9 + }, + { + "geometry": "kvlaG||iqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 277, + "location": [ + -71.162549, + 42.341017 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 97 + ], + "location": [ + -71.162549, + 42.341017 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Beacon Street, Chestnut Hill Driveway", + "weight": 491, + "duration": 491, + "distance": 1870.6 + }, + { + "steps": [ + { + "geometry": "kvlaG||iqL@MNw@Rq@T]\\Wt@MH?", + "maneuver": { + "bearing_after": 97, + "bearing_before": 0, + "location": [ + -71.162549, + 42.341017 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 97 + ], + "location": [ + -71.162549, + 42.341017 + ] + } + ], + "weight": 37, + "duration": 37, + "distance": 126.4 + }, + { + "geometry": "qqlaG`wiqL?U@O", + "maneuver": { + "bearing_after": 94, + "bearing_before": 174, + "location": [ + -71.16161, + 42.340253 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.16161, + 42.340253 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 90, + 270 + ], + "location": [ + -71.161498, + 42.340246 + ] + } + ], + "weight": 19.200000000, + "duration": 19.200000000, + "distance": 15.4 + }, + { + "geometry": "oqlaGzuiqLE?iHeDCCCCAE@Ef@iCf@aCFU", + "maneuver": { + "bearing_after": 21, + "bearing_before": 92, + "location": [ + -71.161424, + 42.340242 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Greycliff Road", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 90, + 180, + 270 + ], + "location": [ + -71.161424, + 42.340242 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 195, + 285 + ], + "location": [ + -71.159798, + 42.341596 + ] + } + ], + "weight": 85.8, + "duration": 85.8, + "distance": 322.4 + }, + { + "geometry": "oxlaG~fiqLQKQI", + "maneuver": { + "bearing_after": 22, + "bearing_before": 112, + "location": [ + -71.159035, + 42.341357 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Foster Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 195, + 300 + ], + "location": [ + -71.159035, + 42.341357 + ] + } + ], + "weight": 9.7, + "duration": 9.7, + "distance": 21.7 + }, + { + "geometry": "sylaGhfiqLDMl@cCFg@@a@Cq@Ac@@YVsAXaBBIDIDG?ADCHCPEJCJEHEFGf@e@BGBA@CHK", + "maneuver": { + "bearing_after": 115, + "bearing_before": 22, + "location": [ + -71.158932, + 42.341537 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Kirkwood Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.158932, + 42.341537 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 165, + 255, + 330 + ], + "location": [ + -71.156167, + 42.340838 + ] + } + ], + "weight": 82.7, + "duration": 82.7, + "distance": 327.4 + }, + { + "geometry": "oqlaGbrhqLCMG_@Wg@", + "maneuver": { + "bearing_after": 71, + "bearing_before": 133, + "location": [ + -71.155697, + 42.340243 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "South Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 135, + 255, + 315 + ], + "location": [ + -71.155697, + 42.340243 + ] + } + ], + "weight": 12.4, + "duration": 12.4, + "distance": 41.5 + }, + { + "geometry": "srlaGlohqLC[?ALaAF_@H[J[R_@\\o@TYr@g@d@[^_@RYXq@No@FUGSCIGUK]IYAECMCSC_@A[A[?Y@Y@YDUDWZyABKBIv@qDBM", + "maneuver": { + "bearing_after": 80, + "bearing_before": 49, + "location": [ + -71.155268, + 42.340422 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Strathmore Road", + "intersections": [ + { + "out": 1, + "in": 4, + "entry": [ + true, + true, + true, + true, + false + ], + "bearings": [ + 30, + 75, + 180, + 195, + 225 + ], + "location": [ + -71.155268, + 42.340422 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 150, + 315, + 345 + ], + "location": [ + -71.153822, + 42.339864 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 60, + 195, + 300 + ], + "location": [ + -71.152587, + 42.338896 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 60, + 195, + 240 + ], + "location": [ + -71.152332, + 42.338996 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 60, + 195, + 240 + ], + "location": [ + -71.152176, + 42.339063 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.15028, + 42.338957 + ] + } + ], + "weight": 154.3, + "duration": 154.3, + "distance": 585 + }, + { + "geometry": "oglaG|igqLGEq@[MGSIOKCAKGMIUQe@a@e@_@OOQOuB_CUWuB}BCCC?I?", + "maneuver": { + "bearing_after": 21, + "bearing_before": 112, + "location": [ + -71.149267, + 42.338639 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Sutherland Road", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 105, + 210, + 300 + ], + "location": [ + -71.149267, + 42.338639 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 285 + ], + "location": [ + -71.148848, + 42.339331 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 105, + 210 + ], + "location": [ + -71.148591, + 42.339628 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 210, + 315 + ], + "location": [ + -71.148354, + 42.339897 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 285 + ], + "location": [ + -71.147625, + 42.340583 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 120, + 225 + ], + "location": [ + -71.147507, + 42.340688 + ] + } + ], + "weight": 92.899999999, + "duration": 92.899999999, + "distance": 365.4 + }, + { + "geometry": "qxlaGzzfqLAWGuAKeAGc@CQAKIg@Oo@Ia@k@cB_@y@IQMUw@mAk@o@QQQO]Y]W]SYSGE", + "maneuver": { + "bearing_after": 82, + "bearing_before": 358, + "location": [ + -71.146856, + 42.341367 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Commonwealth Avenue", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.146856, + 42.341367 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.146311, + 42.341419 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.145775, + 42.341517 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 165, + 240 + ], + "location": [ + -71.14502, + 42.341734 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.14403, + 42.342226 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 315 + ], + "location": [ + -71.143305, + 42.342821 + ] + } + ], + "weight": 131.600000000, + "duration": 131.600000000, + "distance": 436.2 + }, + { + "geometry": "afmaGdafqLJG", + "maneuver": { + "bearing_after": 150, + "bearing_before": 28, + "location": [ + -71.14275, + 42.343528 + ], + "modifier": "sharp right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 150, + 210, + 330 + ], + "location": [ + -71.14275, + 42.343528 + ] + } + ], + "weight": 8.5, + "duration": 8.5, + "distance": 7.6 + }, + { + "geometry": "uemaG|`fqLNH", + "maneuver": { + "bearing_after": 206, + "bearing_before": 150, + "location": [ + -71.142705, + 42.343468 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 210, + 330 + ], + "location": [ + -71.142705, + 42.343468 + ] + } + ], + "weight": 9.2, + "duration": 9.2, + "distance": 10.2 + }, + { + "geometry": "eemaGfafqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 208, + "location": [ + -71.142763, + 42.343387 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 28 + ], + "location": [ + -71.142763, + 42.343387 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Strathmore Road, Commonwealth Avenue", + "weight": 643.3, + "duration": 643.3, + "distance": 2259.2 + }, + { + "steps": [ + { + "geometry": "eemaGfafqLOI", + "maneuver": { + "bearing_after": 28, + "bearing_before": 0, + "location": [ + -71.142763, + 42.343387 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 28 + ], + "location": [ + -71.142763, + 42.343387 + ] + } + ], + "weight": 12.5, + "duration": 12.5, + "distance": 10.2 + }, + { + "geometry": "uemaG|`fqLKF", + "maneuver": { + "bearing_after": 330, + "bearing_before": 26, + "location": [ + -71.142705, + 42.343468 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 210, + 330 + ], + "location": [ + -71.142705, + 42.343468 + ] + } + ], + "weight": 8.6, + "duration": 8.6, + "distance": 7.6 + }, + { + "geometry": "afmaGdafqLSM", + "maneuver": { + "bearing_after": 28, + "bearing_before": 330, + "location": [ + -71.14275, + 42.343528 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Commonwealth Avenue", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 150, + 210, + 330 + ], + "location": [ + -71.14275, + 42.343528 + ] + } + ], + "weight": 8.4, + "duration": 8.4, + "distance": 12.8 + }, + { + "geometry": "ufmaGv`fqLN[BEVg@Rg@Ve@BERc@N[FIDKp@yANc@Pa@J]FKDKZs@N[Te@DIlAcCZ{@`@mA`@kAJYDOTk@FM^m@|@qALO`BaCPYLQBEBGR_@DGNWJUFKBGRa@N[DIRa@@EHSHUHUFWFSDYDWDS?CBYH_AFcAFy@Fs@\\qE@MD}@Bk@Bk@?k@Cs@Ci@Iq@Ie@CWGi@?MAK?U@O?G?GDa@Hk@X}@Ti@b@_Ab@s@l@{@PUDEnAqARSNMh@i@@ATUHIBCh@k@v@u@~@u@\\WLI", + "maneuver": { + "bearing_after": 127, + "bearing_before": 28, + "location": [ + -71.142675, + 42.343629 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Washington Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 135, + 210, + 315 + ], + "location": [ + -71.142675, + 42.343629 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 315 + ], + "location": [ + -71.141918, + 42.343189 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 210, + 315 + ], + "location": [ + -71.141518, + 42.342952 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 120, + 225, + 300 + ], + "location": [ + -71.140448, + 42.342404 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 135, + 315 + ], + "location": [ + -71.1398, + 42.34204 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.13879, + 42.34148 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.13802, + 42.34114 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.13781, + 42.34105 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.136884, + 42.340426 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 60, + 135, + 255, + 315 + ], + "location": [ + -71.135539, + 42.339463 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 120, + 255, + 315 + ], + "location": [ + -71.135162, + 42.339239 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 105, + 285 + ], + "location": [ + -71.131469, + 42.338364 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 90, + 270 + ], + "location": [ + -71.13065, + 42.33828 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.128948, + 42.338486 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 315 + ], + "location": [ + -71.126889, + 42.337482 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 150, + 330 + ], + "location": [ + -71.12595, + 42.33654 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 150, + 195, + 330 + ], + "location": [ + -71.125658, + 42.336257 + ] + } + ], + "weight": 440.3, + "duration": 440.3, + "distance": 1812.6 + }, + { + "geometry": "oskaG|qbqLDJDDJLV`@^h@n@~@^l@Vf@JVJLHJl@h@Z`@n@~@", + "maneuver": { + "bearing_after": 229, + "bearing_before": 147, + "location": [ + -71.124946, + 42.335444 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Greenough Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 150, + 225, + 330 + ], + "location": [ + -71.124946, + 42.335444 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.12581, + 42.3348 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 120, + 225, + 300 + ], + "location": [ + -71.12636, + 42.33446 + ] + } + ], + "weight": 75.6, + "duration": 75.6, + "distance": 265.5 + }, + { + "geometry": "{hkaG|_cqLBKPg@n@{Bl@qBFSDQ", + "maneuver": { + "bearing_after": 119, + "bearing_before": 225, + "location": [ + -71.127191, + 42.333743 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Gorham Avenue", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 120, + 225 + ], + "location": [ + -71.127191, + 42.333743 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.125638, + 42.333123 + ] + } + ], + "weight": 41.1, + "duration": 41.1, + "distance": 153.8 + }, + { + "geometry": "ydkaGtubqLFBtAz@~@l@DD", + "maneuver": { + "bearing_after": 205, + "bearing_before": 116, + "location": [ + -71.125547, + 42.333088 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dana Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.125547, + 42.333088 + ] + } + ], + "weight": 28.9, + "duration": 28.9, + "distance": 103.1 + }, + { + "geometry": "u_kaGhybqLGP", + "maneuver": { + "bearing_after": 298, + "bearing_before": 209, + "location": [ + -71.126126, + 42.332265 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Davis Avenue", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.126126, + 42.332265 + ] + } + ], + "weight": 10.7, + "duration": 10.7, + "distance": 9.1 + }, + { + "geometry": "}_kaGzybqLHFHBD?B?B?@ABC@A@C?C?E@A?C@A@C@?DAB?@?BABA@A@A@E?E?E?E?C@E@C@ABA", + "maneuver": { + "bearing_after": 208, + "bearing_before": 298, + "location": [ + -71.126223, + 42.332305 + ], + "modifier": "sharp left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.126223, + 42.332305 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 195, + 300 + ], + "location": [ + -71.126255, + 42.332261 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 165, + 195 + ], + "location": [ + -71.126282, + 42.332207 + ] + } + ], + "weight": 65.8, + "duration": 65.8, + "distance": 72 + }, + { + "geometry": "e}jaGpwbqL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 154, + "location": [ + -71.125847, + 42.331874 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 334 + ], + "location": [ + -71.125847, + 42.331874 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Washington Street, Greenough Street", + "weight": 691.9, + "duration": 691.9, + "distance": 2446.8 + }, + { + "steps": [ + { + "geometry": "e}jaGpwbqLC@A@ABAD?B?D?D?DADA@A@C@C@A?C?E@A?ABA@?BA@?D?BABA@CBA@C?C?E?ICIG", + "maneuver": { + "bearing_after": 334, + "bearing_before": 0, + "location": [ + -71.125847, + 42.331874 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 334 + ], + "location": [ + -71.125847, + 42.331874 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 165, + 195 + ], + "location": [ + -71.126282, + 42.332207 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 195, + 300 + ], + "location": [ + -71.126255, + 42.332261 + ] + } + ], + "weight": 69.6, + "duration": 69.6, + "distance": 72 + }, + { + "geometry": "}_kaGzybqLFQ", + "maneuver": { + "bearing_after": 118, + "bearing_before": 28, + "location": [ + -71.126223, + 42.332305 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Davis Avenue", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.126223, + 42.332305 + ] + } + ], + "weight": 16.4, + "duration": 16.4, + "distance": 9.1 + }, + { + "geometry": "u_kaGhybqLEE_Am@uA{@GC", + "maneuver": { + "bearing_after": 29, + "bearing_before": 118, + "location": [ + -71.126126, + 42.332265 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dana Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.126126, + 42.332265 + ] + } + ], + "weight": 29.2, + "duration": 29.2, + "distance": 103.1 + }, + { + "geometry": "ydkaGtubqLFQl@yBDM", + "maneuver": { + "bearing_after": 118, + "bearing_before": 25, + "location": [ + -71.125547, + 42.333088 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Gorham Avenue", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.125547, + 42.333088 + ] + } + ], + "weight": 24.8, + "duration": 24.8, + "distance": 71.4 + }, + { + "geometry": "}bkaGzpbqL]W{B{AGCECyA_AYSWSCCGC", + "maneuver": { + "bearing_after": 29, + "bearing_before": 115, + "location": [ + -71.12478, + 42.33279 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Cypress Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.12478, + 42.33279 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.12466, + 42.33294 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 150, + 210, + 315 + ], + "location": [ + -71.124181, + 42.333596 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.12384, + 42.33408 + ] + } + ], + "weight": 48.999999999, + "duration": 48.999999999, + "distance": 203.2 + }, + { + "geometry": "}lkaGnibqLKWS]IOCEMC", + "maneuver": { + "bearing_after": 50, + "bearing_before": 26, + "location": [ + -71.123595, + 42.334394 + ], + "modifier": "slight right", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Cypress Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 30, + 45, + 210 + ], + "location": [ + -71.123595, + 42.334394 + ] + } + ], + "weight": 15.4, + "duration": 15.4, + "distance": 47.8 + }, + { + "geometry": "ynkaG~fbqL@q@?IE[?EAKAKIa@CSI_@I_@EK[k@AAcAcBiA}AW_@KO", + "maneuver": { + "bearing_after": 91, + "bearing_before": 14, + "location": [ + -71.123198, + 42.334689 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "School Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true, + true + ], + "bearings": [ + 90, + 120, + 195, + 255, + 300 + ], + "location": [ + -71.123198, + 42.334689 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 195, + 255 + ], + "location": [ + -71.122608, + 42.334732 + ] + } + ], + "weight": 67.4, + "duration": 67.4, + "distance": 273 + }, + { + "geometry": "yvkaGfvaqLQY]m@S[Wc@KSYe@", + "maneuver": { + "bearing_after": 46, + "bearing_before": 43, + "location": [ + -71.12052, + 42.33597 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Aspinwall Avenue", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.12052, + 42.33597 + ] + } + ], + "weight": 25.8, + "duration": 25.8, + "distance": 107.7 + }, + { + "geometry": "{zkaGdpaqL_@eA_@oAGWACI_@CYCWCm@Aw@@_A?A?I@OB_@F_APaBF[@MBK@GFSP[\\i@Xi@j@sAPg@L]L_@Tw@XeABIDMNc@Rs@Lc@FOHSXs@", + "maneuver": { + "bearing_after": 57, + "bearing_before": 47, + "location": [ + -71.11955, + 42.33662 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Aspinwall Avenue", + "intersections": [ + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 60, + 135, + 225 + ], + "location": [ + -71.11955, + 42.33662 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 60, + 240 + ], + "location": [ + -71.118798, + 42.336935 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 240, + 315 + ], + "location": [ + -71.118663, + 42.336986 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 240, + 285 + ], + "location": [ + -71.1185, + 42.33704 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195, + 270 + ], + "location": [ + -71.11736, + 42.3371 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.116103, + 42.336889 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 120, + 315 + ], + "location": [ + -71.11534, + 42.33645 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.113726, + 42.335735 + ] + } + ], + "weight": 164.9, + "duration": 164.9, + "distance": 643.2 + }, + { + "geometry": "grkaGvd`qLGG?AA?AAA?kBw@]Om@W", + "maneuver": { + "bearing_after": 32, + "bearing_before": 123, + "location": [ + -71.112597, + 42.335238 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Netherlands Road", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.112597, + 42.335238 + ] + } + ], + "weight": 37.1, + "duration": 37.1, + "distance": 118.9 + }, + { + "geometry": "mxkaGja`qLCJ", + "maneuver": { + "bearing_after": 289, + "bearing_before": 21, + "location": [ + -71.112058, + 42.336229 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.112058, + 42.336229 + ] + } + ], + "weight": 13.2, + "duration": 13.2, + "distance": 5.3 + }, + { + "geometry": "qxkaGva`qLp@X", + "maneuver": { + "bearing_after": 199, + "bearing_before": 289, + "location": [ + -71.112118, + 42.336246 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.112118, + 42.336246 + ] + } + ], + "weight": 26.4, + "duration": 26.4, + "distance": 29.3 + }, + { + "geometry": "_wkaGpb`qL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 201, + "location": [ + -71.112246, + 42.336 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 21 + ], + "location": [ + -71.112246, + 42.336 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "School Street, Aspinwall Avenue", + "weight": 539.2, + "duration": 539.2, + "distance": 1684 + }, + { + "steps": [ + { + "geometry": "_wkaGpb`qLq@Y", + "maneuver": { + "bearing_after": 21, + "bearing_before": 0, + "location": [ + -71.112246, + 42.336 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 21 + ], + "location": [ + -71.112246, + 42.336 + ] + } + ], + "weight": 30.7, + "duration": 30.7, + "distance": 29.3 + }, + { + "geometry": "qxkaGva`qLBK", + "maneuver": { + "bearing_after": 109, + "bearing_before": 19, + "location": [ + -71.112118, + 42.336246 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.112118, + 42.336246 + ] + } + ], + "weight": 13, + "duration": 13, + "distance": 5.3 + }, + { + "geometry": "mxkaGja`qLKG", + "maneuver": { + "bearing_after": 21, + "bearing_before": 109, + "location": [ + -71.112058, + 42.336229 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Netherlands Road", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.112058, + 42.336229 + ] + } + ], + "weight": 6, + "duration": 6, + "distance": 7.6 + }, + { + "geometry": "yxkaGba`qLDU@GDEFGFG\\QTKTId@Od@IPEDADC@ANQ", + "maneuver": { + "bearing_after": 111, + "bearing_before": 21, + "location": [ + -71.112024, + 42.336293 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Parkway Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.112024, + 42.336293 + ] + } + ], + "weight": 46.7, + "duration": 46.7, + "distance": 146.9 + }, + { + "geometry": "uqkaGl|_qLSUu@u@WYqBuBS[KUCEOU", + "maneuver": { + "bearing_after": 36, + "bearing_before": 139, + "location": [ + -71.111266, + 42.335152 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Brookline Avenue", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 210, + 315 + ], + "location": [ + -71.111266, + 42.335152 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false, + true + ], + "bearings": [ + 30, + 60, + 165, + 225, + 330 + ], + "location": [ + -71.11003, + 42.336308 + ] + } + ], + "weight": 51.7, + "duration": 51.7, + "distance": 191.5 + }, + { + "geometry": "}ykaGbs_qLHO", + "maneuver": { + "bearing_after": 129, + "bearing_before": 45, + "location": [ + -71.109779, + 42.33647 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Fenwood Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.109779, + 42.33647 + ] + } + ], + "weight": 6.5, + "duration": 6.5, + "distance": 8.2 + }, + { + "geometry": "sykaGrr_qLEM", + "maneuver": { + "bearing_after": 63, + "bearing_before": 129, + "location": [ + -71.109703, + 42.336422 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 60, + 135, + 240, + 315 + ], + "location": [ + -71.109703, + 42.336422 + ] + } + ], + "weight": 6, + "duration": 6, + "distance": 6.7 + }, + { + "geometry": "yykaGdr_qL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 64, + "location": [ + -71.10963, + 42.336448 + ], + "modifier": "straight", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 244 + ], + "location": [ + -71.10963, + 42.336448 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Parkway Road, Brookline Avenue", + "weight": 160.6, + "duration": 160.6, + "distance": 395.6 + }, + { + "steps": [ + { + "geometry": "yykaGdr_qLDL", + "maneuver": { + "bearing_after": 244, + "bearing_before": 0, + "location": [ + -71.10963, + 42.336448 + ], + "modifier": "straight", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 244 + ], + "location": [ + -71.10963, + 42.336448 + ] + } + ], + "weight": 8.3, + "duration": 8.3, + "distance": 6.7 + }, + { + "geometry": "sykaGrr_qLIN", + "maneuver": { + "bearing_after": 309, + "bearing_before": 243, + "location": [ + -71.109703, + 42.336422 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Fenwood Road", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 135, + 240, + 315 + ], + "location": [ + -71.109703, + 42.336422 + ] + } + ], + "weight": 6.1, + "duration": 6.1, + "distance": 8.2 + }, + { + "geometry": "}ykaGbs_qLeAkAOGUKOQqAqAw@{@OQKKGGII[_@q@u@EEGI_@a@m@o@KK", + "maneuver": { + "bearing_after": 37, + "bearing_before": 309, + "location": [ + -71.109779, + 42.33647 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Brookline Avenue", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.109779, + 42.33647 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true, + true + ], + "bearings": [ + 30, + 135, + 210, + 240, + 315 + ], + "location": [ + -71.109295, + 42.337005 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 120, + 225, + 315 + ], + "location": [ + -71.10831, + 42.337956 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.1081, + 42.338146 + ] + } + ], + "weight": 92.3, + "duration": 92.3, + "distance": 341.6 + }, + { + "geometry": "gilaGnc_qLNWd@cAh@gA`@{@`@{@Vk@HW\\kAV_Af@gBv@qCJa@ZcAHYTw@Rw@Tw@b@{Ap@aC@GBG", + "maneuver": { + "bearing_after": 127, + "bearing_before": 36, + "location": [ + -71.107283, + 42.338917 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Longwood Avenue", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false, + true + ], + "bearings": [ + 15, + 45, + 135, + 225, + 315 + ], + "location": [ + -71.107283, + 42.338917 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210, + 315 + ], + "location": [ + -71.106161, + 42.338267 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 120, + 225, + 300 + ], + "location": [ + -71.105141, + 42.337783 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.103398, + 42.337115 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 120, + 300 + ], + "location": [ + -71.103058, + 42.33698 + ] + } + ], + "weight": 159.1, + "duration": 159.1, + "distance": 610.9 + }, + { + "geometry": "}wkaGr{}pL_Ai@aB_AMKeBaAe@YGCMKUMc@W", + "maneuver": { + "bearing_after": 25, + "bearing_before": 116, + "location": [ + -71.100903, + 42.336152 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Palace Road", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.100903, + 42.336152 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.099851, + 42.337731 + ] + } + ], + "weight": 63.2, + "duration": 63.2, + "distance": 245.2 + }, + { + "geometry": "idlaGjs}pLBKPk@@C", + "maneuver": { + "bearing_after": 116, + "bearing_before": 25, + "location": [ + -71.09958, + 42.338129 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.09958, + 42.338129 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.099516, + 42.338105 + ] + } + ], + "weight": 6.6, + "duration": 6.6, + "distance": 28.1 + }, + { + "geometry": "qclaGnq}pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 140, + "location": [ + -71.099284, + 42.338007 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 320 + ], + "location": [ + -71.099284, + 42.338007 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Brookline Avenue, Longwood Avenue", + "weight": 335.6, + "duration": 335.6, + "distance": 1240.7 + }, + { + "steps": [ + { + "geometry": "qclaGnq}pLBA@CD?`Ad@FB", + "maneuver": { + "bearing_after": 141, + "bearing_before": 0, + "location": [ + -71.099284, + 42.338007 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 141 + ], + "location": [ + -71.099284, + 42.338007 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.099435, + 42.337621 + ] + } + ], + "weight": 20.3, + "duration": 20.3, + "distance": 52.2 + }, + { + "geometry": "{`laGrr}pLX_ADOf@}AFULUPW^MLG", + "maneuver": { + "bearing_after": 116, + "bearing_before": 203, + "location": [ + -71.099461, + 42.337578 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Evans Way", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.099461, + 42.337578 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 300 + ], + "location": [ + -71.099055, + 42.337418 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 135, + 300 + ], + "location": [ + -71.098593, + 42.337219 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 165, + 315, + 345 + ], + "location": [ + -71.098251, + 42.337016 + ] + } + ], + "weight": 40.5, + "duration": 40.5, + "distance": 145.1 + }, + { + "geometry": "}{kaGjj}pLrAzET~@L^HVTp@Rl@", + "maneuver": { + "bearing_after": 241, + "bearing_before": 160, + "location": [ + -71.098143, + 42.336789 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 9", + "driving_side": "right", + "name": "Huntington Avenue", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 60, + 165, + 240, + 345 + ], + "location": [ + -71.098143, + 42.336789 + ] + } + ], + "weight": 83.1, + "duration": 83.1, + "distance": 203.5 + }, + { + "geometry": "qvkaG~w}pLFQBIFSHS", + "maneuver": { + "bearing_after": 118, + "bearing_before": 239, + "location": [ + -71.100322, + 42.335929 + ], + "modifier": "sharp left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Longwood Avenue", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 120, + 240, + 300 + ], + "location": [ + -71.100322, + 42.335929 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 60, + 120, + 240, + 300 + ], + "location": [ + -71.10008, + 42.33583 + ] + } + ], + "weight": 8.2, + "duration": 8.2, + "distance": 32.9 + }, + { + "geometry": "sukaGzu}pL\\UHGJAJ?N?f@ZJBLBPJDBzAx@PJRJdAj@TLlAp@nAr@HD", + "maneuver": { + "bearing_after": 150, + "bearing_before": 122, + "location": [ + -71.099976, + 42.335781 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Saint Alphonsus Street", + "intersections": [ + { + "out": 2, + "in": 4, + "entry": [ + true, + true, + true, + true, + false + ], + "bearings": [ + 60, + 120, + 150, + 240, + 300 + ], + "location": [ + -71.099976, + 42.335781 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 45, + 210 + ], + "location": [ + -71.09982, + 42.335382 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 45, + 210 + ], + "location": [ + -71.100003, + 42.335047 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.100058, + 42.33496 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 285 + ], + "location": [ + -71.100427, + 42.334375 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.100486, + 42.334283 + ] + } + ], + "weight": 92.2, + "duration": 92.2, + "distance": 342 + }, + { + "geometry": "cdkaGf~}pLFQFOh@qBb@yABQ", + "maneuver": { + "bearing_after": 118, + "bearing_before": 203, + "location": [ + -71.10132, + 42.332976 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Tremont Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 195, + 300 + ], + "location": [ + -71.10132, + 42.332976 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.100583, + 42.332689 + ] + } + ], + "weight": 34.4, + "duration": 34.4, + "distance": 118.7 + }, + { + "geometry": "aakaGfv}pLPH", + "maneuver": { + "bearing_after": 202, + "bearing_before": 116, + "location": [ + -71.100041, + 42.332486 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Carmel Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 210, + 300 + ], + "location": [ + -71.100041, + 42.332486 + ] + } + ], + "weight": 2.5, + "duration": 2.5, + "distance": 10.3 + }, + { + "geometry": "o`kaGpv}pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 204, + "location": [ + -71.100092, + 42.332401 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Carmel Street", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 24 + ], + "location": [ + -71.100092, + 42.332401 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Huntington Avenue, Saint Alphonsus Street", + "weight": 281.2, + "duration": 281.2, + "distance": 904.8 + }, + { + "steps": [ + { + "geometry": "o`kaGpv}pLQI", + "maneuver": { + "bearing_after": 24, + "bearing_before": 0, + "location": [ + -71.100092, + 42.332401 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Carmel Street", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 24 + ], + "location": [ + -71.100092, + 42.332401 + ] + } + ], + "weight": 15.4, + "duration": 15.4, + "distance": 10.3 + }, + { + "geometry": "aakaGfv}pLDOJk@F]Ji@BKJg@Jq@n@cEF_@Da@B[D_@@U", + "maneuver": { + "bearing_after": 111, + "bearing_before": 22, + "location": [ + -71.100041, + 42.332486 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Tremont Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 105, + 210, + 300 + ], + "location": [ + -71.100041, + 42.332486 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 210, + 285 + ], + "location": [ + -71.099319, + 42.332276 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.097892, + 42.331915 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 105, + 285 + ], + "location": [ + -71.097729, + 42.331881 + ] + } + ], + "weight": 67.4, + "duration": 67.4, + "distance": 251.1 + }, + { + "geometry": "u|jaGdd}pLh@TTH`Bd@h@RLHd@~@@@JPTX`@f@NN", + "maneuver": { + "bearing_after": 201, + "bearing_before": 101, + "location": [ + -71.09715, + 42.331785 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Parker Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 105, + 195, + 285 + ], + "location": [ + -71.09715, + 42.331785 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.097501, + 42.330979 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 225, + 300 + ], + "location": [ + -71.097652, + 42.330702 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 120, + 225 + ], + "location": [ + -71.097971, + 42.330507 + ] + } + ], + "weight": 58, + "duration": 58, + "distance": 224.8 + }, + { + "geometry": "_rjaGnl}pLYv@CF]bAQh@", + "maneuver": { + "bearing_after": 300, + "bearing_before": 219, + "location": [ + -71.098479, + 42.330081 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Alleghany Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 135, + 210, + 300 + ], + "location": [ + -71.098479, + 42.330081 + ] + } + ], + "weight": 20.1, + "duration": 20.1, + "distance": 83.7 + }, + { + "geometry": "mtjaG|q}pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 301, + "location": [ + -71.099348, + 42.33047 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Alleghany Street", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 121 + ], + "location": [ + -71.099348, + 42.33047 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Tremont Street, Parker Street", + "weight": 160.9, + "duration": 160.9, + "distance": 569.9 + }, + { + "steps": [ + { + "geometry": "mtjaG|q}pLPi@\\cABGXw@NYn@sBNg@DQ", + "maneuver": { + "bearing_after": 121, + "bearing_before": 0, + "location": [ + -71.099348, + 42.33047 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Alleghany Street", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 121 + ], + "location": [ + -71.099348, + 42.33047 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 135, + 210, + 300 + ], + "location": [ + -71.098479, + 42.330081 + ] + } + ], + "weight": 47.400000000, + "duration": 47.400000000, + "distance": 179.3 + }, + { + "geometry": "iojaGff}pLZR\\PZPzBjA", + "maneuver": { + "bearing_after": 209, + "bearing_before": 118, + "location": [ + -71.097481, + 42.329646 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Terrace Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.097481, + 42.329646 + ] + } + ], + "weight": 38.4, + "duration": 38.4, + "distance": 128.7 + }, + { + "geometry": "whjaGjj}pLFSZcA^oA?CBIHU", + "maneuver": { + "bearing_after": 116, + "bearing_before": 203, + "location": [ + -71.098138, + 42.328596 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "New Cedar Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 120, + 195 + ], + "location": [ + -71.098138, + 42.328596 + ] + } + ], + "weight": 22.9, + "duration": 22.9, + "distance": 95 + }, + { + "geometry": "efjaG~c}pLFWFWVaA\\qAV_ADODK", + "maneuver": { + "bearing_after": 115, + "bearing_before": 116, + "location": [ + -71.097121, + 42.328194 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Cedar Street", + "intersections": [ + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 120, + 195, + 300 + ], + "location": [ + -71.097121, + 42.328194 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 120, + 195, + 300 + ], + "location": [ + -71.096998, + 42.32815 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 120, + 300 + ], + "location": [ + -71.096139, + 42.32784 + ] + } + ], + "weight": 43, + "duration": 43, + "distance": 133.1 + }, + { + "geometry": "{bjaG~z|pLwBeAa@U[YWUk@q@a@e@]g@Yi@Ui@Kc@Oy@Km@SqAM_AKu@Gu@OoACU", + "maneuver": { + "bearing_after": 22, + "bearing_before": 116, + "location": [ + -71.095675, + 42.327662 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Centre Street", + "intersections": [ + { + "out": 0, + "in": 4, + "entry": [ + true, + true, + true, + true, + false + ], + "bearings": [ + 30, + 120, + 165, + 210, + 300 + ], + "location": [ + -71.095675, + 42.327662 + ] + }, + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 120, + 150, + 210 + ], + "location": [ + -71.094982, + 42.328687 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.094537, + 42.329076 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 240, + 330 + ], + "location": [ + -71.093921, + 42.329467 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.09322, + 42.329665 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 180, + 255 + ], + "location": [ + -71.091954, + 42.329942 + ] + } + ], + "weight": 114.800000000, + "duration": 114.800000000, + "distance": 465.9 + }, + { + "geometry": "wqjaGn`|pLHSJWJc@DS@G", + "maneuver": { + "bearing_after": 120, + "bearing_before": 75, + "location": [ + -71.091441, + 42.330037 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dudley Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 120, + 255, + 315 + ], + "location": [ + -71.091441, + 42.330037 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 120, + 210, + 300 + ], + "location": [ + -71.091219, + 42.329933 + ] + } + ], + "weight": 14, + "duration": 14, + "distance": 50.1 + }, + { + "geometry": "mpjaGb}{pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 117, + "location": [ + -71.090904, + 42.329829 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dudley Street", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 297 + ], + "location": [ + -71.090904, + 42.329829 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Alleghany Street, Centre Street", + "weight": 280.5, + "duration": 280.5, + "distance": 1052 + }, + { + "steps": [ + { + "geometry": "mpjaGb}{pLNg@Ps@DU@E@O", + "maneuver": { + "bearing_after": 116, + "bearing_before": 0, + "location": [ + -71.090904, + 42.329829 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Dudley Street", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 116 + ], + "location": [ + -71.090904, + 42.329829 + ] + } + ], + "weight": 15.9, + "duration": 15.9, + "distance": 61.7 + }, + { + "geometry": "aojaGzx{pL^WX[l@k@FIR[f@_Ap@kAh@_A^q@JSHWTmAXeC", + "maneuver": { + "bearing_after": 149, + "bearing_before": 104, + "location": [ + -71.090221, + 42.329605 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Bartlett Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 150, + 285 + ], + "location": [ + -71.090221, + 42.329605 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 135, + 210, + 330 + ], + "location": [ + -71.089741, + 42.329085 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 135, + 210, + 315 + ], + "location": [ + -71.089227, + 42.328749 + ] + } + ], + "weight": 87.5, + "duration": 87.5, + "distance": 344.2 + }, + { + "geometry": "scjaGvd{pLv@VhA`@p@Rf@PbBj@|Ad@jBp@HDVHb@NPFTNXTLJZZJJp@l@~@x@r@x@^l@?@zAzBbA|AT\\|@rAh@v@BFPVT\\PVb@t@", + "maneuver": { + "bearing_after": 196, + "bearing_before": 104, + "location": [ + -71.086996, + 42.327782 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Washington Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 195, + 285 + ], + "location": [ + -71.086996, + 42.327782 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.087286, + 42.327133 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 285 + ], + "location": [ + -71.087695, + 42.326184 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.08789, + 42.32571 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 120, + 195 + ], + "location": [ + -71.088138, + 42.325173 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 135, + 210, + 300 + ], + "location": [ + -71.088788, + 42.324218 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 105, + 225, + 285 + ], + "location": [ + -71.0896, + 42.323394 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.091941, + 42.321692 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 120, + 225 + ], + "location": [ + -71.092089, + 42.321576 + ] + } + ], + "weight": 221.399999999, + "duration": 221.399999999, + "distance": 869.7 + }, + { + "geometry": "e{haG~f|pL^i@R[f@w@T]PQl@o@\\[nAgAVUbAy@XYLS", + "maneuver": { + "bearing_after": 133, + "bearing_before": 226, + "location": [ + -71.092476, + 42.321307 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Elmore Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.092476, + 42.321307 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 150, + 330 + ], + "location": [ + -71.091373, + 42.320423 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 150, + 330 + ], + "location": [ + -71.090868, + 42.319865 + ] + } + ], + "weight": 76.2, + "duration": 76.2, + "distance": 298.4 + }, + { + "geometry": "anhaG~x{pLDHRVh@r@VXNF^Lf@NF@~@XdA^VL~Ar@", + "maneuver": { + "bearing_after": 222, + "bearing_before": 127, + "location": [ + -71.090238, + 42.319213 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Walnut Avenue", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 105, + 225, + 315 + ], + "location": [ + -71.090238, + 42.319213 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.091004, + 42.318268 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.091287, + 42.317601 + ] + } + ], + "weight": 68.4, + "duration": 68.4, + "distance": 275.8 + }, + { + "geometry": "g`haGra|pLRHf@F^F@?f@BNAb@AF?XBXBVHFBTH^LXBTAVIVOV]Vg@HKJO", + "maneuver": { + "bearing_after": 191, + "bearing_before": 201, + "location": [ + -71.091622, + 42.316996 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Crawford Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 120, + 195, + 255 + ], + "location": [ + -71.091622, + 42.316996 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 105, + 180 + ], + "location": [ + -71.091768, + 42.316329 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.091837, + 42.315648 + ] + } + ], + "weight": 75.5, + "duration": 75.5, + "distance": 299.9 + }, + { + "geometry": "upgaG``|pLn@f@jAv@j@b@\\Tj@`@`Ax@|@l@BB|@p@NPFRDd@@T", + "maneuver": { + "bearing_after": 210, + "bearing_before": 132, + "location": [ + -71.091368, + 42.31451 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Harold Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 150, + 210, + 315 + ], + "location": [ + -71.091368, + 42.31451 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.091565, + 42.314271 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.092028, + 42.313668 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.092595, + 42.312966 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 135, + 255 + ], + "location": [ + -71.093189, + 42.312246 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.093483, + 42.312183 + ] + } + ], + "weight": 90.899999999, + "duration": 90.899999999, + "distance": 327 + }, + { + "geometry": "abgaG|m|pLVEl@G\\E\\GXGb@IVITIRKRKROTSPQTURUd@m@`@k@\\g@LQJQrBqCt@kAxB_DvAoBFIJOLSLSR[P]L[LYVm@Z}@r@gBR_@pAgC`CwE", + "maneuver": { + "bearing_after": 171, + "bearing_before": 255, + "location": [ + -71.093585, + 42.312166 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "ref": "MA 28", + "driving_side": "right", + "name": "Seaver Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.093585, + 42.312166 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 330 + ], + "location": [ + -71.092959, + 42.310565 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 315 + ], + "location": [ + -71.092196, + 42.309911 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 315 + ], + "location": [ + -71.089119, + 42.307563 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 135, + 300 + ], + "location": [ + -71.0874, + 42.30664 + ] + } + ], + "weight": 269.5, + "duration": 269.5, + "distance": 1026.6 + }, + { + "geometry": "gxeaGf{zpLd@aAFIDGFGFEHCHEHAJCJAJAJAH@R@vBd@lAVVFHBXFtCn@dB^D@ND`@HHBdATpG~AtA\\lAXtA^rAVRDNBb@JRBTDh@L@?zEbA~AZj@NhATv@N\\H", + "maneuver": { + "bearing_after": 127, + "bearing_before": 127, + "location": [ + -71.085475, + 42.305484 + ], + "modifier": "slight right", + "type": "fork" + }, + "mode": "cycling", + "ref": "MA 28", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 120, + 135, + 315 + ], + "location": [ + -71.085475, + 42.305484 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 15, + 195 + ], + "location": [ + -71.084895, + 42.304595 + ] + }, + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true, + true + ], + "bearings": [ + 15, + 60, + 105, + 195, + 240 + ], + "location": [ + -71.085269, + 42.303436 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 120, + 195, + 285 + ], + "location": [ + -71.085749, + 42.301943 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 120, + 195 + ], + "location": [ + -71.085933, + 42.30137 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 120, + 195 + ], + "location": [ + -71.08656, + 42.299565 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 120, + 195 + ], + "location": [ + -71.086847, + 42.298748 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.087002, + 42.298226 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 75, + 195, + 255 + ], + "location": [ + -71.087021, + 42.29815 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 330 + ], + "location": [ + -71.08754, + 42.296437 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 195, + 315 + ], + "location": [ + -71.087865, + 42.295373 + ] + } + ], + "weight": 358.300000000, + "duration": 358.300000000, + "distance": 1220.2 + }, + { + "geometry": "kvcaG~j{pLD_@mAWsAYC?uA[", + "maneuver": { + "bearing_after": 102, + "bearing_before": 192, + "location": [ + -71.087997, + 42.294939 + ], + "modifier": "uturn", + "type": "continue" + }, + "mode": "cycling", + "ref": "MA 28", + "driving_side": "right", + "name": "Blue Hill Avenue", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.087997, + 42.294939 + ] + }, + { + "out": 0, + "in": 4, + "entry": [ + true, + true, + true, + true, + false + ], + "bearings": [ + 15, + 75, + 120, + 195, + 285 + ], + "location": [ + -71.087839, + 42.294911 + ] + } + ], + "weight": 46.1, + "duration": 46.1, + "distance": 157.1 + }, + { + "geometry": "a~caGpg{pL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 13, + "location": [ + -71.087449, + 42.296172 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "ref": "MA 28", + "driving_side": "right", + "name": "Blue Hill Avenue", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 193 + ], + "location": [ + -71.087449, + 42.296172 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Seaver Street, Blue Hill Avenue", + "weight": 1309.7, + "duration": 1309.7, + "distance": 4880.7 + }, + { + "steps": [ + { + "geometry": "a~caGpg{pLQEiAUqDw@a@KgAU]Gy@QOESCICKCA?q@O{Aa@uD_AqD{@qA[GAWG", + "maneuver": { + "bearing_after": 13, + "bearing_before": 0, + "location": [ + -71.087449, + 42.296172 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "cycling", + "ref": "MA 28", + "driving_side": "right", + "name": "Blue Hill Avenue", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 13 + ], + "location": [ + -71.087449, + 42.296172 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.087306, + 42.296631 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.086974, + 42.297691 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 195, + 255, + 285 + ], + "location": [ + -71.086819, + 42.298199 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 120, + 195, + 300 + ], + "location": [ + -71.086677, + 42.298666 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 135, + 195, + 300 + ], + "location": [ + -71.086393, + 42.299502 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 135, + 195 + ], + "location": [ + -71.086072, + 42.30041 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 135, + 195, + 300 + ], + "location": [ + -71.085768, + 42.301302 + ] + } + ], + "weight": 200.299999999, + "duration": 200.299999999, + "distance": 652 + }, + { + "geometry": "uaeaGz{zpLFW", + "maneuver": { + "bearing_after": 118, + "bearing_before": 12, + "location": [ + -71.085576, + 42.301874 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Glenway Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 120, + 195, + 300 + ], + "location": [ + -71.085576, + 42.301874 + ] + } + ], + "weight": 5.1, + "duration": 5.1, + "distance": 10.8 + }, + { + "geometry": "maeaGb{zpL?EAEAGCEW]EGEEIGcBy@aCmA", + "maneuver": { + "bearing_after": 67, + "bearing_before": 118, + "location": [ + -71.085461, + 42.301828 + ], + "modifier": "slight left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Old Road", + "intersections": [ + { + "out": 1, + "in": 4, + "entry": [ + true, + true, + true, + true, + false + ], + "bearings": [ + 15, + 75, + 120, + 195, + 300 + ], + "location": [ + -71.085461, + 42.301828 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 195, + 225 + ], + "location": [ + -71.08507, + 42.302097 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 135, + 210, + 315 + ], + "location": [ + -71.084776, + 42.302603 + ] + } + ], + "weight": 45.7, + "duration": 45.7, + "distance": 185.5 + }, + { + "geometry": "ijeaGltzpLEECECIGOCMCOCQ?S?QAOAQCOAOESEQEQMa@OY_@i@IKYe@MQY_@c@o@Wc@MQm@kAEIm@iAUa@KSMWo@sAWq@Mg@Ko@CQEi@Gc@Gq@AEK_AGWKc@c@oAACMYQa@q@iAIMg@w@q@}@c@i@CCGGGIcAmAMOCC]c@SWi@w@_@m@?AKQ{@{AGIOWEIYg@OW]s@??Q]kB}Ck@kAg@_A]u@u@oBWo@ISUq@CCMYq@mASY]c@CCWYEGmAuAGIYYa@_@q@_@e@UwAo@a@QgB}@u@_@SKQIKGMIw@m@q@i@QOYUSQGCECIAGCECGCAAECmAcAKI]YIGGGEGEECIUe@AAGMUi@Wk@MWMUOUOSOQQQQOSOQMaBeAi@_@IG}ByASMQOQQQQOQUYU[KOCEEIOUk@eACE[Y", + "maneuver": { + "bearing_after": 52, + "bearing_before": 22, + "location": [ + -71.084389, + 42.303253 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Columbia Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 60, + 210 + ], + "location": [ + -71.084389, + 42.303253 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 195, + 240 + ], + "location": [ + -71.084201, + 42.303358 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 255, + 270 + ], + "location": [ + -71.083959, + 42.303419 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 135, + 255 + ], + "location": [ + -71.083444, + 42.303472 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.08286, + 42.303706 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.082309, + 42.304121 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.081211, + 42.304878 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 60, + 135, + 225, + 315 + ], + "location": [ + -71.080454, + 42.305354 + ] + }, + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false, + true + ], + "bearings": [ + 60, + 135, + 225, + 255, + 315 + ], + "location": [ + -71.078258, + 42.306041 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.07652, + 42.306994 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 135, + 225, + 315 + ], + "location": [ + -71.07594, + 42.307478 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 120, + 225, + 330 + ], + "location": [ + -71.075096, + 42.308197 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 105, + 225, + 315 + ], + "location": [ + -71.073078, + 42.309528 + ] + }, + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false, + true + ], + "bearings": [ + 45, + 135, + 210, + 225, + 345 + ], + "location": [ + -71.072292, + 42.31007 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 120, + 240, + 285 + ], + "location": [ + -71.070018, + 42.311275 + ] + }, + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false, + true + ], + "bearings": [ + 30, + 75, + 180, + 210, + 300 + ], + "location": [ + -71.068362, + 42.312682 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 75, + 210, + 270 + ], + "location": [ + -71.067233, + 42.314621 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 120, + 210, + 300 + ], + "location": [ + -71.066374, + 42.315694 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 135, + 195, + 300 + ], + "location": [ + -71.066315, + 42.315805 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 225 + ], + "location": [ + -71.065512, + 42.316733 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 120, + 240, + 300 + ], + "location": [ + -71.065028, + 42.317 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.063454, + 42.318567 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 120, + 225, + 315 + ], + "location": [ + -71.062414, + 42.319813 + ] + } + ], + "weight": 896, + "duration": 896, + "distance": 2767.1 + }, + { + "geometry": "avhaGhevpLSSGGECICE?IAI?E?C?WDQBK@YBMAOAWEc@Kk@OKCeAUICICOGWIQK", + "maneuver": { + "bearing_after": 33, + "bearing_before": 32, + "location": [ + -71.061486, + 42.320492 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Boston Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false, + true, + true + ], + "bearings": [ + 30, + 105, + 150, + 210, + 255, + 315 + ], + "location": [ + -71.061486, + 42.320492 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 165 + ], + "location": [ + -71.061345, + 42.321099 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 90, + 195, + 270 + ], + "location": [ + -71.061171, + 42.32202 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.061042, + 42.322415 + ] + } + ], + "weight": 67.9, + "duration": 67.9, + "distance": 262.2 + }, + { + "geometry": "gdiaGlavpLINs@z@i@t@]h@EHs@hASZMf@Qr@Mn@", + "maneuver": { + "bearing_after": 316, + "bearing_before": 19, + "location": [ + -71.06087, + 42.322758 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Enterprise Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 195, + 315 + ], + "location": [ + -71.06087, + 42.322758 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 135, + 300 + ], + "location": [ + -71.062285, + 42.323816 + ] + } + ], + "weight": 61.099999999, + "duration": 61.099999999, + "distance": 229.6 + }, + { + "geometry": "iliaGtnvpLuAoA_@Yc@_@UQ", + "maneuver": { + "bearing_after": 33, + "bearing_before": 291, + "location": [ + -71.062992, + 42.324051 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lucy Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 105, + 300 + ], + "location": [ + -71.062992, + 42.324051 + ] + } + ], + "weight": 28.3, + "duration": 28.3, + "distance": 117.4 + }, + { + "geometry": "yqiaGxivpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 31, + "location": [ + -71.06221, + 42.324934 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lucy Street", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 211 + ], + "location": [ + -71.06221, + 42.324934 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Blue Hill Avenue, Columbia Road", + "weight": 1304.4, + "duration": 1304.4, + "distance": 4224.6 + }, + { + "steps": [ + { + "geometry": "yqiaGxivpLTPb@^^XtAnA", + "maneuver": { + "bearing_after": 211, + "bearing_before": 0, + "location": [ + -71.06221, + 42.324934 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Lucy Street", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 211 + ], + "location": [ + -71.06221, + 42.324934 + ] + } + ], + "weight": 39.2, + "duration": 39.2, + "distance": 117.4 + }, + { + "geometry": "iliaGtnvpLLo@Ps@Lg@", + "maneuver": { + "bearing_after": 111, + "bearing_before": 213, + "location": [ + -71.062992, + 42.324051 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Enterprise Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 105, + 300 + ], + "location": [ + -71.062992, + 42.324051 + ] + } + ], + "weight": 15.5, + "duration": 15.5, + "distance": 63.9 + }, + { + "geometry": "{jiaGhjvpLR[", + "maneuver": { + "bearing_after": 133, + "bearing_before": 113, + "location": [ + -71.062285, + 42.323816 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Enterprise Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 135, + 300 + ], + "location": [ + -71.062285, + 42.323816 + ] + } + ], + "weight": 14.1, + "duration": 14.1, + "distance": 15.6 + }, + { + "geometry": "gjiaGlivpLr@iADI\\i@h@u@r@{@HO", + "maneuver": { + "bearing_after": 132, + "bearing_before": 133, + "location": [ + -71.06215, + 42.323717 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Enterprise Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 135, + 315 + ], + "location": [ + -71.06215, + 42.323717 + ] + } + ], + "weight": 48.1, + "duration": 48.1, + "distance": 150.1 + }, + { + "geometry": "gdiaGlavpLo@e@", + "maneuver": { + "bearing_after": 28, + "bearing_before": 136, + "location": [ + -71.06087, + 42.322758 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Boston Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 195, + 315 + ], + "location": [ + -71.06087, + 42.322758 + ] + } + ], + "weight": 11.3, + "duration": 11.3, + "distance": 31.2 + }, + { + "geometry": "weiaGf`vpLDO^aBlCwKJc@BITaALi@ZeA@EDOFG?UAaD", + "maneuver": { + "bearing_after": 113, + "bearing_before": 28, + "location": [ + -71.060684, + 42.323003 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Mount Vernon Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.060684, + 42.323003 + ] + }, + { + "out": 1, + "in": 4, + "entry": [ + true, + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 255, + 300 + ], + "location": [ + -71.056798, + 42.32162 + ] + } + ], + "weight": 108.699999999, + "duration": 108.699999999, + "distance": 431.7 + }, + { + "geometry": "e}haGfbupLFAt@AP?X?", + "maneuver": { + "bearing_after": 174, + "bearing_before": 88, + "location": [ + -71.055878, + 42.32163 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Buttonwood Street", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.055878, + 42.32163 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 75, + 180, + 240 + ], + "location": [ + -71.055862, + 42.32123 + ] + } + ], + "weight": 27, + "duration": 27, + "distance": 58.5 + }, + { + "geometry": "{yhaGbbupLIWGWEWEWG]C[E[C]AQAS?y@@IAa@?WC}C?O?MAK?MAKAKAICK?yA", + "maneuver": { + "bearing_after": 66, + "bearing_before": 178, + "location": [ + -71.05586, + 42.321104 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Columbia Road", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 60, + 180, + 240 + ], + "location": [ + -71.05586, + 42.321104 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 255, + 285 + ], + "location": [ + -71.052679, + 42.321461 + ] + } + ], + "weight": 92.7, + "duration": 92.7, + "distance": 305.2 + }, + { + "geometry": "c|haGlktpL@K?I@I?K?K?MAUCw@", + "maneuver": { + "bearing_after": 90, + "bearing_before": 88, + "location": [ + -71.052229, + 42.321462 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Columbia Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 90, + 270 + ], + "location": [ + -71.052229, + 42.321462 + ] + } + ], + "weight": 15.5, + "duration": 15.5, + "distance": 61.5 + }, + { + "geometry": "e|haGxftpL@E@E@E@E@E?E?E?E?G?EAEAEAEAEACAECCAEECACCACCEA", + "maneuver": { + "exit": 1, + "bearing_after": 122, + "bearing_before": 82, + "location": [ + -71.051488, + 42.321468 + ], + "modifier": "slight right", + "type": "rotary" + }, + "mode": "cycling", + "driving_side": "right", + "name": "William J. Day Boulevard", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + false + ], + "bearings": [ + 120, + 270, + 300 + ], + "location": [ + -71.051488, + 42.321468 + ] + } + ], + "rotary_name": "Kosciuszko Circle", + "weight": 14.4, + "duration": 14.4, + "distance": 60.6 + }, + { + "geometry": "c}haG~btpLO_@EEGGEECCCECGAGIYEICIEGEEGICGEIEIEKGKGKGKEIEGEGGIEGEGIIGGIEIGGGIGGEGCECCCICGEICGCECICGCGAGAGAICIAIAIASASASCSAUAY?SAO?O@_@?M@O?I?K?O?Y?S?Q?QAM?MA", + "maneuver": { + "exit": 1, + "bearing_after": 54, + "bearing_before": 21, + "location": [ + -71.050879, + 42.321615 + ], + "modifier": "slight right", + "type": "exit rotary" + }, + "mode": "cycling", + "driving_side": "right", + "name": "William J. Day Boulevard", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 60, + 195 + ], + "location": [ + -71.050879, + 42.321615 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 90, + 225 + ], + "location": [ + -71.05057, + 42.321835 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 60, + 210, + 225, + 240 + ], + "location": [ + -71.050138, + 42.322074 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 210, + 240 + ], + "location": [ + -71.04994, + 42.322184 + ] + } + ], + "weight": 145.2, + "duration": 145.2, + "distance": 491.7 + }, + { + "geometry": "euiaGlvspL?N?D", + "maneuver": { + "bearing_after": 271, + "bearing_before": 0, + "location": [ + -71.048872, + 42.325465 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.048872, + 42.325465 + ] + } + ], + "weight": 2.2, + "duration": 2.2, + "distance": 9 + }, + { + "geometry": "euiaGbwspL?HKREHIDAA", + "maneuver": { + "bearing_after": 277, + "bearing_before": 274, + "location": [ + -71.048981, + 42.325469 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 285 + ], + "location": [ + -71.048981, + 42.325469 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 210, + 300 + ], + "location": [ + -71.049029, + 42.325474 + ] + } + ], + "weight": 24.8, + "duration": 24.8, + "distance": 27.1 + }, + { + "geometry": "cviaGnxspL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 7, + "location": [ + -71.049204, + 42.325624 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 187 + ], + "location": [ + -71.049204, + 42.325624 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Mount Vernon Street, William J. Day Boulevard", + "weight": 558.7, + "duration": 558.7, + "distance": 1823.5 + }, + { + "steps": [ + { + "geometry": "cviaGnxspL@@HEDIJS?I", + "maneuver": { + "bearing_after": 187, + "bearing_before": 0, + "location": [ + -71.049204, + 42.325624 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 187 + ], + "location": [ + -71.049204, + 42.325624 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 210, + 300 + ], + "location": [ + -71.049029, + 42.325474 + ] + } + ], + "weight": 25.200000000, + "duration": 25.200000000, + "distance": 27.1 + }, + { + "geometry": "euiaGbwspL?E?O", + "maneuver": { + "bearing_after": 94, + "bearing_before": 97, + "location": [ + -71.048981, + 42.325469 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 285 + ], + "location": [ + -71.048981, + 42.325469 + ] + } + ], + "weight": 10.2, + "duration": 10.2, + "distance": 9 + }, + { + "geometry": "euiaGlvspLK?KAMA[AUC[Cc@I_@I_@Ki@OSIQISGUMi@WSKUMUQMIQOSSOMa@a@s@s@UU]c@GKGIGICEEGOWMU{@{AYm@O[GOWm@KYIWIW", + "maneuver": { + "bearing_after": 2, + "bearing_before": 91, + "location": [ + -71.048872, + 42.325465 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "William J. Day Boulevard", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.048872, + 42.325465 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 345 + ], + "location": [ + -71.046986, + 42.328724 + ] + } + ], + "weight": 146.2, + "duration": 146.2, + "distance": 608.8 + }, + { + "geometry": "upjaGj~rpLCWCK?EEQMi@G]I_@AGG_@", + "maneuver": { + "bearing_after": 73, + "bearing_before": 57, + "location": [ + -71.045023, + 42.32987 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "William J. Day Boulevard", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 75, + 240 + ], + "location": [ + -71.045023, + 42.32987 + ] + } + ], + "weight": 46.2, + "duration": 46.2, + "distance": 90.2 + }, + { + "geometry": "mrjaG~wrpLG?E?E?E?]@K?", + "maneuver": { + "bearing_after": 357, + "bearing_before": 70, + "location": [ + -71.043997, + 42.330151 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 75, + 165, + 255 + ], + "location": [ + -71.043997, + 42.330151 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.043999, + 42.330186 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 60, + 180, + 240 + ], + "location": [ + -71.044002, + 42.330224 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.044003, + 42.330247 + ] + } + ], + "weight": 13.4, + "duration": 13.4, + "distance": 37.9 + }, + { + "geometry": "qtjaG`xrpLCmCAmB?EAsBAeC?QAcACeF?Q", + "maneuver": { + "bearing_after": 87, + "bearing_before": 357, + "location": [ + -71.044013, + 42.330492 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Columbia Road", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.044013, + 42.330492 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.042746, + 42.330515 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.042137, + 42.330525 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 90, + 270 + ], + "location": [ + -71.041376, + 42.330542 + ] + } + ], + "weight": 83.2, + "duration": 83.2, + "distance": 347.2 + }, + { + "geometry": "aujaGv}qpL?OA_AAkBAw@?w@AeA?UAaBAO?MAkFA{C", + "maneuver": { + "bearing_after": 87, + "bearing_before": 87, + "location": [ + -71.039802, + 42.330572 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Marine Road", + "intersections": [ + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.039802, + 42.330572 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.037271, + 42.330625 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.036024, + 42.330636 + ] + } + ], + "weight": 98.5, + "duration": 98.5, + "distance": 376.5 + }, + { + "geometry": "qujaGfaqpLgDBaDDcDBeDDcA@G?I?aAHK?Y?a@@yA@E?S?O@E?uC@aDD", + "maneuver": { + "bearing_after": 358, + "bearing_before": 88, + "location": [ + -71.035236, + 42.33065 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "L Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.035236, + 42.33065 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.035261, + 42.33149 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.035286, + 42.332299 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.035305, + 42.33312 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.035338, + 42.333951 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 75, + 180, + 255 + ], + "location": [ + -71.035353, + 42.334375 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.0354, + 42.334765 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.035423, + 42.335645 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.035443, + 42.336506 + ] + } + ], + "weight": 203.200000000, + "duration": 203.200000000, + "distance": 741.5 + }, + { + "geometry": "g_laGtbqpLyCDI?S?cEDcCBeA@S?yBBO@a@?O?Q@OBA?KBO@ODMDQFMFOFMHOJMHMLKJMLKLKNILKPINwAdCqBnD", + "maneuver": { + "bearing_after": 357, + "bearing_before": 358, + "location": [ + -71.035465, + 42.337322 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Summer Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.035465, + 42.337322 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.035497, + 42.338144 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 180, + 270 + ], + "location": [ + -71.03553, + 42.339219 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 180, + 270 + ], + "location": [ + -71.03555, + 42.339882 + ] + } + ], + "weight": 194, + "duration": 194, + "distance": 790.5 + }, + { + "geometry": "agmaGhsqpLKHKJMLMRc@v@CFMR", + "maneuver": { + "bearing_after": 327, + "bearing_before": 310, + "location": [ + -71.038129, + 42.34369 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Summer Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 300, + 330 + ], + "location": [ + -71.038129, + 42.34369 + ] + } + ], + "weight": 43, + "duration": 43, + "distance": 83.1 + }, + { + "geometry": "kjmaGtwqpLOOQSCEEGCEAGAGCGGc@AI?KAM?MAsAAM?KAOAGEW?k@", + "maneuver": { + "bearing_after": 37, + "bearing_before": 310, + "location": [ + -71.038829, + 42.344223 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Drydock Avenue", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 135, + 240, + 315 + ], + "location": [ + -71.038829, + 42.344223 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 150, + 270 + ], + "location": [ + -71.03758, + 42.344573 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 255, + 270 + ], + "location": [ + -71.03721, + 42.344626 + ] + } + ], + "weight": 42.9, + "duration": 42.9, + "distance": 166.2 + }, + { + "geometry": "}lmaGdlqpLe@c@aCyBEGCGCGEMCGEEkDeDQO", + "maneuver": { + "bearing_after": 33, + "bearing_before": 87, + "location": [ + -71.036985, + 42.344631 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Harbor Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 90, + 210, + 270 + ], + "location": [ + -71.036985, + 42.344631 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.036812, + 42.34482 + ] + } + ], + "weight": 70.1, + "duration": 70.1, + "distance": 269.9 + }, + { + "geometry": "aymaG|_qpLIJKJa@^kAfAG?IBGBs@j@", + "maneuver": { + "bearing_after": 322, + "bearing_before": 35, + "location": [ + -71.035028, + 42.346565 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Northern Avenue", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 135, + 210, + 330 + ], + "location": [ + -71.035028, + 42.346565 + ] + }, + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 150, + 240, + 300, + 330 + ], + "location": [ + -71.035666, + 42.347227 + ] + } + ], + "weight": 36.8, + "duration": 36.8, + "distance": 139.6 + }, + { + "geometry": "s_naGpeqpLEIC@CA", + "maneuver": { + "bearing_after": 46, + "bearing_before": 326, + "location": [ + -71.03593, + 42.347616 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 150, + 225, + 315 + ], + "location": [ + -71.03593, + 42.347616 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 150, + 225 + ], + "location": [ + -71.035884, + 42.347647 + ] + } + ], + "weight": 11.2, + "duration": 11.2, + "distance": 9.7 + }, + { + "geometry": "a`naGfeqpLGBIBCF", + "maneuver": { + "bearing_after": 337, + "bearing_before": 9, + "location": [ + -71.035875, + 42.347685 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Boston HarborWalk", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 195, + 345 + ], + "location": [ + -71.035875, + 42.347685 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 330 + ], + "location": [ + -71.0359, + 42.347731 + ] + } + ], + "weight": 13.8, + "duration": 13.8, + "distance": 15 + }, + { + "geometry": "w`naGveqpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 296, + "location": [ + -71.035964, + 42.347795 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Boston HarborWalk", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 116 + ], + "location": [ + -71.035964, + 42.347795 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "L Street, Summer Street", + "weight": 1037.9, + "duration": 1037.9, + "distance": 3712.3 + }, + { + "steps": [ + { + "geometry": "w`naGveqpLBGHC", + "maneuver": { + "bearing_after": 116, + "bearing_before": 0, + "location": [ + -71.035964, + 42.347795 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Boston HarborWalk", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 116 + ], + "location": [ + -71.035964, + 42.347795 + ] + } + ], + "weight": 15.9, + "duration": 15.9, + "distance": 9.5 + }, + { + "geometry": "i`naGjeqpLBXC@EDEDAF", + "maneuver": { + "bearing_after": 258, + "bearing_before": 142, + "location": [ + -71.0359, + 42.347731 + ], + "modifier": "sharp left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 330 + ], + "location": [ + -71.0359, + 42.347731 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + false, + true + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.036031, + 42.347714 + ] + } + ], + "weight": 9.8, + "duration": 9.8, + "distance": 25.1 + }, + { + "geometry": "w`naGzfqpLMl@a@lBAB]fA", + "maneuver": { + "bearing_after": 291, + "bearing_before": 298, + "location": [ + -71.036143, + 42.347804 + ], + "modifier": "slight right", + "type": "fork" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Northern Avenue", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 119, + 280, + 291 + ], + "location": [ + -71.036143, + 42.347804 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 135, + 300 + ], + "location": [ + -71.036916, + 42.348036 + ] + } + ], + "weight": 29.6, + "duration": 29.6, + "distance": 105 + }, + { + "geometry": "gcnaGbnqpLSOOMOE{CsBr@cC", + "maneuver": { + "bearing_after": 30, + "bearing_before": 298, + "location": [ + -71.037299, + 42.348196 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Boston Harborwalk", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.037299, + 42.348196 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.037218, + 42.348295 + ] + } + ], + "weight": 53, + "duration": 53, + "distance": 193.1 + }, + { + "geometry": "chnaGfeqpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 118, + "location": [ + -71.03588, + 42.34898 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Boston Harborwalk", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 298 + ], + "location": [ + -71.03588, + 42.34898 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Northern Avenue, Boston Harborwalk", + "weight": 108.3, + "duration": 108.3, + "distance": 332.7 + }, + { + "steps": [ + { + "geometry": "chnaGfeqpLs@bCzCrBNDNLRN", + "maneuver": { + "bearing_after": 298, + "bearing_before": 0, + "location": [ + -71.03588, + 42.34898 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Boston Harborwalk", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 298 + ], + "location": [ + -71.03588, + 42.34898 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.037218, + 42.348295 + ] + } + ], + "weight": 57, + "duration": 57, + "distance": 193.1 + }, + { + "geometry": "gcnaGbnqpLOf@", + "maneuver": { + "bearing_after": 298, + "bearing_before": 210, + "location": [ + -71.037299, + 42.348196 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Northern Avenue", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.037299, + 42.348196 + ] + } + ], + "weight": 12.8, + "duration": 12.8, + "distance": 19 + }, + { + "geometry": "wcnaGjoqpLVP|@n@RLDF@?DHBJ@J@H?JA`C?T?RANANCXARCNCNCLELM\\EHIT", + "maneuver": { + "bearing_after": 209, + "bearing_before": 298, + "location": [ + -71.0375, + 42.348279 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Congress Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.0375, + 42.348279 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.037827, + 42.347849 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 90, + 270 + ], + "location": [ + -71.038865, + 42.347645 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 180, + 285 + ], + "location": [ + -71.039373, + 42.347685 + ] + } + ], + "weight": 63.1, + "duration": 63.1, + "distance": 258.5 + }, + { + "geometry": "sanaGn_rpLMPKRGP", + "maneuver": { + "bearing_after": 309, + "bearing_before": 302, + "location": [ + -71.040076, + 42.347939 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Congress Street", + "intersections": [ + { + "out": 4, + "in": 1, + "entry": [ + true, + false, + true, + true, + true + ], + "bearings": [ + 45, + 120, + 225, + 285, + 315 + ], + "location": [ + -71.040076, + 42.347939 + ] + } + ], + "weight": 17.8, + "duration": 17.8, + "distance": 30.4 + }, + { + "geometry": "ubnaGfarpLPLRLv@h@DDJFNL@@JJJJLLJN`@h@LRV\\HJZ`@`@d@FHDFLN", + "maneuver": { + "bearing_after": 208, + "bearing_before": 309, + "location": [ + -71.040358, + 42.348114 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "D Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 135, + 210, + 300 + ], + "location": [ + -71.040358, + 42.348114 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 30, + 105, + 210, + 300 + ], + "location": [ + -71.040426, + 42.348024 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 180, + 225, + 300 + ], + "location": [ + -71.041437, + 42.34697 + ] + } + ], + "weight": 84.399999999, + "duration": 84.399999999, + "distance": 248 + }, + { + "geometry": "uwmaGrlrpLKTsA`Dk@pACDCFQ`@MZCBMZaAzBw@fBCFIRGPINK\\KXeDhJ", + "maneuver": { + "bearing_after": 305, + "bearing_before": 219, + "location": [ + -71.042175, + 42.346349 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Summer Street", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 120, + 225, + 300 + ], + "location": [ + -71.042175, + 42.346349 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.043745, + 42.347177 + ] + } + ], + "weight": 129.7, + "duration": 129.7, + "distance": 539 + }, + { + "geometry": "shnaGlnspLUP]|@e@xAOb@Sh@Sh@Yx@KX[|@a@jAu@vB[x@EJ@V", + "maneuver": { + "bearing_after": 329, + "bearing_before": 300, + "location": [ + -71.047591, + 42.349063 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 300, + 330 + ], + "location": [ + -71.047591, + 42.349063 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.04799, + 42.349316 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.049327, + 42.349924 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.050747, + 42.350563 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 285 + ], + "location": [ + -71.051036, + 42.350696 + ] + } + ], + "weight": 86.000000000, + "duration": 86.000000000, + "distance": 354.7 + }, + { + "geometry": "_snaGbetpLk@|Ag@rAq@lBADCFCFGLMXo@`BGNIP}@`C}@|BENELEHAHCFI`@ET]bBCNCRER", + "maneuver": { + "bearing_after": 302, + "bearing_before": 262, + "location": [ + -71.051222, + 42.350715 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Summer Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 120, + 300 + ], + "location": [ + -71.051222, + 42.350715 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 120, + 195, + 300 + ], + "location": [ + -71.052842, + 42.351482 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 105, + 210, + 285 + ], + "location": [ + -71.055374, + 42.352668 + ] + } + ], + "weight": 176.2, + "duration": 176.2, + "distance": 483.3 + }, + { + "geometry": "w`oaGrdupLDLDH@@BNDNDRTrA@JZbBBP@DHZHTFRNb@HLDFJPJPLRPRRTVXTVZNPJRFJBNDNF", + "maneuver": { + "bearing_after": 236, + "bearing_before": 289, + "location": [ + -71.056257, + 42.352917 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "John F. Fitzgerald Surface Road", + "intersections": [ + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true, + true + ], + "bearings": [ + 45, + 105, + 135, + 240, + 300 + ], + "location": [ + -71.056257, + 42.352917 + ] + }, + { + "out": 4, + "in": 1, + "entry": [ + true, + false, + true, + true, + true, + true + ], + "bearings": [ + 0, + 60, + 120, + 195, + 240, + 270 + ], + "location": [ + -71.057995, + 42.352378 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + false + ], + "bearings": [ + 60, + 225, + 330 + ], + "location": [ + -71.05828, + 42.352258 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.059357, + 42.351101 + ] + } + ], + "weight": 90.3, + "duration": 90.3, + "distance": 351.6 + }, + { + "geometry": "{tnaGfxupLCR", + "maneuver": { + "bearing_after": 285, + "bearing_before": 199, + "location": [ + -71.059399, + 42.35102 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.059399, + 42.35102 + ] + } + ], + "weight": 13.4, + "duration": 13.4, + "distance": 8.2 + }, + { + "geometry": "_unaGzxupLDFLD", + "maneuver": { + "bearing_after": 209, + "bearing_before": 285, + "location": [ + -71.059495, + 42.351041 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 210 + ], + "location": [ + -71.059495, + 42.351041 + ] + } + ], + "weight": 11.7, + "duration": 11.7, + "distance": 12.8 + }, + { + "geometry": "ktnaGhyupL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 199, + "location": [ + -71.059567, + 42.350941 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 19 + ], + "location": [ + -71.059567, + 42.350941 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Summer Street, John F. Fitzgerald Surface Road", + "weight": 742.4, + "duration": 742.4, + "distance": 2498.6 + }, + { + "steps": [ + { + "geometry": "ktnaGhyupLMEEGQG", + "maneuver": { + "bearing_after": 19, + "bearing_before": 0, + "location": [ + -71.059567, + 42.350941 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 19 + ], + "location": [ + -71.059567, + 42.350941 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 105, + 210 + ], + "location": [ + -71.059495, + 42.351041 + ] + } + ], + "weight": 28.900000000, + "duration": 28.900000000, + "distance": 22.6 + }, + { + "geometry": "qunaGrxupLGh@CL?DAFCLQrA", + "maneuver": { + "bearing_after": 286, + "bearing_before": 15, + "location": [ + -71.059461, + 42.351125 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beach Street", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.059461, + 42.351125 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 105, + 285 + ], + "location": [ + -71.059665, + 42.351171 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "location": [ + -71.059811, + 42.351201 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.05988, + 42.351216 + ] + } + ], + "weight": 23.4, + "duration": 23.4, + "distance": 71.6 + }, + { + "geometry": "uvnaGz}upLMBy@N_Dp@G@I@", + "maneuver": { + "bearing_after": 345, + "bearing_before": 285, + "location": [ + -71.060295, + 42.351308 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Oxford Street", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 105, + 285, + 345 + ], + "location": [ + -71.060295, + 42.351308 + ] + } + ], + "weight": 42.5, + "duration": 42.5, + "distance": 142.9 + }, + { + "geometry": "o~naGd`vpLDnA@L", + "maneuver": { + "bearing_after": 262, + "bearing_before": 351, + "location": [ + -71.060668, + 42.352564 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Essex Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.060668, + 42.352564 + ] + } + ], + "weight": 42, + "duration": 42, + "distance": 39.5 + }, + { + "geometry": "g~naGbcvpLOEYGOIk@e@OOGI", + "maneuver": { + "bearing_after": 16, + "bearing_before": 264, + "location": [ + -71.061144, + 42.352524 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Chauncy Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 90, + 270 + ], + "location": [ + -71.061144, + 42.352524 + ] + } + ], + "weight": 31.1, + "duration": 31.1, + "distance": 79.8 + }, + { + "geometry": "eboaGj`vpLEJo@~AIP", + "maneuver": { + "bearing_after": 300, + "bearing_before": 37, + "location": [ + -71.0607, + 42.353153 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Avenue De Lafayette", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 225, + 300 + ], + "location": [ + -71.0607, + 42.353153 + ] + } + ], + "weight": 19.4, + "duration": 19.4, + "distance": 63.1 + }, + { + "geometry": "edoaGhdvpLKI", + "maneuver": { + "bearing_after": 35, + "bearing_before": 303, + "location": [ + -71.061334, + 42.353471 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 195, + 300 + ], + "location": [ + -71.061334, + 42.353471 + ] + } + ], + "weight": 10.6, + "duration": 10.6, + "distance": 7.5 + }, + { + "geometry": "qdoaG~cvpLe@nA", + "maneuver": { + "bearing_after": 302, + "bearing_before": 35, + "location": [ + -71.061281, + 42.353526 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.061281, + 42.353526 + ] + } + ], + "weight": 34.9, + "duration": 34.9, + "distance": 38.8 + }, + { + "geometry": "weoaGnfvpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 303, + "location": [ + -71.061676, + 42.353717 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 123 + ], + "location": [ + -71.061676, + 42.353717 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Oxford Street, Essex Street", + "weight": 232.8, + "duration": 232.8, + "distance": 465.8 + }, + { + "steps": [ + { + "geometry": "weoaGnfvpL[z@EH", + "maneuver": { + "bearing_after": 303, + "bearing_before": 0, + "location": [ + -71.061676, + 42.353717 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 303 + ], + "location": [ + -71.061676, + 42.353717 + ] + } + ], + "weight": 34, + "duration": 34, + "distance": 34.9 + }, + { + "geometry": "yfoaGthvpLGBMM", + "maneuver": { + "bearing_after": 11, + "bearing_before": 302, + "location": [ + -71.062032, + 42.353888 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 120, + 210 + ], + "location": [ + -71.062032, + 42.353888 + ] + } + ], + "weight": 21.1, + "duration": 21.1, + "distance": 14.1 + }, + { + "geometry": "ogoaGjhvpLCJ", + "maneuver": { + "bearing_after": 302, + "bearing_before": 32, + "location": [ + -71.061982, + 42.353997 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.061982, + 42.353997 + ] + } + ], + "weight": 9.5, + "duration": 9.5, + "distance": 5.5 + }, + { + "geometry": "sgoaGvhvpLIIw@s@yAcB", + "maneuver": { + "bearing_after": 35, + "bearing_before": 302, + "location": [ + -71.062038, + 42.354024 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Washington Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 300 + ], + "location": [ + -71.062038, + 42.354024 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 210, + 300 + ], + "location": [ + -71.061732, + 42.354348 + ] + } + ], + "weight": 35.4, + "duration": 35.4, + "distance": 109 + }, + { + "geometry": "oloaGtcvpL}CrHMV", + "maneuver": { + "bearing_after": 303, + "bearing_before": 37, + "location": [ + -71.061232, + 42.354801 + ], + "modifier": "left", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Temple Place", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 300 + ], + "location": [ + -71.061232, + 42.354801 + ] + } + ], + "weight": 50.8, + "duration": 50.8, + "distance": 166.5 + }, + { + "geometry": "{qoaG`nvpLZ\\", + "maneuver": { + "bearing_after": 213, + "bearing_before": 307, + "location": [ + -71.062887, + 42.355662 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Tremont Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 135, + 210 + ], + "location": [ + -71.062887, + 42.355662 + ] + } + ], + "weight": 4.8, + "duration": 4.8, + "distance": 20.1 + }, + { + "geometry": "_qoaG~nvpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 218, + "location": [ + -71.063037, + 42.355519 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Tremont Street", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 38 + ], + "location": [ + -71.063037, + 42.355519 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Washington Street, Temple Place", + "weight": 155.6, + "duration": 155.6, + "distance": 350.1 + }, + { + "steps": [ + { + "geometry": "}poaG~nvpLb@`@LJDBJHTN`@P", + "maneuver": { + "bearing_after": 214, + "bearing_before": 0, + "location": [ + -71.063037, + 42.355519 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Tremont Street", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 214 + ], + "location": [ + -71.063037, + 42.355519 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 30, + 120, + 210 + ], + "location": [ + -71.063339, + 42.355174 + ] + } + ], + "weight": 21.3, + "duration": 21.3, + "distance": 80 + }, + { + "geometry": "amoaG|qvpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 203, + "location": [ + -71.063514, + 42.354894 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Tremont Street", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 23 + ], + "location": [ + -71.063514, + 42.354894 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Tremont Street", + "weight": 21.3, + "duration": 21.3, + "distance": 80 + }, + { + "steps": [ + { + "geometry": "amoaG|qvpLVL@@rAh@LF\\LZNp@TPFD@\\JLD`AX@?j@J^F`@HD@RD", + "maneuver": { + "bearing_after": 203, + "bearing_before": 0, + "location": [ + -71.063514, + 42.354894 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Tremont Street", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 203 + ], + "location": [ + -71.063514, + 42.354894 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 105, + 195 + ], + "location": [ + -71.064238, + 42.353385 + ] + } + ], + "weight": 80.9, + "duration": 80.9, + "distance": 293.6 + }, + { + "geometry": "i}naGnxvpLKTKbDMjFA^A\\?TAHAF?BADCF", + "maneuver": { + "bearing_after": 303, + "bearing_before": 191, + "location": [ + -71.064556, + 42.352372 + ], + "modifier": "sharp right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 4, + "in": 0, + "entry": [ + false, + true, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 195, + 270, + 300 + ], + "location": [ + -71.064556, + 42.352372 + ] + } + ], + "weight": 58.7, + "duration": 58.7, + "distance": 227.1 + }, + { + "geometry": "}~naGliwpLFH", + "maneuver": { + "bearing_after": 226, + "bearing_before": 291, + "location": [ + -71.06727, + 42.352625 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 90, + 105, + 225, + 315 + ], + "location": [ + -71.06727, + 42.352625 + ] + } + ], + "weight": 6.5, + "duration": 6.5, + "distance": 5.3 + }, + { + "geometry": "u~naGviwpLJ@", + "maneuver": { + "bearing_after": 185, + "bearing_before": 226, + "location": [ + -71.067317, + 42.352593 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 180, + 270 + ], + "location": [ + -71.067317, + 42.352593 + ] + } + ], + "weight": 15.9, + "duration": 15.9, + "distance": 7.4 + }, + { + "geometry": "i~naGxiwpL@mA", + "maneuver": { + "bearing_after": 90, + "bearing_before": 185, + "location": [ + -71.067326, + 42.352527 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Boylston Street", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.067326, + 42.352527 + ] + } + ], + "weight": 11.7, + "duration": 11.7, + "distance": 31.7 + }, + { + "geometry": "g~naGjgwpLL?", + "maneuver": { + "bearing_after": 178, + "bearing_before": 90, + "location": [ + -71.066941, + 42.352524 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Carver Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 90, + 180, + 270 + ], + "location": [ + -71.066941, + 42.352524 + ] + } + ], + "weight": 9.7, + "duration": 9.7, + "distance": 8.4 + }, + { + "geometry": "y}naGjgwpL?S", + "maneuver": { + "bearing_after": 92, + "bearing_before": 178, + "location": [ + -71.06694, + 42.352448 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.06694, + 42.352448 + ] + } + ], + "weight": 7.5, + "duration": 7.5, + "distance": 8.3 + }, + { + "geometry": "y}naGvfwpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 92, + "location": [ + -71.066839, + 42.352445 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 272 + ], + "location": [ + -71.066839, + 42.352445 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Tremont Street, Boylston Street", + "weight": 190.9, + "duration": 190.9, + "distance": 581.8 + }, + { + "steps": [ + { + "geometry": "y}naGvfwpL?R?d@?f@@X?L", + "maneuver": { + "bearing_after": 272, + "bearing_before": 0, + "location": [ + -71.066839, + 42.352445 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 272 + ], + "location": [ + -71.066839, + 42.352445 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.06694, + 42.352448 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 90, + 210, + 270 + ], + "location": [ + -71.067129, + 42.352449 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.067332, + 42.352454 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 90, + 165, + 270, + 345 + ], + "location": [ + -71.067458, + 42.352442 + ] + } + ], + "weight": 61.4, + "duration": 61.4, + "distance": 57.4 + }, + { + "geometry": "w}naG`kwpLNCH?D@D?hA_@H?", + "maneuver": { + "bearing_after": 165, + "bearing_before": 262, + "location": [ + -71.067534, + 42.352436 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + false + ], + "bearings": [ + 90, + 165, + 270, + 345 + ], + "location": [ + -71.067534, + 42.352436 + ] + } + ], + "weight": 21.8, + "duration": 21.8, + "distance": 70.3 + }, + { + "geometry": "}ynaG~iwpL?D@FBn@@R@RFp@@LHj@", + "maneuver": { + "bearing_after": 270, + "bearing_before": 172, + "location": [ + -71.067359, + 42.351825 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Park Plaza", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 120, + 270 + ], + "location": [ + -71.067359, + 42.351825 + ] + } + ], + "weight": 29.7, + "duration": 29.7, + "distance": 88.3 + }, + { + "geometry": "_ynaGppwpLLCFC@?ZG", + "maneuver": { + "bearing_after": 165, + "bearing_before": 255, + "location": [ + -71.068411, + 42.351682 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Columbus Avenue", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.068411, + 42.351682 + ] + } + ], + "weight": 8.8, + "duration": 8.8, + "distance": 29.8 + }, + { + "geometry": "kwnaG`pwpLxAtBb@j@x@dAh@t@BDVZd@p@FHbC`DvAjBLPPVLP", + "maneuver": { + "bearing_after": 223, + "bearing_before": 165, + "location": [ + -71.068325, + 42.351421 + ], + "modifier": "right", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Columbus Avenue", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 225, + 345 + ], + "location": [ + -71.068325, + 42.351421 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 105, + 225 + ], + "location": [ + -71.068917, + 42.350967 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 180, + 225 + ], + "location": [ + -71.069492, + 42.350504 + ] + }, + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true, + true, + true + ], + "bearings": [ + 45, + 75, + 165, + 225, + 255, + 345 + ], + "location": [ + -71.069926, + 42.350148 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.071581, + 42.348824 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 165, + 225, + 345 + ], + "location": [ + -71.071792, + 42.348659 + ] + } + ], + "weight": 133.9, + "duration": 133.9, + "distance": 430 + }, + { + "geometry": "uenaGffxpLSFm@V", + "maneuver": { + "bearing_after": 341, + "bearing_before": 220, + "location": [ + -71.071879, + 42.348587 + ], + "modifier": "sharp right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 45, + 165, + 225, + 345 + ], + "location": [ + -71.071879, + 42.348587 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 45, + 165, + 225, + 345 + ], + "location": [ + -71.071923, + 42.348691 + ] + } + ], + "weight": 34.8, + "duration": 34.8, + "distance": 38.7 + }, + { + "geometry": "wgnaGfgxpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 339, + "location": [ + -71.072038, + 42.348915 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 159 + ], + "location": [ + -71.072038, + 42.348915 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Columbus Avenue, Columbus Avenue", + "weight": 290.4, + "duration": 290.4, + "distance": 714.6 + }, + { + "steps": [ + { + "geometry": "wgnaGfgxpLl@WRG", + "maneuver": { + "bearing_after": 159, + "bearing_before": 0, + "location": [ + -71.072038, + 42.348915 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 159 + ], + "location": [ + -71.072038, + 42.348915 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 165, + 225, + 345 + ], + "location": [ + -71.071923, + 42.348691 + ] + } + ], + "weight": 49.9, + "duration": 49.9, + "distance": 38.7 + }, + { + "geometry": "uenaGffxpLMQQWMQ", + "maneuver": { + "bearing_after": 40, + "bearing_before": 161, + "location": [ + -71.071879, + 42.348587 + ], + "modifier": "sharp left", + "type": "turn" + }, + "mode": "cycling", + "ref": "MA 28", + "driving_side": "right", + "name": "Columbus Avenue", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 165, + 225, + 345 + ], + "location": [ + -71.071879, + 42.348587 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 165, + 225, + 345 + ], + "location": [ + -71.071792, + 42.348659 + ] + } + ], + "weight": 17.299999999, + "duration": 17.299999999, + "distance": 36 + }, + { + "geometry": "cgnaGjdxpLJQ@I@I?E?w@?g@", + "maneuver": { + "bearing_after": 135, + "bearing_before": 42, + "location": [ + -71.071581, + 42.348824 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Isabella Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 135, + 225 + ], + "location": [ + -71.071581, + 42.348824 + ] + } + ], + "weight": 19.3, + "duration": 19.3, + "distance": 61.4 + }, + { + "geometry": "sfnaG~_xpLGCe@q@g@o@mA_BCMCU", + "maneuver": { + "bearing_after": 33, + "bearing_before": 90, + "location": [ + -71.070877, + 42.348744 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 90, + 270 + ], + "location": [ + -71.070877, + 42.348744 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 45, + 225, + 315 + ], + "location": [ + -71.070614, + 42.348973 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 240, + 345 + ], + "location": [ + -71.069816, + 42.349581 + ] + } + ], + "weight": 41.3, + "duration": 41.3, + "distance": 137.3 + }, + { + "geometry": "_lnaGtxwpLKB", + "maneuver": { + "bearing_after": 344, + "bearing_before": 74, + "location": [ + -71.069713, + 42.349602 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Arlington Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 165, + 255, + 345 + ], + "location": [ + -71.069713, + 42.349602 + ] + } + ], + "weight": 9.9, + "duration": 9.9, + "distance": 6.1 + }, + { + "geometry": "klnaGxxwpLCWC[a@eEUoBAM", + "maneuver": { + "bearing_after": 75, + "bearing_before": 344, + "location": [ + -71.069732, + 42.349655 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Piedmont Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 165, + 345 + ], + "location": [ + -71.069732, + 42.349655 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.068478, + 42.349874 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.067924, + 42.34998 + ] + } + ], + "weight": 38.199999999, + "duration": 38.199999999, + "distance": 159.3 + }, + { + "geometry": "mnnaG`mwpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 76, + "location": [ + -71.067854, + 42.349993 + ], + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Piedmont Street", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 256 + ], + "location": [ + -71.067854, + 42.349993 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Isabella Street, Piedmont Street", + "weight": 175.9, + "duration": 175.9, + "distance": 438.8 + }, + { + "steps": [ + { + "geometry": "mnnaG`mwpLQyA?C@C?CBCNKBCNMTSTW", + "maneuver": { + "bearing_after": 76, + "bearing_before": 0, + "location": [ + -71.067854, + 42.349993 + ], + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Piedmont Street", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 76 + ], + "location": [ + -71.067854, + 42.349993 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 90, + 255 + ], + "location": [ + -71.067397, + 42.350078 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 150, + 255, + 330 + ], + "location": [ + -71.067172, + 42.349871 + ] + } + ], + "weight": 29.6, + "duration": 29.6, + "distance": 100.7 + }, + { + "geometry": "ilnaGlgwpLCUG]DY", + "maneuver": { + "bearing_after": 71, + "bearing_before": 143, + "location": [ + -71.066948, + 42.349646 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Melrose Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 240, + 330 + ], + "location": [ + -71.066948, + 42.349646 + ] + } + ], + "weight": 21.8, + "duration": 21.8, + "distance": 33.8 + }, + { + "geometry": "olnaG~dwpLI@{C`@i@FKBOBC@KB_@J{@X[Lk@POBaA\\_@JOBE@ODMB[HKBC?E@SBgAh@aBt@", + "maneuver": { + "bearing_after": 350, + "bearing_before": 105, + "location": [ + -71.066557, + 42.349682 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Charles Street South", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 90, + 165, + 285, + 345 + ], + "location": [ + -71.066557, + 42.349682 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.066852, + 42.350936 + ] + }, + { + "out": 5, + "in": 2, + "entry": [ + true, + true, + false, + true, + true, + true + ], + "bearings": [ + 75, + 120, + 165, + 210, + 255, + 345 + ], + "location": [ + -71.066914, + 42.351102 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 300, + 345 + ], + "location": [ + -71.067198, + 42.351761 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 90, + 165, + 270, + 345 + ], + "location": [ + -71.067487, + 42.352519 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 210, + 345 + ], + "location": [ + -71.067575, + 42.352787 + ] + } + ], + "weight": 133.1, + "duration": 133.1, + "distance": 475.3 + }, + { + "geometry": "efoaGpnwpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 338, + "location": [ + -71.068086, + 42.353792 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "cycling", + "ref": "MA 2; MA 28", + "driving_side": "right", + "name": "Charles Street", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 158 + ], + "location": [ + -71.068086, + 42.353792 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Charles Street South, Charles Street South", + "weight": 184.5, + "duration": 184.5, + "distance": 609.8 + }, + { + "steps": [ + { + "geometry": "efoaGpnwpLg@TuAl@QJqB|@cAb@c@POBKDEBOD]NKBE?GAGCECAAIO", + "maneuver": { + "bearing_after": 338, + "bearing_before": 0, + "location": [ + -71.068086, + 42.353792 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "cycling", + "ref": "MA 2; MA 28", + "driving_side": "right", + "name": "Charles Street", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 338 + ], + "location": [ + -71.068086, + 42.353792 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 165, + 315, + 345 + ], + "location": [ + -71.069072, + 42.355598 + ] + } + ], + "weight": 90.5, + "duration": 90.5, + "distance": 296 + }, + { + "geometry": "suoaG`uwpLCSg@aEQcAAGAKAI", + "maneuver": { + "bearing_after": 73, + "bearing_before": 46, + "location": [ + -71.069133, + 42.356255 + ], + "modifier": "straight", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beacon Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 225, + 255 + ], + "location": [ + -71.069133, + 42.356255 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 255, + 345 + ], + "location": [ + -71.067615, + 42.356593 + ] + } + ], + "weight": 36.6, + "duration": 36.6, + "distance": 134.4 + }, + { + "geometry": "wwoaGhkwpLLE", + "maneuver": { + "bearing_after": 163, + "bearing_before": 73, + "location": [ + -71.06757, + 42.356603 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.06757, + 42.356603 + ] + } + ], + "weight": 16.4, + "duration": 16.4, + "distance": 8.5 + }, + { + "geometry": "iwoaGbkwpLk@}D", + "maneuver": { + "bearing_after": 71, + "bearing_before": 163, + "location": [ + -71.067542, + 42.356529 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.067542, + 42.356529 + ] + } + ], + "weight": 78.3, + "duration": 78.3, + "distance": 82 + }, + { + "geometry": "uxoaGdewpLLC", + "maneuver": { + "bearing_after": 164, + "bearing_before": 71, + "location": [ + -71.066592, + 42.356749 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.066592, + 42.356749 + ] + } + ], + "weight": 1.8, + "duration": 1.8, + "distance": 7.7 + }, + { + "geometry": "gxoaG`ewpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 165, + "location": [ + -71.066568, + 42.356682 + ], + "modifier": "straight", + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 345 + ], + "location": [ + -71.066568, + 42.356682 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Charles Street, Charles Street", + "weight": 223.6, + "duration": 223.6, + "distance": 528.7 + }, + { + "steps": [ + { + "geometry": "gxoaG`ewpLMB", + "maneuver": { + "bearing_after": 345, + "bearing_before": 0, + "location": [ + -71.066568, + 42.356682 + ], + "modifier": "straight", + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 345 + ], + "location": [ + -71.066568, + 42.356682 + ] + } + ], + "weight": 5.9, + "duration": 5.9, + "distance": 7.7 + }, + { + "geometry": "uxoaGdewpLa@{Ca@sC", + "maneuver": { + "bearing_after": 73, + "bearing_before": 344, + "location": [ + -71.066592, + 42.356749 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.066592, + 42.356749 + ] + } + ], + "weight": 121.3, + "duration": 121.3, + "distance": 131.1 + }, + { + "geometry": "yzoaGt{vpLACOC", + "maneuver": { + "bearing_after": 15, + "bearing_before": 73, + "location": [ + -71.065066, + 42.357086 + ], + "modifier": "slight left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false, + true + ], + "bearings": [ + 15, + 75, + 150, + 255, + 330 + ], + "location": [ + -71.065066, + 42.357086 + ] + } + ], + "weight": 11.2, + "duration": 11.2, + "distance": 10.6 + }, + { + "geometry": "k{oaGl{vpL?EKm@Ga@Ia@Mg@Mo@Os@ScACKIWK]Y}@", + "maneuver": { + "bearing_after": 70, + "bearing_before": 12, + "location": [ + -71.065032, + 42.357176 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beacon Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 75, + 195, + 255 + ], + "location": [ + -71.065032, + 42.357176 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 150, + 240 + ], + "location": [ + -71.063212, + 42.357715 + ] + } + ], + "weight": 49.1, + "duration": 49.1, + "distance": 205.2 + }, + { + "geometry": "}_paGdmvpLIa@", + "maneuver": { + "bearing_after": 64, + "bearing_before": 60, + "location": [ + -71.062749, + 42.357905 + ], + "modifier": "straight", + "type": "continue" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beacon Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 60, + 240 + ], + "location": [ + -71.062749, + 42.357905 + ] + } + ], + "weight": 8.3, + "duration": 8.3, + "distance": 15.3 + }, + { + "geometry": "g`paGblvpLFC", + "maneuver": { + "bearing_after": 158, + "bearing_before": 64, + "location": [ + -71.06258, + 42.357962 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 60, + 165, + 240, + 345 + ], + "location": [ + -71.06258, + 42.357962 + ] + } + ], + "weight": 13.8, + "duration": 13.8, + "distance": 5.1 + }, + { + "geometry": "_`paG~kvpL[mA", + "maneuver": { + "bearing_after": 64, + "bearing_before": 158, + "location": [ + -71.062558, + 42.357919 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 240, + 345 + ], + "location": [ + -71.062558, + 42.357919 + ] + } + ], + "weight": 31.7, + "duration": 31.7, + "distance": 35.3 + }, + { + "geometry": "{`paGpivpL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 64, + "location": [ + -71.062171, + 42.358056 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 244 + ], + "location": [ + -71.062171, + 42.358056 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Beacon Street", + "weight": 241.3, + "duration": 241.3, + "distance": 410.3 + }, + { + "steps": [ + { + "geometry": "{`paGpivpLZlA", + "maneuver": { + "bearing_after": 244, + "bearing_before": 0, + "location": [ + -71.062171, + 42.358056 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 244 + ], + "location": [ + -71.062171, + 42.358056 + ] + } + ], + "weight": 36.3, + "duration": 36.3, + "distance": 35.3 + }, + { + "geometry": "_`paG~kvpLGB", + "maneuver": { + "bearing_after": 338, + "bearing_before": 244, + "location": [ + -71.062558, + 42.357919 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 240, + 345 + ], + "location": [ + -71.062558, + 42.357919 + ] + } + ], + "weight": 8.5, + "duration": 8.5, + "distance": 5.1 + }, + { + "geometry": "g`paGblvpLe@mBS{@CO?MAO@MH_@b@gC@CDW", + "maneuver": { + "bearing_after": 64, + "bearing_before": 338, + "location": [ + -71.06258, + 42.357962 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Beacon Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 165, + 240, + 345 + ], + "location": [ + -71.06258, + 42.357962 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 105, + 270 + ], + "location": [ + -71.061496, + 42.358275 + ] + } + ], + "weight": 64.5, + "duration": 64.5, + "distance": 188.4 + }, + { + "geometry": "o`paGx~upLDO`@_CRiA@IZcB", + "maneuver": { + "bearing_after": 109, + "bearing_before": 109, + "location": [ + -71.060447, + 42.357995 + ], + "modifier": "straight", + "type": "new name" + }, + "mode": "cycling", + "driving_side": "right", + "name": "School Street", + "intersections": [ + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 105, + 210, + 285 + ], + "location": [ + -71.060447, + 42.357995 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 210, + 285 + ], + "location": [ + -71.05936, + 42.357697 + ] + } + ], + "weight": 38.7, + "duration": 38.7, + "distance": 144 + }, + { + "geometry": "u}oaGptupLHB", + "maneuver": { + "bearing_after": 201, + "bearing_before": 109, + "location": [ + -71.058807, + 42.357547 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.058807, + 42.357547 + ] + } + ], + "weight": 13, + "duration": 13, + "distance": 5.2 + }, + { + "geometry": "k}oaGttupLBSH_@", + "maneuver": { + "bearing_after": 111, + "bearing_before": 201, + "location": [ + -71.05883, + 42.357503 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 15, + 105, + 165, + 285 + ], + "location": [ + -71.05883, + 42.357503 + ] + } + ], + "weight": 21, + "duration": 21, + "distance": 23.4 + }, + { + "geometry": "}|oaG`supL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 111, + "location": [ + -71.058565, + 42.357428 + ], + "modifier": "right", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 291 + ], + "location": [ + -71.058565, + 42.357428 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Beacon Street, School Street", + "weight": 182, + "duration": 182, + "distance": 401.4 + }, + { + "steps": [ + { + "geometry": "}|oaG`supLDUBO", + "maneuver": { + "bearing_after": 110, + "bearing_before": 0, + "location": [ + -71.058565, + 42.357428 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 110 + ], + "location": [ + -71.058565, + 42.357428 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 105, + 210, + 285 + ], + "location": [ + -71.05846, + 42.357399 + ] + } + ], + "weight": 20, + "duration": 20, + "distance": 16.5 + }, + { + "geometry": "s|oaGzqupLGGo@q@c@Ym@OOC]C_A?YAO?", + "maneuver": { + "bearing_after": 35, + "bearing_before": 106, + "location": [ + -71.058376, + 42.35738 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Washington Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 30, + 105, + 210, + 285 + ], + "location": [ + -71.058376, + 42.35738 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 285 + ], + "location": [ + -71.058337, + 42.35742 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 105, + 210 + ], + "location": [ + -71.058094, + 42.357663 + ] + } + ], + "weight": 49.5, + "duration": 49.5, + "distance": 173.1 + }, + { + "geometry": "uepaGlnupLCN[fCAFS~@I^CLQp@CF", + "maneuver": { + "bearing_after": 285, + "bearing_before": 1, + "location": [ + -71.05783, + 42.358833 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Court Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 180, + 285 + ], + "location": [ + -71.05783, + 42.358833 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 120, + 300 + ], + "location": [ + -71.059425, + 42.359257 + ] + } + ], + "weight": 41.6, + "duration": 41.6, + "distance": 144.3 + }, + { + "geometry": "ohpaGtxupLKK", + "maneuver": { + "bearing_after": 35, + "bearing_before": 296, + "location": [ + -71.059472, + 42.359275 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true, + true + ], + "bearings": [ + 30, + 120, + 210, + 270, + 300 + ], + "location": [ + -71.059472, + 42.359275 + ] + } + ], + "weight": 10.5, + "duration": 10.5, + "distance": 8.4 + }, + { + "geometry": "{hpaGhxupLF]", + "maneuver": { + "bearing_after": 109, + "bearing_before": 35, + "location": [ + -71.059413, + 42.359337 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false, + true + ], + "bearings": [ + 0, + 60, + 105, + 210, + 300 + ], + "location": [ + -71.059413, + 42.359337 + ] + } + ], + "weight": 12.4, + "duration": 12.4, + "distance": 13.8 + }, + { + "geometry": "shpaGjwupL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 110, + "location": [ + -71.059255, + 42.359295 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 290 + ], + "location": [ + -71.059255, + 42.359295 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Washington Street, Court Street", + "weight": 134, + "duration": 134, + "distance": 356.1 + }, + { + "steps": [ + { + "geometry": "shpaGjwupL\\qARo@@E\\qC", + "maneuver": { + "bearing_after": 117, + "bearing_before": 0, + "location": [ + -71.059255, + 42.359295 + ], + "modifier": "left", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 117 + ], + "location": [ + -71.059255, + 42.359295 + ] + }, + { + "out": 1, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195, + 300 + ], + "location": [ + -71.058612, + 42.35905 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 285 + ], + "location": [ + -71.058582, + 42.359043 + ] + } + ], + "weight": 113, + "duration": 113, + "distance": 125.3 + }, + { + "geometry": "afpaGpnupL@?AO?C", + "maneuver": { + "bearing_after": 88, + "bearing_before": 105, + "location": [ + -71.057845, + 42.358886 + ], + "modifier": "slight right", + "type": "fork" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 75, + 90, + 285 + ], + "location": [ + -71.057845, + 42.358886 + ] + } + ], + "weight": 11.9, + "duration": 11.9, + "distance": 8.5 + }, + { + "geometry": "afpaG|mupLJAH?FBRB", + "maneuver": { + "bearing_after": 177, + "bearing_before": 88, + "location": [ + -71.057746, + 42.358887 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.057746, + 42.358887 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 90, + 180, + 270 + ], + "location": [ + -71.057744, + 42.358829 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 90, + 195 + ], + "location": [ + -71.057743, + 42.358782 + ] + }, + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 180, + 270 + ], + "location": [ + -71.057762, + 42.358744 + ] + } + ], + "weight": 35, + "duration": 35, + "distance": 28.1 + }, + { + "geometry": "odpaGbnupL?{ACG", + "maneuver": { + "bearing_after": 90, + "bearing_before": 184, + "location": [ + -71.057775, + 42.358637 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Freedom Trail", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 0, + 90, + 180 + ], + "location": [ + -71.057775, + 42.358637 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 45, + 180, + 270 + ], + "location": [ + -71.057316, + 42.358636 + ] + } + ], + "weight": 41.8, + "duration": 41.8, + "distance": 41.7 + }, + { + "geometry": "sdpaG~jupLC?", + "maneuver": { + "bearing_after": 357, + "bearing_before": 46, + "location": [ + -71.057282, + 42.35866 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 45, + 135, + 225 + ], + "location": [ + -71.057282, + 42.35866 + ] + } + ], + "weight": 2.4, + "duration": 2.4, + "distance": 2.7 + }, + { + "geometry": "wdpaG~jupLE@CB?FH??QIG", + "maneuver": { + "bearing_after": 355, + "bearing_before": 357, + "location": [ + -71.057283, + 42.358684 + ], + "modifier": "uturn", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 0, + 180 + ], + "location": [ + -71.057283, + 42.358684 + ] + }, + { + "out": 1, + "classes": [ + "tunnel" + ], + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 90, + 180 + ], + "location": [ + -71.057353, + 42.358729 + ] + } + ], + "weight": 15.5, + "duration": 15.5, + "distance": 29.8 + }, + { + "geometry": "aepaGrjupLC?AC", + "maneuver": { + "bearing_after": 61, + "bearing_before": 45, + "location": [ + -71.057221, + 42.358734 + ], + "modifier": "slight left", + "type": "fork" + }, + "mode": "cycling", + "driving_side": "right", + "name": "State", + "intersections": [ + { + "out": 0, + "classes": [ + "tunnel" + ], + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 60, + 75, + 225, + 255 + ], + "location": [ + -71.057221, + 42.358734 + ] + } + ], + "weight": 3.5, + "duration": 3.5, + "distance": 4 + }, + { + "geometry": "gepaGnjupL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 79, + "location": [ + -71.057201, + 42.358757 + ], + "type": "arrive" + }, + "mode": "cycling", + "driving_side": "right", + "name": "State", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 259 + ], + "location": [ + -71.057201, + 42.358757 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Freedom Trail, State", + "weight": 223.1, + "duration": 223.1, + "distance": 240.1 + }, + { + "steps": [ + { + "geometry": "gepaGnjupL@BB?", + "maneuver": { + "bearing_after": 259, + "bearing_before": 0, + "location": [ + -71.057201, + 42.358757 + ], + "type": "depart" + }, + "mode": "cycling", + "driving_side": "right", + "name": "State", + "intersections": [ + { + "classes": [ + "tunnel" + ], + "out": 0, + "entry": [ + true + ], + "bearings": [ + 259 + ], + "location": [ + -71.057201, + 42.358757 + ] + } + ], + "weight": 3.8, + "duration": 3.8, + "distance": 4 + }, + { + "geometry": "aepaGrjupLHF?PI??GBCDA", + "maneuver": { + "bearing_after": 225, + "bearing_before": 241, + "location": [ + -71.057221, + 42.358734 + ], + "modifier": "slight left", + "type": "fork" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "classes": [ + "tunnel" + ], + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 60, + 75, + 225, + 255 + ], + "location": [ + -71.057221, + 42.358734 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false + ], + "bearings": [ + 90, + 180 + ], + "location": [ + -71.057353, + 42.358729 + ] + } + ], + "weight": 11.3, + "duration": 11.3, + "distance": 29.8 + }, + { + "geometry": "wdpaG~jupLB?", + "maneuver": { + "bearing_after": 177, + "bearing_before": 175, + "location": [ + -71.057283, + 42.358684 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 0, + "entry": [ + false, + true + ], + "bearings": [ + 0, + 180 + ], + "location": [ + -71.057283, + 42.358684 + ] + } + ], + "weight": 4.8, + "duration": 4.8, + "distance": 2.7 + }, + { + "geometry": "sdpaG~jupLDG", + "maneuver": { + "bearing_after": 129, + "bearing_before": 177, + "location": [ + -71.057282, + 42.35866 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true, + true + ], + "bearings": [ + 0, + 45, + 135, + 225 + ], + "location": [ + -71.057282, + 42.35866 + ] + } + ], + "weight": 11.3, + "duration": 11.3, + "distance": 5 + }, + { + "geometry": "mdpaGvjupLAAAAACAAWe@EIACAEGS", + "maneuver": { + "bearing_after": 47, + "bearing_before": 129, + "location": [ + -71.057235, + 42.358631 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Devonshire Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 45, + 135, + 195, + 315 + ], + "location": [ + -71.057235, + 42.358631 + ] + } + ], + "weight": 43.8, + "duration": 43.8, + "distance": 45.3 + }, + { + "geometry": "_fpaG~gupLW?C?A?C?eDn@E@i@HE@QDOBIB", + "maneuver": { + "bearing_after": 1, + "bearing_before": 56, + "location": [ + -71.056804, + 42.35888 + ], + "modifier": "slight left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Congress Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 165, + 240, + 270, + 315 + ], + "location": [ + -71.056804, + 42.35888 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 270, + 345 + ], + "location": [ + -71.05714, + 42.360238 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 165, + 225, + 345 + ], + "location": [ + -71.057163, + 42.36032 + ] + } + ], + "weight": 62.7, + "duration": 62.7, + "distance": 168.4 + }, + { + "geometry": "iopaGjjupLEQA??AAU", + "maneuver": { + "bearing_after": 63, + "bearing_before": 347, + "location": [ + -71.057176, + 42.360367 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 60, + 165, + 240, + 345 + ], + "location": [ + -71.057176, + 42.360367 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 165, + 240 + ], + "location": [ + -71.057094, + 42.360397 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 90, + 180, + 345 + ], + "location": [ + -71.057093, + 42.36041 + ] + } + ], + "weight": 33.9, + "duration": 33.9, + "distance": 19.1 + }, + { + "geometry": "sopaG`iupLMD", + "maneuver": { + "bearing_after": 345, + "bearing_before": 81, + "location": [ + -71.056972, + 42.36042 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 270, + 345 + ], + "location": [ + -71.056972, + 42.36042 + ] + } + ], + "weight": 7.1, + "duration": 7.1, + "distance": 8 + }, + { + "geometry": "appaGfiupL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 346, + "location": [ + -71.056995, + 42.36049 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 166 + ], + "location": [ + -71.056995, + 42.36049 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Devonshire Street, Congress Street", + "weight": 178.7, + "duration": 178.7, + "distance": 282.4 + }, + { + "steps": [ + { + "geometry": "appaGfiupLLE", + "maneuver": { + "bearing_after": 166, + "bearing_before": 0, + "location": [ + -71.056995, + 42.36049 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 166 + ], + "location": [ + -71.056995, + 42.36049 + ] + } + ], + "weight": 17.5, + "duration": 17.5, + "distance": 8 + }, + { + "geometry": "sopaG`iupLESAAACAI", + "maneuver": { + "bearing_after": 64, + "bearing_before": 165, + "location": [ + -71.056972, + 42.36042 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 270, + 345 + ], + "location": [ + -71.056972, + 42.36042 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 240, + 345 + ], + "location": [ + -71.056857, + 42.360463 + ] + } + ], + "weight": 23.3, + "duration": 23.3, + "distance": 17 + }, + { + "geometry": "_ppaG|gupLk@RC@E?C@E?I@E?C?E@C@E?GBGBE@CBE@a@P_A`@A@C@A@C@", + "maneuver": { + "bearing_after": 340, + "bearing_before": 68, + "location": [ + -71.056787, + 42.360483 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Union Street", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255, + 345 + ], + "location": [ + -71.056787, + 42.360483 + ] + } + ], + "weight": 37.5, + "duration": 37.5, + "distance": 141.6 + }, + { + "geometry": "qwpaGfkupLi@iAWi@ISEKIMIOWk@KSUe@KU", + "maneuver": { + "bearing_after": 52, + "bearing_before": 330, + "location": [ + -71.057322, + 42.361687 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Hanover Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 150, + 225 + ], + "location": [ + -71.057322, + 42.361687 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 60, + 135, + 240 + ], + "location": [ + -71.05674, + 42.362017 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 60, + 120, + 225, + 300 + ], + "location": [ + -71.056507, + 42.362152 + ] + } + ], + "weight": 52.900000000, + "duration": 52.900000000, + "distance": 156.6 + }, + { + "geometry": "}|paGxaupLKTGPa@v@AD", + "maneuver": { + "bearing_after": 306, + "bearing_before": 52, + "location": [ + -71.055814, + 42.362545 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Cross Street", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 45, + 120, + 240, + 300 + ], + "location": [ + -71.055814, + 42.362545 + ] + } + ], + "weight": 16.2, + "duration": 16.2, + "distance": 51.9 + }, + { + "geometry": "u~paG~dupLE@C?EACAECGCKG]S]SIEc@YKGKGa@UGCIC]O", + "maneuver": { + "bearing_after": 1, + "bearing_before": 303, + "location": [ + -71.056315, + 42.362829 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Salem Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 120, + 315 + ], + "location": [ + -71.056315, + 42.362829 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 210, + 300 + ], + "location": [ + -71.055866, + 42.363594 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 15, + 210, + 300 + ], + "location": [ + -71.055682, + 42.36388 + ] + } + ], + "weight": 40.8, + "duration": 40.8, + "distance": 157.9 + }, + { + "geometry": "wfqaGf`upL?G", + "maneuver": { + "bearing_after": 91, + "bearing_before": 19, + "location": [ + -71.055558, + 42.364123 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Parmenter Street", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 90, + 195, + 285 + ], + "location": [ + -71.055558, + 42.364123 + ] + } + ], + "weight": 8.2, + "duration": 8.2, + "distance": 3.4 + }, + { + "geometry": "wfqaG~_upLD@FDB@", + "maneuver": { + "bearing_after": 191, + "bearing_before": 91, + "location": [ + -71.055517, + 42.364122 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 15, + 105, + 195, + 270 + ], + "location": [ + -71.055517, + 42.364122 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 15, + 120, + 210 + ], + "location": [ + -71.055525, + 42.364094 + ] + } + ], + "weight": 9.8, + "duration": 9.8, + "distance": 11 + }, + { + "geometry": "efqaGh`upL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 200, + "location": [ + -71.055569, + 42.364032 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 20 + ], + "location": [ + -71.055569, + 42.364032 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Hanover Street, Salem Street", + "weight": 206.2, + "duration": 206.2, + "distance": 547.4 + }, + { + "steps": [ + { + "geometry": "efqaGh`upLCAGEEA", + "maneuver": { + "bearing_after": 20, + "bearing_before": 0, + "location": [ + -71.055569, + 42.364032 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 20 + ], + "location": [ + -71.055569, + 42.364032 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 15, + 120, + 210 + ], + "location": [ + -71.055525, + 42.364094 + ] + } + ], + "weight": 20.2, + "duration": 20.2, + "distance": 11 + }, + { + "geometry": "wfqaG~_upL?F", + "maneuver": { + "bearing_after": 271, + "bearing_before": 11, + "location": [ + -71.055517, + 42.364122 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Parmenter Street", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 15, + 105, + 195, + 270 + ], + "location": [ + -71.055517, + 42.364122 + ] + } + ], + "weight": 4.9, + "duration": 4.9, + "distance": 3.4 + }, + { + "geometry": "wfqaGf`upLI?e@?k@E_@Ay@CWA", + "maneuver": { + "bearing_after": 0, + "bearing_before": 271, + "location": [ + -71.055558, + 42.364123 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Salem Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 90, + 195, + 285 + ], + "location": [ + -71.055558, + 42.364123 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 180, + 285 + ], + "location": [ + -71.055555, + 42.364362 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 180, + 270 + ], + "location": [ + -71.055517, + 42.364741 + ] + } + ], + "weight": 30.1, + "duration": 30.1, + "distance": 114.2 + }, + { + "geometry": "emqaGx_upLCBGBCB", + "maneuver": { + "bearing_after": 310, + "bearing_before": 2, + "location": [ + -71.055487, + 42.365149 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 3, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 135, + 180, + 315 + ], + "location": [ + -71.055487, + 42.365149 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 135, + 180, + 345 + ], + "location": [ + -71.055513, + 42.365166 + ] + } + ], + "weight": 10, + "duration": 10, + "distance": 10 + }, + { + "geometry": "umqaGd`upL??CD", + "maneuver": { + "bearing_after": 309, + "bearing_before": 337, + "location": [ + -71.055545, + 42.365225 + ], + "modifier": "slight left", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 165, + 315 + ], + "location": [ + -71.055545, + 42.365225 + ] + } + ], + "weight": 3.8, + "duration": 3.8, + "distance": 4.2 + }, + { + "geometry": "ymqaGj`upL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 310, + "location": [ + -71.055582, + 42.365251 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 130 + ], + "location": [ + -71.055582, + 42.365251 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Parmenter Street, Salem Street", + "weight": 69, + "duration": 69, + "distance": 142.8 + }, + { + "steps": [ + { + "geometry": "ymqaGj`upLBE??BCFC", + "maneuver": { + "bearing_after": 130, + "bearing_before": 0, + "location": [ + -71.055582, + 42.365251 + ], + "modifier": "right", + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 130 + ], + "location": [ + -71.055582, + 42.365251 + ] + }, + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 165, + 315 + ], + "location": [ + -71.055545, + 42.365225 + ] + } + ], + "weight": 11.2, + "duration": 11.2, + "distance": 11.4 + }, + { + "geometry": "imqaG|_upLBC", + "maneuver": { + "bearing_after": 130, + "bearing_before": 157, + "location": [ + -71.055513, + 42.365166 + ], + "modifier": "slight left", + "type": "fork" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 135, + 180, + 345 + ], + "location": [ + -71.055513, + 42.365166 + ] + } + ], + "weight": 19.7, + "duration": 19.7, + "distance": 2.9 + }, + { + "geometry": "emqaGx_upLMAIEWI_BcAECME", + "maneuver": { + "bearing_after": 2, + "bearing_before": 130, + "location": [ + -71.055487, + 42.365149 + ], + "modifier": "sharp left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Salem Street", + "intersections": [ + { + "out": 0, + "in": 3, + "entry": [ + true, + true, + true, + false + ], + "bearings": [ + 0, + 135, + 180, + 315 + ], + "location": [ + -71.055487, + 42.365149 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 135, + 180, + 315 + ], + "location": [ + -71.055482, + 42.365222 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 30, + 135, + 210 + ], + "location": [ + -71.05506, + 42.365868 + ] + } + ], + "weight": 30.4, + "duration": 30.4, + "distance": 99.8 + }, + { + "geometry": "irqaGx|tpLCFe@vAsAhE", + "maneuver": { + "bearing_after": 300, + "bearing_before": 19, + "location": [ + -71.055008, + 42.365967 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Sheafe Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 30, + 195, + 300 + ], + "location": [ + -71.055008, + 42.365967 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 120, + 210, + 300 + ], + "location": [ + -71.055488, + 42.366179 + ] + } + ], + "weight": 35.8, + "duration": 35.8, + "distance": 141.5 + }, + { + "geometry": "gvqaGbfupLG?iAG", + "maneuver": { + "bearing_after": 0, + "bearing_before": 299, + "location": [ + -71.056495, + 42.366604 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 120, + 180, + 300 + ], + "location": [ + -71.056495, + 42.366604 + ] + }, + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 120, + 180 + ], + "location": [ + -71.056495, + 42.366641 + ] + } + ], + "weight": 42.800000000, + "duration": 42.800000000, + "distance": 45.5 + }, + { + "geometry": "yxqaGzeupLAC", + "maneuver": { + "bearing_after": 61, + "bearing_before": 2, + "location": [ + -71.056461, + 42.367013 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 60, + 180, + 300 + ], + "location": [ + -71.056461, + 42.367013 + ] + } + ], + "weight": 3.3, + "duration": 3.3, + "distance": 1.9 + }, + { + "geometry": "{xqaGveupLRw@", + "maneuver": { + "bearing_after": 116, + "bearing_before": 61, + "location": [ + -71.05644, + 42.367021 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 0, + 120, + 240 + ], + "location": [ + -71.05644, + 42.367021 + ] + } + ], + "weight": 23, + "duration": 23, + "distance": 25.4 + }, + { + "geometry": "gxqaG~cupL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 117, + "location": [ + -71.056164, + 42.366918 + ], + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 297 + ], + "location": [ + -71.056164, + 42.366918 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Salem Street, Sheafe Street", + "weight": 166.2, + "duration": 166.2, + "distance": 328.4 + }, + { + "steps": [ + { + "geometry": "gxqaG~cupLSv@@BEF", + "maneuver": { + "bearing_after": 297, + "bearing_before": 0, + "location": [ + -71.056164, + 42.366918 + ], + "type": "depart" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "entry": [ + true + ], + "bearings": [ + 297 + ], + "location": [ + -71.056164, + 42.366918 + ] + }, + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 120, + 240 + ], + "location": [ + -71.05644, + 42.367021 + ] + }, + { + "out": 2, + "in": 0, + "entry": [ + false, + true, + true + ], + "bearings": [ + 60, + 180, + 300 + ], + "location": [ + -71.056461, + 42.367013 + ] + } + ], + "weight": 35.3, + "duration": 35.3, + "distance": 31.6 + }, + { + "geometry": "_yqaGbfupLG?", + "maneuver": { + "bearing_after": 2, + "bearing_before": 306, + "location": [ + -71.056502, + 42.367036 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "Snow Hill Street", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 0, + 120, + 180, + 300 + ], + "location": [ + -71.056502, + 42.367036 + ] + } + ], + "weight": 4.6, + "duration": 4.6, + "distance": 5.1 + }, + { + "geometry": "gyqaGbfupLIAcCKs@GG?", + "maneuver": { + "bearing_after": 2, + "bearing_before": 2, + "location": [ + -71.056498, + 42.367082 + ], + "modifier": "straight", + "type": "notification" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Snow Hill Street", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 0, + 105, + 180, + 285 + ], + "location": [ + -71.056498, + 42.367082 + ] + }, + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 0, + 180, + 240 + ], + "location": [ + -71.056427, + 42.36779 + ] + } + ], + "weight": 30.7, + "duration": 30.7, + "distance": 111.8 + }, + { + "geometry": "q_raGleupLQ`@KH", + "maneuver": { + "bearing_after": 305, + "bearing_before": 7, + "location": [ + -71.056385, + 42.368085 + ], + "modifier": "left", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Charter Street", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 120, + 180, + 300 + ], + "location": [ + -71.056385, + 42.368085 + ] + } + ], + "weight": 10.5, + "duration": 10.5, + "distance": 25.5 + }, + { + "geometry": "o`raGxfupLIIGECC", + "maneuver": { + "bearing_after": 32, + "bearing_before": 329, + "location": [ + -71.056607, + 42.368239 + ], + "modifier": "slight right", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 2, + "entry": [ + true, + true, + false, + true + ], + "bearings": [ + 30, + 60, + 150, + 240 + ], + "location": [ + -71.056607, + 42.368239 + ] + } + ], + "weight": 7.5, + "duration": 7.5, + "distance": 15.1 + }, + { + "geometry": "earaGdfupLC@e@NcAX", + "maneuver": { + "bearing_after": 330, + "bearing_before": 32, + "location": [ + -71.05651, + 42.368354 + ], + "modifier": "left", + "type": "turn" + }, + "mode": "cycling", + "driving_side": "right", + "name": "Boston HarborWalk North End", + "intersections": [ + { + "out": 2, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 210, + 330 + ], + "location": [ + -71.05651, + 42.368354 + ] + }, + { + "out": 3, + "in": 1, + "entry": [ + true, + false, + true, + true + ], + "bearings": [ + 75, + 150, + 255, + 345 + ], + "location": [ + -71.056522, + 42.36837 + ] + } + ], + "weight": 21.900000000, + "duration": 21.900000000, + "distance": 62.9 + }, + { + "geometry": "sdraGpgupLEg@Eq@IaBCy@", + "maneuver": { + "bearing_after": 75, + "bearing_before": 343, + "location": [ + -71.056732, + 42.368895 + ], + "modifier": "right", + "type": "end of road" + }, + "mode": "cycling", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 0, + "in": 1, + "entry": [ + true, + false, + true + ], + "bearings": [ + 75, + 165, + 255 + ], + "location": [ + -71.056732, + 42.368895 + ] + } + ], + "weight": 31, + "duration": 31, + "distance": 102.3 + }, + { + "geometry": "meraGz_upL`@J", + "maneuver": { + "bearing_after": 192, + "bearing_before": 82, + "location": [ + -71.055504, + 42.369029 + ], + "modifier": "right", + "type": "turn" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "out": 1, + "in": 2, + "entry": [ + true, + true, + false + ], + "bearings": [ + 105, + 195, + 270 + ], + "location": [ + -71.055504, + 42.369029 + ] + } + ], + "weight": 17.4, + "duration": 17.4, + "distance": 19.2 + }, + { + "geometry": "kdraGf`upL", + "maneuver": { + "bearing_after": 0, + "bearing_before": 194, + "location": [ + -71.055561, + 42.368861 + ], + "modifier": "left", + "type": "arrive" + }, + "mode": "pushing bike", + "driving_side": "right", + "name": "", + "intersections": [ + { + "in": 0, + "entry": [ + true + ], + "bearings": [ + 14 + ], + "location": [ + -71.055561, + 42.368861 + ] + } + ], + "weight": 0, + "duration": 0, + "distance": 0 + } + ], + "summary": "Snow Hill Street, Charter Street", + "weight": 158.9, + "duration": 158.9, + "distance": 373.6 + } + ], + "weight_name": "duration", + "weight": 36716.100000000, + "duration": 36716.100000000, + "distance": 123967.000000000 + } + ], + "waypoints": [ + { + "waypoint_index": 0, + "trips_index": 0, + "hint": "gIosgLaKLIDOAAAArgAAAFwBAAAAAAAAp3O3QafxmUEQiRpCAAAAAM4AAACuAAAAXAEAAAAAAAAiAAAAN8fD-11_hgLtx8P7O3-GAgIA7wDMrPZq", + "distance": 15.458438989, + "name": "", + "location": [ + -71.055561, + 42.368861 + ] + }, + { + "waypoint_index": 4, + "trips_index": 0, + "hint": "zHksgC96LIAOAAAABAAAACMBAABdAQAAbd3QP5tTvj7LbAFC4E4bQg4AAAAEAAAAIwEAAF0BAAAiAAAAxpHD-xlThgI1k8P7d1OGAgEATxXMrPZq", + "distance": 31.979699356, + "name": "", + "location": [ + -71.069242, + 42.357529 + ] + }, + { + "waypoint_index": 29, + "trips_index": 0, + "hint": "ZVMsgG9TLIAQAAAABgAAAEsBAAAkAAAAk5G9QBPwAECyiu9CX7dQQRAAAAAGAAAASwEAACQAAAAiAAAAr4PB-xpuhwLJg8H7GG6HAhYArwvMrPZq", + "distance": 2.151229028, + "name": "White trail", + "location": [ + -71.203921, + 42.429978 + ] + }, + { + "waypoint_index": 5, + "trips_index": 0, + "hint": "jt4hgJLeIYA7AAAALQAAAAAAAAAAAAAA4gPGQasVlUEAAAAAAAAAADsAAAAtAAAAAAAAAAAAAAAiAAAAqnnD-zlPhgKDecP7Gk-GAgAATwjMrPZq", + "distance": 4.709088444, + "name": "", + "location": [ + -71.075414, + 42.356537 + ] + }, + { + "waypoint_index": 13, + "trips_index": 0, + "hint": "F6ghgE2oIYALAAAAFAEAAAAAAAA-AAAALyacQM9Y5UIAAAAAntjNQQsAAAAUAQAAAAAAAD4AAAAiAAAA0AHD--s5hgLdAcP7WTqGAgAA_wXMrPZq", + "distance": 12.265685208, + "name": "Bay State Road", + "location": [ + -71.106096, + 42.351083 + ] + }, + { + "waypoint_index": 11, + "trips_index": 0, + "hint": "7hAigPYQIoA2AgAAYwEAAAAAAAAAAAAAnsd7Qq9XHUIAAAAAAAAAADYCAABjAQAAAAAAAAAAAAAiAAAAgSXD-_EghgKhJcP7siCGAgAAXwTMrPZq", + "distance": 7.478611058, + "name": "", + "location": [ + -71.096959, + 42.344689 + ] + }, + { + "waypoint_index": 16, + "trips_index": 0, + "hint": "BtMDgA3TA4DtAQAACQMAAAAAAAAAAAAAGllbQrVyrEIAAAAAAAAAAO0BAAAJAwAAAAAAAAAAAAAiAAAA8KDC-2dBhgL5oML7kEGGAgAAfxHMrPZq", + "distance": 4.614233419, + "name": "", + "location": [ + -71.130896, + 42.352999 + ] + }, + { + "waypoint_index": 57, + "trips_index": 0, + "hint": "53osgJbBAIA9AQAAfwAAAAAAAAA3AgAAg0gNQqN9YEEAAAAA7xd8Qj0BAAB_AAAAAAAAADcCAAAiAAAAZa3D-yhVhgLArcP7m1SGAgAADwTMrPZq", + "distance": 17.363306965, + "name": "", + "location": [ + -71.062171, + 42.358056 + ] + }, + { + "waypoint_index": 19, + "trips_index": 0, + "hint": "zJQpgOCUKYAAAAAAggAAAAAAAAD4AAAAAAAAAO-jZkEAAAAA7NvbQQAAAACCAAAAAAAAAPgAAAAiAAAAdGXC-wM2hgIZZsL7ZjaGAgAAjxHMrPZq", + "distance": 17.481895794, + "name": "", + "location": [ + -71.146124, + 42.350083 + ] + }, + { + "waypoint_index": 58, + "trips_index": 0, + "hint": "pLssgCC8LICEAAAAUwAAAE4AAAAAAAAAhGRrQSCoE0GVZgpBAAAAAIQAAABTAAAATgAAAAAAAAAiAAAAe7vD-7RShgJXu8P7bVKGAgEA7wbMrPZq", + "distance": 8.425668561, + "name": "", + "location": [ + -71.058565, + 42.357428 + ] + }, + { + "waypoint_index": 60, + "trips_index": 0, + "hint": "ab0sgOi9LIAPAAAAAgAAABQAAADzBAAAU3bhP7GtKD7jRw5APbwMQw8AAAACAAAAFAAAAPMEAAAiAAAAz8DD--VXhgLOwMP761eGAgEADwXMrPZq", + "distance": 0.671553231, + "name": "State", + "location": [ + -71.057201, + 42.358757 + ] + }, + { + "waypoint_index": 63, + "trips_index": 0, + "hint": "5IgsgAqJLID7AAAAHgAAAAwAAAAIAAAAz5ffQcMBVEDFYKk_E9trP_sAAAAeAAAADAAAAAgAAAAiAAAAIsfD-0NxhgL1xsP7GnGGAgEAHwjMrPZq", + "distance": 5.871834935, + "name": "", + "location": [ + -71.055582, + 42.365251 + ] + }, + { + "waypoint_index": 18, + "trips_index": 0, + "hint": "kJMpgJWTKYBMAAAAYwEAAAAAAAAAAAAAvsf_QXfOE0MAAAAAAAAAAEwAAABjAQAAAAAAAAAAAAAiAAAA52XC-2M0hgLEZcL7DzSGAgAAvwbMrPZq", + "distance": 9.766513400, + "name": "", + "location": [ + -71.146009, + 42.349667 + ] + }, + { + "waypoint_index": 14, + "trips_index": 0, + "hint": "VWEpgBGvAIDDAAAAGgAAAOAAAADRAAAAZrGtQTwuNkCkOcdBAoC5QcMAAAAaAAAA4AAAANEAAAAiAAAAusTC-9sYhgLNxML77hiGAgIALxPMrPZq", + "distance": 2.628121485, + "name": "", + "location": [ + -71.121734, + 42.342619 + ] + }, + { + "waypoint_index": 53, + "trips_index": 0, + "hint": "YQ0DgBTPIYDvAAAAdAAAAAAAAAAAAAAAsgLVQbMxTUEAAAAAAAAAAO8AAAB0AAAAAAAAAAAAAAAiAAAA2obD-3MxhgKjhsP7ZDGGAgAAPxXMrPZq", + "distance": 4.830021618, + "name": "", + "location": [ + -71.072038, + 42.348915 + ] + }, + { + "waypoint_index": 54, + "trips_index": 0, + "hint": "m8shgJ7LIYAOAAAAXgEAAAAAAAAAAAAAOFW-QDE5G0IAAAAAAAAAAA4AAABeAQAAAAAAAAAAAAAiAAAAMpfD-6k1hgItl8P7uDWGAgAAvwTMrPZq", + "distance": 1.716409362, + "name": "Piedmont Street", + "location": [ + -71.067854, + 42.349993 + ] + }, + { + "waypoint_index": 50, + "trips_index": 0, + "hint": "jW0sgNVtLIAwAAAABwAAAAAAAAAxAQAAmfygQewAMT8AAAAAUqIHQjAAAAAHAAAAAAAAADEBAAAiAAAAA6rD-z9LhgJcqcP7n0uGAgAAnw3MrPZq", + "distance": 17.404100972, + "name": "Tremont Street", + "location": [ + -71.063037, + 42.355519 + ] + }, + { + "waypoint_index": 36, + "trips_index": 0, + "hint": "RwEpgEoBKYARAAAAAAAAAP4AAAAdAgAAkPHtPwAAAABn1K9B7xNwQhEAAAAAAAAA_gAAAB0CAAAiAAAAqbTC--LuhQKLtML72O6FAgkA3xTMrPZq", + "distance": 2.710863708, + "name": "", + "location": [ + -71.125847, + 42.331874 + ] + }, + { + "waypoint_index": 38, + "trips_index": 0, + "hint": "gLshgIS7IYAAAAAAPAAAAAAAAAAAAAAAAAAAAPGU1UAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAiAAAAAvTC-8AAhgKC9ML71ACGAgAATw_MrPZq", + "distance": 10.782118946, + "name": "", + "location": [ + -71.10963, + 42.336448 + ] + }, + { + "waypoint_index": 27, + "trips_index": 0, + "hint": "aj4fgM3NAoCRAAAAhQAAAAAAAAArAAAAJkGBQbwNbEEAAAAAtAeZQJEAAACFAAAAAAAAACsAAAAiAAAAVpjC-6vNhgJRmML7Dc6GAgAAfwXMrPZq", + "distance": 10.893682554, + "name": "", + "location": [ + -71.133098, + 42.388907 + ] + }, + { + "waypoint_index": 44, + "trips_index": 0, + "hint": "43YhgPN2IYA1AAAAJAAAAAAAAAA5AAAAEha0QWgpbEEAAAAAVpK-QTUAAAAkAAAAAAAAADkAAAAiAAAAPq3D-8bThQIDrsP7b9OFAgAALw3MrPZq", + "distance": 18.896384512, + "name": "Lucy Street", + "location": [ + -71.06221, + 42.324934 + ] + }, + { + "waypoint_index": 6, + "trips_index": 0, + "hint": "0OEhgPvhIYADAAAABgAAAA8AAAA0AAAA2lq-PipQFD-Y-Nc_LEW7QAMAAAAGAAAADwAAADQAAAAiAAAAklPD-601hgJ7U8P7szWGAgIAjwzMrPZq", + "distance": 2.009577849, + "name": "", + "location": [ + -71.085166, + 42.349997 + ] + }, + { + "waypoint_index": 37, + "trips_index": 0, + "hint": "jREAgKy7IYAwAAAACAEAAKICAAAAAAAArRKrQHxV6kFh4pVCAAAAADAAAAAIAQAAogIAAAAAAAAiAAAAyunC-wD_hQJB6cL7J_-FAgcAXwHMrPZq", + "distance": 12.095051428, + "name": "", + "location": [ + -71.112246, + 42.336 + ] + }, + { + "waypoint_index": 55, + "trips_index": 0, + "hint": "zMkhgLkRAICNAAAA2QAAAAAAAAAyAgAAqSJsQnUwwEEAAAAAdOV5Qo0AAADZAAAAAAAAADICAAAiAAAASpbD-4BEhgLSnMP7eEaGAgAAHxXMrPZq", + "distance": 148.655194719, + "name": "Charles Street", + "location": [ + -71.068086, + 42.353792 + ] + }, + { + "waypoint_index": 31, + "trips_index": 0, + "hint": "2M4pgNrOKYCCAQAADAAAAAAAAAAAAAAALKILQ27Ah0AAAAAAAAAAAIIBAAAMAAAAAAAAAAAAAAAiAAAAGyjB-wirhQIbKMH7CKuFAgAA_w3MrPZq", + "distance": 0, + "name": "Echo Bridge", + "location": [ + -71.227365, + 42.314504 + ] + }, + { + "waypoint_index": 8, + "trips_index": 0, + "hint": "lhgDgIkYA4BkAAAAIgEAAFoBAAAaAAAAJyAzQWNrAEI8AxpCXpU7QGQAAAAiAQAAWgEAABoAAAAiAAAAN1rD-zQWhgJyWsP7YxaGAgIAXwjMrPZq", + "distance": 7.134932910, + "name": "", + "location": [ + -71.083465, + 42.34194 + ] + }, + { + "waypoint_index": 41, + "trips_index": 0, + "hint": "cX8hgJF_IYA1AAAAMAAAAGcAAABOAAAATyWxQQ77nUEHMCtC63QBQjUAAAAwAAAAZwAAAE4AAAAiAAAALBzD-2bphQK8HMP7FeqFAgEAnwfMrPZq", + "distance": 22.776295017, + "name": "Alleghany Street", + "location": [ + -71.099348, + 42.33047 + ] + }, + { + "waypoint_index": 39, + "trips_index": 0, + "hint": "rLwhgLG8IYAEAAAABQAAADAAAABsAAAA1X8CQHGb7D9Kz6BB-mE0QgQAAAAFAAAAMAAAAGwAAAAiAAAAbBzD-9cGhgJOHcP7YAeGAgEAzwjMrPZq", + "distance": 24.054372041, + "name": "", + "location": [ + -71.099284, + 42.338007 + ] + }, + { + "waypoint_index": 61, + "trips_index": 0, + "hint": "oLwsgCS9LIBHAAAA2AAAAAAAAABgAQAAkQwAQdo1v0EAAAAAI74cQkcAAADYAAAAAAAAAGABAAAiAAAAncHD-6pehgK7wcP7r16GAgAArxXMrPZq", + "distance": 2.532528717, + "name": "", + "location": [ + -71.056995, + 42.36049 + ] + }, + { + "waypoint_index": 10, + "trips_index": 0, + "hint": "bwwigH0MIoAFAAAAEAAAAFUAAAArAAAAag0xP3921D-BFxlB1WCZQAUAAAAQAAAAVQAAACsAAAAiAAAAJS3D-3EWhgJ2LcP7RBaGAgQATwLMrPZq", + "distance": 8.340476409, + "name": "", + "location": [ + -71.095003, + 42.342001 + ] + }, + { + "waypoint_index": 9, + "trips_index": 0, + "hint": "MQwigFwMIoAoAAAANQAAABwAAAB-AAAAoidqQSAYl0GvUh9BndM1QigAAAA1AAAAHAAAAH4AAAAiAAAAyS_D-28ThgLyL8P70hOGAgEA7xHMrPZq", + "distance": 11.504463313, + "name": "", + "location": [ + -71.094327, + 42.341231 + ] + }, + { + "waypoint_index": 45, + "trips_index": 0, + "hint": "-mUsgHZmLIATAAAAYgEAAL0AAADpAAAALf8HQHZ8HUK-9adBbsvOQRMAAABiAQAAvQAAAOkAAAAiAAAADODD-3jWhQJx3cP7staFAgMAbwDMrPZq", + "distance": 55.355564794, + "name": "", + "location": [ + -71.049204, + 42.325624 + ] + }, + { + "waypoint_index": 42, + "trips_index": 0, + "hint": "5tYhgJHXIYAIAAAArQAAADwAAABCAQAAaRlbQD16mUGpAchBxIoPQggAAACtAAAAPAAAAEIBAAAiAAAAKD3D--XmhQKGPcP7ceeFAgIATwfMrPZq", + "distance": 17.374491149, + "name": "Dudley Street", + "location": [ + -71.090904, + 42.329829 + ] + }, + { + "waypoint_index": 49, + "trips_index": 0, + "hint": "uGosgDsvBIBdAQAADAEAAAAAAAAvAAAAJVwbQl6M7UEAAAAAjMmnQF0BAAAMAQAAAAAAAC8AAAAiAAAAVK_D-zVEhgKcr8P7hkSGAgAA_xLMrPZq", + "distance": 10.775973238, + "name": "", + "location": [ + -71.061676, + 42.353717 + ] + }, + { + "waypoint_index": 47, + "trips_index": 0, + "hint": "Y5IsgK6SLICpAAAAAAAAAEoBAAAAAAAAAat0QgAAAACyCu5CAAAAAKkAAAAAAAAASgEAAAAAAAAiAAAAGBTE-7QxhgLZE8T7AzCGAgMAXwfMrPZq", + "distance": 48.376988516, + "name": "Boston Harborwalk", + "location": [ + -71.03588, + 42.34898 + ] + }, + { + "waypoint_index": 12, + "trips_index": 0, + "hint": "C-AhgGbgIYBZAAAAMQAAAAAAAABqAAAAj5QfQS1zq0AAAAAAi6c7QVkAAAAxAAAAAAAAAGoAAAAiAAAAYjvD-7ExhgJiO8P73TGGAgAArwXMrPZq", + "distance": 4.887502329, + "name": "", + "location": [ + -71.091358, + 42.348977 + ] + }, + { + "waypoint_index": 40, + "trips_index": 0, + "hint": "e38hgIUAA4C6AgAAGQAAAAAAAAAAAAAA_DybQoNdJUEAAAAAAAAAALoCAAAZAAAAAAAAAAAAAAAiAAAARBnD-_HwhQKKGcP72vCFAgAAfwHMrPZq", + "distance": 6.310267154, + "name": "Carmel Street", + "location": [ + -71.100092, + 42.332401 + ] + }, + { + "waypoint_index": 15, + "trips_index": 0, + "hint": "9bEAgGHlA4AFAAAAOQAAAOMAAACeAQAA-5cTP_H4ykBojclB4bs3QgUAAAA5AAAA4wAAAJ4BAAAiAAAAXLvC-zw9hgJeu8L74DyGAgMAnwXMrPZq", + "distance": 10.220739994, + "name": "", + "location": [ + -71.124132, + 42.351932 + ] + }, + { + "waypoint_index": 32, + "trips_index": 0, + "hint": "KBYpgCkWKYAEAAAAFgAAABoAAAAAAAAAeejrP7suEUG-MytBAAAAAAQAAAAWAAAAGgAAAAAAAAAiAAAAhCfC-8rShQIzKML7ddKFAgEAHwLMrPZq", + "distance": 17.240182378, + "name": "", + "location": [ + -71.16198, + 42.324682 + ] + }, + { + "waypoint_index": 3, + "trips_index": 0, + "hint": "qn8sgKt_LIAfAAAAAAAAAAAAAAAAAAAA2ElcQAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAiAAAAK6XD-0NYhgL-psP7-VeGAgAA7wTMrPZq", + "distance": 39.331841372, + "name": "", + "location": [ + -71.064277, + 42.358851 + ] + }, + { + "waypoint_index": 34, + "trips_index": 0, + "hint": "caspgBnmA4APAAAADgAAAKsAAAAhAQAACjjMQO4BskBhd45CIp7xQg8AAAAOAAAAqwAAACEBAAAiAAAASyXC-5kShgIpJcL7uxGGAgYADwbMrPZq", + "distance": 24.818413202, + "name": "", + "location": [ + -71.162549, + 42.341017 + ] + }, + { + "waypoint_index": 28, + "trips_index": 0, + "hint": "VfIrgFfyK4A3AAAADgAAAGgBAACjAAAAjHShQVW7lkDkuQFDGEdsQjcAAAAOAAAAaAEAAKMAAAAiAAAANg7C-70jhwKSEML7JSOHAgcAbwzMrPZq", + "distance": 52.496836206, + "name": "", + "location": [ + -71.168458, + 42.410941 + ] + }, + { + "waypoint_index": 33, + "trips_index": 0, + "hint": "oTopgPY6KYA-AAAAXAAAAIgAAACtAAAAcuLQQUWlF0LKLmFCAqeOQj4AAABcAAAAiAAAAK0AAAAiAAAAK0HC--TthQKdQML7Y-6FAgsAbw7MrPZq", + "distance": 18.330624172, + "name": "", + "location": [ + -71.155413, + 42.33162 + ] + }, + { + "waypoint_index": 26, + "trips_index": 0, + "hint": "3DcugDE4LoAuAAAAfgEAAAAAAAAAAAAA4qymQBZCKUIAAAAAAAAAAC4AAAB-AQAAAAAAAAAAAAAiAAAA8MDC-63rhgLYwML7ouuGAgAAjxTMrPZq", + "distance": 2.323865932, + "name": "", + "location": [ + -71.122704, + 42.396589 + ] + }, + { + "waypoint_index": 30, + "trips_index": 0, + "hint": "s-8pgLbvKYAOAAAAJgAAAEQAAABCAAAAaEbCQJmAekFTh-NBRUbdQQ4AAAAmAAAARAAAAEIAAAAiAAAAUyK_-0aohQK5Ir_7J6mFAgEAzwbMrPZq", + "distance": 26.369185460, + "name": "", + "location": [ + -71.359917, + 42.313798 + ] + }, + { + "waypoint_index": 23, + "trips_index": 0, + "hint": "zMICgCkJH4BiAwAAewAAAAAAAAAAAAAAYnbAQskRWkEAAAAAAAAAAGIDAAB7AAAAAAAAAAAAAAAiAAAA1ufC-9W4hgIi6ML7B7mGAgAAnwjMrPZq", + "distance": 8.368347408, + "name": "", + "location": [ + -71.112746, + 42.383573 + ] + }, + { + "waypoint_index": 62, + "trips_index": 0, + "hint": "IzYEgGw1BIASAAAArwAAADMAAACUAwAAynkIQGUkmkEXlLVAUKPLQhIAAACvAAAAMwAAAJQDAAAiAAAAL8fD-4BshgJ0x8P7bmyGAgEAjwzMrPZq", + "distance": 6.024488759, + "name": "", + "location": [ + -71.055569, + 42.364032 + ] + }, + { + "waypoint_index": 24, + "trips_index": 0, + "hint": "-jIugP4yLoAAAAAAIgAAAAAAAAAAAAAAAAAAAODNbkAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAiAAAAjc7C-7zLhgLTzsL7sMuGAgAAvxHMrPZq", + "distance": 5.917464220, + "name": "", + "location": [ + -71.119219, + 42.388412 + ] + }, + { + "waypoint_index": 7, + "trips_index": 0, + "hint": "XAAigHIAIoBKAAAASwAAAFUAAABDAQAARGUEQURlBEG2ZRZBn04PQkoAAABLAAAAVQAAAEMBAAAiAAAAJIrD-_IRhgLoicP7mRGGAgEAjxLMrPZq", + "distance": 11.054153936, + "name": "", + "location": [ + -71.071196, + 42.34085 + ] + }, + { + "waypoint_index": 64, + "trips_index": 0, + "hint": "G4gsgDiILICSAwAA5gAAAOkAAAAAAAAAQljLQnyXy0Fhy85BAAAAAJIDAADmAAAA6QAAAAAAAAAiAAAA3MTD-8Z3hgLOxMP7sXeGAgIAjxLMrPZq", + "distance": 2.602121282, + "name": "", + "location": [ + -71.056164, + 42.366918 + ] + }, + { + "waypoint_index": 56, + "trips_index": 0, + "hint": "OjQEgKKALIASAAAAAAAAAAAAAAAAAAAA7mn2QAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAiAAAAOJzD-8pPhgLenMP7A0uGAgAAXwrMrPZq", + "distance": 136.537792872, + "name": "", + "location": [ + -71.066568, + 42.356682 + ] + }, + { + "waypoint_index": 59, + "trips_index": 0, + "hint": "UkAEgFxABIB8AAAAAAAAAAAAAAAYAgAAVjBdQQAAAAAAAAAAHi9uQnwAAAAAAAAAAAAAABgCAAAiAAAAybjD-_9ZhgLkuMP7NVqGAgAA3wbMrPZq", + "distance": 6.397300074, + "name": "", + "location": [ + -71.059255, + 42.359295 + ] + }, + { + "waypoint_index": 52, + "trips_index": 0, + "hint": "48khgL2GAIBLAAAAYwAAAAAAAAA_AgAAYjQFQR1-L0EAAAAAD2p_QksAAABjAAAAAAAAAD8CAAAiAAAAKZvD-z0_hgInm8P7HD-GAgAAzwXMrPZq", + "distance": 3.669358118, + "name": "", + "location": [ + -71.066839, + 42.352445 + ] + }, + { + "waypoint_index": 43, + "trips_index": 0, + "hint": "WhEngAASJ4BcAAAAdwAAAHoBAAAFAAAAI3gkQQlZRUJLNihCraoRQFwAAAB3AAAAegEAAAUAAAAiAAAAp0rD-2xjhQJLS8P7T2OFAgEAHwzMrPZq", + "distance": 13.907078842, + "name": "Blue Hill Avenue", + "location": [ + -71.087449, + 42.296172 + ] + }, + { + "waypoint_index": 2, + "trips_index": 0, + "hint": "HpwsgCKcLIAAAAAAEgAAAAAAAAAAAAAAAAAAACg870AAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAiAAAAFazD-xB0hgJ-rcP79nSGAgAAnw7MrPZq", + "distance": 39.201676568, + "name": "", + "location": [ + -71.062507, + 42.365968 + ] + }, + { + "waypoint_index": 35, + "trips_index": 0, + "hint": "tE8pgC7YA4BIAQAAXAAAAGMEAAAAAAAAxc8RQgsFI0H6ePlCAAAAAEgBAABcAAAAYwQAAAAAAAAiAAAAlXLC-9sbhgKvcsL70RuGAgcAvwHMrPZq", + "distance": 2.413886454, + "name": "", + "location": [ + -71.142763, + 42.343387 + ] + }, + { + "waypoint_index": 20, + "trips_index": 0, + "hint": "fXQpgKx0KYCwAAAALQEAAAAAAACNAwAAqUycQfKzBUIAAAAAMvfJQrAAAAAtAQAAAAAAAI0DAAAiAAAASW7C-2pQhgJabsL7rlCGAgAAjxHMrPZq", + "distance": 7.682154577, + "name": "", + "location": [ + -71.143863, + 42.356842 + ] + }, + { + "waypoint_index": 51, + "trips_index": 0, + "hint": "CjAEgJltLICCAAAAMQAAAMAFAAAiAAAAZNlnQQ0_oEEmhCNDxWVkQYIAAAAxAAAAwAUAACIAAAAiAAAAJqjD-85IhgLfocP7xUqGAgoAfwHMrPZq", + "distance": 143.666703104, + "name": "Tremont Street", + "location": [ + -71.063514, + 42.354894 + ] + }, + { + "waypoint_index": 48, + "trips_index": 0, + "hint": "_i4EgMVpLICFAAAASQAAABsCAAAsAAAAPrtuQV4AAEGNdm9CtBabQIUAAABJAAAAGwIAACwAAAAiAAAAkbfD-105hgJkt8P7aDmGAgIAPwHMrPZq", + "distance": 3.902534071, + "name": "", + "location": [ + -71.059567, + 42.350941 + ] + }, + { + "waypoint_index": 46, + "trips_index": 0, + "hint": "xTgEgAI5BIAiAAAAKQEAADQAAAAAAAAANyZxQILoA0Keb7hAAAAAACIAAAApAQAANAAAAAAAAAAiAAAAxBPE-xMthgLhE8T7Pi2GAgEAjxLMrPZq", + "distance": 5.341185433, + "name": "Boston HarborWalk", + "location": [ + -71.035964, + 42.347795 + ] + }, + { + "waypoint_index": 17, + "trips_index": 0, + "hint": "dC0pgHYtKYA8AAAAIQAAAAAAAAAcAAAAqpLIQePNV0EAAAAAQzs8QTwAAAAhAAAAAAAAABwAAAAiAAAAuJ7C-8k_hgIwn8L7uz-GAgAAzwvMrPZq", + "distance": 10.005103353, + "name": "", + "location": [ + -71.131464, + 42.352585 + ] + }, + { + "waypoint_index": 21, + "trips_index": 0, + "hint": "z7cCgEvPHoCLAAAAgwEAAAAAAAAAAAAAZBB4QZDSK0IAAAAAAAAAAIsAAACDAQAAAAAAAAAAAAAiAAAAZ6rC-1VphgJsqsL7NmmGAgAAPwXMrPZq", + "distance": 3.468034894, + "name": "", + "location": [ + -71.128473, + 42.363221 + ] + }, + { + "waypoint_index": 1, + "trips_index": 0, + "hint": "LRUugHAVLoA1AAAA7wEAAKAAAADqAAAAYZa9QBEBXEIOWo5BwSLQQTUAAADvAQAAoAAAAOoAAAAiAAAAGa_D-6uAhgIDr8P7p4CGAgIAfwrMrPZq", + "distance": 1.865657787, + "name": "", + "location": [ + -71.061735, + 42.369195 + ] + }, + { + "waypoint_index": 25, + "trips_index": 0, + "hint": "HmYEgCJmBIARAAAAEAAAAFMAAAAfAAAAu2r9P_lj3T_hNhRBXnBdQBEAAAAQAAAAUwAAAB8AAAAiAAAAOc7C-27MhgI7zsL7Q8yGAgIAzxDMrPZq", + "distance": 4.779304112, + "name": "", + "location": [ + -71.119303, + 42.38859 + ] + }, + { + "waypoint_index": 22, + "trips_index": 0, + "hint": "kiMugJQjLoAAAAAAEgAAAAAAAAA9AAAAAAAAAGWd9UAAAAAAYrnMQQAAAAASAAAAAAAAAD0AAAAiAAAA2iHD-52uhgLlIcP70K6GAgAAjw7MrPZq", + "distance": 5.737096415, + "name": "", + "location": [ + -71.097894, + 42.380957 + ] + } + ] +}
\ No newline at end of file diff --git a/static/img/video.png b/static/img/video.png Binary files differnew file mode 100644 index 0000000..25cbd08 --- /dev/null +++ b/static/img/video.png diff --git a/static/img/yes-datetime.png b/static/img/yes-datetime.png Binary files differnew file mode 100644 index 0000000..04ed5a7 --- /dev/null +++ b/static/img/yes-datetime.png diff --git a/static/img/yes-location.png b/static/img/yes-location.png Binary files differnew file mode 100644 index 0000000..8f20099 --- /dev/null +++ b/static/img/yes-location.png diff --git a/static/js/codemirror/tablist.js b/static/js/codemirror/tablist.js new file mode 100644 index 0000000..e6cf2d4 --- /dev/null +++ b/static/js/codemirror/tablist.js @@ -0,0 +1,44 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +var CodeMirror = require("codemirror"); + +CodeMirror.commands.tabAndIndentMarkdownList = function (cm) { + var ranges = cm.listSelections(); + var pos = ranges[0].head; + var eolState = cm.getStateAfter(pos.line); + var inList = eolState.list !== false; + + if (inList) { + cm.execCommand("indentMore"); + return; + } + + if (cm.options.indentWithTabs) { + cm.execCommand("insertTab"); + } + else { + var spaces = Array(cm.options.tabSize + 1).join(" "); + cm.replaceSelection(spaces); + } +}; + +CodeMirror.commands.shiftTabAndUnindentMarkdownList = function (cm) { + var ranges = cm.listSelections(); + var pos = ranges[0].head; + var eolState = cm.getStateAfter(pos.line); + var inList = eolState.list !== false; + + if (inList) { + cm.execCommand("indentLess"); + return; + } + + if (cm.options.indentWithTabs) { + cm.execCommand("insertTab"); + } + else { + var spaces = Array(cm.options.tabSize + 1).join(" "); + cm.replaceSelection(spaces); + } +}; diff --git a/static/js/editor.js b/static/js/editor.js new file mode 100644 index 0000000..7804f4c --- /dev/null +++ b/static/js/editor.js @@ -0,0 +1,805 @@ +// uses functions in utils.js +var host = window.location.protocol + "//" + window.location.host; +var collection_id; +var latest_timestamp = -1; + +// "global" map variables +var map; +var location_picking = false; + +// layer variables +const media_markers_l = L.layerGroup([]); // media markers +const media_markers_ref = {}; +const text_markers = L.layerGroup([]); // polyline routes + +// collection info in JSON +const collection_media = {}; +const collection_notes = {}; +const collection_perms = {}; +const collection_info = {}; +const media_divs = {}; +const changes = { "name" : false, "info" : false, "timestamp" : false } + +// +var mode = 0; // 0 = media, 1 = notes, 2 = routes. the index of hte currently selected tab +var ascending = true; +const selected_media_ids = []; +var is_picking_location = false; +var last_selected_index = -1; +var media_modal_open = false; +var share_modal_open = false; +var collection_modal_open = false; + +var Media_Icon = L.Icon.extend({ + options: { + shadowUrl: 'static/img/marker_background.png', + iconSize: [60, 45], + shadowSize: [72, 62], + iconAnchor: [30, 55], + shadowAnchor: [36, 62], + popupAnchor: [-3, -76] + } +}); + +// RUN ON PAGE LOAD +window.onload = function() { + document.getElementById("share-modal").addEventListener("click", close_share_modal); + document.getElementById("share-box").addEventListener("click", stop_propagation); + document.getElementById("collection-modal").addEventListener("click", close_collection_modal); + document.getElementById("collection-box").addEventListener("click", stop_propagation); + + collection_id = document.getElementById("collection_id").innerText; + map = L.map('map').setView([13.6760758587756, -89.21535464697462], 10); + L.tileLayer('https://tiles.stadiamaps.com/tiles/outdoors/{z}/{x}/{y}{r}.{ext}?api_key=24746ff5-179d-482f-97a8-0267c5b276a1', { + minZoom: 0, + maxZoom: 20, + ext: 'png' + }).addTo(map); + + + map.addLayer(media_markers_l); + map.addLayer(text_markers); + var layerControl = L.control.layers(null,null,{collapsed:false}); + layerControl.addOverlay(media_markers_l, "Media"); + layerControl.addOverlay(text_markers, "Notes"); + layerControl.addTo(map); + + map.on('click', function(e) { + var coords = e.latlng; + handle_map_click(coords["lat"], coords["lng"]); + }); + + request_latest_info(); +} +var intervalId = window.setInterval(function(){ // constantly get latest info from server + request_latest_info(); + }, 5000); + + // keyboard event listener for ESC to clear selection or cancel location picking +document.addEventListener('keydown', function(e) { + if (e.key === 'Escape') { + if(media_modal_open) { + close_media_preview(); + return; + } + if(share_modal_open) { + close_share_modal(); + return; + } + if(collection_modal_open) { + close_collection_modal(); + return; + } + if (is_picking_location) { + disable_picking(); + return; + } + clear_selection(); + update_content_editing_box(); + } + if (e.key == 'c') { + if( e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA" ) return; + if( e.target.isContentEditable ) return; + if(selected_media_ids.length)picker_clicked(); + return; + } + // select elements by arrow keys + if (e.key == 'a' || e.key == 'd') { + if( e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA" ) return; + if(last_selected_index != -1) { + const new_index = last_selected_index + (e.key == 'a' ? -1 : 1); + const media = document.querySelector(`.media[data-index="${new_index}"]`); + if (media) { + clear_selection(); + + media.classList.add('selected'); + selected_media_ids.push(media.dataset.id); + last_selected_index = parseInt(media.dataset.index); + media.scrollIntoView(); + //map.panTo(media_markers_ref[media.dataset.id].latlng); + + update_content_editing_box(); + } + } + } + if (e.key == 'w' || e.key == 's') { + if( e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA" ) return; + if(last_selected_index != -1) { + const grid = document.getElementById("media_grid"); + const grid_computed_style = window.getComputedStyle(grid); + const grid_cols = grid_computed_style.getPropertyValue("grid-template-columns").split(" ").length; + + const new_index = last_selected_index + (e.key == 'w' ? -1 : 1)*grid_cols; + const media = document.querySelector(`.media[data-index="${new_index}"]`); + console.log(media); + if (media) { + clear_selection(); + + media.classList.add('selected'); + selected_media_ids.push(media.dataset.id); + last_selected_index = parseInt(media.dataset.index); + media.scrollIntoView(); + //map.panTo(media_markers_ref[media.dataset.id].latlng); + + update_content_editing_box(); + } + } + } +}); + +function stop_propagation(event) { + console.log("stop event propagation"); + event.stopPropagation(); +} + + +function set_tab(evt, tab_id) { + if(is_picking_location) return; + // Hide all tabs' content and mark all tabs as unselected + var tab_content = document.getElementsByClassName("tab-content"); + for (var i = 0; i < tab_content.length; i++) { + tab_content[i].style.display = "none"; + } + var tabs = document.getElementsByClassName("tab"); + for (var i = 0; i < tabs.length; i++) { + tabs[i].className = tabs[i].className.replace(" active", ""); + } + + // Display selected tab's content, show tab as selected + document.getElementById(tab_id).style.display = "flex"; + evt.currentTarget.className += " active"; + + mode = {"media_tab" : 0, "text_tab" : 1, "routes_tab" : 2}[tab_id]; + + update_content_editing_box(); +} + +function upload_media_files() { + var files = document.getElementById("media_upload").files;; + + if (files.length == 0) { + alert("No files selected!"); + return; + } + + const formData = new FormData(); + for (var i = 0; i < files.length; i++){ + console.log(files[i]); + formData.append("files", files[i]); + } + formData.append("collection_id", collection_id); + + fetch( "/editormediaupload", { + method: "POST", + credentials: "include", + body: formData + }).then((response) => response.json()) + .then((json) => { + console.log('Gotcha'); + }).catch((err) => { + console.log(err); + }); +} + +function edit_media_grid_element(media_dict) { + const media_div = media_divs[media_dict["id"]]; + const name = media_div.querySelector("p"); + name.innerText = media_dict["name"]; + + const icons = media_div.querySelectorAll("div.media div img"); + icons[0].src = media_dict["longitude"] ? "static/img/yes-location.png" : "static/img/no-location.png"; + icons[1].src = (media_dict["timestamp"] != "") ? "static/img/yes-datetime.png" : "static/img/no-datetime.png"; + + const timestamp = media_div.querySelector("p.media-timestamp"); + timestamp.innerText = media_dict["timestamp"].replace("T", " "); +} + +function add_media(media_dict){ + // add data + collection_media[media_dict["id"]] = media_dict; + + // add HTML element + const media_element = document.createElement('div'); + media_element.className = "media"; + media_element.dataset.id = media_dict["id"]; + + const img = document.createElement('img'); + img.src = media_dict["thumbbig"]; + + const fn = document.createElement('p'); + fn.innerText = media_dict["name"]; + + const info = document.createElement('div'); + info.style = "display:flex; flex-direction:horizontal; margin:0; justify-content: center;"; + const loc = document.createElement('img'); + loc.src = media_dict["longitude"] ? "static/img/yes-location.png" : "static/img/no-location.png"; + loc.style.width = "20px"; loc.style.height = "20px"; + const dt = document.createElement('img'); + dt.src = (media_dict["timestamp"] != "") ? "static/img/yes-datetime.png" : "static/img/no-datetime.png"; + dt.style.width = "20px"; dt.style.height = "20px"; + const dtext = document.createElement('p'); + dtext.classList.add("media-timestamp") + dtext.innerText = media_dict["timestamp"].replace("T", " "); + + + info.appendChild(loc); + info.appendChild(dt); + + media_element.appendChild(img); + media_element.appendChild(fn); + media_element.appendChild(dtext); + media_element.appendChild(info); + + + media_divs[media_dict["id"]] = media_element; + + // add map icon + console.log(media_dict); + const media_icon = new Media_Icon({iconUrl : media_dict['thumbsmall']}); + var lat = 0; var lng = 0; + if(media_dict['latitude'] && media_dict['longitude']) { + lat = media_dict['latitude']; + lng = media_dict['longitude']; + } + const media_marker = L.marker( [lat, lng], {icon:media_icon} ).on('click', function(e) { map_marker_clicked(media_dict["id"], 'media', e) }); + media_markers_ref[media_dict["id"]] = media_marker; + media_markers_l.addLayer(media_marker); +} + +function remove_media(media_id) { + for(var i = 0; i < selected_media_ids.length; i++) { + if (selected_media_ids[i] == media_id) { + selected_media_ids.pop(i); + break; + } + } + media_divs[media_id].remove(); + + media_markers_l.removeLayer(media_markers_ref[media_id]); + delete media_markers_ref[media_id]; + delete media_divs[media_id]; + delete collection_media[media_id]; + update_content_editing_box(); +} + +// media grid stuff made by deepseek, not finished cleaning up +document.addEventListener('DOMContentLoaded', function() { + const media_grid = document.getElementById('media_grid'); + + // Add click event listeners + media_grid.addEventListener('click', function(e) { + const media_element = e.target.closest('.media'); + const isShiftKey = e.shiftKey; + const isCtrlKey = e.ctrlKey || e.metaKey; // metaKey for Mac Command key + if (!media_element) { + if(!isShiftKey && !isCtrlKey) clear_selection(); + update_content_editing_box(); + return; + } + const isVisible = function (ele, container) { + const { bottom, height, top } = ele.getBoundingClientRect(); + const containerRect = container.getBoundingClientRect(); + + //console.log( ele.getBoundingClientRect()); + //console.log(containerRect); + + return top <= containerRect.top ? containerRect.top - top <= height : bottom - containerRect.bottom <= height; + }; + + + + const currentIndex = parseInt(media_element.dataset.index); + const current_media_id = media_element.dataset.id; + + if (isShiftKey && last_selected_index !== -1) { + // Range selection with Shift key + select_range(last_selected_index, currentIndex, isCtrlKey); + } else if (isCtrlKey) { + // Toggle selection with Ctrl key + media_element.classList.toggle('selected'); + selected_media_ids.push(current_media_id); + last_selected_index = currentIndex; + } else { + // Single selection + clear_selection(); + media_element.classList.add('selected'); + last_selected_index = currentIndex; + selected_media_ids.push(current_media_id); + } + + update_content_editing_box(); + if(!isVisible(media_element, media_element.parentElement))media_element.scrollIntoView(); + }); +}); + +// Clear all selections +function clear_selection() { + selected_media_ids.length = 0; // clear selected media ids array... kind of strange way to do it but appears to be the most readable way of doing it + document.querySelectorAll('.media.selected').forEach(el => { + el.classList.remove('selected'); + }); + last_selected_index = -1; +} + +// Select range of photos +function select_range(start_index, end_index, additive) { + if (!additive) { + clear_selection(); + } + + const start = Math.min(start_index, end_index); + const end = Math.max(start_index, end_index); + + for (let i = start; i <= end; i++) { + const photo = document.querySelector(`.media[data-index="${i}"]`); + if (photo) { + photo.classList.add('selected'); + selected_media_ids.push(photo.dataset.id); + } + } +} + +function update_media_grid() { + const media_grid = document.getElementById('media_grid'); + while (media_grid.firstChild) { + media_grid.removeChild(media_grid.lastChild); + } + const hide_timestamp = document.getElementById("hide-timestamp").checked; + const hide_location = document.getElementById("hide-location").checked; + const sort_by = document.getElementById("sort-type").value; + + const media_ids = [...Object.keys(media_divs)]; + if (sort_by != "none") media_ids.sort( (a, b) => { + if(ascending) { + return collection_media[a][sort_by].localeCompare(collection_media[b][sort_by]); + } else { + return collection_media[b][sort_by].localeCompare(collection_media[a][sort_by]); + } + }); + + // remove hidden entries + for (var i = media_ids.length-1; i >= 0; i-- ) { + if (hide_timestamp && (collection_media[media_ids[i]]["timestamp"] != "")) media_ids.splice(i, 1); + else if (hide_location && (collection_media[media_ids[i]]["latitude"] && collection_media[media_ids[i]]["longitude"])) media_ids.splice(i, 1); + } + + var i = 0; + for (var media_id of media_ids) { + const media_div = media_divs[media_id]; + media_div.dataset.index = i; + media_grid.appendChild(media_div); + i += 1; + } +} + +function update_content_editing_box() { + submit_edit_changes(); // make sure user changes are submitted + + const content_box = document.getElementById("content_info"); + const preview_box = document.getElementById("media-preview"); + const video = document.getElementById("preview-video"); + video.pause(); + if(mode == 0) { // media editing mode + if(selected_media_ids.length == 0){ + content_box.style.display="none"; + preview_box.style.display="none"; + return; + } + + content_box.style.display="block"; + preview_box.style.display="flex"; + + if(selected_media_ids.length == 1){ + const selected_media = collection_media[selected_media_ids[0]]; + for (const [key, value] of Object.entries(selected_media)) { + var field = document.getElementById("media_"+key); + if (field) field.value = value; + } + const location_text = document.getElementById("media_coords"); + if(selected_media['latitude'] && selected_media['longitude']) { + map.panTo( [selected_media['latitude'], selected_media['longitude']] ); + location_text.innerText = `(${selected_media['latitude']}, ${selected_media['longitude']})`; + } else { + location_text.innerText = "No location given! Press the picker button or 'C' to mark location."; + } + + if (selected_media["is_video"]) { + const img = document.getElementById("preview-img"); + video.src = selected_media["mediapath"]; + img.style.display = "none"; + video.style.display = "block"; + } else { + const img = document.getElementById("preview-img"); + img.src = selected_media["mediapath"]; + video.style.display = "none"; + img.style.display = "block"; + } + + } else { // multiple media selected + const fields = { ...collection_media[selected_media_ids[0]] }; + for (var m_i = 1; m_i < selected_media_ids.length; m_i++) { + const selected_media = collection_media[selected_media_ids[ m_i ]]; + for (const [key, value] of Object.entries(selected_media)) { + if( value != fields[key] ) fields[key] = "< ... >"; + } + } + + for (const [key, value] of Object.entries(fields)) { + var field = document.getElementById("media_"+key); + if (field) field.value = value; + } + const location_text = document.getElementById("media_coords"); + if(fields['latitude'] && fields['longitude'] && Number(fields['latitude']) && Number(fields['longitude'])) { + map.panTo( [fields['latitude'], fields['longitude']]); + location_text.innerText = `(${fields['latitude']}, ${fields['longitude']})`; + } else if ( !(fields['latitude'] && fields['longitude']) ) + location_text.innerText = "No location given! Press the picker button or 'C' to mark location."; + else { + location_text.innerText = "< ... >"; + } + } + } +} + +function picker_clicked() { + const picking_style = document.createElement('style'); + picking_style.innerHTML = '*{cursor: crosshair;}'; + picking_style.id = 'picking-style'; + document.head.appendChild(picking_style); + + L.DomUtil.addClass(map._container, "crosshair-cursor-enabled"); + + const media_boxes = document.getElementsByClassName("media"); + for(var i = 0; i < media_boxes.length; i++) { + media_boxes[i].classList.add('no-hover'); + } + const tabs = document.getElementsByClassName("tab-header"); + for(var i = 0; i < tabs.length; i++) { + tabs[i].classList.add('no-hover'); + } + + map.removeLayer(media_markers_l); + + is_picking_location = true; +} + +function disable_picking() { + is_picking_location = false; + document.getElementById('picking-style').remove(); + L.DomUtil.removeClass(map._container, "crosshair-cursor-enabled"); + + const media_boxes = document.getElementsByClassName("media"); + for(var i = 0; i < media_boxes.length; i++) { + media_boxes[i].classList.remove('no-hover'); + } + + const tabs = document.getElementsByClassName("tab-header"); + for(var i = 0; i < tabs.length; i++) { + tabs[i].classList.remove('no-hover'); + } + map.addLayer(media_markers_l); +} + +function handle_map_click(latitude, longitude) { + if(!is_picking_location) return; + map.addLayer(media_markers_l); + edit_media_info({"latitude" : latitude, "longitude" : longitude}); + disable_picking(); +} + +function map_marker_clicked(id, type, e) { + clear_selection(); + if (type === "media") { + const media = document.querySelector(`.media[data-id="${id}"]`); + if (media) { + media.classList.add('selected'); + selected_media_ids.push(media.dataset.id); + last_selected_index = parseInt(media.dataset.index); + media.scrollIntoView(); + } else { // media filtered + document.getElementById("hide-timestamp").checked = false; + document.getElementById("hide-location").checked = false; + update_media_grid(); + const media = document.querySelector(`.media[data-id="${id}"]`); + media.classList.add('selected'); + selected_media_ids.push(media.dataset.id); + last_selected_index = parseInt(media.dataset.index); + media.scrollIntoView(); + } + update_content_editing_box(); + } +} + +function open_media_preview() { + const modal = document.getElementById('media-preview-modal'); + const preview_img = document.getElementById("preview-img"); + const modal_media = document.getElementById("modal-img"); + + modal.style.display = "block"; + modal_media.src = preview_img.src; + media_modal_open = true; +} + +function close_media_preview() { + const modal = document.getElementById('media-preview-modal'); + modal.style.display = "none"; + media_modal_open = false; +} + +function open_share_modal() { + update_share_info(); + var modal = document.getElementById('share-modal'); + share_modal_open = true; + modal.style.display = "block"; +} + +function close_share_modal() { + var modal = document.getElementById('share-modal'); + share_modal_open = false; + modal.style.display = "none"; +} + +function update_share_info() { + const publicity = document.getElementById("visibility-dropdown"); + publicity.value = collection_perms["public"] ? "public" : "private"; + + const user_section = document.getElementById("shared-users"); + while (user_section.firstChild) + user_section.removeChild(user_section.firstChild); + + const editor_option = document.createElement("option"); + editor_option.innerText = "Editor"; + editor_option.value = "editor"; + const viewer_option = document.createElement("option"); + viewer_option.innerText = "Viewer"; + viewer_option.value = "viewer"; + + for (var t = 0; t < 2; t++) { + const user_type = t == 0 ? "editor" : "viewer"; + for (var i = 0; i < collection_perms[user_type+"s"].length; i++) { + const user_email_str = collection_perms[user_type+"s"][i]; + const user_email = document.createElement("p"); + user_email.innerText = collection_perms[user_type+"s"][i]; + user_email.style.margin = "0"; + + const user_permissions = document.createElement("select"); + const e = editor_option.cloneNode(true); + const v = viewer_option.cloneNode(true); + user_permissions.appendChild(e); + user_permissions.appendChild(v); + user_permissions.value = user_type; + user_permissions.onchange = () => { edit_permissions(user_email_str, user_permissions.value) } + + const user_unshare = document.createElement("p"); + user_unshare.innerText = "Unshare"; + user_unshare.classList.add("user-unshare-button"); + user_unshare.onclick = function () { edit_permissions(user_email_str, ""); } + + user_section.appendChild(user_email); + user_section.appendChild(user_permissions); + user_section.appendChild(user_unshare); + } + } +} + +function open_collection_modal() { + update_collection_info(); + var modal = document.getElementById('collection-modal'); + collection_modal_open = true; + modal.style.display = "block"; +} + +function close_collection_modal() { + var modal = document.getElementById('collection-modal'); + collection_modal_open = false; + modal.style.display = "none"; +} + +function update_collection_info() { + document.getElementById("collection-title-field").value = collection_info["title"]; + document.getElementById("collection-subtitle-field").value = collection_info["subtitle"]; + document.getElementById("collection-info-field").value = collection_info["info"]; +} + +function mark_info_change(field) { + changes[field] = true; +} + +function submit_edit_changes() { + console.log(changes); + var edits = {}; + for (const [field, was_changed] of Object.entries(changes)) { + if (was_changed) { + const new_val = document.getElementById("media_"+field).value; + if (new_val != collection_media[selected_media_ids[0]][field]) edits[field] = new_val; + } + changes[field] = false; // reset dictionary + } + if(Object.keys(edits).length > 0) { + edit_media_info(edits); + } +} + +// communicate +// with +// the +// server + +// run every x seconds to get latest info from server +function request_latest_info(){ + console.log("requesting update"); + function handleLatestInfo(json){ + console.log(json); + if(json['status'] != "OK") return; // ADD ERROR NOTIF ON MENU BAR + + if(!json['update']) return; // no changes + + let new_collection = json['collection']; + let new_media_ids = []; + for(var i = 0; i < new_collection['media'].length; i++) { + const media_id = new_collection['media'][i]['id']; + new_media_ids.push(media_id); + if(collection_media[media_id] == undefined) { + add_media(new_collection['media'][i]); + } else { // update existing + collection_media[media_id] = new_collection['media'][i] + edit_media_grid_element(collection_media[media_id]); + if(collection_media[media_id]['latitude'] && collection_media[media_id]['longitude']) + media_markers_ref[media_id].setLatLng([collection_media[media_id]['latitude'], collection_media[media_id]['longitude']]); + } + } + let to_be_removed = []; + for (const [key, _] of Object.entries(collection_media)) { + if (!new_media_ids.includes(key)) to_be_removed.push(key); + } + console.log(to_be_removed); + for (var i = 0; i < to_be_removed.length; i++){ + remove_media(to_be_removed[i]); + } + + // update permissions info + collection_perms["owner"] = new_collection["owner"]; + collection_perms["editors"] = new_collection["editors"]; + collection_perms["viewers"] = new_collection["viewers"]; + collection_perms["public"] = new_collection["public"]; + if(share_modal_open) update_share_info(); + + document.getElementById("collection-title").innerText = new_collection["title"]; + collection_info["title"] = new_collection["title"]; + collection_info["subtitle"] = new_collection["subtitle"]; + collection_info["info"] = new_collection["info"]; + if(collection_modal_open) update_share_info(); + + update_media_grid(); // make smarter later + update_content_editing_box(); + latest_timestamp = new_collection["last_edited"]; + + } + fetch(host+'/editorgetlatestinfo', { + method: "POST", + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ "collection" : collection_id, "last_updated" : latest_timestamp })}) + .then((response) => response.json()) + .then((json) => handleLatestInfo(json)); +} + +function delete_media() { + if(!confirm("Are you sure you want to delete these pieces of media? This cannot be undone!")) return; + + fetch(host+'/editordeletemedia', { + method: "POST", + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ "collection" : collection_id, "to_be_removed" : selected_media_ids })}) + .then((response) => response.json()) + .then((json) => { clear_selection(); request_latest_info(); }); +} + +function edit_media_info(changes) { + console.log("edit"); + const data = []; + for (var i = 0; i < selected_media_ids.length; i++) { + data.push({"media_id" : selected_media_ids[i], "changes" : changes}) + } + fetch(host+'/editoreditmedia', { + method: "POST", + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ "collection" : collection_id, "edits" : data })}) + .then((response) => response.json()) + .then((json) => {console.log(json); request_latest_info();}); +} + +function update_visibility() { + const visibility = document.getElementById("visibility-dropdown").value == "public" ? true : false; + const data = { "collection" : collection_id, "public" : visibility }; + fetch(host+'/editorshare', { + method: "POST", + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(data)}) + .then((response) => response.json()) + .then((json) => {console.log(json); request_latest_info();}); +} + +function add_shared_user() { + const user_email_e = document.getElementById("share-email"); + const permission_e = document.getElementById("share-permissions"); + edit_permissions(user_email_e.value, permission_e.value); + + user_email_e.value = ""; // reset email +} + +function edit_permissions(user_email, permission) { + console.log(user_email); + console.log(permission); + const data = { "collection" : collection_id, "user_email" : user_email, "perm" : permission }; + + fetch(host+'/editorshare', { + method: "POST", + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(data)}) + .then((response) => response.json()) + .then((json) => {console.log(json); request_latest_info();}); +} + +function collection_info_updated(field) { + const field_input = document.getElementById('collection-'+field+'-field'); + if(field_input) { + edit_collection_info(field, field_input.value); + } +} + +function edit_collection_info(field, value) { + const edits = {}; + edits[field] = value; + const data = { "collection" : collection_id, "edits" : edits }; + + fetch(host+'/editorcollectioninfo', { + method: "POST", + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(data)}) + .then((response) => response.json()) + .then((json) => {console.log(json); request_latest_info();}); +} + +function toggle_sort_direction(){ + ascending = !ascending; + document.getElementById("sort-direction").innerText = ascending ? "Ascending" : "Descending"; + update_media_grid(); +}
\ No newline at end of file diff --git a/static/js/leaflet.js b/static/js/leaflet.js new file mode 100644 index 0000000..a3bf693 --- /dev/null +++ b/static/js/leaflet.js @@ -0,0 +1,6 @@ +/* @preserve + * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com + * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).leaflet={})}(this,function(t){"use strict";function l(t){for(var e,i,n=1,o=arguments.length;n<o;n++)for(e in i=arguments[n])t[e]=i[e];return t}var R=Object.create||function(t){return N.prototype=t,new N};function N(){}function a(t,e){var i,n=Array.prototype.slice;return t.bind?t.bind.apply(t,n.call(arguments,1)):(i=n.call(arguments,2),function(){return t.apply(e,i.length?i.concat(n.call(arguments)):arguments)})}var D=0;function h(t){return"_leaflet_id"in t||(t._leaflet_id=++D),t._leaflet_id}function j(t,e,i){var n,o,s=function(){n=!1,o&&(r.apply(i,o),o=!1)},r=function(){n?o=arguments:(t.apply(i,arguments),setTimeout(s,e),n=!0)};return r}function H(t,e,i){var n=e[1],e=e[0],o=n-e;return t===n&&i?t:((t-e)%o+o)%o+e}function u(){return!1}function i(t,e){return!1===e?t:(e=Math.pow(10,void 0===e?6:e),Math.round(t*e)/e)}function W(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function F(t){return W(t).split(/\s+/)}function c(t,e){for(var i in Object.prototype.hasOwnProperty.call(t,"options")||(t.options=t.options?R(t.options):{}),e)t.options[i]=e[i];return t.options}function U(t,e,i){var n,o=[];for(n in t)o.push(encodeURIComponent(i?n.toUpperCase():n)+"="+encodeURIComponent(t[n]));return(e&&-1!==e.indexOf("?")?"&":"?")+o.join("&")}var V=/\{ *([\w_ -]+) *\}/g;function q(t,i){return t.replace(V,function(t,e){e=i[e];if(void 0===e)throw new Error("No value provided for variable "+t);return e="function"==typeof e?e(i):e})}var d=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function G(t,e){for(var i=0;i<t.length;i++)if(t[i]===e)return i;return-1}var K="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";function Y(t){return window["webkit"+t]||window["moz"+t]||window["ms"+t]}var X=0;function J(t){var e=+new Date,i=Math.max(0,16-(e-X));return X=e+i,window.setTimeout(t,i)}var $=window.requestAnimationFrame||Y("RequestAnimationFrame")||J,Q=window.cancelAnimationFrame||Y("CancelAnimationFrame")||Y("CancelRequestAnimationFrame")||function(t){window.clearTimeout(t)};function x(t,e,i){if(!i||$!==J)return $.call(window,a(t,e));t.call(e)}function r(t){t&&Q.call(window,t)}var tt={__proto__:null,extend:l,create:R,bind:a,get lastId(){return D},stamp:h,throttle:j,wrapNum:H,falseFn:u,formatNum:i,trim:W,splitWords:F,setOptions:c,getParamString:U,template:q,isArray:d,indexOf:G,emptyImageUrl:K,requestFn:$,cancelFn:Q,requestAnimFrame:x,cancelAnimFrame:r};function et(){}et.extend=function(t){function e(){c(this),this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()}var i,n=e.__super__=this.prototype,o=R(n);for(i in(o.constructor=e).prototype=o,this)Object.prototype.hasOwnProperty.call(this,i)&&"prototype"!==i&&"__super__"!==i&&(e[i]=this[i]);if(t.statics&&l(e,t.statics),t.includes){var s=t.includes;if("undefined"!=typeof L&&L&&L.Mixin){s=d(s)?s:[s];for(var r=0;r<s.length;r++)s[r]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.",(new Error).stack)}l.apply(null,[o].concat(t.includes))}return l(o,t),delete o.statics,delete o.includes,o.options&&(o.options=n.options?R(n.options):{},l(o.options,t.options)),o._initHooks=[],o.callInitHooks=function(){if(!this._initHooksCalled){n.callInitHooks&&n.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,e=o._initHooks.length;t<e;t++)o._initHooks[t].call(this)}},e},et.include=function(t){var e=this.prototype.options;return l(this.prototype,t),t.options&&(this.prototype.options=e,this.mergeOptions(t.options)),this},et.mergeOptions=function(t){return l(this.prototype.options,t),this},et.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i),this};var e={on:function(t,e,i){if("object"==typeof t)for(var n in t)this._on(n,t[n],e);else for(var o=0,s=(t=F(t)).length;o<s;o++)this._on(t[o],e,i);return this},off:function(t,e,i){if(arguments.length)if("object"==typeof t)for(var n in t)this._off(n,t[n],e);else{t=F(t);for(var o=1===arguments.length,s=0,r=t.length;s<r;s++)o?this._off(t[s]):this._off(t[s],e,i)}else delete this._events;return this},_on:function(t,e,i,n){"function"!=typeof e?console.warn("wrong listener type: "+typeof e):!1===this._listens(t,e,i)&&(e={fn:e,ctx:i=i===this?void 0:i},n&&(e.once=!0),this._events=this._events||{},this._events[t]=this._events[t]||[],this._events[t].push(e))},_off:function(t,e,i){var n,o,s;if(this._events&&(n=this._events[t]))if(1===arguments.length){if(this._firingCount)for(o=0,s=n.length;o<s;o++)n[o].fn=u;delete this._events[t]}else"function"!=typeof e?console.warn("wrong listener type: "+typeof e):!1!==(e=this._listens(t,e,i))&&(i=n[e],this._firingCount&&(i.fn=u,this._events[t]=n=n.slice()),n.splice(e,1))},fire:function(t,e,i){if(this.listens(t,i)){var n=l({},e,{type:t,target:this,sourceTarget:e&&e.sourceTarget||this});if(this._events){var o=this._events[t];if(o){this._firingCount=this._firingCount+1||1;for(var s=0,r=o.length;s<r;s++){var a=o[s],h=a.fn;a.once&&this.off(t,h,a.ctx),h.call(a.ctx||this,n)}this._firingCount--}}i&&this._propagateEvent(n)}return this},listens:function(t,e,i,n){"string"!=typeof t&&console.warn('"string" type argument expected');var o=e,s=("function"!=typeof e&&(n=!!e,i=o=void 0),this._events&&this._events[t]);if(s&&s.length&&!1!==this._listens(t,o,i))return!0;if(n)for(var r in this._eventParents)if(this._eventParents[r].listens(t,e,i,n))return!0;return!1},_listens:function(t,e,i){if(this._events){var n=this._events[t]||[];if(!e)return!!n.length;i===this&&(i=void 0);for(var o=0,s=n.length;o<s;o++)if(n[o].fn===e&&n[o].ctx===i)return o}return!1},once:function(t,e,i){if("object"==typeof t)for(var n in t)this._on(n,t[n],e,!0);else for(var o=0,s=(t=F(t)).length;o<s;o++)this._on(t[o],e,i,!0);return this},addEventParent:function(t){return this._eventParents=this._eventParents||{},this._eventParents[h(t)]=t,this},removeEventParent:function(t){return this._eventParents&&delete this._eventParents[h(t)],this},_propagateEvent:function(t){for(var e in this._eventParents)this._eventParents[e].fire(t.type,l({layer:t.target,propagatedFrom:t.target},t),!0)}},it=(e.addEventListener=e.on,e.removeEventListener=e.clearAllEventListeners=e.off,e.addOneTimeEventListener=e.once,e.fireEvent=e.fire,e.hasEventListeners=e.listens,et.extend(e));function p(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e}var nt=Math.trunc||function(t){return 0<t?Math.floor(t):Math.ceil(t)};function m(t,e,i){return t instanceof p?t:d(t)?new p(t[0],t[1]):null==t?t:"object"==typeof t&&"x"in t&&"y"in t?new p(t.x,t.y):new p(t,e,i)}function f(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n<o;n++)this.extend(i[n])}function _(t,e){return!t||t instanceof f?t:new f(t,e)}function s(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n<o;n++)this.extend(i[n])}function g(t,e){return t instanceof s?t:new s(t,e)}function v(t,e,i){if(isNaN(t)||isNaN(e))throw new Error("Invalid LatLng object: ("+t+", "+e+")");this.lat=+t,this.lng=+e,void 0!==i&&(this.alt=+i)}function w(t,e,i){return t instanceof v?t:d(t)&&"object"!=typeof t[0]?3===t.length?new v(t[0],t[1],t[2]):2===t.length?new v(t[0],t[1]):null:null==t?t:"object"==typeof t&&"lat"in t?new v(t.lat,"lng"in t?t.lng:t.lon,t.alt):void 0===e?null:new v(t,e,i)}p.prototype={clone:function(){return new p(this.x,this.y)},add:function(t){return this.clone()._add(m(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(m(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new p(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new p(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=nt(this.x),this.y=nt(this.y),this},distanceTo:function(t){var e=(t=m(t)).x-this.x,t=t.y-this.y;return Math.sqrt(e*e+t*t)},equals:function(t){return(t=m(t)).x===this.x&&t.y===this.y},contains:function(t){return t=m(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+i(this.x)+", "+i(this.y)+")"}},f.prototype={extend:function(t){var e,i;if(t){if(t instanceof p||"number"==typeof t[0]||"x"in t)e=i=m(t);else if(e=(t=_(t)).min,i=t.max,!e||!i)return this;this.min||this.max?(this.min.x=Math.min(e.x,this.min.x),this.max.x=Math.max(i.x,this.max.x),this.min.y=Math.min(e.y,this.min.y),this.max.y=Math.max(i.y,this.max.y)):(this.min=e.clone(),this.max=i.clone())}return this},getCenter:function(t){return m((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return m(this.min.x,this.max.y)},getTopRight:function(){return m(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return(t=("number"==typeof t[0]||t instanceof p?m:_)(t))instanceof f?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>=e.x&&n.x<=i.x,t=t.y>=e.y&&n.y<=i.y;return o&&t},overlaps:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>e.x&&n.x<i.x,t=t.y>e.y&&n.y<i.y;return o&&t},isValid:function(){return!(!this.min||!this.max)},pad:function(t){var e=this.min,i=this.max,n=Math.abs(e.x-i.x)*t,t=Math.abs(e.y-i.y)*t;return _(m(e.x-n,e.y-t),m(i.x+n,i.y+t))},equals:function(t){return!!t&&(t=_(t),this.min.equals(t.getTopLeft())&&this.max.equals(t.getBottomRight()))}},s.prototype={extend:function(t){var e,i,n=this._southWest,o=this._northEast;if(t instanceof v)i=e=t;else{if(!(t instanceof s))return t?this.extend(w(t)||g(t)):this;if(e=t._southWest,i=t._northEast,!e||!i)return this}return n||o?(n.lat=Math.min(e.lat,n.lat),n.lng=Math.min(e.lng,n.lng),o.lat=Math.max(i.lat,o.lat),o.lng=Math.max(i.lng,o.lng)):(this._southWest=new v(e.lat,e.lng),this._northEast=new v(i.lat,i.lng)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,t=Math.abs(e.lng-i.lng)*t;return new s(new v(e.lat-n,e.lng-t),new v(i.lat+n,i.lng+t))},getCenter:function(){return new v((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new v(this.getNorth(),this.getWest())},getSouthEast:function(){return new v(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t=("number"==typeof t[0]||t instanceof v||"lat"in t?w:g)(t);var e,i,n=this._southWest,o=this._northEast;return t instanceof s?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=o.lat&&e.lng>=n.lng&&i.lng<=o.lng},intersects:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>=e.lat&&n.lat<=i.lat,t=t.lng>=e.lng&&n.lng<=i.lng;return o&&t},overlaps:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>e.lat&&n.lat<i.lat,t=t.lng>e.lng&&n.lng<i.lng;return o&&t},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t,e){return!!t&&(t=g(t),this._southWest.equals(t.getSouthWest(),e)&&this._northEast.equals(t.getNorthEast(),e))},isValid:function(){return!(!this._southWest||!this._northEast)}};var ot={latLngToPoint:function(t,e){t=this.projection.project(t),e=this.scale(e);return this.transformation._transform(t,e)},pointToLatLng:function(t,e){e=this.scale(e),t=this.transformation.untransform(t,e);return this.projection.unproject(t)},project:function(t){return this.projection.project(t)},unproject:function(t){return this.projection.unproject(t)},scale:function(t){return 256*Math.pow(2,t)},zoom:function(t){return Math.log(t/256)/Math.LN2},getProjectedBounds:function(t){var e;return this.infinite?null:(e=this.projection.bounds,t=this.scale(t),new f(this.transformation.transform(e.min,t),this.transformation.transform(e.max,t)))},infinite:!(v.prototype={equals:function(t,e){return!!t&&(t=w(t),Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng))<=(void 0===e?1e-9:e))},toString:function(t){return"LatLng("+i(this.lat,t)+", "+i(this.lng,t)+")"},distanceTo:function(t){return st.distance(this,w(t))},wrap:function(){return st.wrapLatLng(this)},toBounds:function(t){var t=180*t/40075017,e=t/Math.cos(Math.PI/180*this.lat);return g([this.lat-t,this.lng-e],[this.lat+t,this.lng+e])},clone:function(){return new v(this.lat,this.lng,this.alt)}}),wrapLatLng:function(t){var e=this.wrapLng?H(t.lng,this.wrapLng,!0):t.lng;return new v(this.wrapLat?H(t.lat,this.wrapLat,!0):t.lat,e,t.alt)},wrapLatLngBounds:function(t){var e=t.getCenter(),i=this.wrapLatLng(e),n=e.lat-i.lat,e=e.lng-i.lng;return 0==n&&0==e?t:(i=t.getSouthWest(),t=t.getNorthEast(),new s(new v(i.lat-n,i.lng-e),new v(t.lat-n,t.lng-e)))}},st=l({},ot,{wrapLng:[-180,180],R:6371e3,distance:function(t,e){var i=Math.PI/180,n=t.lat*i,o=e.lat*i,s=Math.sin((e.lat-t.lat)*i/2),e=Math.sin((e.lng-t.lng)*i/2),t=s*s+Math.cos(n)*Math.cos(o)*e*e,i=2*Math.atan2(Math.sqrt(t),Math.sqrt(1-t));return this.R*i}}),rt=6378137,rt={R:rt,MAX_LATITUDE:85.0511287798,project:function(t){var e=Math.PI/180,i=this.MAX_LATITUDE,i=Math.max(Math.min(i,t.lat),-i),i=Math.sin(i*e);return new p(this.R*t.lng*e,this.R*Math.log((1+i)/(1-i))/2)},unproject:function(t){var e=180/Math.PI;return new v((2*Math.atan(Math.exp(t.y/this.R))-Math.PI/2)*e,t.x*e/this.R)},bounds:new f([-(rt=rt*Math.PI),-rt],[rt,rt])};function at(t,e,i,n){d(t)?(this._a=t[0],this._b=t[1],this._c=t[2],this._d=t[3]):(this._a=t,this._b=e,this._c=i,this._d=n)}function ht(t,e,i,n){return new at(t,e,i,n)}at.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return t.x=(e=e||1)*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return new p((t.x/(e=e||1)-this._b)/this._a,(t.y/e-this._d)/this._c)}};var lt=l({},st,{code:"EPSG:3857",projection:rt,transformation:ht(lt=.5/(Math.PI*rt.R),.5,-lt,.5)}),ut=l({},lt,{code:"EPSG:900913"});function ct(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}function dt(t,e){for(var i,n,o,s,r="",a=0,h=t.length;a<h;a++){for(i=0,n=(o=t[a]).length;i<n;i++)r+=(i?"L":"M")+(s=o[i]).x+" "+s.y;r+=e?b.svg?"z":"x":""}return r||"M0 0"}var _t=document.documentElement.style,pt="ActiveXObject"in window,mt=pt&&!document.addEventListener,n="msLaunchUri"in navigator&&!("documentMode"in document),ft=y("webkit"),gt=y("android"),vt=y("android 2")||y("android 3"),yt=parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1],10),yt=gt&&y("Google")&&yt<537&&!("AudioNode"in window),xt=!!window.opera,wt=!n&&y("chrome"),bt=y("gecko")&&!ft&&!xt&&!pt,Pt=!wt&&y("safari"),Lt=y("phantom"),o="OTransition"in _t,Tt=0===navigator.platform.indexOf("Win"),Mt=pt&&"transition"in _t,zt="WebKitCSSMatrix"in window&&"m11"in new window.WebKitCSSMatrix&&!vt,_t="MozPerspective"in _t,Ct=!window.L_DISABLE_3D&&(Mt||zt||_t)&&!o&&!Lt,Zt="undefined"!=typeof orientation||y("mobile"),St=Zt&&ft,Et=Zt&&zt,kt=!window.PointerEvent&&window.MSPointerEvent,Ot=!(!window.PointerEvent&&!kt),At="ontouchstart"in window||!!window.TouchEvent,Bt=!window.L_NO_TOUCH&&(At||Ot),It=Zt&&xt,Rt=Zt&&bt,Nt=1<(window.devicePixelRatio||window.screen.deviceXDPI/window.screen.logicalXDPI),Dt=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",u,e),window.removeEventListener("testPassiveEventSupport",u,e)}catch(t){}return t}(),jt=!!document.createElement("canvas").getContext,Ht=!(!document.createElementNS||!ct("svg").createSVGRect),Wt=!!Ht&&((Wt=document.createElement("div")).innerHTML="<svg/>","http://www.w3.org/2000/svg"===(Wt.firstChild&&Wt.firstChild.namespaceURI));function y(t){return 0<=navigator.userAgent.toLowerCase().indexOf(t)}var b={ie:pt,ielt9:mt,edge:n,webkit:ft,android:gt,android23:vt,androidStock:yt,opera:xt,chrome:wt,gecko:bt,safari:Pt,phantom:Lt,opera12:o,win:Tt,ie3d:Mt,webkit3d:zt,gecko3d:_t,any3d:Ct,mobile:Zt,mobileWebkit:St,mobileWebkit3d:Et,msPointer:kt,pointer:Ot,touch:Bt,touchNative:At,mobileOpera:It,mobileGecko:Rt,retina:Nt,passiveEvents:Dt,canvas:jt,svg:Ht,vml:!Ht&&function(){try{var t=document.createElement("div"),e=(t.innerHTML='<v:shape adj="1"/>',t.firstChild);return e.style.behavior="url(#default#VML)",e&&"object"==typeof e.adj}catch(t){return!1}}(),inlineSvg:Wt,mac:0===navigator.platform.indexOf("Mac"),linux:0===navigator.platform.indexOf("Linux")},Ft=b.msPointer?"MSPointerDown":"pointerdown",Ut=b.msPointer?"MSPointerMove":"pointermove",Vt=b.msPointer?"MSPointerUp":"pointerup",qt=b.msPointer?"MSPointerCancel":"pointercancel",Gt={touchstart:Ft,touchmove:Ut,touchend:Vt,touchcancel:qt},Kt={touchstart:function(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&O(e);ee(t,e)},touchmove:ee,touchend:ee,touchcancel:ee},Yt={},Xt=!1;function Jt(t,e,i){return"touchstart"!==e||Xt||(document.addEventListener(Ft,$t,!0),document.addEventListener(Ut,Qt,!0),document.addEventListener(Vt,te,!0),document.addEventListener(qt,te,!0),Xt=!0),Kt[e]?(i=Kt[e].bind(this,i),t.addEventListener(Gt[e],i,!1),i):(console.warn("wrong event specified:",e),u)}function $t(t){Yt[t.pointerId]=t}function Qt(t){Yt[t.pointerId]&&(Yt[t.pointerId]=t)}function te(t){delete Yt[t.pointerId]}function ee(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){for(var i in e.touches=[],Yt)e.touches.push(Yt[i]);e.changedTouches=[e],t(e)}}var ie=200;function ne(t,i){t.addEventListener("dblclick",i);var n,o=0;function e(t){var e;1!==t.detail?n=t.detail:"mouse"===t.pointerType||t.sourceCapabilities&&!t.sourceCapabilities.firesTouchEvents||((e=Ne(t)).some(function(t){return t instanceof HTMLLabelElement&&t.attributes.for})&&!e.some(function(t){return t instanceof HTMLInputElement||t instanceof HTMLSelectElement})||((e=Date.now())-o<=ie?2===++n&&i(function(t){var e,i,n={};for(i in t)e=t[i],n[i]=e&&e.bind?e.bind(t):e;return(t=n).type="dblclick",n.detail=2,n.isTrusted=!1,n._simulated=!0,n}(t)):n=1,o=e))}return t.addEventListener("click",e),{dblclick:i,simDblclick:e}}var oe,se,re,ae,he,le,ue=we(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),ce=we(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),de="webkitTransition"===ce||"OTransition"===ce?ce+"End":"transitionend";function _e(t){return"string"==typeof t?document.getElementById(t):t}function pe(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];return"auto"===(i=i&&"auto"!==i||!document.defaultView?i:(t=document.defaultView.getComputedStyle(t,null))?t[e]:null)?null:i}function P(t,e,i){t=document.createElement(t);return t.className=e||"",i&&i.appendChild(t),t}function T(t){var e=t.parentNode;e&&e.removeChild(t)}function me(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function fe(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function ge(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function ve(t,e){return void 0!==t.classList?t.classList.contains(e):0<(t=xe(t)).length&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(t)}function M(t,e){var i;if(void 0!==t.classList)for(var n=F(e),o=0,s=n.length;o<s;o++)t.classList.add(n[o]);else ve(t,e)||ye(t,((i=xe(t))?i+" ":"")+e)}function z(t,e){void 0!==t.classList?t.classList.remove(e):ye(t,W((" "+xe(t)+" ").replace(" "+e+" "," ")))}function ye(t,e){void 0===t.className.baseVal?t.className=e:t.className.baseVal=e}function xe(t){return void 0===(t=t.correspondingElement?t.correspondingElement:t).className.baseVal?t.className:t.className.baseVal}function C(t,e){if("opacity"in t.style)t.style.opacity=e;else if("filter"in t.style){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(t){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"}}function we(t){for(var e=document.documentElement.style,i=0;i<t.length;i++)if(t[i]in e)return t[i];return!1}function be(t,e,i){e=e||new p(0,0);t.style[ue]=(b.ie3d?"translate("+e.x+"px,"+e.y+"px)":"translate3d("+e.x+"px,"+e.y+"px,0)")+(i?" scale("+i+")":"")}function Z(t,e){t._leaflet_pos=e,b.any3d?be(t,e):(t.style.left=e.x+"px",t.style.top=e.y+"px")}function Pe(t){return t._leaflet_pos||new p(0,0)}function Le(){S(window,"dragstart",O)}function Te(){k(window,"dragstart",O)}function Me(t){for(;-1===t.tabIndex;)t=t.parentNode;t.style&&(ze(),le=(he=t).style.outlineStyle,t.style.outlineStyle="none",S(window,"keydown",ze))}function ze(){he&&(he.style.outlineStyle=le,le=he=void 0,k(window,"keydown",ze))}function Ce(t){for(;!((t=t.parentNode).offsetWidth&&t.offsetHeight||t===document.body););return t}function Ze(t){var e=t.getBoundingClientRect();return{x:e.width/t.offsetWidth||1,y:e.height/t.offsetHeight||1,boundingClientRect:e}}ae="onselectstart"in document?(re=function(){S(window,"selectstart",O)},function(){k(window,"selectstart",O)}):(se=we(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]),re=function(){var t;se&&(t=document.documentElement.style,oe=t[se],t[se]="none")},function(){se&&(document.documentElement.style[se]=oe,oe=void 0)});pt={__proto__:null,TRANSFORM:ue,TRANSITION:ce,TRANSITION_END:de,get:_e,getStyle:pe,create:P,remove:T,empty:me,toFront:fe,toBack:ge,hasClass:ve,addClass:M,removeClass:z,setClass:ye,getClass:xe,setOpacity:C,testProp:we,setTransform:be,setPosition:Z,getPosition:Pe,get disableTextSelection(){return re},get enableTextSelection(){return ae},disableImageDrag:Le,enableImageDrag:Te,preventOutline:Me,restoreOutline:ze,getSizedParentNode:Ce,getScale:Ze};function S(t,e,i,n){if(e&&"object"==typeof e)for(var o in e)ke(t,o,e[o],i);else for(var s=0,r=(e=F(e)).length;s<r;s++)ke(t,e[s],i,n);return this}var E="_leaflet_events";function k(t,e,i,n){if(1===arguments.length)Se(t),delete t[E];else if(e&&"object"==typeof e)for(var o in e)Oe(t,o,e[o],i);else if(e=F(e),2===arguments.length)Se(t,function(t){return-1!==G(e,t)});else for(var s=0,r=e.length;s<r;s++)Oe(t,e[s],i,n);return this}function Se(t,e){for(var i in t[E]){var n=i.split(/\d/)[0];e&&!e(n)||Oe(t,n,null,null,i)}}var Ee={mouseenter:"mouseover",mouseleave:"mouseout",wheel:!("onwheel"in window)&&"mousewheel"};function ke(e,t,i,n){var o,s,r=t+h(i)+(n?"_"+h(n):"");e[E]&&e[E][r]||(s=o=function(t){return i.call(n||e,t||window.event)},!b.touchNative&&b.pointer&&0===t.indexOf("touch")?o=Jt(e,t,o):b.touch&&"dblclick"===t?o=ne(e,o):"addEventListener"in e?"touchstart"===t||"touchmove"===t||"wheel"===t||"mousewheel"===t?e.addEventListener(Ee[t]||t,o,!!b.passiveEvents&&{passive:!1}):"mouseenter"===t||"mouseleave"===t?e.addEventListener(Ee[t],o=function(t){t=t||window.event,We(e,t)&&s(t)},!1):e.addEventListener(t,s,!1):e.attachEvent("on"+t,o),e[E]=e[E]||{},e[E][r]=o)}function Oe(t,e,i,n,o){o=o||e+h(i)+(n?"_"+h(n):"");var s,r,i=t[E]&&t[E][o];i&&(!b.touchNative&&b.pointer&&0===e.indexOf("touch")?(n=t,r=i,Gt[s=e]?n.removeEventListener(Gt[s],r,!1):console.warn("wrong event specified:",s)):b.touch&&"dblclick"===e?(n=i,(r=t).removeEventListener("dblclick",n.dblclick),r.removeEventListener("click",n.simDblclick)):"removeEventListener"in t?t.removeEventListener(Ee[e]||e,i,!1):t.detachEvent("on"+e,i),t[E][o]=null)}function Ae(t){return t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped=!0:t.cancelBubble=!0,this}function Be(t){return ke(t,"wheel",Ae),this}function Ie(t){return S(t,"mousedown touchstart dblclick contextmenu",Ae),t._leaflet_disable_click=!0,this}function O(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this}function Re(t){return O(t),Ae(t),this}function Ne(t){if(t.composedPath)return t.composedPath();for(var e=[],i=t.target;i;)e.push(i),i=i.parentNode;return e}function De(t,e){var i,n;return e?(n=(i=Ze(e)).boundingClientRect,new p((t.clientX-n.left)/i.x-e.clientLeft,(t.clientY-n.top)/i.y-e.clientTop)):new p(t.clientX,t.clientY)}var je=b.linux&&b.chrome?window.devicePixelRatio:b.mac?3*window.devicePixelRatio:0<window.devicePixelRatio?2*window.devicePixelRatio:1;function He(t){return b.edge?t.wheelDeltaY/2:t.deltaY&&0===t.deltaMode?-t.deltaY/je:t.deltaY&&1===t.deltaMode?20*-t.deltaY:t.deltaY&&2===t.deltaMode?60*-t.deltaY:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?20*-t.detail:t.detail?t.detail/-32765*60:0}function We(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(t){return!1}return i!==t}var mt={__proto__:null,on:S,off:k,stopPropagation:Ae,disableScrollPropagation:Be,disableClickPropagation:Ie,preventDefault:O,stop:Re,getPropagationPath:Ne,getMousePosition:De,getWheelDelta:He,isExternalTarget:We,addListener:S,removeListener:k},Fe=it.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Pe(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=x(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=1e3*this._duration;e<i?this._runFrame(this._easeOut(e/i),t):(this._runFrame(1),this._complete())},_runFrame:function(t,e){t=this._startPos.add(this._offset.multiplyBy(t));e&&t._round(),Z(this._el,t),this.fire("step")},_complete:function(){r(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),A=it.extend({options:{crs:lt,center:void 0,zoom:void 0,minZoom:void 0,maxZoom:void 0,layers:[],maxBounds:void 0,renderer:void 0,zoomAnimation:!0,zoomAnimationThreshold:4,fadeAnimation:!0,markerZoomAnimation:!0,transform3DLimit:8388608,zoomSnap:1,zoomDelta:1,trackResize:!0},initialize:function(t,e){e=c(this,e),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._sizeChanged=!0,this._initContainer(t),this._initLayout(),this._onResize=a(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),void 0!==e.zoom&&(this._zoom=this._limitZoom(e.zoom)),e.center&&void 0!==e.zoom&&this.setView(w(e.center),e.zoom,{reset:!0}),this.callInitHooks(),this._zoomAnimated=ce&&b.any3d&&!b.mobileOpera&&this.options.zoomAnimation,this._zoomAnimated&&(this._createAnimProxy(),S(this._proxy,de,this._catchTransitionEnd,this)),this._addLayers(this.options.layers)},setView:function(t,e,i){if((e=void 0===e?this._zoom:this._limitZoom(e),t=this._limitCenter(w(t),e,this.options.maxBounds),i=i||{},this._stop(),this._loaded&&!i.reset&&!0!==i)&&(void 0!==i.animate&&(i.zoom=l({animate:i.animate},i.zoom),i.pan=l({animate:i.animate,duration:i.duration},i.pan)),this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,i.zoom):this._tryAnimatedPan(t,i.pan)))return clearTimeout(this._sizeTimer),this;return this._resetView(t,e,i.pan&&i.pan.noMoveStart),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=t,this)},zoomIn:function(t,e){return t=t||(b.any3d?this.options.zoomDelta:1),this.setZoom(this._zoom+t,e)},zoomOut:function(t,e){return t=t||(b.any3d?this.options.zoomDelta:1),this.setZoom(this._zoom-t,e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),o=this.getSize().divideBy(2),t=(t instanceof p?t:this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1-1/n),n=this.containerPointToLatLng(o.add(t));return this.setView(n,e,{zoom:i})},_getBoundsCenterZoom:function(t,e){e=e||{},t=t.getBounds?t.getBounds():g(t);var i=m(e.paddingTopLeft||e.padding||[0,0]),n=m(e.paddingBottomRight||e.padding||[0,0]),o=this.getBoundsZoom(t,!1,i.add(n));return(o="number"==typeof e.maxZoom?Math.min(e.maxZoom,o):o)===1/0?{center:t.getCenter(),zoom:o}:(e=n.subtract(i).divideBy(2),n=this.project(t.getSouthWest(),o),i=this.project(t.getNorthEast(),o),{center:this.unproject(n.add(i).divideBy(2).add(e),o),zoom:o})},fitBounds:function(t,e){if((t=g(t)).isValid())return t=this._getBoundsCenterZoom(t,e),this.setView(t.center,t.zoom,e);throw new Error("Bounds are not valid.")},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t,e){var i;return e=e||{},(t=m(t).round()).x||t.y?(!0===e.animate||this.getSize().contains(t)?(this._panAnim||(this._panAnim=new Fe,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),!1!==e.animate?(M(this._mapPane,"leaflet-pan-anim"),i=this._getMapPanePos().subtract(t).round(),this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)):(this._rawPanBy(t),this.fire("move").fire("moveend"))):this._resetView(this.unproject(this.project(this.getCenter()).add(t)),this.getZoom()),this):this.fire("moveend")},flyTo:function(n,o,t){if(!1===(t=t||{}).animate||!b.any3d)return this.setView(n,o,t);this._stop();var s=this.project(this.getCenter()),r=this.project(n),e=this.getSize(),a=this._zoom,h=(n=w(n),o=void 0===o?a:o,Math.max(e.x,e.y)),i=h*this.getZoomScale(a,o),l=r.distanceTo(s)||1,u=1.42,c=u*u;function d(t){t=(i*i-h*h+(t?-1:1)*c*c*l*l)/(2*(t?i:h)*c*l),t=Math.sqrt(t*t+1)-t;return t<1e-9?-18:Math.log(t)}function _(t){return(Math.exp(t)-Math.exp(-t))/2}function p(t){return(Math.exp(t)+Math.exp(-t))/2}var m=d(0);function f(t){return h*(p(m)*(_(t=m+u*t)/p(t))-_(m))/c}var g=Date.now(),v=(d(1)-m)/u,y=t.duration?1e3*t.duration:1e3*v*.8;return this._moveStart(!0,t.noMoveStart),function t(){var e=(Date.now()-g)/y,i=(1-Math.pow(1-e,1.5))*v;e<=1?(this._flyToFrame=x(t,this),this._move(this.unproject(s.add(r.subtract(s).multiplyBy(f(i)/l)),a),this.getScaleZoom(h/(e=i,h*(p(m)/p(m+u*e))),a),{flyTo:!0})):this._move(n,o)._moveEnd(!0)}.call(this),this},flyToBounds:function(t,e){t=this._getBoundsCenterZoom(t,e);return this.flyTo(t.center,t.zoom,e)},setMaxBounds:function(t){return t=g(t),this.listens("moveend",this._panInsideMaxBounds)&&this.off("moveend",this._panInsideMaxBounds),t.isValid()?(this.options.maxBounds=t,this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds)):(this.options.maxBounds=null,this)},setMinZoom:function(t){var e=this.options.minZoom;return this.options.minZoom=t,this._loaded&&e!==t&&(this.fire("zoomlevelschange"),this.getZoom()<this.options.minZoom)?this.setZoom(t):this},setMaxZoom:function(t){var e=this.options.maxZoom;return this.options.maxZoom=t,this._loaded&&e!==t&&(this.fire("zoomlevelschange"),this.getZoom()>this.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),t=this._limitCenter(i,this._zoom,g(t));return i.equals(t)||this.panTo(t,e),this._enforcingBounds=!1,this},panInside:function(t,e){var i=m((e=e||{}).paddingTopLeft||e.padding||[0,0]),n=m(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),t=this.project(t),s=this.getPixelBounds(),i=_([s.min.add(i),s.max.subtract(n)]),s=i.getSize();return i.contains(t)||(this._enforcingBounds=!0,n=t.subtract(i.getCenter()),i=i.extend(t).getSize().subtract(s),o.x+=n.x<0?-i.x:i.x,o.y+=n.y<0?-i.y:i.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1),this},invalidateSize:function(t){if(!this._loaded)return this;t=l({animate:!1,pan:!0},!0===t?{animate:!0}:t);var e=this.getSize(),i=(this._sizeChanged=!0,this._lastCenter=null,this.getSize()),n=e.divideBy(2).round(),o=i.divideBy(2).round(),n=n.subtract(o);return n.x||n.y?(t.animate&&t.pan?this.panBy(n):(t.pan&&this._rawPanBy(n),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){var e,i;return t=this._locateOptions=l({timeout:1e4,watch:!1},t),"geolocation"in navigator?(e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this),t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t)):this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e;this._container._leaflet_id&&(e=t.code,t=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout"),this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+t+"."}))},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e,i,n=new v(t.coords.latitude,t.coords.longitude),o=n.toBounds(2*t.coords.accuracy),s=this._locateOptions,r=(s.setView&&(e=this.getBoundsZoom(o),this.setView(n,s.maxZoom?Math.min(e,s.maxZoom):e)),{latlng:n,bounds:o,timestamp:t.timestamp});for(i in t.coords)"number"==typeof t.coords[i]&&(r[i]=t.coords[i]);this.fire("locationfound",r)}},addHandler:function(t,e){return e&&(e=this[t]=new e(this),this._handlers.push(e),this.options[t]&&e.enable()),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}for(var t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),T(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(r(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload"),this._layers)this._layers[t].remove();for(t in this._panes)T(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){e=P("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),e||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new s(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=g(t),i=m(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),t=t.getSouthEast(),i=this.getSize().subtract(i),t=_(this.project(t,n),this.project(r,n)).getSize(),r=b.any3d?this.options.zoomSnap:1,a=i.x/t.x,i=i.y/t.y,t=e?Math.max(a,i):Math.min(a,i),n=this.getScaleZoom(t,n);return r&&(n=Math.round(n/(r/100))*(r/100),n=e?Math.ceil(n/r)*r:Math.floor(n/r)*r),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new p(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){t=this._getTopLeftPoint(t,e);return new f(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=void 0===e?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs,t=(e=void 0===e?this._zoom:e,i.zoom(t*i.scale(e)));return isNaN(t)?1/0:t},project:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.latLngToPoint(w(t),e)},unproject:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.pointToLatLng(m(t),e)},layerPointToLatLng:function(t){t=m(t).add(this.getPixelOrigin());return this.unproject(t)},latLngToLayerPoint:function(t){return this.project(w(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(w(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(g(t))},distance:function(t,e){return this.options.crs.distance(w(t),w(e))},containerPointToLayerPoint:function(t){return m(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return m(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){t=this.containerPointToLayerPoint(m(t));return this.layerPointToLatLng(t)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(w(t)))},mouseEventToContainerPoint:function(t){return De(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){t=this._container=_e(t);if(!t)throw new Error("Map container not found.");if(t._leaflet_id)throw new Error("Map container is already initialized.");S(t,"scroll",this._onScroll,this),this._containerId=h(t)},_initLayout:function(){var t=this._container,e=(this._fadeAnimated=this.options.fadeAnimation&&b.any3d,M(t,"leaflet-container"+(b.touch?" leaflet-touch":"")+(b.retina?" leaflet-retina":"")+(b.ielt9?" leaflet-oldie":"")+(b.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":"")),pe(t,"position"));"absolute"!==e&&"relative"!==e&&"fixed"!==e&&"sticky"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),Z(this._mapPane,new p(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(M(t.markerPane,"leaflet-zoom-hide"),M(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){Z(this._mapPane,new p(0,0));var n=!this._loaded,o=(this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset"),this._zoom!==e);this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){void 0===e&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return r(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Z(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={};var e=t?k:S;e((this._targets[h(this._container)]=this)._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),b.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){r(this._resizeRequest),this._resizeRequest=x(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i,n=[],o="mouseout"===e||"mouseover"===e,s=t.target||t.srcElement,r=!1;s;){if((i=this._targets[h(s)])&&("click"===e||"preclick"===e)&&this._draggableMoved(i)){r=!0;break}if(i&&i.listens(e,!0)){if(o&&!We(s,t))break;if(n.push(i),o)break}if(s===this._container)break;s=s.parentNode}return n=n.length||r||o||!this.listens(e,!0)?n:[this]},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e,i=t.target||t.srcElement;!this._loaded||i._leaflet_disable_events||"click"===t.type&&this._isClickDisabled(i)||("mousedown"===(e=t.type)&&Me(i),this._fireDOMEvent(t,e))},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){"click"===t.type&&((a=l({},t)).type="preclick",this._fireDOMEvent(a,a.type,i));var n=this._findEventTargets(t,e);if(i){for(var o=[],s=0;s<i.length;s++)i[s].listens(e,!0)&&o.push(i[s]);n=o.concat(n)}if(n.length){"contextmenu"===e&&O(t);var r,a=n[0],h={originalEvent:t};for("keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type&&(r=a.getLatLng&&(!a._radius||a._radius<=10),h.containerPoint=r?this.latLngToContainerPoint(a.getLatLng()):this.mouseEventToContainerPoint(t),h.layerPoint=this.containerPointToLayerPoint(h.containerPoint),h.latlng=r?a.getLatLng():this.layerPointToLatLng(h.layerPoint)),s=0;s<n.length;s++)if(n[s].fire(e,h,!0),h.originalEvent._stopped||!1===n[s].options.bubblingMouseEvents&&-1!==G(this._mouseEvents,e))return}},_draggableMoved:function(t){return(t=t.dragging&&t.dragging.enabled()?t:this).dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved()},_clearHandlers:function(){for(var t=0,e=this._handlers.length;t<e;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,{target:this}):this.on("load",t,e),this},_getMapPanePos:function(){return Pe(this._mapPane)||new p(0,0)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(t,e){return(t&&void 0!==e?this._getNewPixelOrigin(t,e):this.getPixelOrigin()).subtract(this._getMapPanePos())},_getNewPixelOrigin:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._add(this._getMapPanePos())._round()},_latLngToNewLayerPoint:function(t,e,i){i=this._getNewPixelOrigin(i,e);return this.project(t,e)._subtract(i)},_latLngBoundsToNewLayerBounds:function(t,e,i){i=this._getNewPixelOrigin(i,e);return _([this.project(t.getSouthWest(),e)._subtract(i),this.project(t.getNorthWest(),e)._subtract(i),this.project(t.getSouthEast(),e)._subtract(i),this.project(t.getNorthEast(),e)._subtract(i)])},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){var n,o;return!i||(n=this.project(t,e),o=this.getSize().divideBy(2),o=new f(n.subtract(o),n.add(o)),o=this._getBoundsOffset(o,i,e),Math.abs(o.x)<=1&&Math.abs(o.y)<=1)?t:this.unproject(n.add(o),e)},_limitOffset:function(t,e){var i;return e?(i=new f((i=this.getPixelBounds()).min.add(t),i.max.add(t)),t.add(this._getBoundsOffset(i,e))):t},_getBoundsOffset:function(t,e,i){e=_(this.project(e.getNorthEast(),i),this.project(e.getSouthWest(),i)),i=e.min.subtract(t.min),e=e.max.subtract(t.max);return new p(this._rebound(i.x,-e.x),this._rebound(i.y,-e.y))},_rebound:function(t,e){return 0<t+e?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom(),n=b.any3d?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(e,Math.min(i,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){z(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){t=this._getCenterOffset(t)._trunc();return!(!0!==(e&&e.animate)&&!this.getSize().contains(t))&&(this.panBy(t,e),!0)},_createAnimProxy:function(){var t=this._proxy=P("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(t){var e=ue,i=this._proxy.style[e];be(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),i===this._proxy.style[e]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){T(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();be(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&0<=t.propertyName.indexOf("transform")&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(!this._animatingZoom){if(i=i||{},!this._zoomAnimated||!1===i.animate||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),n=this._getCenterOffset(t)._divideBy(1-1/n);if(!0!==i.animate&&!this.getSize().contains(n))return!1;x(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this)}return!0},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,M(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&z(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function Ue(t){return new B(t)}var B=et.extend({options:{position:"topright"},initialize:function(t){c(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),t=t._controlCorners[i];return M(e,"leaflet-control"),-1!==i.indexOf("bottom")?t.insertBefore(e,t.firstChild):t.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map&&(T(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null),this},_refocusOnMap:function(t){this._map&&t&&0<t.screenX&&0<t.screenY&&this._map.getContainer().focus()}}),Ve=(A.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var i=this._controlCorners={},n="leaflet-",o=this._controlContainer=P("div",n+"control-container",this._container);function t(t,e){i[t+e]=P("div",n+t+" "+n+e,o)}t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)T(this._controlCorners[t]);T(this._controlContainer),delete this._controlCorners,delete this._controlContainer}}),B.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,i,n){return i<n?-1:n<i?1:0}},initialize:function(t,e,i){for(var n in c(this,i),this._layerControlInputs=[],this._layers=[],this._lastZIndex=0,this._handlingClick=!1,this._preventClick=!1,t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){this._initLayout(),this._update(),(this._map=t).on("zoomend",this._checkDisabledLayers,this);for(var e=0;e<this._layers.length;e++)this._layers[e].layer.on("add remove",this._onLayerChange,this);return this._container},addTo:function(t){return B.prototype.addTo.call(this,t),this._expandIfNotCollapsed()},onRemove:function(){this._map.off("zoomend",this._checkDisabledLayers,this);for(var t=0;t<this._layers.length;t++)this._layers[t].layer.off("add remove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._map?this._update():this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._map?this._update():this},removeLayer:function(t){t.off("add remove",this._onLayerChange,this);t=this._getLayer(h(t));return t&&this._layers.splice(this._layers.indexOf(t),1),this._map?this._update():this},expand:function(){M(this._container,"leaflet-control-layers-expanded"),this._section.style.height=null;var t=this._map.getSize().y-(this._container.offsetTop+50);return t<this._section.clientHeight?(M(this._section,"leaflet-control-layers-scrollbar"),this._section.style.height=t+"px"):z(this._section,"leaflet-control-layers-scrollbar"),this._checkDisabledLayers(),this},collapse:function(){return z(this._container,"leaflet-control-layers-expanded"),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=P("div",t),i=this.options.collapsed,n=(e.setAttribute("aria-haspopup",!0),Ie(e),Be(e),this._section=P("section",t+"-list")),o=(i&&(this._map.on("click",this.collapse,this),S(e,{mouseenter:this._expandSafely,mouseleave:this.collapse},this)),this._layersLink=P("a",t+"-toggle",e));o.href="#",o.title="Layers",o.setAttribute("role","button"),S(o,{keydown:function(t){13===t.keyCode&&this._expandSafely()},click:function(t){O(t),this._expandSafely()}},this),i||this.expand(),this._baseLayersList=P("div",t+"-base",n),this._separator=P("div",t+"-separator",n),this._overlaysList=P("div",t+"-overlays",n),e.appendChild(n)},_getLayer:function(t){for(var e=0;e<this._layers.length;e++)if(this._layers[e]&&h(this._layers[e].layer)===t)return this._layers[e]},_addLayer:function(t,e,i){this._map&&t.on("add remove",this._onLayerChange,this),this._layers.push({layer:t,name:e,overlay:i}),this.options.sortLayers&&this._layers.sort(a(function(t,e){return this.options.sortFunction(t.layer,e.layer,t.name,e.name)},this)),this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex)),this._expandIfNotCollapsed()},_update:function(){if(this._container){me(this._baseLayersList),me(this._overlaysList),this._layerControlInputs=[];for(var t,e,i,n=0,o=0;o<this._layers.length;o++)i=this._layers[o],this._addItem(i),e=e||i.overlay,t=t||!i.overlay,n+=i.overlay?0:1;this.options.hideSingleBase&&(this._baseLayersList.style.display=(t=t&&1<n)?"":"none"),this._separator.style.display=e&&t?"":"none"}return this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(h(t.target)),t=e.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;t&&this._map.fire(t,e)},_createRadioElement:function(t,e){t='<input type="radio" class="leaflet-control-layers-selector" name="'+t+'"'+(e?' checked="checked"':"")+"/>",e=document.createElement("div");return e.innerHTML=t,e.firstChild},_addItem:function(t){var e,i=document.createElement("label"),n=this._map.hasLayer(t.layer),n=(t.overlay?((e=document.createElement("input")).type="checkbox",e.className="leaflet-control-layers-selector",e.defaultChecked=n):e=this._createRadioElement("leaflet-base-layers_"+h(this),n),this._layerControlInputs.push(e),e.layerId=h(t.layer),S(e,"click",this._onInputClick,this),document.createElement("span")),o=(n.innerHTML=" "+t.name,document.createElement("span"));return i.appendChild(o),o.appendChild(e),o.appendChild(n),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(i),this._checkDisabledLayers(),i},_onInputClick:function(){if(!this._preventClick){var t,e,i=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=i.length-1;0<=s;s--)t=i[s],e=this._getLayer(t.layerId).layer,t.checked?n.push(e):t.checked||o.push(e);for(s=0;s<o.length;s++)this._map.hasLayer(o[s])&&this._map.removeLayer(o[s]);for(s=0;s<n.length;s++)this._map.hasLayer(n[s])||this._map.addLayer(n[s]);this._handlingClick=!1,this._refocusOnMap()}},_checkDisabledLayers:function(){for(var t,e,i=this._layerControlInputs,n=this._map.getZoom(),o=i.length-1;0<=o;o--)t=i[o],e=this._getLayer(t.layerId).layer,t.disabled=void 0!==e.options.minZoom&&n<e.options.minZoom||void 0!==e.options.maxZoom&&n>e.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section,e=(this._preventClick=!0,S(t,"click",O),this.expand(),this);setTimeout(function(){k(t,"click",O),e._preventClick=!1})}})),qe=B.extend({options:{position:"topleft",zoomInText:'<span aria-hidden="true">+</span>',zoomInTitle:"Zoom in",zoomOutText:'<span aria-hidden="true">−</span>',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=P("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoom<this._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta*(t.shiftKey?3:1))},_zoomOut:function(t){!this._disabled&&this._map._zoom>this._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){i=P("a",i,n);return i.innerHTML=t,i.href="#",i.title=e,i.setAttribute("role","button"),i.setAttribute("aria-label",e),Ie(i),S(i,"click",Re),S(i,"click",o,this),S(i,"click",this._refocusOnMap,this),i},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";z(this._zoomInButton,e),z(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),!this._disabled&&t._zoom!==t.getMinZoom()||(M(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),!this._disabled&&t._zoom!==t.getMaxZoom()||(M(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}}),Ge=(A.mergeOptions({zoomControl:!0}),A.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new qe,this.addControl(this.zoomControl))}),B.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=P("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=P("div",e,i)),t.imperial&&(this._iScale=P("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,t=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(t)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t);this._updateScale(this._mScale,e<1e3?e+" m":e/1e3+" km",e/t)},_updateImperial:function(t){var e,i,t=3.2808399*t;5280<t?(i=this._getRoundNum(e=t/5280),this._updateScale(this._iScale,i+" mi",i/e)):(i=this._getRoundNum(t),this._updateScale(this._iScale,i+" ft",i/t))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),t=t/e;return e*(t=10<=t?10:5<=t?5:3<=t?3:2<=t?2:1)}})),Ke=B.extend({options:{position:"bottomright",prefix:'<a href="https://leafletjs.com" title="A JavaScript library for interactive maps">'+(b.inlineSvg?'<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8" class="leaflet-attribution-flag"><path fill="#4C7BE1" d="M0 0h12v4H0z"/><path fill="#FFD500" d="M0 4h12v3H0z"/><path fill="#E0BC00" d="M0 7h12v1H0z"/></svg> ':"")+"Leaflet</a>"},initialize:function(t){c(this,t),this._attributions={}},onAdd:function(t){for(var e in(t.attributionControl=this)._container=P("div","leaflet-control-attribution"),Ie(this._container),t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t&&(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update()),this},removeAttribution:function(t){return t&&this._attributions[t]&&(this._attributions[t]--,this._update()),this},_update:function(){if(this._map){var t,e=[];for(t in this._attributions)this._attributions[t]&&e.push(t);var i=[];this.options.prefix&&i.push(this.options.prefix),e.length&&i.push(e.join(", ")),this._container.innerHTML=i.join(' <span aria-hidden="true">|</span> ')}}}),n=(A.mergeOptions({attributionControl:!0}),A.addInitHook(function(){this.options.attributionControl&&(new Ke).addTo(this)}),B.Layers=Ve,B.Zoom=qe,B.Scale=Ge,B.Attribution=Ke,Ue.layers=function(t,e,i){return new Ve(t,e,i)},Ue.zoom=function(t){return new qe(t)},Ue.scale=function(t){return new Ge(t)},Ue.attribution=function(t){return new Ke(t)},et.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled&&(this._enabled=!1,this.removeHooks()),this},enabled:function(){return!!this._enabled}})),ft=(n.addTo=function(t,e){return t.addHandler(e,this),this},{Events:e}),Ye=b.touch?"touchstart mousedown":"mousedown",Xe=it.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){c(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(S(this._dragStartTarget,Ye,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Xe._dragging===this&&this.finishDrag(!0),k(this._dragStartTarget,Ye,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){var e,i;this._enabled&&(this._moved=!1,ve(this._element,"leaflet-zoom-anim")||(t.touches&&1!==t.touches.length?Xe._dragging===this&&this.finishDrag():Xe._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((Xe._dragging=this)._preventOutline&&Me(this._element),Le(),re(),this._moving||(this.fire("down"),i=t.touches?t.touches[0]:t,e=Ce(this._element),this._startPoint=new p(i.clientX,i.clientY),this._startPos=Pe(this._element),this._parentScale=Ze(e),i="mousedown"===t.type,S(document,i?"mousemove":"touchmove",this._onMove,this),S(document,i?"mouseup":"touchend touchcancel",this._onUp,this)))))},_onMove:function(t){var e;this._enabled&&(t.touches&&1<t.touches.length?this._moved=!0:!(e=new p((e=t.touches&&1===t.touches.length?t.touches[0]:t).clientX,e.clientY)._subtract(this._startPoint)).x&&!e.y||Math.abs(e.x)+Math.abs(e.y)<this.options.clickTolerance||(e.x/=this._parentScale.x,e.y/=this._parentScale.y,O(t),this._moved||(this.fire("dragstart"),this._moved=!0,M(document.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,window.SVGElementInstance&&this._lastTarget instanceof window.SVGElementInstance&&(this._lastTarget=this._lastTarget.correspondingUseElement),M(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(e),this._moving=!0,this._lastEvent=t,this._updatePosition()))},_updatePosition:function(){var t={originalEvent:this._lastEvent};this.fire("predrag",t),Z(this._element,this._newPos),this.fire("drag",t)},_onUp:function(){this._enabled&&this.finishDrag()},finishDrag:function(t){z(document.body,"leaflet-dragging"),this._lastTarget&&(z(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null),k(document,"mousemove touchmove",this._onMove,this),k(document,"mouseup touchend touchcancel",this._onUp,this),Te(),ae();var e=this._moved&&this._moving;this._moving=!1,Xe._dragging=!1,e&&this.fire("dragend",{noInertia:t,distance:this._newPos.distanceTo(this._startPos)})}});function Je(t,e,i){for(var n,o,s,r,a,h,l,u=[1,4,2,8],c=0,d=t.length;c<d;c++)t[c]._code=si(t[c],e);for(s=0;s<4;s++){for(h=u[s],n=[],c=0,o=(d=t.length)-1;c<d;o=c++)r=t[c],a=t[o],r._code&h?a._code&h||((l=oi(a,r,h,e,i))._code=si(l,e),n.push(l)):(a._code&h&&((l=oi(a,r,h,e,i))._code=si(l,e),n.push(l)),n.push(r));t=n}return t}function $e(t,e){var i,n,o,s,r,a,h;if(!t||0===t.length)throw new Error("latlngs not passed");I(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);for(var l=w([0,0]),u=g(t),c=(u.getNorthWest().distanceTo(u.getSouthWest())*u.getNorthEast().distanceTo(u.getNorthWest())<1700&&(l=Qe(t)),t.length),d=[],_=0;_<c;_++){var p=w(t[_]);d.push(e.project(w([p.lat-l.lat,p.lng-l.lng])))}for(_=r=a=h=0,i=c-1;_<c;i=_++)n=d[_],o=d[i],s=n.y*o.x-o.y*n.x,a+=(n.x+o.x)*s,h+=(n.y+o.y)*s,r+=3*s;u=0===r?d[0]:[a/r,h/r],u=e.unproject(m(u));return w([u.lat+l.lat,u.lng+l.lng])}function Qe(t){for(var e=0,i=0,n=0,o=0;o<t.length;o++){var s=w(t[o]);e+=s.lat,i+=s.lng,n++}return w([e/n,i/n])}var ti,gt={__proto__:null,clipPolygon:Je,polygonCenter:$e,centroid:Qe};function ei(t,e){if(e&&t.length){var i=t=function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;n<s;n++)(function(t,e){var i=e.x-t.x,e=e.y-t.y;return i*i+e*e})(t[n],t[o])>e&&(i.push(t[n]),o=n);o<s-1&&i.push(t[s-1]);return i}(t,e=e*e),n=i.length,o=new(typeof Uint8Array!=void 0+""?Uint8Array:Array)(n);o[0]=o[n-1]=1,function t(e,i,n,o,s){var r,a,h,l=0;for(a=o+1;a<=s-1;a++)h=ri(e[a],e[o],e[s],!0),l<h&&(r=a,l=h);n<l&&(i[r]=1,t(e,i,n,o,r),t(e,i,n,r,s))}(i,o,e,0,n-1);var s,r=[];for(s=0;s<n;s++)o[s]&&r.push(i[s]);return r}return t.slice()}function ii(t,e,i){return Math.sqrt(ri(t,e,i,!0))}function ni(t,e,i,n,o){var s,r,a,h=n?ti:si(t,i),l=si(e,i);for(ti=l;;){if(!(h|l))return[t,e];if(h&l)return!1;a=si(r=oi(t,e,s=h||l,i,o),i),s===h?(t=r,h=a):(e=r,l=a)}}function oi(t,e,i,n,o){var s,r,a=e.x-t.x,e=e.y-t.y,h=n.min,n=n.max;return 8&i?(s=t.x+a*(n.y-t.y)/e,r=n.y):4&i?(s=t.x+a*(h.y-t.y)/e,r=h.y):2&i?(s=n.x,r=t.y+e*(n.x-t.x)/a):1&i&&(s=h.x,r=t.y+e*(h.x-t.x)/a),new p(s,r,o)}function si(t,e){var i=0;return t.x<e.min.x?i|=1:t.x>e.max.x&&(i|=2),t.y<e.min.y?i|=4:t.y>e.max.y&&(i|=8),i}function ri(t,e,i,n){var o=e.x,e=e.y,s=i.x-o,r=i.y-e,a=s*s+r*r;return 0<a&&(1<(a=((t.x-o)*s+(t.y-e)*r)/a)?(o=i.x,e=i.y):0<a&&(o+=s*a,e+=r*a)),s=t.x-o,r=t.y-e,n?s*s+r*r:new p(o,e)}function I(t){return!d(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function ai(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),I(t)}function hi(t,e){var i,n,o,s,r,a;if(!t||0===t.length)throw new Error("latlngs not passed");I(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);for(var h=w([0,0]),l=g(t),u=(l.getNorthWest().distanceTo(l.getSouthWest())*l.getNorthEast().distanceTo(l.getNorthWest())<1700&&(h=Qe(t)),t.length),c=[],d=0;d<u;d++){var _=w(t[d]);c.push(e.project(w([_.lat-h.lat,_.lng-h.lng])))}for(i=d=0;d<u-1;d++)i+=c[d].distanceTo(c[d+1])/2;if(0===i)a=c[0];else for(n=d=0;d<u-1;d++)if(o=c[d],s=c[d+1],i<(n+=r=o.distanceTo(s))){a=[s.x-(r=(n-i)/r)*(s.x-o.x),s.y-r*(s.y-o.y)];break}l=e.unproject(m(a));return w([l.lat+h.lat,l.lng+h.lng])}var vt={__proto__:null,simplify:ei,pointToSegmentDistance:ii,closestPointOnSegment:function(t,e,i){return ri(t,e,i)},clipSegment:ni,_getEdgeIntersection:oi,_getBitCode:si,_sqClosestPointOnSegment:ri,isFlat:I,_flat:ai,polylineCenter:hi},yt={project:function(t){return new p(t.lng,t.lat)},unproject:function(t){return new v(t.y,t.x)},bounds:new f([-180,-90],[180,90])},xt={R:6378137,R_MINOR:6356752.314245179,bounds:new f([-20037508.34279,-15496570.73972],[20037508.34279,18764656.23138]),project:function(t){var e=Math.PI/180,i=this.R,n=t.lat*e,o=this.R_MINOR/i,o=Math.sqrt(1-o*o),s=o*Math.sin(n),s=Math.tan(Math.PI/4-n/2)/Math.pow((1-s)/(1+s),o/2),n=-i*Math.log(Math.max(s,1e-10));return new p(t.lng*e*i,n)},unproject:function(t){for(var e,i=180/Math.PI,n=this.R,o=this.R_MINOR/n,s=Math.sqrt(1-o*o),r=Math.exp(-t.y/n),a=Math.PI/2-2*Math.atan(r),h=0,l=.1;h<15&&1e-7<Math.abs(l);h++)e=s*Math.sin(a),e=Math.pow((1-e)/(1+e),s/2),a+=l=Math.PI/2-2*Math.atan(r*e)-a;return new v(a*i,t.x*i/n)}},wt={__proto__:null,LonLat:yt,Mercator:xt,SphericalMercator:rt},Pt=l({},st,{code:"EPSG:3395",projection:xt,transformation:ht(bt=.5/(Math.PI*xt.R),.5,-bt,.5)}),li=l({},st,{code:"EPSG:4326",projection:yt,transformation:ht(1/180,1,-1/180,.5)}),Lt=l({},ot,{projection:yt,transformation:ht(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,e=e.lat-t.lat;return Math.sqrt(i*i+e*e)},infinite:!0}),o=(ot.Earth=st,ot.EPSG3395=Pt,ot.EPSG3857=lt,ot.EPSG900913=ut,ot.EPSG4326=li,ot.Simple=Lt,it.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[h(t)]=this},removeInteractiveTarget:function(t){return delete this._map._targets[h(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e,i=t.target;i.hasLayer(this)&&(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents&&(e=this.getEvents(),i.on(e,this),this.once("remove",function(){i.off(e,this)},this)),this.onAdd(i),this.fire("add"),i.fire("layeradd",{layer:this}))}})),ui=(A.include({addLayer:function(t){var e;if(t._layerAdd)return e=h(t),this._layers[e]||((this._layers[e]=t)._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t)),this;throw new Error("The provided object is not a Layer.")},removeLayer:function(t){var e=h(t);return this._layers[e]&&(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null),this},hasLayer:function(t){return h(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){for(var e=0,i=(t=t?d(t)?t:[t]:[]).length;e<i;e++)this.addLayer(t[e])},_addZoomLimit:function(t){isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[h(t)]=t,this._updateZoomLevels())},_removeZoomLimit:function(t){t=h(t);this._zoomBoundLayers[t]&&(delete this._zoomBoundLayers[t],this._updateZoomLevels())},_updateZoomLevels:function(){var t,e=1/0,i=-1/0,n=this._getZoomSpan();for(t in this._zoomBoundLayers)var o=this._zoomBoundLayers[t].options,e=void 0===o.minZoom?e:Math.min(e,o.minZoom),i=void 0===o.maxZoom?i:Math.max(i,o.maxZoom);this._layersMaxZoom=i===-1/0?void 0:i,this._layersMinZoom=e===1/0?void 0:e,n!==this._getZoomSpan()&&this.fire("zoomlevelschange"),void 0===this.options.maxZoom&&this._layersMaxZoom&&this.getZoom()>this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()<this._layersMinZoom&&this.setZoom(this._layersMinZoom)}}),o.extend({initialize:function(t,e){var i,n;if(c(this,e),this._layers={},t)for(i=0,n=t.length;i<n;i++)this.addLayer(t[i])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){t=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[t]&&this._map.removeLayer(this._layers[t]),delete this._layers[t],this},hasLayer:function(t){return("number"==typeof t?t:this.getLayerId(t))in this._layers},clearLayers:function(){return this.eachLayer(this.removeLayer,this)},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)(i=this._layers[e])[t]&&i[t].apply(i,n);return this},onAdd:function(t){this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t)},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];return this.eachLayer(t.push,t),t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:h})),ci=ui.extend({addLayer:function(t){return this.hasLayer(t)?this:(t.addEventParent(this),ui.prototype.addLayer.call(this,t),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?((t=t in this._layers?this._layers[t]:t).removeEventParent(this),ui.prototype.removeLayer.call(this,t),this.fire("layerremove",{layer:t})):this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t,e=new s;for(t in this._layers){var i=this._layers[t];e.extend(i.getBounds?i.getBounds():i.getLatLng())}return e}}),di=et.extend({options:{popupAnchor:[0,0],tooltipAnchor:[0,0],crossOrigin:!1},initialize:function(t){c(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(i)return i=this._createImg(i,e&&"IMG"===e.tagName?e:null),this._setIconStyles(i,t),!this.options.crossOrigin&&""!==this.options.crossOrigin||(i.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),i;if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null},_setIconStyles:function(t,e){var i=this.options,n=i[e+"Size"],n=m(n="number"==typeof n?[n,n]:n),o=m("shadow"===e&&i.shadowAnchor||i.iconAnchor||n&&n.divideBy(2,!0));t.className="leaflet-marker-"+e+" "+(i.className||""),o&&(t.style.marginLeft=-o.x+"px",t.style.marginTop=-o.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t,e){return(e=e||document.createElement("img")).src=t,e},_getIconUrl:function(t){return b.retina&&this.options[t+"RetinaUrl"]||this.options[t+"Url"]}});var _i=di.extend({options:{iconUrl:"marker-icon.png",iconRetinaUrl:"marker-icon-2x.png",shadowUrl:"marker-shadow.png",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],tooltipAnchor:[16,-28],shadowSize:[41,41]},_getIconUrl:function(t){return"string"!=typeof _i.imagePath&&(_i.imagePath=this._detectIconPath()),(this.options.imagePath||_i.imagePath)+di.prototype._getIconUrl.call(this,t)},_stripUrl:function(t){function e(t,e,i){return(e=e.exec(t))&&e[i]}return(t=e(t,/^url\((['"])?(.+)\1\)$/,2))&&e(t,/^(.*)marker-icon\.png$/,1)},_detectIconPath:function(){var t=P("div","leaflet-default-icon-path",document.body),e=pe(t,"background-image")||pe(t,"backgroundImage");return document.body.removeChild(t),(e=this._stripUrl(e))?e:(t=document.querySelector('link[href$="leaflet.css"]'))?t.href.substring(0,t.href.length-"leaflet.css".length-1):""}}),pi=n.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new Xe(t,t,!0)),this._draggable.on({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).enable(),M(t,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).disable(),this._marker._icon&&z(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_adjustPan:function(t){var e=this._marker,i=e._map,n=this._marker.options.autoPanSpeed,o=this._marker.options.autoPanPadding,s=Pe(e._icon),r=i.getPixelBounds(),a=i.getPixelOrigin(),a=_(r.min._subtract(a).add(o),r.max._subtract(a).subtract(o));a.contains(s)||(o=m((Math.max(a.max.x,s.x)-a.max.x)/(r.max.x-a.max.x)-(Math.min(a.min.x,s.x)-a.min.x)/(r.min.x-a.min.x),(Math.max(a.max.y,s.y)-a.max.y)/(r.max.y-a.max.y)-(Math.min(a.min.y,s.y)-a.min.y)/(r.min.y-a.min.y)).multiplyBy(n),i.panBy(o,{animate:!1}),this._draggable._newPos._add(o),this._draggable._startPos._add(o),Z(e._icon,this._draggable._newPos),this._onDrag(t),this._panRequest=x(this._adjustPan.bind(this,t)))},_onDragStart:function(){this._oldLatLng=this._marker.getLatLng(),this._marker.closePopup&&this._marker.closePopup(),this._marker.fire("movestart").fire("dragstart")},_onPreDrag:function(t){this._marker.options.autoPan&&(r(this._panRequest),this._panRequest=x(this._adjustPan.bind(this,t)))},_onDrag:function(t){var e=this._marker,i=e._shadow,n=Pe(e._icon),o=e._map.layerPointToLatLng(n);i&&Z(i,n),e._latlng=o,t.latlng=o,t.oldLatLng=this._oldLatLng,e.fire("move",t).fire("drag",t)},_onDragEnd:function(t){r(this._panRequest),delete this._oldLatLng,this._marker.fire("moveend").fire("dragend",t)}}),mi=o.extend({options:{icon:new _i,interactive:!0,keyboard:!0,title:"",alt:"Marker",zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250,pane:"markerPane",shadowPane:"shadowPane",bubblingMouseEvents:!1,autoPanOnFocus:!0,draggable:!1,autoPan:!1,autoPanPadding:[50,50],autoPanSpeed:10},initialize:function(t,e){c(this,e),this._latlng=w(t)},onAdd:function(t){this._zoomAnimated=this._zoomAnimated&&t.options.markerZoomAnimation,this._zoomAnimated&&t.on("zoomanim",this._animateZoom,this),this._initIcon(),this.update()},onRemove:function(t){this.dragging&&this.dragging.enabled()&&(this.options.draggable=!0,this.dragging.removeHooks()),delete this.dragging,this._zoomAnimated&&t.off("zoomanim",this._animateZoom,this),this._removeIcon(),this._removeShadow()},getEvents:function(){return{zoom:this.update,viewreset:this.update}},getLatLng:function(){return this._latlng},setLatLng:function(t){var e=this._latlng;return this._latlng=w(t),this.update(),this.fire("move",{oldLatLng:e,latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update()},getIcon:function(){return this.options.icon},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup,this._popup.options),this},getElement:function(){return this._icon},update:function(){var t;return this._icon&&this._map&&(t=this._map.latLngToLayerPoint(this._latlng).round(),this._setPos(t)),this},_initIcon:function(){var t=this.options,e="leaflet-zoom-"+(this._zoomAnimated?"animated":"hide"),i=t.icon.createIcon(this._icon),n=!1,i=(i!==this._icon&&(this._icon&&this._removeIcon(),n=!0,t.title&&(i.title=t.title),"IMG"===i.tagName&&(i.alt=t.alt||"")),M(i,e),t.keyboard&&(i.tabIndex="0",i.setAttribute("role","button")),this._icon=i,t.riseOnHover&&this.on({mouseover:this._bringToFront,mouseout:this._resetZIndex}),this.options.autoPanOnFocus&&S(i,"focus",this._panOnFocus,this),t.icon.createShadow(this._shadow)),o=!1;i!==this._shadow&&(this._removeShadow(),o=!0),i&&(M(i,e),i.alt=""),this._shadow=i,t.opacity<1&&this._updateOpacity(),n&&this.getPane().appendChild(this._icon),this._initInteraction(),i&&o&&this.getPane(t.shadowPane).appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&this.off({mouseover:this._bringToFront,mouseout:this._resetZIndex}),this.options.autoPanOnFocus&&k(this._icon,"focus",this._panOnFocus,this),T(this._icon),this.removeInteractiveTarget(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&T(this._shadow),this._shadow=null},_setPos:function(t){this._icon&&Z(this._icon,t),this._shadow&&Z(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon&&(this._icon.style.zIndex=this._zIndex+t)},_animateZoom:function(t){t=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(t)},_initInteraction:function(){var t;this.options.interactive&&(M(this._icon,"leaflet-interactive"),this.addInteractiveTarget(this._icon),pi&&(t=this.options.draggable,this.dragging&&(t=this.dragging.enabled(),this.dragging.disable()),this.dragging=new pi(this),t&&this.dragging.enable()))},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},_updateOpacity:function(){var t=this.options.opacity;this._icon&&C(this._icon,t),this._shadow&&C(this._shadow,t)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)},_panOnFocus:function(){var t,e,i=this._map;i&&(t=(e=this.options.icon.options).iconSize?m(e.iconSize):m(0,0),e=e.iconAnchor?m(e.iconAnchor):m(0,0),i.panInside(this._latlng,{paddingTopLeft:e,paddingBottomRight:t.subtract(e)}))},_getPopupAnchor:function(){return this.options.icon.options.popupAnchor},_getTooltipAnchor:function(){return this.options.icon.options.tooltipAnchor}});var fi=o.extend({options:{stroke:!0,color:"#3388ff",weight:3,opacity:1,lineCap:"round",lineJoin:"round",dashArray:null,dashOffset:null,fill:!1,fillColor:null,fillOpacity:.2,fillRule:"evenodd",interactive:!0,bubblingMouseEvents:!0},beforeAdd:function(t){this._renderer=t.getRenderer(this)},onAdd:function(){this._renderer._initPath(this),this._reset(),this._renderer._addPath(this)},onRemove:function(){this._renderer._removePath(this)},redraw:function(){return this._map&&this._renderer._updatePath(this),this},setStyle:function(t){return c(this,t),this._renderer&&(this._renderer._updateStyle(this),this.options.stroke&&t&&Object.prototype.hasOwnProperty.call(t,"weight")&&this._updateBounds()),this},bringToFront:function(){return this._renderer&&this._renderer._bringToFront(this),this},bringToBack:function(){return this._renderer&&this._renderer._bringToBack(this),this},getElement:function(){return this._path},_reset:function(){this._project(),this._update()},_clickTolerance:function(){return(this.options.stroke?this.options.weight/2:0)+(this._renderer.options.tolerance||0)}}),gi=fi.extend({options:{fill:!0,radius:10},initialize:function(t,e){c(this,e),this._latlng=w(t),this._radius=this.options.radius},setLatLng:function(t){var e=this._latlng;return this._latlng=w(t),this.redraw(),this.fire("move",{oldLatLng:e,latlng:this._latlng})},getLatLng:function(){return this._latlng},setRadius:function(t){return this.options.radius=this._radius=t,this.redraw()},getRadius:function(){return this._radius},setStyle:function(t){var e=t&&t.radius||this._radius;return fi.prototype.setStyle.call(this,t),this.setRadius(e),this},_project:function(){this._point=this._map.latLngToLayerPoint(this._latlng),this._updateBounds()},_updateBounds:function(){var t=this._radius,e=this._radiusY||t,i=this._clickTolerance(),t=[t+i,e+i];this._pxBounds=new f(this._point.subtract(t),this._point.add(t))},_update:function(){this._map&&this._updatePath()},_updatePath:function(){this._renderer._updateCircle(this)},_empty:function(){return this._radius&&!this._renderer._bounds.intersects(this._pxBounds)},_containsPoint:function(t){return t.distanceTo(this._point)<=this._radius+this._clickTolerance()}});var vi=gi.extend({initialize:function(t,e,i){if(c(this,e="number"==typeof e?l({},i,{radius:e}):e),this._latlng=w(t),isNaN(this.options.radius))throw new Error("Circle radius cannot be NaN");this._mRadius=this.options.radius},setRadius:function(t){return this._mRadius=t,this.redraw()},getRadius:function(){return this._mRadius},getBounds:function(){var t=[this._radius,this._radiusY||this._radius];return new s(this._map.layerPointToLatLng(this._point.subtract(t)),this._map.layerPointToLatLng(this._point.add(t)))},setStyle:fi.prototype.setStyle,_project:function(){var t,e,i,n,o,s=this._latlng.lng,r=this._latlng.lat,a=this._map,h=a.options.crs;h.distance===st.distance?(n=Math.PI/180,o=this._mRadius/st.R/n,t=a.project([r+o,s]),e=a.project([r-o,s]),e=t.add(e).divideBy(2),i=a.unproject(e).lat,n=Math.acos((Math.cos(o*n)-Math.sin(r*n)*Math.sin(i*n))/(Math.cos(r*n)*Math.cos(i*n)))/n,!isNaN(n)&&0!==n||(n=o/Math.cos(Math.PI/180*r)),this._point=e.subtract(a.getPixelOrigin()),this._radius=isNaN(n)?0:e.x-a.project([i,s-n]).x,this._radiusY=e.y-t.y):(o=h.unproject(h.project(this._latlng).subtract([this._mRadius,0])),this._point=a.latLngToLayerPoint(this._latlng),this._radius=this._point.x-a.latLngToLayerPoint(o).x),this._updateBounds()}});var yi=fi.extend({options:{smoothFactor:1,noClip:!1},initialize:function(t,e){c(this,e),this._setLatLngs(t)},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._setLatLngs(t),this.redraw()},isEmpty:function(){return!this._latlngs.length},closestLayerPoint:function(t){for(var e=1/0,i=null,n=ri,o=0,s=this._parts.length;o<s;o++)for(var r=this._parts[o],a=1,h=r.length;a<h;a++){var l,u,c=n(t,l=r[a-1],u=r[a],!0);c<e&&(e=c,i=n(t,l,u))}return i&&(i.distance=Math.sqrt(e)),i},getCenter:function(){if(this._map)return hi(this._defaultShape(),this._map.options.crs);throw new Error("Must add layer to map before using getCenter()")},getBounds:function(){return this._bounds},addLatLng:function(t,e){return e=e||this._defaultShape(),t=w(t),e.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new s,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return I(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var e=[],i=I(t),n=0,o=t.length;n<o;n++)i?(e[n]=w(t[n]),this._bounds.extend(e[n])):e[n]=this._convertLatLngs(t[n]);return e},_project:function(){var t=new f;this._rings=[],this._projectLatlngs(this._latlngs,this._rings,t),this._bounds.isValid()&&t.isValid()&&(this._rawPxBounds=t,this._updateBounds())},_updateBounds:function(){var t=this._clickTolerance(),t=new p(t,t);this._rawPxBounds&&(this._pxBounds=new f([this._rawPxBounds.min.subtract(t),this._rawPxBounds.max.add(t)]))},_projectLatlngs:function(t,e,i){var n,o,s=t[0]instanceof v,r=t.length;if(s){for(o=[],n=0;n<r;n++)o[n]=this._map.latLngToLayerPoint(t[n]),i.extend(o[n]);e.push(o)}else for(n=0;n<r;n++)this._projectLatlngs(t[n],e,i)},_clipPoints:function(){var t=this._renderer._bounds;if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var e,i,n,o,s=this._parts,r=0,a=0,h=this._rings.length;r<h;r++)for(e=0,i=(o=this._rings[r]).length;e<i-1;e++)(n=ni(o[e],o[e+1],t,e,!0))&&(s[a]=s[a]||[],s[a].push(n[0]),n[1]===o[e+1]&&e!==i-2||(s[a].push(n[1]),a++))},_simplifyPoints:function(){for(var t=this._parts,e=this.options.smoothFactor,i=0,n=t.length;i<n;i++)t[i]=ei(t[i],e)},_update:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),this._updatePath())},_updatePath:function(){this._renderer._updatePoly(this)},_containsPoint:function(t,e){var i,n,o,s,r,a,h=this._clickTolerance();if(this._pxBounds&&this._pxBounds.contains(t))for(i=0,s=this._parts.length;i<s;i++)for(n=0,o=(r=(a=this._parts[i]).length)-1;n<r;o=n++)if((e||0!==n)&&ii(t,a[o],a[n])<=h)return!0;return!1}});yi._flat=ai;var xi=yi.extend({options:{fill:!0},isEmpty:function(){return!this._latlngs.length||!this._latlngs[0].length},getCenter:function(){if(this._map)return $e(this._defaultShape(),this._map.options.crs);throw new Error("Must add layer to map before using getCenter()")},_convertLatLngs:function(t){var t=yi.prototype._convertLatLngs.call(this,t),e=t.length;return 2<=e&&t[0]instanceof v&&t[0].equals(t[e-1])&&t.pop(),t},_setLatLngs:function(t){yi.prototype._setLatLngs.call(this,t),I(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return(I(this._latlngs[0])?this._latlngs:this._latlngs[0])[0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,e=new p(e,e),t=new f(t.min.subtract(e),t.max.add(e));if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var i,n=0,o=this._rings.length;n<o;n++)(i=Je(this._rings[n],t,!0)).length&&this._parts.push(i)},_updatePath:function(){this._renderer._updatePoly(this,!0)},_containsPoint:function(t){var e,i,n,o,s,r,a,h,l=!1;if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(o=0,a=this._parts.length;o<a;o++)for(s=0,r=(h=(e=this._parts[o]).length)-1;s<h;r=s++)i=e[s],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(l=!l);return l||yi.prototype._containsPoint.call(this,t,!0)}});var wi=ci.extend({initialize:function(t,e){c(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,o=d(t)?t:t.features;if(o){for(e=0,i=o.length;e<i;e++)((n=o[e]).geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);return this}var s,r=this.options;return(!r.filter||r.filter(t))&&(s=bi(t,r))?(s.feature=Zi(t),s.defaultOptions=s.options,this.resetStyle(s),r.onEachFeature&&r.onEachFeature(t,s),this.addLayer(s)):this},resetStyle:function(t){return void 0===t?this.eachLayer(this.resetStyle,this):(t.options=l({},t.defaultOptions),this._setLayerStyle(t,this.options.style),this)},setStyle:function(e){return this.eachLayer(function(t){this._setLayerStyle(t,e)},this)},_setLayerStyle:function(t,e){t.setStyle&&("function"==typeof e&&(e=e(t.feature)),t.setStyle(e))}});function bi(t,e){var i,n,o,s,r="Feature"===t.type?t.geometry:t,a=r?r.coordinates:null,h=[],l=e&&e.pointToLayer,u=e&&e.coordsToLatLng||Li;if(!a&&!r)return null;switch(r.type){case"Point":return Pi(l,t,i=u(a),e);case"MultiPoint":for(o=0,s=a.length;o<s;o++)i=u(a[o]),h.push(Pi(l,t,i,e));return new ci(h);case"LineString":case"MultiLineString":return n=Ti(a,"LineString"===r.type?0:1,u),new yi(n,e);case"Polygon":case"MultiPolygon":return n=Ti(a,"Polygon"===r.type?1:2,u),new xi(n,e);case"GeometryCollection":for(o=0,s=r.geometries.length;o<s;o++){var c=bi({geometry:r.geometries[o],type:"Feature",properties:t.properties},e);c&&h.push(c)}return new ci(h);case"FeatureCollection":for(o=0,s=r.features.length;o<s;o++){var d=bi(r.features[o],e);d&&h.push(d)}return new ci(h);default:throw new Error("Invalid GeoJSON object.")}}function Pi(t,e,i,n){return t?t(e,i):new mi(i,n&&n.markersInheritOptions&&n)}function Li(t){return new v(t[1],t[0],t[2])}function Ti(t,e,i){for(var n,o=[],s=0,r=t.length;s<r;s++)n=e?Ti(t[s],e-1,i):(i||Li)(t[s]),o.push(n);return o}function Mi(t,e){return void 0!==(t=w(t)).alt?[i(t.lng,e),i(t.lat,e),i(t.alt,e)]:[i(t.lng,e),i(t.lat,e)]}function zi(t,e,i,n){for(var o=[],s=0,r=t.length;s<r;s++)o.push(e?zi(t[s],I(t[s])?0:e-1,i,n):Mi(t[s],n));return!e&&i&&0<o.length&&o.push(o[0].slice()),o}function Ci(t,e){return t.feature?l({},t.feature,{geometry:e}):Zi(e)}function Zi(t){return"Feature"===t.type||"FeatureCollection"===t.type?t:{type:"Feature",properties:{},geometry:t}}Tt={toGeoJSON:function(t){return Ci(this,{type:"Point",coordinates:Mi(this.getLatLng(),t)})}};function Si(t,e){return new wi(t,e)}mi.include(Tt),vi.include(Tt),gi.include(Tt),yi.include({toGeoJSON:function(t){var e=!I(this._latlngs);return Ci(this,{type:(e?"Multi":"")+"LineString",coordinates:zi(this._latlngs,e?1:0,!1,t)})}}),xi.include({toGeoJSON:function(t){var e=!I(this._latlngs),i=e&&!I(this._latlngs[0]),t=zi(this._latlngs,i?2:e?1:0,!0,t);return Ci(this,{type:(i?"Multi":"")+"Polygon",coordinates:t=e?t:[t]})}}),ui.include({toMultiPoint:function(e){var i=[];return this.eachLayer(function(t){i.push(t.toGeoJSON(e).geometry.coordinates)}),Ci(this,{type:"MultiPoint",coordinates:i})},toGeoJSON:function(e){var i,n,t=this.feature&&this.feature.geometry&&this.feature.geometry.type;return"MultiPoint"===t?this.toMultiPoint(e):(i="GeometryCollection"===t,n=[],this.eachLayer(function(t){t.toGeoJSON&&(t=t.toGeoJSON(e),i?n.push(t.geometry):"FeatureCollection"===(t=Zi(t)).type?n.push.apply(n,t.features):n.push(t))}),i?Ci(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n})}});var Mt=Si,Ei=o.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,e,i){this._url=t,this._bounds=g(e),c(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(M(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){T(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&fe(this._image),this},bringToBack:function(){return this._map&&ge(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=g(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t="IMG"===this._url.tagName,e=this._image=t?this._url:P("img");M(e,"leaflet-image-layer"),this._zoomAnimated&&M(e,"leaflet-zoom-animated"),this.options.className&&M(e,this.options.className),e.onselectstart=u,e.onmousemove=u,e.onload=a(this.fire,this,"load"),e.onerror=a(this._overlayOnError,this,"error"),!this.options.crossOrigin&&""!==this.options.crossOrigin||(e.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t?this._url=e.src:(e.src=this._url,e.alt=this.options.alt)},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),t=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;be(this._image,t,e)},_reset:function(){var t=this._image,e=new f(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();Z(t,e.min),t.style.width=i.x+"px",t.style.height=i.y+"px"},_updateOpacity:function(){C(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),ki=Ei.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t="VIDEO"===this._url.tagName,e=this._image=t?this._url:P("video");if(M(e,"leaflet-image-layer"),this._zoomAnimated&&M(e,"leaflet-zoom-animated"),this.options.className&&M(e,this.options.className),e.onselectstart=u,e.onmousemove=u,e.onloadeddata=a(this.fire,this,"load"),t){for(var i=e.getElementsByTagName("source"),n=[],o=0;o<i.length;o++)n.push(i[o].src);this._url=0<i.length?n:[e.src]}else{d(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,"objectFit")&&(e.style.objectFit="fill"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted,e.playsInline=!!this.options.playsInline;for(var s=0;s<this._url.length;s++){var r=P("source");r.src=this._url[s],e.appendChild(r)}}}});var Oi=Ei.extend({_initImage:function(){var t=this._image=this._url;M(t,"leaflet-image-layer"),this._zoomAnimated&&M(t,"leaflet-zoom-animated"),this.options.className&&M(t,this.options.className),t.onselectstart=u,t.onmousemove=u}});var Ai=o.extend({options:{interactive:!1,offset:[0,0],className:"",pane:void 0,content:""},initialize:function(t,e){t&&(t instanceof v||d(t))?(this._latlng=w(t),c(this,e)):(c(this,t),this._source=e),this.options.content&&(this._content=this.options.content)},openOn:function(t){return(t=arguments.length?t:this._source._map).hasLayer(this)||t.addLayer(this),this},close:function(){return this._map&&this._map.removeLayer(this),this},toggle:function(t){return this._map?this.close():(arguments.length?this._source=t:t=this._source,this._prepareOpen(),this.openOn(t._map)),this},onAdd:function(t){this._zoomAnimated=t._zoomAnimated,this._container||this._initLayout(),t._fadeAnimated&&C(this._container,0),clearTimeout(this._removeTimeout),this.getPane().appendChild(this._container),this.update(),t._fadeAnimated&&C(this._container,1),this.bringToFront(),this.options.interactive&&(M(this._container,"leaflet-interactive"),this.addInteractiveTarget(this._container))},onRemove:function(t){t._fadeAnimated?(C(this._container,0),this._removeTimeout=setTimeout(a(T,void 0,this._container),200)):T(this._container),this.options.interactive&&(z(this._container,"leaflet-interactive"),this.removeInteractiveTarget(this._container))},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=w(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(t){return this._content=t,this.update(),this},getElement:function(){return this._container},update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},getEvents:function(){var t={zoom:this._updatePosition,viewreset:this._updatePosition};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},isOpen:function(){return!!this._map&&this._map.hasLayer(this)},bringToFront:function(){return this._map&&fe(this._container),this},bringToBack:function(){return this._map&&ge(this._container),this},_prepareOpen:function(t){if(!(i=this._source)._map)return!1;if(i instanceof ci){var e,i=null,n=this._source._layers;for(e in n)if(n[e]._map){i=n[e];break}if(!i)return!1;this._source=i}if(!t)if(i.getCenter)t=i.getCenter();else if(i.getLatLng)t=i.getLatLng();else{if(!i.getBounds)throw new Error("Unable to get source layer LatLng.");t=i.getBounds().getCenter()}return this.setLatLng(t),this._map&&this.update(),!0},_updateContent:function(){if(this._content){var t=this._contentNode,e="function"==typeof this._content?this._content(this._source||this):this._content;if("string"==typeof e)t.innerHTML=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(e)}this.fire("contentupdate")}},_updatePosition:function(){var t,e,i;this._map&&(e=this._map.latLngToLayerPoint(this._latlng),t=m(this.options.offset),i=this._getAnchor(),this._zoomAnimated?Z(this._container,e.add(i)):t=t.add(e).add(i),e=this._containerBottom=-t.y,i=this._containerLeft=-Math.round(this._containerWidth/2)+t.x,this._container.style.bottom=e+"px",this._container.style.left=i+"px")},_getAnchor:function(){return[0,0]}}),Bi=(A.include({_initOverlay:function(t,e,i,n){var o=e;return o instanceof t||(o=new t(n).setContent(e)),i&&o.setLatLng(i),o}}),o.include({_initOverlay:function(t,e,i,n){var o=i;return o instanceof t?(c(o,n),o._source=this):(o=e&&!n?e:new t(n,this)).setContent(i),o}}),Ai.extend({options:{pane:"popupPane",offset:[0,7],maxWidth:300,minWidth:50,maxHeight:null,autoPan:!0,autoPanPaddingTopLeft:null,autoPanPaddingBottomRight:null,autoPanPadding:[5,5],keepInView:!1,closeButton:!0,autoClose:!0,closeOnEscapeKey:!0,className:""},openOn:function(t){return!(t=arguments.length?t:this._source._map).hasLayer(this)&&t._popup&&t._popup.options.autoClose&&t.removeLayer(t._popup),t._popup=this,Ai.prototype.openOn.call(this,t)},onAdd:function(t){Ai.prototype.onAdd.call(this,t),t.fire("popupopen",{popup:this}),this._source&&(this._source.fire("popupopen",{popup:this},!0),this._source instanceof fi||this._source.on("preclick",Ae))},onRemove:function(t){Ai.prototype.onRemove.call(this,t),t.fire("popupclose",{popup:this}),this._source&&(this._source.fire("popupclose",{popup:this},!0),this._source instanceof fi||this._source.off("preclick",Ae))},getEvents:function(){var t=Ai.prototype.getEvents.call(this);return(void 0!==this.options.closeOnClick?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this.close),this.options.keepInView&&(t.moveend=this._adjustPan),t},_initLayout:function(){var t="leaflet-popup",e=this._container=P("div",t+" "+(this.options.className||"")+" leaflet-zoom-animated"),i=this._wrapper=P("div",t+"-content-wrapper",e);this._contentNode=P("div",t+"-content",i),Ie(e),Be(this._contentNode),S(e,"contextmenu",Ae),this._tipContainer=P("div",t+"-tip-container",e),this._tip=P("div",t+"-tip",this._tipContainer),this.options.closeButton&&((i=this._closeButton=P("a",t+"-close-button",e)).setAttribute("role","button"),i.setAttribute("aria-label","Close popup"),i.href="#close",i.innerHTML='<span aria-hidden="true">×</span>',S(i,"click",function(t){O(t),this.close()},this))},_updateLayout:function(){var t=this._contentNode,e=t.style,i=(e.width="",e.whiteSpace="nowrap",t.offsetWidth),i=Math.min(i,this.options.maxWidth),i=(i=Math.max(i,this.options.minWidth),e.width=i+1+"px",e.whiteSpace="",e.height="",t.offsetHeight),n=this.options.maxHeight,o="leaflet-popup-scrolled";(n&&n<i?(e.height=n+"px",M):z)(t,o),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var t=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();Z(this._container,t.add(e))},_adjustPan:function(){var t,e,i,n,o,s,r,a;this.options.autoPan&&(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning?this._autopanning=!1:(t=this._map,e=parseInt(pe(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+e,a=this._containerWidth,(i=new p(this._containerLeft,-e-this._containerBottom))._add(Pe(this._container)),i=t.layerPointToContainerPoint(i),o=m(this.options.autoPanPadding),n=m(this.options.autoPanPaddingTopLeft||o),o=m(this.options.autoPanPaddingBottomRight||o),s=t.getSize(),r=0,i.x+a+o.x>s.x&&(r=i.x+a-s.x+o.x),i.x-r-n.x<(a=0)&&(r=i.x-n.x),i.y+e+o.y>s.y&&(a=i.y+e-s.y+o.y),i.y-a-n.y<0&&(a=i.y-n.y),(r||a)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([r,a]))))},_getAnchor:function(){return m(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}})),Ii=(A.mergeOptions({closePopupOnClick:!0}),A.include({openPopup:function(t,e,i){return this._initOverlay(Bi,t,e,i).openOn(this),this},closePopup:function(t){return(t=arguments.length?t:this._popup)&&t.close(),this}}),o.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Bi,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof ci||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var e;this._popup&&this._map&&(Re(t),e=t.layer||t.target,this._popup._source!==e||e instanceof fi?(this._popup._source=e,this.openPopup(t.latlng)):this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}}),Ai.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){Ai.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){Ai.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=Ai.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=P("div",t),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+h(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i=this._map,n=this._container,o=i.latLngToContainerPoint(i.getCenter()),i=i.layerPointToContainerPoint(t),s=this.options.direction,r=n.offsetWidth,a=n.offsetHeight,h=m(this.options.offset),l=this._getAnchor(),i="top"===s?(e=r/2,a):"bottom"===s?(e=r/2,0):(e="center"===s?r/2:"right"===s?0:"left"===s?r:i.x<o.x?(s="right",0):(s="left",r+2*(h.x+l.x)),a/2);t=t.subtract(m(e,i,!0)).add(h).add(l),z(n,"leaflet-tooltip-right"),z(n,"leaflet-tooltip-left"),z(n,"leaflet-tooltip-top"),z(n,"leaflet-tooltip-bottom"),M(n,"leaflet-tooltip-"+s),Z(n,t)},_updatePosition:function(){var t=this._map.latLngToLayerPoint(this._latlng);this._setPosition(t)},setOpacity:function(t){this.options.opacity=t,this._container&&C(this._container,t)},_animateZoom:function(t){t=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPosition(t)},_getAnchor:function(){return m(this._source&&this._source._getTooltipAnchor&&!this.options.sticky?this._source._getTooltipAnchor():[0,0])}})),Ri=(A.include({openTooltip:function(t,e,i){return this._initOverlay(Ii,t,e,i).openOn(this),this},closeTooltip:function(t){return t.close(),this}}),o.include({bindTooltip:function(t,e){return this._tooltip&&this.isTooltipOpen()&&this.unbindTooltip(),this._tooltip=this._initOverlay(Ii,this._tooltip,t,e),this._initTooltipInteractions(),this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(),this},unbindTooltip:function(){return this._tooltip&&(this._initTooltipInteractions(!0),this.closeTooltip(),this._tooltip=null),this},_initTooltipInteractions:function(t){var e,i;!t&&this._tooltipHandlersAdded||(e=t?"off":"on",i={remove:this.closeTooltip,move:this._moveTooltip},this._tooltip.options.permanent?i.add=this._openTooltip:(i.mouseover=this._openTooltip,i.mouseout=this.closeTooltip,i.click=this._openTooltip,this._map?this._addFocusListeners():i.add=this._addFocusListeners),this._tooltip.options.sticky&&(i.mousemove=this._moveTooltip),this[e](i),this._tooltipHandlersAdded=!t)},openTooltip:function(t){return this._tooltip&&(this instanceof ci||(this._tooltip._source=this),this._tooltip._prepareOpen(t)&&(this._tooltip.openOn(this._map),this.getElement?this._setAriaDescribedByOnLayer(this):this.eachLayer&&this.eachLayer(this._setAriaDescribedByOnLayer,this))),this},closeTooltip:function(){if(this._tooltip)return this._tooltip.close()},toggleTooltip:function(){return this._tooltip&&this._tooltip.toggle(this),this},isTooltipOpen:function(){return this._tooltip.isOpen()},setTooltipContent:function(t){return this._tooltip&&this._tooltip.setContent(t),this},getTooltip:function(){return this._tooltip},_addFocusListeners:function(){this.getElement?this._addFocusListenersOnLayer(this):this.eachLayer&&this.eachLayer(this._addFocusListenersOnLayer,this)},_addFocusListenersOnLayer:function(t){var e="function"==typeof t.getElement&&t.getElement();e&&(S(e,"focus",function(){this._tooltip._source=t,this.openTooltip()},this),S(e,"blur",this.closeTooltip,this))},_setAriaDescribedByOnLayer:function(t){t="function"==typeof t.getElement&&t.getElement();t&&t.setAttribute("aria-describedby",this._tooltip._container.id)},_openTooltip:function(t){var e;this._tooltip&&this._map&&(this._map.dragging&&this._map.dragging.moving()&&!this._openOnceFlag?(this._openOnceFlag=!0,(e=this)._map.once("moveend",function(){e._openOnceFlag=!1,e._openTooltip(t)})):(this._tooltip._source=t.layer||t.target,this.openTooltip(this._tooltip.options.sticky?t.latlng:void 0)))},_moveTooltip:function(t){var e=t.latlng;this._tooltip.options.sticky&&t.originalEvent&&(t=this._map.mouseEventToContainerPoint(t.originalEvent),t=this._map.containerPointToLayerPoint(t),e=this._map.layerPointToLatLng(t)),this._tooltip.setLatLng(e)}}),di.extend({options:{iconSize:[12,12],html:!1,bgPos:null,className:"leaflet-div-icon"},createIcon:function(t){var t=t&&"DIV"===t.tagName?t:document.createElement("div"),e=this.options;return e.html instanceof Element?(me(t),t.appendChild(e.html)):t.innerHTML=!1!==e.html?e.html:"",e.bgPos&&(e=m(e.bgPos),t.style.backgroundPosition=-e.x+"px "+-e.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}));di.Default=_i;var Ni=o.extend({options:{tileSize:256,opacity:1,updateWhenIdle:b.mobile,updateWhenZooming:!0,updateInterval:200,zIndex:1,bounds:null,minZoom:0,maxZoom:void 0,maxNativeZoom:void 0,minNativeZoom:void 0,noWrap:!1,pane:"tilePane",className:"",keepBuffer:2},initialize:function(t){c(this,t)},onAdd:function(){this._initContainer(),this._levels={},this._tiles={},this._resetView()},beforeAdd:function(t){t._addZoomLimit(this)},onRemove:function(t){this._removeAllTiles(),T(this._container),t._removeZoomLimit(this),this._container=null,this._tileZoom=void 0},bringToFront:function(){return this._map&&(fe(this._container),this._setAutoZIndex(Math.max)),this},bringToBack:function(){return this._map&&(ge(this._container),this._setAutoZIndex(Math.min)),this},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},isLoading:function(){return this._loading},redraw:function(){var t;return this._map&&(this._removeAllTiles(),(t=this._clampZoom(this._map.getZoom()))!==this._tileZoom&&(this._tileZoom=t,this._updateLevels()),this._update()),this},getEvents:function(){var t={viewprereset:this._invalidateAll,viewreset:this._resetView,zoom:this._resetView,moveend:this._onMoveEnd};return this.options.updateWhenIdle||(this._onMove||(this._onMove=j(this._onMoveEnd,this.options.updateInterval,this)),t.move=this._onMove),this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},createTile:function(){return document.createElement("div")},getTileSize:function(){var t=this.options.tileSize;return t instanceof p?t:new p(t,t)},_updateZIndex:function(){this._container&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t){for(var e,i=this.getPane().children,n=-t(-1/0,1/0),o=0,s=i.length;o<s;o++)e=i[o].style.zIndex,i[o]!==this._container&&e&&(n=t(n,+e));isFinite(n)&&(this.options.zIndex=n+t(-1,1),this._updateZIndex())},_updateOpacity:function(){if(this._map&&!b.ielt9){C(this._container,this.options.opacity);var t,e=+new Date,i=!1,n=!1;for(t in this._tiles){var o,s=this._tiles[t];s.current&&s.loaded&&(o=Math.min(1,(e-s.loaded)/200),C(s.el,o),o<1?i=!0:(s.active?n=!0:this._onOpaqueTile(s),s.active=!0))}n&&!this._noPrune&&this._pruneTiles(),i&&(r(this._fadeFrame),this._fadeFrame=x(this._updateOpacity,this))}},_onOpaqueTile:u,_initContainer:function(){this._container||(this._container=P("div","leaflet-layer "+(this.options.className||"")),this._updateZIndex(),this.options.opacity<1&&this._updateOpacity(),this.getPane().appendChild(this._container))},_updateLevels:function(){var t=this._tileZoom,e=this.options.maxZoom;if(void 0!==t){for(var i in this._levels)i=Number(i),this._levels[i].el.children.length||i===t?(this._levels[i].el.style.zIndex=e-Math.abs(t-i),this._onUpdateLevel(i)):(T(this._levels[i].el),this._removeTilesAtZoom(i),this._onRemoveLevel(i),delete this._levels[i]);var n=this._levels[t],o=this._map;return n||((n=this._levels[t]={}).el=P("div","leaflet-tile-container leaflet-zoom-animated",this._container),n.el.style.zIndex=e,n.origin=o.project(o.unproject(o.getPixelOrigin()),t).round(),n.zoom=t,this._setZoomTransform(n,o.getCenter(),o.getZoom()),u(n.el.offsetWidth),this._onCreateLevel(n)),this._level=n}},_onUpdateLevel:u,_onRemoveLevel:u,_onCreateLevel:u,_pruneTiles:function(){if(this._map){var t,e,i,n=this._map.getZoom();if(n>this.options.maxZoom||n<this.options.minZoom)this._removeAllTiles();else{for(t in this._tiles)(i=this._tiles[t]).retain=i.current;for(t in this._tiles)(i=this._tiles[t]).current&&!i.active&&(e=i.coords,this._retainParent(e.x,e.y,e.z,e.z-5)||this._retainChildren(e.x,e.y,e.z,e.z+2));for(t in this._tiles)this._tiles[t].retain||this._removeTile(t)}}},_removeTilesAtZoom:function(t){for(var e in this._tiles)this._tiles[e].coords.z===t&&this._removeTile(e)},_removeAllTiles:function(){for(var t in this._tiles)this._removeTile(t)},_invalidateAll:function(){for(var t in this._levels)T(this._levels[t].el),this._onRemoveLevel(Number(t)),delete this._levels[t];this._removeAllTiles(),this._tileZoom=void 0},_retainParent:function(t,e,i,n){var t=Math.floor(t/2),e=Math.floor(e/2),i=i-1,o=new p(+t,+e),o=(o.z=i,this._tileCoordsToKey(o)),o=this._tiles[o];return o&&o.active?o.retain=!0:(o&&o.loaded&&(o.retain=!0),n<i&&this._retainParent(t,e,i,n))},_retainChildren:function(t,e,i,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*e;s<2*e+2;s++){var r=new p(o,s),r=(r.z=i+1,this._tileCoordsToKey(r)),r=this._tiles[r];r&&r.active?r.retain=!0:(r&&r.loaded&&(r.retain=!0),i+1<n&&this._retainChildren(o,s,i+1,n))}},_resetView:function(t){t=t&&(t.pinch||t.flyTo);this._setView(this._map.getCenter(),this._map.getZoom(),t,t)},_animateZoom:function(t){this._setView(t.center,t.zoom,!0,t.noUpdate)},_clampZoom:function(t){var e=this.options;return void 0!==e.minNativeZoom&&t<e.minNativeZoom?e.minNativeZoom:void 0!==e.maxNativeZoom&&e.maxNativeZoom<t?e.maxNativeZoom:t},_setView:function(t,e,i,n){var o=Math.round(e),o=void 0!==this.options.maxZoom&&o>this.options.maxZoom||void 0!==this.options.minZoom&&o<this.options.minZoom?void 0:this._clampZoom(o),s=this.options.updateWhenZooming&&o!==this._tileZoom;n&&!s||(this._tileZoom=o,this._abortLoading&&this._abortLoading(),this._updateLevels(),this._resetGrid(),void 0!==o&&this._update(t),i||this._pruneTiles(),this._noPrune=!!i),this._setZoomTransforms(t,e)},_setZoomTransforms:function(t,e){for(var i in this._levels)this._setZoomTransform(this._levels[i],t,e)},_setZoomTransform:function(t,e,i){var n=this._map.getZoomScale(i,t.zoom),e=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(e,i)).round();b.any3d?be(t.el,e,n):Z(t.el,e)},_resetGrid:function(){var t=this._map,e=t.options.crs,i=this._tileSize=this.getTileSize(),n=this._tileZoom,o=this._map.getPixelWorldBounds(this._tileZoom);o&&(this._globalTileRange=this._pxBoundsToTileRange(o)),this._wrapX=e.wrapLng&&!this.options.noWrap&&[Math.floor(t.project([0,e.wrapLng[0]],n).x/i.x),Math.ceil(t.project([0,e.wrapLng[1]],n).x/i.y)],this._wrapY=e.wrapLat&&!this.options.noWrap&&[Math.floor(t.project([e.wrapLat[0],0],n).y/i.x),Math.ceil(t.project([e.wrapLat[1],0],n).y/i.y)]},_onMoveEnd:function(){this._map&&!this._map._animatingZoom&&this._update()},_getTiledPixelBounds:function(t){var e=this._map,i=e._animatingZoom?Math.max(e._animateToZoom,e.getZoom()):e.getZoom(),i=e.getZoomScale(i,this._tileZoom),t=e.project(t,this._tileZoom).floor(),e=e.getSize().divideBy(2*i);return new f(t.subtract(e),t.add(e))},_update:function(t){var e=this._map;if(e){var i=this._clampZoom(e.getZoom());if(void 0===t&&(t=e.getCenter()),void 0!==this._tileZoom){var n,e=this._getTiledPixelBounds(t),o=this._pxBoundsToTileRange(e),s=o.getCenter(),r=[],e=this.options.keepBuffer,a=new f(o.getBottomLeft().subtract([e,-e]),o.getTopRight().add([e,-e]));if(!(isFinite(o.min.x)&&isFinite(o.min.y)&&isFinite(o.max.x)&&isFinite(o.max.y)))throw new Error("Attempted to load an infinite number of tiles");for(n in this._tiles){var h=this._tiles[n].coords;h.z===this._tileZoom&&a.contains(new p(h.x,h.y))||(this._tiles[n].current=!1)}if(1<Math.abs(i-this._tileZoom))this._setView(t,i);else{for(var l=o.min.y;l<=o.max.y;l++)for(var u=o.min.x;u<=o.max.x;u++){var c,d=new p(u,l);d.z=this._tileZoom,this._isValidTile(d)&&((c=this._tiles[this._tileCoordsToKey(d)])?c.current=!0:r.push(d))}if(r.sort(function(t,e){return t.distanceTo(s)-e.distanceTo(s)}),0!==r.length){this._loading||(this._loading=!0,this.fire("loading"));for(var _=document.createDocumentFragment(),u=0;u<r.length;u++)this._addTile(r[u],_);this._level.el.appendChild(_)}}}}},_isValidTile:function(t){var e=this._map.options.crs;if(!e.infinite){var i=this._globalTileRange;if(!e.wrapLng&&(t.x<i.min.x||t.x>i.max.x)||!e.wrapLat&&(t.y<i.min.y||t.y>i.max.y))return!1}return!this.options.bounds||(e=this._tileCoordsToBounds(t),g(this.options.bounds).overlaps(e))},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),i=n.add(i);return[e.unproject(n,t.z),e.unproject(i,t.z)]},_tileCoordsToBounds:function(t){t=this._tileCoordsToNwSe(t),t=new s(t[0],t[1]);return t=this.options.noWrap?t:this._map.wrapLatLngBounds(t)},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var t=t.split(":"),e=new p(+t[0],+t[1]);return e.z=+t[2],e},_removeTile:function(t){var e=this._tiles[t];e&&(T(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){M(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=u,t.onmousemove=u,b.ielt9&&this.options.opacity<1&&C(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&x(a(this._tileReady,this,t,null,o)),Z(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);(i=this._tiles[n])&&(i.loaded=+new Date,this._map._fadeAnimated?(C(i.el,0),r(this._fadeFrame),this._fadeFrame=x(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(M(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),b.ielt9||!this._map._fadeAnimated?x(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new p(this._wrapX?H(t.x,this._wrapX):t.x,this._wrapY?H(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new f(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});var Di=Ni.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,(e=c(this,e)).detectRetina&&b.retina&&0<e.maxZoom?(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom=Math.min(e.maxZoom,e.minZoom+1)):(e.zoomOffset++,e.maxZoom=Math.max(e.minZoom,e.maxZoom-1)),e.minZoom=Math.max(0,e.minZoom)):e.zoomReverse?e.minZoom=Math.min(e.maxZoom,e.minZoom):e.maxZoom=Math.max(e.minZoom,e.maxZoom),"string"==typeof e.subdomains&&(e.subdomains=e.subdomains.split("")),this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&void 0===e&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var i=document.createElement("img");return S(i,"load",a(this._tileOnLoad,this,e,i)),S(i,"error",a(this._tileOnError,this,e,i)),!this.options.crossOrigin&&""!==this.options.crossOrigin||(i.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),"string"==typeof this.options.referrerPolicy&&(i.referrerPolicy=this.options.referrerPolicy),i.alt="",i.src=this.getTileUrl(t),i},getTileUrl:function(t){var e={r:b.retina?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};return this._map&&!this._map.options.crs.infinite&&(t=this._globalTileRange.max.y-t.y,this.options.tms&&(e.y=t),e["-y"]=t),q(this._url,l(e,this.options))},_tileOnLoad:function(t,e){b.ielt9?setTimeout(a(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var n=this.options.errorTileUrl;n&&e.getAttribute("src")!==n&&(e.src=n),t(i,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom;return(t=this.options.zoomReverse?e-t:t)+this.options.zoomOffset},_getSubdomain:function(t){t=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[t]},_abortLoading:function(){var t,e,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=u,i.onerror=u,i.complete||(i.src=K,e=this._tiles[t].coords,T(i),delete this._tiles[t],this.fire("tileabort",{tile:i,coords:e})))},_removeTile:function(t){var e=this._tiles[t];if(e)return e.el.setAttribute("src",K),Ni.prototype._removeTile.call(this,t)},_tileReady:function(t,e,i){if(this._map&&(!i||i.getAttribute("src")!==K))return Ni.prototype._tileReady.call(this,t,e,i)}});function ji(t,e){return new Di(t,e)}var Hi=Di.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i,n=l({},this.defaultWmsParams);for(i in e)i in this.options||(n[i]=e[i]);var t=(e=c(this,e)).detectRetina&&b.retina?2:1,o=this.getTileSize();n.width=o.x*t,n.height=o.y*t,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=1.3<=this._wmsVersion?"crs":"srs";this.wmsParams[e]=this._crs.code,Di.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),i=this._crs,i=_(i.project(e[0]),i.project(e[1])),e=i.min,i=i.max,e=(1.3<=this._wmsVersion&&this._crs===li?[e.y,e.x,i.y,i.x]:[e.x,e.y,i.x,i.y]).join(","),i=Di.prototype.getTileUrl.call(this,t);return i+U(this.wmsParams,i,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+e},setParams:function(t,e){return l(this.wmsParams,t),e||this.redraw(),this}});Di.WMS=Hi,ji.wms=function(t,e){return new Hi(t,e)};var Wi=o.extend({options:{padding:.1},initialize:function(t){c(this,t),h(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),M(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),n=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,e),n=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t,e));b.any3d?be(this._container,n,i):Z(this._container,n)},_reset:function(){for(var t in this._update(),this._updateTransform(this._center,this._zoom),this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new f(i,i.add(e.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),Fi=Wi.extend({options:{tolerance:0},getEvents:function(){var t=Wi.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Wi.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");S(t,"mousemove",this._onMouseMove,this),S(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),S(t,"mouseout",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext("2d")},_destroyContainer:function(){r(this._redrawRequest),delete this._ctx,T(this._container),k(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){for(var t in this._redrawBounds=null,this._layers)this._layers[t]._update();this._redraw()}},_update:function(){var t,e,i,n;this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this),t=this._bounds,e=this._container,i=t.getSize(),n=b.retina?2:1,Z(e,t.min),e.width=n*i.x,e.height=n*i.y,e.style.width=i.x+"px",e.style.height=i.y+"px",b.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update"))},_reset:function(){Wi.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t);t=(this._layers[h(t)]=t)._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=t),this._drawLast=t,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,i=e.next,e=e.prev;i?i.prev=e:this._drawLast=e,e?e.next=i:this._drawFirst=i,delete t._order,delete this._layers[h(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if("string"==typeof t.options.dashArray){for(var e,i=t.options.dashArray.split(/[, ]+/),n=[],o=0;o<i.length;o++){if(e=Number(i[o]),isNaN(e))return;n.push(e)}t.options._dashArray=n}else t.options._dashArray=t.options.dashArray},_requestRedraw:function(t){this._map&&(this._extendRedrawBounds(t),this._redrawRequest=this._redrawRequest||x(this._redraw,this))},_extendRedrawBounds:function(t){var e;t._pxBounds&&(e=(t.options.weight||0)+1,this._redrawBounds=this._redrawBounds||new f,this._redrawBounds.extend(t._pxBounds.min.subtract([e,e])),this._redrawBounds.extend(t._pxBounds.max.add([e,e])))},_redraw:function(){this._redrawRequest=null,this._redrawBounds&&(this._redrawBounds.min._floor(),this._redrawBounds.max._ceil()),this._clear(),this._draw(),this._redrawBounds=null},_clear:function(){var t,e=this._redrawBounds;e?(t=e.getSize(),this._ctx.clearRect(e.min.x,e.min.y,t.x,t.y)):(this._ctx.save(),this._ctx.setTransform(1,0,0,1,0,0),this._ctx.clearRect(0,0,this._container.width,this._container.height),this._ctx.restore())},_draw:function(){var t,e,i=this._redrawBounds;this._ctx.save(),i&&(e=i.getSize(),this._ctx.beginPath(),this._ctx.rect(i.min.x,i.min.y,e.x,e.y),this._ctx.clip()),this._drawing=!0;for(var n=this._drawFirst;n;n=n.next)t=n.layer,(!i||t._pxBounds&&t._pxBounds.intersects(i))&&t._updatePath();this._drawing=!1,this._ctx.restore()},_updatePoly:function(t,e){if(this._drawing){var i,n,o,s,r=t._parts,a=r.length,h=this._ctx;if(a){for(h.beginPath(),i=0;i<a;i++){for(n=0,o=r[i].length;n<o;n++)s=r[i][n],h[n?"lineTo":"moveTo"](s.x,s.y);e&&h.closePath()}this._fillStroke(h,t)}}},_updateCircle:function(t){var e,i,n,o;this._drawing&&!t._empty()&&(e=t._point,i=this._ctx,n=Math.max(Math.round(t._radius),1),1!=(o=(Math.max(Math.round(t._radiusY),1)||n)/n)&&(i.save(),i.scale(1,o)),i.beginPath(),i.arc(e.x,e.y/o,n,0,2*Math.PI,!1),1!=o&&i.restore(),this._fillStroke(i,t))},_fillStroke:function(t,e){var i=e.options;i.fill&&(t.globalAlpha=i.fillOpacity,t.fillStyle=i.fillColor||i.color,t.fill(i.fillRule||"evenodd")),i.stroke&&0!==i.weight&&(t.setLineDash&&t.setLineDash(e.options&&e.options._dashArray||[]),t.globalAlpha=i.opacity,t.lineWidth=i.weight,t.strokeStyle=i.color,t.lineCap=i.lineCap,t.lineJoin=i.lineJoin,t.stroke())},_onClick:function(t){for(var e,i,n=this._map.mouseEventToLayerPoint(t),o=this._drawFirst;o;o=o.next)(e=o.layer).options.interactive&&e._containsPoint(n)&&(("click"===t.type||"preclick"===t.type)&&this._map._draggableMoved(e)||(i=e));this._fireEvent(!!i&&[i],t)},_onMouseMove:function(t){var e;!this._map||this._map.dragging.moving()||this._map._animatingZoom||(e=this._map.mouseEventToLayerPoint(t),this._handleMouseHover(t,e))},_handleMouseOut:function(t){var e=this._hoveredLayer;e&&(z(this._container,"leaflet-interactive"),this._fireEvent([e],t,"mouseout"),this._hoveredLayer=null,this._mouseHoverThrottled=!1)},_handleMouseHover:function(t,e){if(!this._mouseHoverThrottled){for(var i,n,o=this._drawFirst;o;o=o.next)(i=o.layer).options.interactive&&i._containsPoint(e)&&(n=i);n!==this._hoveredLayer&&(this._handleMouseOut(t),n&&(M(this._container,"leaflet-interactive"),this._fireEvent([n],t,"mouseover"),this._hoveredLayer=n)),this._fireEvent(!!this._hoveredLayer&&[this._hoveredLayer],t),this._mouseHoverThrottled=!0,setTimeout(a(function(){this._mouseHoverThrottled=!1},this),32)}},_fireEvent:function(t,e,i){this._map._fireDOMEvent(e,i||e.type,t)},_bringToFront:function(t){var e,i,n=t._order;n&&(e=n.next,i=n.prev,e&&((e.prev=i)?i.next=e:e&&(this._drawFirst=e),n.prev=this._drawLast,(this._drawLast.next=n).next=null,this._drawLast=n,this._requestRedraw(t)))},_bringToBack:function(t){var e,i,n=t._order;n&&(e=n.next,(i=n.prev)&&((i.next=e)?e.prev=i:i&&(this._drawLast=i),n.prev=null,n.next=this._drawFirst,this._drawFirst.prev=n,this._drawFirst=n,this._requestRedraw(t)))}});function Ui(t){return b.canvas?new Fi(t):null}var Vi=function(){try{return document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return document.createElement("<lvml:"+t+' class="lvml">')}}catch(t){}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),zt={_initContainer:function(){this._container=P("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Wi.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=Vi("shape");M(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=Vi("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;T(e),t.removeInteractiveTarget(e),delete this._layers[h(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e=e||(t._stroke=Vi("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=d(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i=i||(t._fill=Vi("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,23592600")},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){fe(t._container)},_bringToBack:function(t){ge(t._container)}},qi=b.vml?Vi:ct,Gi=Wi.extend({_initContainer:function(){this._container=qi("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=qi("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){T(this._container),k(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){var t,e,i;this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this),e=(t=this._bounds).getSize(),i=this._container,this._svgSize&&this._svgSize.equals(e)||(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),Z(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update"))},_initPath:function(t){var e=t._path=qi("path");t.options.className&&M(e,t.options.className),t.options.interactive&&M(e,"leaflet-interactive"),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){T(t._path),t.removeInteractiveTarget(t._path),delete this._layers[h(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,t=t.options;e&&(t.stroke?(e.setAttribute("stroke",t.color),e.setAttribute("stroke-opacity",t.opacity),e.setAttribute("stroke-width",t.weight),e.setAttribute("stroke-linecap",t.lineCap),e.setAttribute("stroke-linejoin",t.lineJoin),t.dashArray?e.setAttribute("stroke-dasharray",t.dashArray):e.removeAttribute("stroke-dasharray"),t.dashOffset?e.setAttribute("stroke-dashoffset",t.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),t.fill?(e.setAttribute("fill",t.fillColor||t.color),e.setAttribute("fill-opacity",t.fillOpacity),e.setAttribute("fill-rule",t.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,dt(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n="a"+i+","+(Math.max(Math.round(t._radiusY),1)||i)+" 0 1,0 ",e=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+n+2*i+",0 "+n+2*-i+",0 ";this._setPath(t,e)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){fe(t._path)},_bringToBack:function(t){ge(t._path)}});function Ki(t){return b.svg||b.vml?new Gi(t):null}b.vml&&Gi.include(zt),A.include({getRenderer:function(t){t=(t=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer)||(this._renderer=this._createRenderer());return this.hasLayer(t)||this.addLayer(t),t},_getPaneRenderer:function(t){var e;return"overlayPane"!==t&&void 0!==t&&(void 0===(e=this._paneRenderers[t])&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e)},_createRenderer:function(t){return this.options.preferCanvas&&Ui(t)||Ki(t)}});var Yi=xi.extend({initialize:function(t,e){xi.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=g(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});Gi.create=qi,Gi.pointsToPath=dt,wi.geometryToLayer=bi,wi.coordsToLatLng=Li,wi.coordsToLatLngs=Ti,wi.latLngToCoords=Mi,wi.latLngsToCoords=zi,wi.getFeature=Ci,wi.asFeature=Zi,A.mergeOptions({boxZoom:!0});var _t=n.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){S(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){k(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){T(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),re(),Le(),this._startPoint=this._map.mouseEventToContainerPoint(t),S(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=P("div","leaflet-zoom-box",this._container),M(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var t=new f(this._point,this._startPoint),e=t.getSize();Z(this._box,t.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(T(this._box),z(this._container,"leaflet-crosshair")),ae(),Te(),k(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){1!==t.which&&1!==t.button||(this._finish(),this._moved&&(this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0),t=new s(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point)),this._map.fitBounds(t).fire("boxzoomend",{boxZoomBounds:t})))},_onKeyDown:function(t){27===t.keyCode&&(this._finish(),this._clearDeferredResetState(),this._resetState())}}),Ct=(A.addInitHook("addHandler","boxZoom",_t),A.mergeOptions({doubleClickZoom:!0}),n.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,i=t.originalEvent.shiftKey?i-n:i+n;"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}})),Zt=(A.addInitHook("addHandler","doubleClickZoom",Ct),A.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0}),n.extend({addHooks:function(){var t;this._draggable||(t=this._map,this._draggable=new Xe(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))),M(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){z(this._map._container,"leaflet-grab"),z(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t,e=this._map;e._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity?(t=g(this._map.options.maxBounds),this._offsetLimit=_(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))):this._offsetLimit=null,e.fire("movestart").fire("dragstart"),e.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){var e,i;this._map.options.inertia&&(e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos,this._positions.push(i),this._times.push(e),this._prunePositions(e)),this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;1<this._positions.length&&50<t-this._times[0];)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){var t,e;this._viscosity&&this._offsetLimit&&(t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit,t.x<e.min.x&&(t.x=this._viscousLimit(t.x,e.min.x)),t.y<e.min.y&&(t.y=this._viscousLimit(t.y,e.min.y)),t.x>e.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t))},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,n=(n+e+i)%t-e-i,t=Math.abs(o+i)<Math.abs(n+i)?o:n;this._draggable._absPos=this._draggable._newPos.clone(),this._draggable._newPos.x=t},_onDragEnd:function(t){var e,i,n,o,s=this._map,r=s.options,a=!r.inertia||t.noInertia||this._times.length<2;s.fire("dragend",t),!a&&(this._prunePositions(+new Date),t=this._lastPos.subtract(this._positions[0]),a=(this._lastTime-this._times[0])/1e3,e=r.easeLinearity,a=(t=t.multiplyBy(e/a)).distanceTo([0,0]),i=Math.min(r.inertiaMaxSpeed,a),t=t.multiplyBy(i/a),n=i/(r.inertiaDeceleration*e),(o=t.multiplyBy(-n/2).round()).x||o.y)?(o=s._limitOffset(o,s.options.maxBounds),x(function(){s.panBy(o,{duration:n,easeLinearity:e,noMoveStart:!0,animate:!0})})):s.fire("moveend")}})),St=(A.addInitHook("addHandler","dragging",Zt),A.mergeOptions({keyboard:!0,keyboardPanDelta:80}),n.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,54,173]},initialize:function(t){this._map=t,this._setPanDelta(t.options.keyboardPanDelta),this._setZoomDelta(t.options.zoomDelta)},addHooks:function(){var t=this._map._container;t.tabIndex<=0&&(t.tabIndex="0"),S(t,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.on({focus:this._addHooks,blur:this._removeHooks},this)},removeHooks:function(){this._removeHooks(),k(this._map._container,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.off({focus:this._addHooks,blur:this._removeHooks},this)},_onMouseDown:function(){var t,e,i;this._focused||(i=document.body,t=document.documentElement,e=i.scrollTop||t.scrollTop,i=i.scrollLeft||t.scrollLeft,this._map._container.focus(),window.scrollTo(i,e))},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanDelta:function(t){for(var e=this._panKeys={},i=this.keyCodes,n=0,o=i.left.length;n<o;n++)e[i.left[n]]=[-1*t,0];for(n=0,o=i.right.length;n<o;n++)e[i.right[n]]=[t,0];for(n=0,o=i.down.length;n<o;n++)e[i.down[n]]=[0,t];for(n=0,o=i.up.length;n<o;n++)e[i.up[n]]=[0,-1*t]},_setZoomDelta:function(t){for(var e=this._zoomKeys={},i=this.keyCodes,n=0,o=i.zoomIn.length;n<o;n++)e[i.zoomIn[n]]=t;for(n=0,o=i.zoomOut.length;n<o;n++)e[i.zoomOut[n]]=-t},_addHooks:function(){S(document,"keydown",this._onKeyDown,this)},_removeHooks:function(){k(document,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e,i,n=t.keyCode,o=this._map;if(n in this._panKeys)o._panAnim&&o._panAnim._inProgress||(i=this._panKeys[n],t.shiftKey&&(i=m(i).multiplyBy(3)),o.options.maxBounds&&(i=o._limitOffset(m(i),o.options.maxBounds)),o.options.worldCopyJump?(e=o.wrapLatLng(o.unproject(o.project(o.getCenter()).add(i))),o.panTo(e)):o.panBy(i));else if(n in this._zoomKeys)o.setZoom(o.getZoom()+(t.shiftKey?3:1)*this._zoomKeys[n]);else{if(27!==n||!o._popup||!o._popup.options.closeOnEscapeKey)return;o.closePopup()}Re(t)}}})),Et=(A.addInitHook("addHandler","keyboard",St),A.mergeOptions({scrollWheelZoom:!0,wheelDebounceTime:40,wheelPxPerZoomLevel:60}),n.extend({addHooks:function(){S(this._map._container,"wheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){k(this._map._container,"wheel",this._onWheelScroll,this)},_onWheelScroll:function(t){var e=He(t),i=this._map.options.wheelDebounceTime,e=(this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date),Math.max(i-(+new Date-this._startTime),0));clearTimeout(this._timer),this._timer=setTimeout(a(this._performZoom,this),e),Re(t)},_performZoom:function(){var t=this._map,e=t.getZoom(),i=this._map.options.zoomSnap||0,n=(t._stop(),this._delta/(4*this._map.options.wheelPxPerZoomLevel)),n=4*Math.log(2/(1+Math.exp(-Math.abs(n))))/Math.LN2,i=i?Math.ceil(n/i)*i:n,n=t._limitZoom(e+(0<this._delta?i:-i))-e;this._delta=0,this._startTime=null,n&&("center"===t.options.scrollWheelZoom?t.setZoom(e+n):t.setZoomAround(this._lastMousePos,e+n))}})),kt=(A.addInitHook("addHandler","scrollWheelZoom",Et),A.mergeOptions({tapHold:b.touchNative&&b.safari&&b.mobile,tapTolerance:15}),n.extend({addHooks:function(){S(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){k(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){var e;clearTimeout(this._holdTimeout),1===t.touches.length&&(e=t.touches[0],this._startPos=this._newPos=new p(e.clientX,e.clientY),this._holdTimeout=setTimeout(a(function(){this._cancel(),this._isTapValid()&&(S(document,"touchend",O),S(document,"touchend touchcancel",this._cancelClickPrevent),this._simulateEvent("contextmenu",e))},this),600),S(document,"touchend touchcancel contextmenu",this._cancel,this),S(document,"touchmove",this._onMove,this))},_cancelClickPrevent:function t(){k(document,"touchend",O),k(document,"touchend touchcancel",t)},_cancel:function(){clearTimeout(this._holdTimeout),k(document,"touchend touchcancel contextmenu",this._cancel,this),k(document,"touchmove",this._onMove,this)},_onMove:function(t){t=t.touches[0];this._newPos=new p(t.clientX,t.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,e){t=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY});t._simulated=!0,e.target.dispatchEvent(t)}})),Ot=(A.addInitHook("addHandler","tapHold",kt),A.mergeOptions({touchZoom:b.touch,bounceAtZoomLimits:!0}),n.extend({addHooks:function(){M(this._map._container,"leaflet-touch-zoom"),S(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){z(this._map._container,"leaflet-touch-zoom"),k(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var e,i,n=this._map;!t.touches||2!==t.touches.length||n._animatingZoom||this._zooming||(e=n.mouseEventToContainerPoint(t.touches[0]),i=n.mouseEventToContainerPoint(t.touches[1]),this._centerPoint=n.getSize()._divideBy(2),this._startLatLng=n.containerPointToLatLng(this._centerPoint),"center"!==n.options.touchZoom&&(this._pinchStartLatLng=n.containerPointToLatLng(e.add(i)._divideBy(2))),this._startDist=e.distanceTo(i),this._startZoom=n.getZoom(),this._moved=!1,this._zooming=!0,n._stop(),S(document,"touchmove",this._onTouchMove,this),S(document,"touchend touchcancel",this._onTouchEnd,this),O(t))},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),o=i.distanceTo(n)/this._startDist;if(this._zoom=e.getScaleZoom(o,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoom<e.getMinZoom()&&o<1||this._zoom>e.getMaxZoom()&&1<o)&&(this._zoom=e._limitZoom(this._zoom)),"center"===e.options.touchZoom){if(this._center=this._startLatLng,1==o)return}else{i=i._add(n)._divideBy(2)._subtract(this._centerPoint);if(1==o&&0===i.x&&0===i.y)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(i),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),r(this._animRequest);n=a(e._move,e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=x(n,this,!0),O(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,r(this._animRequest),k(document,"touchmove",this._onTouchMove,this),k(document,"touchend touchcancel",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}})),Xi=(A.addInitHook("addHandler","touchZoom",Ot),A.BoxZoom=_t,A.DoubleClickZoom=Ct,A.Drag=Zt,A.Keyboard=St,A.ScrollWheelZoom=Et,A.TapHold=kt,A.TouchZoom=Ot,t.Bounds=f,t.Browser=b,t.CRS=ot,t.Canvas=Fi,t.Circle=vi,t.CircleMarker=gi,t.Class=et,t.Control=B,t.DivIcon=Ri,t.DivOverlay=Ai,t.DomEvent=mt,t.DomUtil=pt,t.Draggable=Xe,t.Evented=it,t.FeatureGroup=ci,t.GeoJSON=wi,t.GridLayer=Ni,t.Handler=n,t.Icon=di,t.ImageOverlay=Ei,t.LatLng=v,t.LatLngBounds=s,t.Layer=o,t.LayerGroup=ui,t.LineUtil=vt,t.Map=A,t.Marker=mi,t.Mixin=ft,t.Path=fi,t.Point=p,t.PolyUtil=gt,t.Polygon=xi,t.Polyline=yi,t.Popup=Bi,t.PosAnimation=Fe,t.Projection=wt,t.Rectangle=Yi,t.Renderer=Wi,t.SVG=Gi,t.SVGOverlay=Oi,t.TileLayer=Di,t.Tooltip=Ii,t.Transformation=at,t.Util=tt,t.VideoOverlay=ki,t.bind=a,t.bounds=_,t.canvas=Ui,t.circle=function(t,e,i){return new vi(t,e,i)},t.circleMarker=function(t,e){return new gi(t,e)},t.control=Ue,t.divIcon=function(t){return new Ri(t)},t.extend=l,t.featureGroup=function(t,e){return new ci(t,e)},t.geoJSON=Si,t.geoJson=Mt,t.gridLayer=function(t){return new Ni(t)},t.icon=function(t){return new di(t)},t.imageOverlay=function(t,e,i){return new Ei(t,e,i)},t.latLng=w,t.latLngBounds=g,t.layerGroup=function(t,e){return new ui(t,e)},t.map=function(t,e){return new A(t,e)},t.marker=function(t,e){return new mi(t,e)},t.point=m,t.polygon=function(t,e){return new xi(t,e)},t.polyline=function(t,e){return new yi(t,e)},t.popup=function(t,e){return new Bi(t,e)},t.rectangle=function(t,e){return new Yi(t,e)},t.setOptions=c,t.stamp=h,t.svg=Ki,t.svgOverlay=function(t,e,i){return new Oi(t,e,i)},t.tileLayer=ji,t.tooltip=function(t,e){return new Ii(t,e)},t.transformation=ht,t.version="1.9.4",t.videoOverlay=function(t,e,i){return new ki(t,e,i)},window.L);t.noConflict=function(){return window.L=Xi,this},window.L=t}); +//# sourceMappingURL=leaflet.js.map
\ No newline at end of file diff --git a/static/js/simplemde.js b/static/js/simplemde.js new file mode 100644 index 0000000..016d693 --- /dev/null +++ b/static/js/simplemde.js @@ -0,0 +1,2028 @@ +/*global require,module*/ +"use strict"; +var CodeMirror = require("codemirror"); +require("codemirror/addon/edit/continuelist.js"); +require("./codemirror/tablist"); +require("codemirror/addon/display/fullscreen.js"); +require("codemirror/mode/markdown/markdown.js"); +require("codemirror/addon/mode/overlay.js"); +require("codemirror/addon/display/placeholder.js"); +require("codemirror/addon/selection/mark-selection.js"); +require("codemirror/mode/gfm/gfm.js"); +require("codemirror/mode/xml/xml.js"); +var CodeMirrorSpellChecker = require("codemirror-spell-checker"); +var marked = require("marked"); + + +// Some variables +var isMac = /Mac/.test(navigator.platform); + +// Mapping of actions that can be bound to keyboard shortcuts or toolbar buttons +var bindings = { + "toggleBold": toggleBold, + "toggleItalic": toggleItalic, + "drawLink": drawLink, + "toggleHeadingSmaller": toggleHeadingSmaller, + "toggleHeadingBigger": toggleHeadingBigger, + "drawImage": drawImage, + "toggleBlockquote": toggleBlockquote, + "toggleOrderedList": toggleOrderedList, + "toggleUnorderedList": toggleUnorderedList, + "toggleCodeBlock": toggleCodeBlock, + "togglePreview": togglePreview, + "toggleStrikethrough": toggleStrikethrough, + "toggleHeading1": toggleHeading1, + "toggleHeading2": toggleHeading2, + "toggleHeading3": toggleHeading3, + "cleanBlock": cleanBlock, + "drawTable": drawTable, + "drawHorizontalRule": drawHorizontalRule, + "undo": undo, + "redo": redo, + "toggleSideBySide": toggleSideBySide, + "toggleFullScreen": toggleFullScreen +}; + +var shortcuts = { + "toggleBold": "Cmd-B", + "toggleItalic": "Cmd-I", + "drawLink": "Cmd-K", + "toggleHeadingSmaller": "Cmd-H", + "toggleHeadingBigger": "Shift-Cmd-H", + "cleanBlock": "Cmd-E", + "drawImage": "Cmd-Alt-I", + "toggleBlockquote": "Cmd-'", + "toggleOrderedList": "Cmd-Alt-L", + "toggleUnorderedList": "Cmd-L", + "toggleCodeBlock": "Cmd-Alt-C", + "togglePreview": "Cmd-P", + "toggleSideBySide": "F9", + "toggleFullScreen": "F11" +}; + +var getBindingName = function(f) { + for(var key in bindings) { + if(bindings[key] === f) { + return key; + } + } + return null; +}; + +var isMobile = function() { + var check = false; + (function(a) { + if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true; + })(navigator.userAgent || navigator.vendor || window.opera); + return check; +}; + + +/** + * Fix shortcut. Mac use Command, others use Ctrl. + */ +function fixShortcut(name) { + if(isMac) { + name = name.replace("Ctrl", "Cmd"); + } else { + name = name.replace("Cmd", "Ctrl"); + } + return name; +} + + +/** + * Create icon element for toolbar. + */ +function createIcon(options, enableTooltips, shortcuts) { + options = options || {}; + var el = document.createElement("a"); + enableTooltips = (enableTooltips == undefined) ? true : enableTooltips; + + if(options.title && enableTooltips) { + el.title = createTootlip(options.title, options.action, shortcuts); + + if(isMac) { + el.title = el.title.replace("Ctrl", "⌘"); + el.title = el.title.replace("Alt", "⌥"); + } + } + + el.tabIndex = -1; + el.className = options.className; + return el; +} + +function createSep() { + var el = document.createElement("i"); + el.className = "separator"; + el.innerHTML = "|"; + return el; +} + +function createTootlip(title, action, shortcuts) { + var actionName; + var tooltip = title; + + if(action) { + actionName = getBindingName(action); + if(shortcuts[actionName]) { + tooltip += " (" + fixShortcut(shortcuts[actionName]) + ")"; + } + } + + return tooltip; +} + +/** + * The state of CodeMirror at the given position. + */ +function getState(cm, pos) { + pos = pos || cm.getCursor("start"); + var stat = cm.getTokenAt(pos); + if(!stat.type) return {}; + + var types = stat.type.split(" "); + + var ret = {}, + data, text; + for(var i = 0; i < types.length; i++) { + data = types[i]; + if(data === "strong") { + ret.bold = true; + } else if(data === "variable-2") { + text = cm.getLine(pos.line); + if(/^\s*\d+\.\s/.test(text)) { + ret["ordered-list"] = true; + } else { + ret["unordered-list"] = true; + } + } else if(data === "atom") { + ret.quote = true; + } else if(data === "em") { + ret.italic = true; + } else if(data === "quote") { + ret.quote = true; + } else if(data === "strikethrough") { + ret.strikethrough = true; + } else if(data === "comment") { + ret.code = true; + } else if(data === "link") { + ret.link = true; + } else if(data === "tag") { + ret.image = true; + } else if(data.match(/^header(\-[1-6])?$/)) { + ret[data.replace("header", "heading")] = true; + } + } + return ret; +} + + +// Saved overflow setting +var saved_overflow = ""; + +/** + * Toggle full screen of the editor. + */ +function toggleFullScreen(editor) { + // Set fullscreen + var cm = editor.codemirror; + cm.setOption("fullScreen", !cm.getOption("fullScreen")); + + + // Prevent scrolling on body during fullscreen active + if(cm.getOption("fullScreen")) { + saved_overflow = document.body.style.overflow; + document.body.style.overflow = "hidden"; + } else { + document.body.style.overflow = saved_overflow; + } + + + // Update toolbar class + var wrap = cm.getWrapperElement(); + + if(!/fullscreen/.test(wrap.previousSibling.className)) { + wrap.previousSibling.className += " fullscreen"; + } else { + wrap.previousSibling.className = wrap.previousSibling.className.replace(/\s*fullscreen\b/, ""); + } + + + // Update toolbar button + var toolbarButton = editor.toolbarElements.fullscreen; + + if(!/active/.test(toolbarButton.className)) { + toolbarButton.className += " active"; + } else { + toolbarButton.className = toolbarButton.className.replace(/\s*active\s*/g, ""); + } + + + // Hide side by side if needed + var sidebyside = cm.getWrapperElement().nextSibling; + if(/editor-preview-active-side/.test(sidebyside.className)) + toggleSideBySide(editor); +} + + +/** + * Action for toggling bold. + */ +function toggleBold(editor) { + _toggleBlock(editor, "bold", editor.options.blockStyles.bold); +} + + +/** + * Action for toggling italic. + */ +function toggleItalic(editor) { + _toggleBlock(editor, "italic", editor.options.blockStyles.italic); +} + + +/** + * Action for toggling strikethrough. + */ +function toggleStrikethrough(editor) { + _toggleBlock(editor, "strikethrough", "~~"); +} + +/** + * Action for toggling code block. + */ +function toggleCodeBlock(editor) { + var fenceCharsToInsert = editor.options.blockStyles.code; + + function fencing_line(line) { + /* return true, if this is a ``` or ~~~ line */ + if(typeof line !== "object") { + throw "fencing_line() takes a 'line' object (not a line number, or line text). Got: " + typeof line + ": " + line; + } + return line.styles && line.styles[2] && line.styles[2].indexOf("formatting-code-block") !== -1; + } + + function token_state(token) { + // base goes an extra level deep when mode backdrops are used, e.g. spellchecker on + return token.state.base.base || token.state.base; + } + + function code_type(cm, line_num, line, firstTok, lastTok) { + /* + * Return "single", "indented", "fenced" or false + * + * cm and line_num are required. Others are optional for efficiency + * To check in the middle of a line, pass in firstTok yourself. + */ + line = line || cm.getLineHandle(line_num); + firstTok = firstTok || cm.getTokenAt({ + line: line_num, + ch: 1 + }); + lastTok = lastTok || (!!line.text && cm.getTokenAt({ + line: line_num, + ch: line.text.length - 1 + })); + var types = firstTok.type ? firstTok.type.split(" ") : []; + if(lastTok && token_state(lastTok).indentedCode) { + // have to check last char, since first chars of first line aren"t marked as indented + return "indented"; + } else if(types.indexOf("comment") === -1) { + // has to be after "indented" check, since first chars of first indented line aren"t marked as such + return false; + } else if(token_state(firstTok).fencedChars || token_state(lastTok).fencedChars || fencing_line(line)) { + return "fenced"; + } else { + return "single"; + } + } + + function insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert) { + var start_line_sel = cur_start.line + 1, + end_line_sel = cur_end.line + 1, + sel_multi = cur_start.line !== cur_end.line, + repl_start = fenceCharsToInsert + "\n", + repl_end = "\n" + fenceCharsToInsert; + if(sel_multi) { + end_line_sel++; + } + // handle last char including \n or not + if(sel_multi && cur_end.ch === 0) { + repl_end = fenceCharsToInsert + "\n"; + end_line_sel--; + } + _replaceSelection(cm, false, [repl_start, repl_end]); + cm.setSelection({ + line: start_line_sel, + ch: 0 + }, { + line: end_line_sel, + ch: 0 + }); + } + + var cm = editor.codemirror, + cur_start = cm.getCursor("start"), + cur_end = cm.getCursor("end"), + tok = cm.getTokenAt({ + line: cur_start.line, + ch: cur_start.ch || 1 + }), // avoid ch 0 which is a cursor pos but not token + line = cm.getLineHandle(cur_start.line), + is_code = code_type(cm, cur_start.line, line, tok); + var block_start, block_end, lineCount; + + if(is_code === "single") { + // similar to some SimpleMDE _toggleBlock logic + var start = line.text.slice(0, cur_start.ch).replace("`", ""), + end = line.text.slice(cur_start.ch).replace("`", ""); + cm.replaceRange(start + end, { + line: cur_start.line, + ch: 0 + }, { + line: cur_start.line, + ch: 99999999999999 + }); + cur_start.ch--; + if(cur_start !== cur_end) { + cur_end.ch--; + } + cm.setSelection(cur_start, cur_end); + cm.focus(); + } else if(is_code === "fenced") { + if(cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) { + // use selection + + // find the fenced line so we know what type it is (tilde, backticks, number of them) + for(block_start = cur_start.line; block_start >= 0; block_start--) { + line = cm.getLineHandle(block_start); + if(fencing_line(line)) { + break; + } + } + var fencedTok = cm.getTokenAt({ + line: block_start, + ch: 1 + }); + var fence_chars = token_state(fencedTok).fencedChars; + var start_text, start_line; + var end_text, end_line; + // check for selection going up against fenced lines, in which case we don't want to add more fencing + if(fencing_line(cm.getLineHandle(cur_start.line))) { + start_text = ""; + start_line = cur_start.line; + } else if(fencing_line(cm.getLineHandle(cur_start.line - 1))) { + start_text = ""; + start_line = cur_start.line - 1; + } else { + start_text = fence_chars + "\n"; + start_line = cur_start.line; + } + if(fencing_line(cm.getLineHandle(cur_end.line))) { + end_text = ""; + end_line = cur_end.line; + if(cur_end.ch === 0) { + end_line += 1; + } + } else if(cur_end.ch !== 0 && fencing_line(cm.getLineHandle(cur_end.line + 1))) { + end_text = ""; + end_line = cur_end.line + 1; + } else { + end_text = fence_chars + "\n"; + end_line = cur_end.line + 1; + } + if(cur_end.ch === 0) { + // full last line selected, putting cursor at beginning of next + end_line -= 1; + } + cm.operation(function() { + // end line first, so that line numbers don't change + cm.replaceRange(end_text, { + line: end_line, + ch: 0 + }, { + line: end_line + (end_text ? 0 : 1), + ch: 0 + }); + cm.replaceRange(start_text, { + line: start_line, + ch: 0 + }, { + line: start_line + (start_text ? 0 : 1), + ch: 0 + }); + }); + cm.setSelection({ + line: start_line + (start_text ? 1 : 0), + ch: 0 + }, { + line: end_line + (start_text ? 1 : -1), + ch: 0 + }); + cm.focus(); + } else { + // no selection, search for ends of this fenced block + var search_from = cur_start.line; + if(fencing_line(cm.getLineHandle(cur_start.line))) { // gets a little tricky if cursor is right on a fenced line + if(code_type(cm, cur_start.line + 1) === "fenced") { + block_start = cur_start.line; + search_from = cur_start.line + 1; // for searching for "end" + } else { + block_end = cur_start.line; + search_from = cur_start.line - 1; // for searching for "start" + } + } + if(block_start === undefined) { + for(block_start = search_from; block_start >= 0; block_start--) { + line = cm.getLineHandle(block_start); + if(fencing_line(line)) { + break; + } + } + } + if(block_end === undefined) { + lineCount = cm.lineCount(); + for(block_end = search_from; block_end < lineCount; block_end++) { + line = cm.getLineHandle(block_end); + if(fencing_line(line)) { + break; + } + } + } + cm.operation(function() { + cm.replaceRange("", { + line: block_start, + ch: 0 + }, { + line: block_start + 1, + ch: 0 + }); + cm.replaceRange("", { + line: block_end - 1, + ch: 0 + }, { + line: block_end, + ch: 0 + }); + }); + cm.focus(); + } + } else if(is_code === "indented") { + if(cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) { + // use selection + block_start = cur_start.line; + block_end = cur_end.line; + if(cur_end.ch === 0) { + block_end--; + } + } else { + // no selection, search for ends of this indented block + for(block_start = cur_start.line; block_start >= 0; block_start--) { + line = cm.getLineHandle(block_start); + if(line.text.match(/^\s*$/)) { + // empty or all whitespace - keep going + continue; + } else { + if(code_type(cm, block_start, line) !== "indented") { + block_start += 1; + break; + } + } + } + lineCount = cm.lineCount(); + for(block_end = cur_start.line; block_end < lineCount; block_end++) { + line = cm.getLineHandle(block_end); + if(line.text.match(/^\s*$/)) { + // empty or all whitespace - keep going + continue; + } else { + if(code_type(cm, block_end, line) !== "indented") { + block_end -= 1; + break; + } + } + } + } + // if we are going to un-indent based on a selected set of lines, and the next line is indented too, we need to + // insert a blank line so that the next line(s) continue to be indented code + var next_line = cm.getLineHandle(block_end + 1), + next_line_last_tok = next_line && cm.getTokenAt({ + line: block_end + 1, + ch: next_line.text.length - 1 + }), + next_line_indented = next_line_last_tok && token_state(next_line_last_tok).indentedCode; + if(next_line_indented) { + cm.replaceRange("\n", { + line: block_end + 1, + ch: 0 + }); + } + + for(var i = block_start; i <= block_end; i++) { + cm.indentLine(i, "subtract"); // TODO: this doesn't get tracked in the history, so can't be undone :( + } + cm.focus(); + } else { + // insert code formatting + var no_sel_and_starting_of_line = (cur_start.line === cur_end.line && cur_start.ch === cur_end.ch && cur_start.ch === 0); + var sel_multi = cur_start.line !== cur_end.line; + if(no_sel_and_starting_of_line || sel_multi) { + insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert); + } else { + _replaceSelection(cm, false, ["`", "`"]); + } + } +} + +/** + * Action for toggling blockquote. + */ +function toggleBlockquote(editor) { + var cm = editor.codemirror; + _toggleLine(cm, "quote"); +} + +/** + * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal + */ +function toggleHeadingSmaller(editor) { + var cm = editor.codemirror; + _toggleHeading(cm, "smaller"); +} + +/** + * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal + */ +function toggleHeadingBigger(editor) { + var cm = editor.codemirror; + _toggleHeading(cm, "bigger"); +} + +/** + * Action for toggling heading size 1 + */ +function toggleHeading1(editor) { + var cm = editor.codemirror; + _toggleHeading(cm, undefined, 1); +} + +/** + * Action for toggling heading size 2 + */ +function toggleHeading2(editor) { + var cm = editor.codemirror; + _toggleHeading(cm, undefined, 2); +} + +/** + * Action for toggling heading size 3 + */ +function toggleHeading3(editor) { + var cm = editor.codemirror; + _toggleHeading(cm, undefined, 3); +} + + +/** + * Action for toggling ul. + */ +function toggleUnorderedList(editor) { + var cm = editor.codemirror; + _toggleLine(cm, "unordered-list"); +} + + +/** + * Action for toggling ol. + */ +function toggleOrderedList(editor) { + var cm = editor.codemirror; + _toggleLine(cm, "ordered-list"); +} + +/** + * Action for clean block (remove headline, list, blockquote code, markers) + */ +function cleanBlock(editor) { + var cm = editor.codemirror; + _cleanBlock(cm); +} + +/** + * Action for drawing a link. + */ +function drawLink(editor) { + var cm = editor.codemirror; + var stat = getState(cm); + var options = editor.options; + var url = "http://"; + if(options.promptURLs) { + url = prompt(options.promptTexts.link); + if(!url) { + return false; + } + } + _replaceSelection(cm, stat.link, options.insertTexts.link, url); +} + +/** + * Action for drawing an img. + */ +function drawImage(editor) { + var cm = editor.codemirror; + var stat = getState(cm); + var options = editor.options; + var url = "http://"; + if(options.promptURLs) { + url = prompt(options.promptTexts.image); + if(!url) { + return false; + } + } + _replaceSelection(cm, stat.image, options.insertTexts.image, url); +} + +/** + * Action for drawing a table. + */ +function drawTable(editor) { + var cm = editor.codemirror; + var stat = getState(cm); + var options = editor.options; + _replaceSelection(cm, stat.table, options.insertTexts.table); +} + +/** + * Action for drawing a horizontal rule. + */ +function drawHorizontalRule(editor) { + var cm = editor.codemirror; + var stat = getState(cm); + var options = editor.options; + _replaceSelection(cm, stat.image, options.insertTexts.horizontalRule); +} + + +/** + * Undo action. + */ +function undo(editor) { + var cm = editor.codemirror; + cm.undo(); + cm.focus(); +} + + +/** + * Redo action. + */ +function redo(editor) { + var cm = editor.codemirror; + cm.redo(); + cm.focus(); +} + + +/** + * Toggle side by side preview + */ +function toggleSideBySide(editor) { + var cm = editor.codemirror; + var wrapper = cm.getWrapperElement(); + var preview = wrapper.nextSibling; + var toolbarButton = editor.toolbarElements["side-by-side"]; + var useSideBySideListener = false; + if(/editor-preview-active-side/.test(preview.className)) { + preview.className = preview.className.replace( + /\s*editor-preview-active-side\s*/g, "" + ); + toolbarButton.className = toolbarButton.className.replace(/\s*active\s*/g, ""); + wrapper.className = wrapper.className.replace(/\s*CodeMirror-sided\s*/g, " "); + } else { + // When the preview button is clicked for the first time, + // give some time for the transition from editor.css to fire and the view to slide from right to left, + // instead of just appearing. + setTimeout(function() { + if(!cm.getOption("fullScreen")) + toggleFullScreen(editor); + preview.className += " editor-preview-active-side"; + }, 1); + toolbarButton.className += " active"; + wrapper.className += " CodeMirror-sided"; + useSideBySideListener = true; + } + + // Hide normal preview if active + var previewNormal = wrapper.lastChild; + if(/editor-preview-active/.test(previewNormal.className)) { + previewNormal.className = previewNormal.className.replace( + /\s*editor-preview-active\s*/g, "" + ); + var toolbar = editor.toolbarElements.preview; + var toolbar_div = wrapper.previousSibling; + toolbar.className = toolbar.className.replace(/\s*active\s*/g, ""); + toolbar_div.className = toolbar_div.className.replace(/\s*disabled-for-preview*/g, ""); + } + + var sideBySideRenderingFunction = function() { + preview.innerHTML = editor.options.previewRender(editor.value(), preview); + }; + + if(!cm.sideBySideRenderingFunction) { + cm.sideBySideRenderingFunction = sideBySideRenderingFunction; + } + + if(useSideBySideListener) { + preview.innerHTML = editor.options.previewRender(editor.value(), preview); + cm.on("update", cm.sideBySideRenderingFunction); + } else { + cm.off("update", cm.sideBySideRenderingFunction); + } + + // Refresh to fix selection being off (#309) + cm.refresh(); +} + + +/** + * Preview action. + */ +function togglePreview(editor) { + var cm = editor.codemirror; + var wrapper = cm.getWrapperElement(); + var toolbar_div = wrapper.previousSibling; + var toolbar = editor.options.toolbar ? editor.toolbarElements.preview : false; + var preview = wrapper.lastChild; + if(!preview || !/editor-preview/.test(preview.className)) { + preview = document.createElement("div"); + preview.className = "editor-preview"; + wrapper.appendChild(preview); + } + if(/editor-preview-active/.test(preview.className)) { + preview.className = preview.className.replace( + /\s*editor-preview-active\s*/g, "" + ); + if(toolbar) { + toolbar.className = toolbar.className.replace(/\s*active\s*/g, ""); + toolbar_div.className = toolbar_div.className.replace(/\s*disabled-for-preview*/g, ""); + } + } else { + // When the preview button is clicked for the first time, + // give some time for the transition from editor.css to fire and the view to slide from right to left, + // instead of just appearing. + setTimeout(function() { + preview.className += " editor-preview-active"; + }, 1); + if(toolbar) { + toolbar.className += " active"; + toolbar_div.className += " disabled-for-preview"; + } + } + preview.innerHTML = editor.options.previewRender(editor.value(), preview); + + // Turn off side by side if needed + var sidebyside = cm.getWrapperElement().nextSibling; + if(/editor-preview-active-side/.test(sidebyside.className)) + toggleSideBySide(editor); +} + +function _replaceSelection(cm, active, startEnd, url) { + if(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) + return; + + var text; + var start = startEnd[0]; + var end = startEnd[1]; + var startPoint = cm.getCursor("start"); + var endPoint = cm.getCursor("end"); + if(url) { + end = end.replace("#url#", url); + } + if(active) { + text = cm.getLine(startPoint.line); + start = text.slice(0, startPoint.ch); + end = text.slice(startPoint.ch); + cm.replaceRange(start + end, { + line: startPoint.line, + ch: 0 + }); + } else { + text = cm.getSelection(); + cm.replaceSelection(start + text + end); + + startPoint.ch += start.length; + if(startPoint !== endPoint) { + endPoint.ch += start.length; + } + } + cm.setSelection(startPoint, endPoint); + cm.focus(); +} + + +function _toggleHeading(cm, direction, size) { + if(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) + return; + + var startPoint = cm.getCursor("start"); + var endPoint = cm.getCursor("end"); + for(var i = startPoint.line; i <= endPoint.line; i++) { + (function(i) { + var text = cm.getLine(i); + var currHeadingLevel = text.search(/[^#]/); + + if(direction !== undefined) { + if(currHeadingLevel <= 0) { + if(direction == "bigger") { + text = "###### " + text; + } else { + text = "# " + text; + } + } else if(currHeadingLevel == 6 && direction == "smaller") { + text = text.substr(7); + } else if(currHeadingLevel == 1 && direction == "bigger") { + text = text.substr(2); + } else { + if(direction == "bigger") { + text = text.substr(1); + } else { + text = "#" + text; + } + } + } else { + if(size == 1) { + if(currHeadingLevel <= 0) { + text = "# " + text; + } else if(currHeadingLevel == size) { + text = text.substr(currHeadingLevel + 1); + } else { + text = "# " + text.substr(currHeadingLevel + 1); + } + } else if(size == 2) { + if(currHeadingLevel <= 0) { + text = "## " + text; + } else if(currHeadingLevel == size) { + text = text.substr(currHeadingLevel + 1); + } else { + text = "## " + text.substr(currHeadingLevel + 1); + } + } else { + if(currHeadingLevel <= 0) { + text = "### " + text; + } else if(currHeadingLevel == size) { + text = text.substr(currHeadingLevel + 1); + } else { + text = "### " + text.substr(currHeadingLevel + 1); + } + } + } + + cm.replaceRange(text, { + line: i, + ch: 0 + }, { + line: i, + ch: 99999999999999 + }); + })(i); + } + cm.focus(); +} + + +function _toggleLine(cm, name) { + if(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) + return; + + var stat = getState(cm); + var startPoint = cm.getCursor("start"); + var endPoint = cm.getCursor("end"); + var repl = { + "quote": /^(\s*)\>\s+/, + "unordered-list": /^(\s*)(\*|\-|\+)\s+/, + "ordered-list": /^(\s*)\d+\.\s+/ + }; + var map = { + "quote": "> ", + "unordered-list": "* ", + "ordered-list": "1. " + }; + for(var i = startPoint.line; i <= endPoint.line; i++) { + (function(i) { + var text = cm.getLine(i); + if(stat[name]) { + text = text.replace(repl[name], "$1"); + } else { + text = map[name] + text; + } + cm.replaceRange(text, { + line: i, + ch: 0 + }, { + line: i, + ch: 99999999999999 + }); + })(i); + } + cm.focus(); +} + +function _toggleBlock(editor, type, start_chars, end_chars) { + if(/editor-preview-active/.test(editor.codemirror.getWrapperElement().lastChild.className)) + return; + + end_chars = (typeof end_chars === "undefined") ? start_chars : end_chars; + var cm = editor.codemirror; + var stat = getState(cm); + + var text; + var start = start_chars; + var end = end_chars; + + var startPoint = cm.getCursor("start"); + var endPoint = cm.getCursor("end"); + + if(stat[type]) { + text = cm.getLine(startPoint.line); + start = text.slice(0, startPoint.ch); + end = text.slice(startPoint.ch); + if(type == "bold") { + start = start.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/, ""); + end = end.replace(/(\*\*|__)/, ""); + } else if(type == "italic") { + start = start.replace(/(\*|_)(?![\s\S]*(\*|_))/, ""); + end = end.replace(/(\*|_)/, ""); + } else if(type == "strikethrough") { + start = start.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/, ""); + end = end.replace(/(\*\*|~~)/, ""); + } + cm.replaceRange(start + end, { + line: startPoint.line, + ch: 0 + }, { + line: startPoint.line, + ch: 99999999999999 + }); + + if(type == "bold" || type == "strikethrough") { + startPoint.ch -= 2; + if(startPoint !== endPoint) { + endPoint.ch -= 2; + } + } else if(type == "italic") { + startPoint.ch -= 1; + if(startPoint !== endPoint) { + endPoint.ch -= 1; + } + } + } else { + text = cm.getSelection(); + if(type == "bold") { + text = text.split("**").join(""); + text = text.split("__").join(""); + } else if(type == "italic") { + text = text.split("*").join(""); + text = text.split("_").join(""); + } else if(type == "strikethrough") { + text = text.split("~~").join(""); + } + cm.replaceSelection(start + text + end); + + startPoint.ch += start_chars.length; + endPoint.ch = startPoint.ch + text.length; + } + + cm.setSelection(startPoint, endPoint); + cm.focus(); +} + +function _cleanBlock(cm) { + if(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) + return; + + var startPoint = cm.getCursor("start"); + var endPoint = cm.getCursor("end"); + var text; + + for(var line = startPoint.line; line <= endPoint.line; line++) { + text = cm.getLine(line); + text = text.replace(/^[ ]*([# ]+|\*|\-|[> ]+|[0-9]+(.|\)))[ ]*/, ""); + + cm.replaceRange(text, { + line: line, + ch: 0 + }, { + line: line, + ch: 99999999999999 + }); + } +} + +// Merge the properties of one object into another. +function _mergeProperties(target, source) { + for(var property in source) { + if(source.hasOwnProperty(property)) { + if(source[property] instanceof Array) { + target[property] = source[property].concat(target[property] instanceof Array ? target[property] : []); + } else if( + source[property] !== null && + typeof source[property] === "object" && + source[property].constructor === Object + ) { + target[property] = _mergeProperties(target[property] || {}, source[property]); + } else { + target[property] = source[property]; + } + } + } + + return target; +} + +// Merge an arbitrary number of objects into one. +function extend(target) { + for(var i = 1; i < arguments.length; i++) { + target = _mergeProperties(target, arguments[i]); + } + + return target; +} + +/* The right word count in respect for CJK. */ +function wordCount(data) { + var pattern = /[a-zA-Z0-9_\u0392-\u03c9\u0410-\u04F9]+|[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af]+/g; + var m = data.match(pattern); + var count = 0; + if(m === null) return count; + for(var i = 0; i < m.length; i++) { + if(m[i].charCodeAt(0) >= 0x4E00) { + count += m[i].length; + } else { + count += 1; + } + } + return count; +} + +var toolbarBuiltInButtons = { + "bold": { + name: "bold", + action: toggleBold, + className: "fa fa-bold", + title: "Bold", + default: true + }, + "italic": { + name: "italic", + action: toggleItalic, + className: "fa fa-italic", + title: "Italic", + default: true + }, + "strikethrough": { + name: "strikethrough", + action: toggleStrikethrough, + className: "fa fa-strikethrough", + title: "Strikethrough" + }, + "heading": { + name: "heading", + action: toggleHeadingSmaller, + className: "fa fa-header", + title: "Heading", + default: true + }, + "heading-smaller": { + name: "heading-smaller", + action: toggleHeadingSmaller, + className: "fa fa-header fa-header-x fa-header-smaller", + title: "Smaller Heading" + }, + "heading-bigger": { + name: "heading-bigger", + action: toggleHeadingBigger, + className: "fa fa-header fa-header-x fa-header-bigger", + title: "Bigger Heading" + }, + "heading-1": { + name: "heading-1", + action: toggleHeading1, + className: "fa fa-header fa-header-x fa-header-1", + title: "Big Heading" + }, + "heading-2": { + name: "heading-2", + action: toggleHeading2, + className: "fa fa-header fa-header-x fa-header-2", + title: "Medium Heading" + }, + "heading-3": { + name: "heading-3", + action: toggleHeading3, + className: "fa fa-header fa-header-x fa-header-3", + title: "Small Heading" + }, + "separator-1": { + name: "separator-1" + }, + "code": { + name: "code", + action: toggleCodeBlock, + className: "fa fa-code", + title: "Code" + }, + "quote": { + name: "quote", + action: toggleBlockquote, + className: "fa fa-quote-left", + title: "Quote", + default: true + }, + "unordered-list": { + name: "unordered-list", + action: toggleUnorderedList, + className: "fa fa-list-ul", + title: "Generic List", + default: true + }, + "ordered-list": { + name: "ordered-list", + action: toggleOrderedList, + className: "fa fa-list-ol", + title: "Numbered List", + default: true + }, + "clean-block": { + name: "clean-block", + action: cleanBlock, + className: "fa fa-eraser fa-clean-block", + title: "Clean block" + }, + "separator-2": { + name: "separator-2" + }, + "link": { + name: "link", + action: drawLink, + className: "fa fa-link", + title: "Create Link", + default: true + }, + "image": { + name: "image", + action: drawImage, + className: "fa fa-picture-o", + title: "Insert Image", + default: true + }, + "table": { + name: "table", + action: drawTable, + className: "fa fa-table", + title: "Insert Table" + }, + "horizontal-rule": { + name: "horizontal-rule", + action: drawHorizontalRule, + className: "fa fa-minus", + title: "Insert Horizontal Line" + }, + "separator-3": { + name: "separator-3" + }, + "preview": { + name: "preview", + action: togglePreview, + className: "fa fa-eye no-disable", + title: "Toggle Preview", + default: true + }, + "side-by-side": { + name: "side-by-side", + action: toggleSideBySide, + className: "fa fa-columns no-disable no-mobile", + title: "Toggle Side by Side", + default: true + }, + "fullscreen": { + name: "fullscreen", + action: toggleFullScreen, + className: "fa fa-arrows-alt no-disable no-mobile", + title: "Toggle Fullscreen", + default: true + }, + "separator-4": { + name: "separator-4" + }, + "guide": { + name: "guide", + action: "https://simplemde.com/markdown-guide", + className: "fa fa-question-circle", + title: "Markdown Guide", + default: true + }, + "separator-5": { + name: "separator-5" + }, + "undo": { + name: "undo", + action: undo, + className: "fa fa-undo no-disable", + title: "Undo" + }, + "redo": { + name: "redo", + action: redo, + className: "fa fa-repeat no-disable", + title: "Redo" + } +}; + +var insertTexts = { + link: ["[", "](#url#)"], + image: [""], + table: ["", "\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"], + horizontalRule: ["", "\n\n-----\n\n"] +}; + +var promptTexts = { + link: "URL for the link:", + image: "URL of the image:" +}; + +var blockStyles = { + "bold": "**", + "code": "```", + "italic": "*" +}; + +/** + * Interface of SimpleMDE. + */ +function SimpleMDE(options) { + // Handle options parameter + options = options || {}; + + + // Used later to refer to it"s parent + options.parent = this; + + + // Check if Font Awesome needs to be auto downloaded + var autoDownloadFA = true; + + if(options.autoDownloadFontAwesome === false) { + autoDownloadFA = false; + } + + if(options.autoDownloadFontAwesome !== true) { + var styleSheets = document.styleSheets; + for(var i = 0; i < styleSheets.length; i++) { + if(!styleSheets[i].href) + continue; + + if(styleSheets[i].href.indexOf("//maxcdn.bootstrapcdn.com/font-awesome/") > -1) { + autoDownloadFA = false; + } + } + } + + if(autoDownloadFA) { + var link = document.createElement("link"); + link.rel = "stylesheet"; + link.href = "https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css"; + document.getElementsByTagName("head")[0].appendChild(link); + } + + + // Find the textarea to use + if(options.element) { + this.element = options.element; + } else if(options.element === null) { + // This means that the element option was specified, but no element was found + console.log("SimpleMDE: Error. No element was found."); + return; + } + + + // Handle toolbar + if(options.toolbar === undefined) { + // Initialize + options.toolbar = []; + + + // Loop over the built in buttons, to get the preferred order + for(var key in toolbarBuiltInButtons) { + if(toolbarBuiltInButtons.hasOwnProperty(key)) { + if(key.indexOf("separator-") != -1) { + options.toolbar.push("|"); + } + + if(toolbarBuiltInButtons[key].default === true || (options.showIcons && options.showIcons.constructor === Array && options.showIcons.indexOf(key) != -1)) { + options.toolbar.push(key); + } + } + } + } + + + // Handle status bar + if(!options.hasOwnProperty("status")) { + options.status = ["autosave", "lines", "words", "cursor"]; + } + + + // Add default preview rendering function + if(!options.previewRender) { + options.previewRender = function(plainText) { + // Note: "this" refers to the options object + return this.parent.markdown(plainText); + }; + } + + + // Set default options for parsing config + options.parsingConfig = extend({ + highlightFormatting: true // needed for toggleCodeBlock to detect types of code + }, options.parsingConfig || {}); + + + // Merging the insertTexts, with the given options + options.insertTexts = extend({}, insertTexts, options.insertTexts || {}); + + + // Merging the promptTexts, with the given options + options.promptTexts = promptTexts; + + + // Merging the blockStyles, with the given options + options.blockStyles = extend({}, blockStyles, options.blockStyles || {}); + + + // Merging the shortcuts, with the given options + options.shortcuts = extend({}, shortcuts, options.shortcuts || {}); + + + // Change unique_id to uniqueId for backwards compatibility + if(options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != "") + options.autosave.uniqueId = options.autosave.unique_id; + + + // Update this options + this.options = options; + + + // Auto render + this.render(); + + + // The codemirror component is only available after rendering + // so, the setter for the initialValue can only run after + // the element has been rendered + if(options.initialValue && (!this.options.autosave || this.options.autosave.foundSavedValue !== true)) { + this.value(options.initialValue); + } +} + +/** + * Default markdown render. + */ +SimpleMDE.prototype.markdown = function(text) { + if(marked) { + // Initialize + var markedOptions = {}; + + + // Update options + if(this.options && this.options.renderingConfig && this.options.renderingConfig.singleLineBreaks === false) { + markedOptions.breaks = false; + } else { + markedOptions.breaks = true; + } + + if(this.options && this.options.renderingConfig && this.options.renderingConfig.codeSyntaxHighlighting === true && window.hljs) { + markedOptions.highlight = function(code) { + return window.hljs.highlightAuto(code).value; + }; + } + + + // Set options + marked.setOptions(markedOptions); + + + // Return + return marked(text); + } +}; + +/** + * Render editor to the given element. + */ +SimpleMDE.prototype.render = function(el) { + if(!el) { + el = this.element || document.getElementsByTagName("textarea")[0]; + } + + if(this._rendered && this._rendered === el) { + // Already rendered. + return; + } + + this.element = el; + var options = this.options; + + var self = this; + var keyMaps = {}; + + for(var key in options.shortcuts) { + // null stands for "do not bind this command" + if(options.shortcuts[key] !== null && bindings[key] !== null) { + (function(key) { + keyMaps[fixShortcut(options.shortcuts[key])] = function() { + bindings[key](self); + }; + })(key); + } + } + + keyMaps["Enter"] = "newlineAndIndentContinueMarkdownList"; + keyMaps["Tab"] = "tabAndIndentMarkdownList"; + keyMaps["Shift-Tab"] = "shiftTabAndUnindentMarkdownList"; + keyMaps["Esc"] = function(cm) { + if(cm.getOption("fullScreen")) toggleFullScreen(self); + }; + + document.addEventListener("keydown", function(e) { + e = e || window.event; + + if(e.keyCode == 27) { + if(self.codemirror.getOption("fullScreen")) toggleFullScreen(self); + } + }, false); + + var mode, backdrop; + if(options.spellChecker !== false) { + mode = "spell-checker"; + backdrop = options.parsingConfig; + backdrop.name = "gfm"; + backdrop.gitHubSpice = false; + + CodeMirrorSpellChecker({ + codeMirrorInstance: CodeMirror + }); + } else { + mode = options.parsingConfig; + mode.name = "gfm"; + mode.gitHubSpice = false; + } + + this.codemirror = CodeMirror.fromTextArea(el, { + mode: mode, + backdrop: backdrop, + theme: "paper", + tabSize: (options.tabSize != undefined) ? options.tabSize : 2, + indentUnit: (options.tabSize != undefined) ? options.tabSize : 2, + indentWithTabs: (options.indentWithTabs === false) ? false : true, + lineNumbers: false, + autofocus: (options.autofocus === true) ? true : false, + extraKeys: keyMaps, + lineWrapping: (options.lineWrapping === false) ? false : true, + allowDropFileTypes: ["text/plain"], + placeholder: options.placeholder || el.getAttribute("placeholder") || "", + styleSelectedText: (options.styleSelectedText != undefined) ? options.styleSelectedText : true + }); + + if(options.forceSync === true) { + var cm = this.codemirror; + cm.on("change", function() { + cm.save(); + }); + } + + this.gui = {}; + + if(options.toolbar !== false) { + this.gui.toolbar = this.createToolbar(); + } + if(options.status !== false) { + this.gui.statusbar = this.createStatusbar(); + } + if(options.autosave != undefined && options.autosave.enabled === true) { + this.autosave(); + } + + this.gui.sideBySide = this.createSideBySide(); + + this._rendered = this.element; + + + // Fixes CodeMirror bug (#344) + var temp_cm = this.codemirror; + setTimeout(function() { + temp_cm.refresh(); + }.bind(temp_cm), 0); +}; + +// Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem throw QuotaExceededError. We're going to detect this and set a variable accordingly. +function isLocalStorageAvailable() { + if(typeof localStorage === "object") { + try { + localStorage.setItem("smde_localStorage", 1); + localStorage.removeItem("smde_localStorage"); + } catch(e) { + return false; + } + } else { + return false; + } + + return true; +} + +SimpleMDE.prototype.autosave = function() { + if(isLocalStorageAvailable()) { + var simplemde = this; + + if(this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == "") { + console.log("SimpleMDE: You must set a uniqueId to use the autosave feature"); + return; + } + + if(simplemde.element.form != null && simplemde.element.form != undefined) { + simplemde.element.form.addEventListener("submit", function() { + localStorage.removeItem("smde_" + simplemde.options.autosave.uniqueId); + }); + } + + if(this.options.autosave.loaded !== true) { + if(typeof localStorage.getItem("smde_" + this.options.autosave.uniqueId) == "string" && localStorage.getItem("smde_" + this.options.autosave.uniqueId) != "") { + this.codemirror.setValue(localStorage.getItem("smde_" + this.options.autosave.uniqueId)); + this.options.autosave.foundSavedValue = true; + } + + this.options.autosave.loaded = true; + } + + localStorage.setItem("smde_" + this.options.autosave.uniqueId, simplemde.value()); + + var el = document.getElementById("autosaved"); + if(el != null && el != undefined && el != "") { + var d = new Date(); + var hh = d.getHours(); + var m = d.getMinutes(); + var dd = "am"; + var h = hh; + if(h >= 12) { + h = hh - 12; + dd = "pm"; + } + if(h == 0) { + h = 12; + } + m = m < 10 ? "0" + m : m; + + el.innerHTML = "Autosaved: " + h + ":" + m + " " + dd; + } + + this.autosaveTimeoutId = setTimeout(function() { + simplemde.autosave(); + }, this.options.autosave.delay || 10000); + } else { + console.log("SimpleMDE: localStorage not available, cannot autosave"); + } +}; + +SimpleMDE.prototype.clearAutosavedValue = function() { + if(isLocalStorageAvailable()) { + if(this.options.autosave == undefined || this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == "") { + console.log("SimpleMDE: You must set a uniqueId to clear the autosave value"); + return; + } + + localStorage.removeItem("smde_" + this.options.autosave.uniqueId); + } else { + console.log("SimpleMDE: localStorage not available, cannot autosave"); + } +}; + +SimpleMDE.prototype.createSideBySide = function() { + var cm = this.codemirror; + var wrapper = cm.getWrapperElement(); + var preview = wrapper.nextSibling; + + if(!preview || !/editor-preview-side/.test(preview.className)) { + preview = document.createElement("div"); + preview.className = "editor-preview-side"; + wrapper.parentNode.insertBefore(preview, wrapper.nextSibling); + } + + // Syncs scroll editor -> preview + var cScroll = false; + var pScroll = false; + cm.on("scroll", function(v) { + if(cScroll) { + cScroll = false; + return; + } + pScroll = true; + var height = v.getScrollInfo().height - v.getScrollInfo().clientHeight; + var ratio = parseFloat(v.getScrollInfo().top) / height; + var move = (preview.scrollHeight - preview.clientHeight) * ratio; + preview.scrollTop = move; + }); + + // Syncs scroll preview -> editor + preview.onscroll = function() { + if(pScroll) { + pScroll = false; + return; + } + cScroll = true; + var height = preview.scrollHeight - preview.clientHeight; + var ratio = parseFloat(preview.scrollTop) / height; + var move = (cm.getScrollInfo().height - cm.getScrollInfo().clientHeight) * ratio; + cm.scrollTo(0, move); + }; + return preview; +}; + +SimpleMDE.prototype.createToolbar = function(items) { + items = items || this.options.toolbar; + + if(!items || items.length === 0) { + return; + } + var i; + for(i = 0; i < items.length; i++) { + if(toolbarBuiltInButtons[items[i]] != undefined) { + items[i] = toolbarBuiltInButtons[items[i]]; + } + } + + var bar = document.createElement("div"); + bar.className = "editor-toolbar"; + + var self = this; + + var toolbarData = {}; + self.toolbar = items; + + for(i = 0; i < items.length; i++) { + if(items[i].name == "guide" && self.options.toolbarGuideIcon === false) + continue; + + if(self.options.hideIcons && self.options.hideIcons.indexOf(items[i].name) != -1) + continue; + + // Fullscreen does not work well on mobile devices (even tablets) + // In the future, hopefully this can be resolved + if((items[i].name == "fullscreen" || items[i].name == "side-by-side") && isMobile()) + continue; + + + // Don't include trailing separators + if(items[i] === "|") { + var nonSeparatorIconsFollow = false; + + for(var x = (i + 1); x < items.length; x++) { + if(items[x] !== "|" && (!self.options.hideIcons || self.options.hideIcons.indexOf(items[x].name) == -1)) { + nonSeparatorIconsFollow = true; + } + } + + if(!nonSeparatorIconsFollow) + continue; + } + + + // Create the icon and append to the toolbar + (function(item) { + var el; + if(item === "|") { + el = createSep(); + } else { + el = createIcon(item, self.options.toolbarTips, self.options.shortcuts); + } + + // bind events, special for info + if(item.action) { + if(typeof item.action === "function") { + el.onclick = function(e) { + e.preventDefault(); + item.action(self); + }; + } else if(typeof item.action === "string") { + el.href = item.action; + el.target = "_blank"; + } + } + + toolbarData[item.name || item] = el; + bar.appendChild(el); + })(items[i]); + } + + self.toolbarElements = toolbarData; + + var cm = this.codemirror; + cm.on("cursorActivity", function() { + var stat = getState(cm); + + for(var key in toolbarData) { + (function(key) { + var el = toolbarData[key]; + if(stat[key]) { + el.className += " active"; + } else if(key != "fullscreen" && key != "side-by-side") { + el.className = el.className.replace(/\s*active\s*/g, ""); + } + })(key); + } + }); + + var cmWrapper = cm.getWrapperElement(); + cmWrapper.parentNode.insertBefore(bar, cmWrapper); + return bar; +}; + +SimpleMDE.prototype.createStatusbar = function(status) { + // Initialize + status = status || this.options.status; + var options = this.options; + var cm = this.codemirror; + + + // Make sure the status variable is valid + if(!status || status.length === 0) + return; + + + // Set up the built-in items + var items = []; + var i, onUpdate, defaultValue; + + for(i = 0; i < status.length; i++) { + // Reset some values + onUpdate = undefined; + defaultValue = undefined; + + + // Handle if custom or not + if(typeof status[i] === "object") { + items.push({ + className: status[i].className, + defaultValue: status[i].defaultValue, + onUpdate: status[i].onUpdate + }); + } else { + var name = status[i]; + + if(name === "words") { + defaultValue = function(el) { + el.innerHTML = wordCount(cm.getValue()); + }; + onUpdate = function(el) { + el.innerHTML = wordCount(cm.getValue()); + }; + } else if(name === "lines") { + defaultValue = function(el) { + el.innerHTML = cm.lineCount(); + }; + onUpdate = function(el) { + el.innerHTML = cm.lineCount(); + }; + } else if(name === "cursor") { + defaultValue = function(el) { + el.innerHTML = "0:0"; + }; + onUpdate = function(el) { + var pos = cm.getCursor(); + el.innerHTML = pos.line + ":" + pos.ch; + }; + } else if(name === "autosave") { + defaultValue = function(el) { + if(options.autosave != undefined && options.autosave.enabled === true) { + el.setAttribute("id", "autosaved"); + } + }; + } + + items.push({ + className: name, + defaultValue: defaultValue, + onUpdate: onUpdate + }); + } + } + + + // Create element for the status bar + var bar = document.createElement("div"); + bar.className = "editor-statusbar"; + + + // Create a new span for each item + for(i = 0; i < items.length; i++) { + // Store in temporary variable + var item = items[i]; + + + // Create span element + var el = document.createElement("span"); + el.className = item.className; + + + // Ensure the defaultValue is a function + if(typeof item.defaultValue === "function") { + item.defaultValue(el); + } + + + // Ensure the onUpdate is a function + if(typeof item.onUpdate === "function") { + // Create a closure around the span of the current action, then execute the onUpdate handler + this.codemirror.on("update", (function(el, item) { + return function() { + item.onUpdate(el); + }; + }(el, item))); + } + + + // Append the item to the status bar + bar.appendChild(el); + } + + + // Insert the status bar into the DOM + var cmWrapper = this.codemirror.getWrapperElement(); + cmWrapper.parentNode.insertBefore(bar, cmWrapper.nextSibling); + return bar; +}; + +/** + * Get or set the text content. + */ +SimpleMDE.prototype.value = function(val) { + if(val === undefined) { + return this.codemirror.getValue(); + } else { + this.codemirror.getDoc().setValue(val); + return this; + } +}; + + +/** + * Bind static methods for exports. + */ +SimpleMDE.toggleBold = toggleBold; +SimpleMDE.toggleItalic = toggleItalic; +SimpleMDE.toggleStrikethrough = toggleStrikethrough; +SimpleMDE.toggleBlockquote = toggleBlockquote; +SimpleMDE.toggleHeadingSmaller = toggleHeadingSmaller; +SimpleMDE.toggleHeadingBigger = toggleHeadingBigger; +SimpleMDE.toggleHeading1 = toggleHeading1; +SimpleMDE.toggleHeading2 = toggleHeading2; +SimpleMDE.toggleHeading3 = toggleHeading3; +SimpleMDE.toggleCodeBlock = toggleCodeBlock; +SimpleMDE.toggleUnorderedList = toggleUnorderedList; +SimpleMDE.toggleOrderedList = toggleOrderedList; +SimpleMDE.cleanBlock = cleanBlock; +SimpleMDE.drawLink = drawLink; +SimpleMDE.drawImage = drawImage; +SimpleMDE.drawTable = drawTable; +SimpleMDE.drawHorizontalRule = drawHorizontalRule; +SimpleMDE.undo = undo; +SimpleMDE.redo = redo; +SimpleMDE.togglePreview = togglePreview; +SimpleMDE.toggleSideBySide = toggleSideBySide; +SimpleMDE.toggleFullScreen = toggleFullScreen; + +/** + * Bind instance methods for exports. + */ +SimpleMDE.prototype.toggleBold = function() { + toggleBold(this); +}; +SimpleMDE.prototype.toggleItalic = function() { + toggleItalic(this); +}; +SimpleMDE.prototype.toggleStrikethrough = function() { + toggleStrikethrough(this); +}; +SimpleMDE.prototype.toggleBlockquote = function() { + toggleBlockquote(this); +}; +SimpleMDE.prototype.toggleHeadingSmaller = function() { + toggleHeadingSmaller(this); +}; +SimpleMDE.prototype.toggleHeadingBigger = function() { + toggleHeadingBigger(this); +}; +SimpleMDE.prototype.toggleHeading1 = function() { + toggleHeading1(this); +}; +SimpleMDE.prototype.toggleHeading2 = function() { + toggleHeading2(this); +}; +SimpleMDE.prototype.toggleHeading3 = function() { + toggleHeading3(this); +}; +SimpleMDE.prototype.toggleCodeBlock = function() { + toggleCodeBlock(this); +}; +SimpleMDE.prototype.toggleUnorderedList = function() { + toggleUnorderedList(this); +}; +SimpleMDE.prototype.toggleOrderedList = function() { + toggleOrderedList(this); +}; +SimpleMDE.prototype.cleanBlock = function() { + cleanBlock(this); +}; +SimpleMDE.prototype.drawLink = function() { + drawLink(this); +}; +SimpleMDE.prototype.drawImage = function() { + drawImage(this); +}; +SimpleMDE.prototype.drawTable = function() { + drawTable(this); +}; +SimpleMDE.prototype.drawHorizontalRule = function() { + drawHorizontalRule(this); +}; +SimpleMDE.prototype.undo = function() { + undo(this); +}; +SimpleMDE.prototype.redo = function() { + redo(this); +}; +SimpleMDE.prototype.togglePreview = function() { + togglePreview(this); +}; +SimpleMDE.prototype.toggleSideBySide = function() { + toggleSideBySide(this); +}; +SimpleMDE.prototype.toggleFullScreen = function() { + toggleFullScreen(this); +}; + +SimpleMDE.prototype.isPreviewActive = function() { + var cm = this.codemirror; + var wrapper = cm.getWrapperElement(); + var preview = wrapper.lastChild; + + return /editor-preview-active/.test(preview.className); +}; + +SimpleMDE.prototype.isSideBySideActive = function() { + var cm = this.codemirror; + var wrapper = cm.getWrapperElement(); + var preview = wrapper.nextSibling; + + return /editor-preview-active-side/.test(preview.className); +}; + +SimpleMDE.prototype.isFullscreenActive = function() { + var cm = this.codemirror; + + return cm.getOption("fullScreen"); +}; + +SimpleMDE.prototype.getState = function() { + var cm = this.codemirror; + + return getState(cm); +}; + +SimpleMDE.prototype.toTextArea = function() { + var cm = this.codemirror; + var wrapper = cm.getWrapperElement(); + + if(wrapper.parentNode) { + if(this.gui.toolbar) { + wrapper.parentNode.removeChild(this.gui.toolbar); + } + if(this.gui.statusbar) { + wrapper.parentNode.removeChild(this.gui.statusbar); + } + if(this.gui.sideBySide) { + wrapper.parentNode.removeChild(this.gui.sideBySide); + } + } + + cm.toTextArea(); + + if(this.autosaveTimeoutId) { + clearTimeout(this.autosaveTimeoutId); + this.autosaveTimeoutId = undefined; + this.clearAutosavedValue(); + } +}; + +module.exports = SimpleMDE;
\ No newline at end of file diff --git a/static/js/utils.js b/static/js/utils.js new file mode 100644 index 0000000..83e6397 --- /dev/null +++ b/static/js/utils.js @@ -0,0 +1,18 @@ +function deg2rad(deg) { + return deg * (Math.PI/180) +} +function getDistanceFromLatLon(item1, item2) { + lat1 = item1['latitude']; lon1 = item1['longitude']; + lat2 = item2['latitude']; lon2 = item2['longitude']; + var R = 3958.8; // Radius of the earth + var dLat = deg2rad(lat2-lat1); + var dLon = deg2rad(lon2-lon1); + var a = + Math.sin(dLat/2) * Math.sin(dLat/2) + + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * + Math.sin(dLon/2) * Math.sin(dLon/2) + ; + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); + var d = R * c; // Distance in mi + return d; +}
\ No newline at end of file diff --git a/templates/editor.html b/templates/editor.html new file mode 100644 index 0000000..b6b7130 --- /dev/null +++ b/templates/editor.html @@ -0,0 +1,151 @@ +<!DOCTYPE html> +<html style="height:100%"> + <head> + <title>Photocosm - Editor</title> + <link rel="icon" type="image/x-icon" href="/static/img/favicon.ico"> + + <link rel="stylesheet" href="{{ url_for('static', filename='css/leaflet.css') }}" + integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" + crossorigin=""/> + <link rel="stylesheet" href="{{ url_for('static', filename='css/dashboard.css') }}"/> + <script src="{{ url_for('static', filename='js/leaflet.js') }}" + integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" + crossorigin=""></script> + <script src="https://unpkg.com/leaflet.vectorgrid@latest/dist/Leaflet.VectorGrid.js"></script> + <!-- <script src="{{ url_for('static', filename='js/utils.js') }}"></script> --> + <script src="{{ url_for('static', filename='js/editor.js') }}"></script> + <link rel="stylesheet" href="{{ url_for('static', filename='css/navbar.css') }}"> + <link rel="stylesheet" href="{{ url_for('static', filename='css/editor.css') }}"> + </head> + + <body> + <div onclick="close_media_preview()" id="media-preview-modal" class="modal"> + <img class="modal-content" id="modal-img"> + <video class="modal-content" id="modal-video"></video> + </div> + <div id="share-modal" class="modal"> + <div id="share-box" class="share-box"> + <p style="margin-top:5px; margin-bottom:5px; margin-left:10px;">Sharing options</p> + <hr style="width: 100%; border-top: 3px double lightgray; margin:0;"> + <div> + <label style="margin-left: 10px" for="visibility-dropdown">Visibility: </label> + <select onchange="update_visibility()" id="visibility-dropdown"> + <option value="public">Public</option> + <option value="private">Private</option> + </select> + </div> + <div class="user-share-section " id="shared-users"> + <!-- shared users --> + </div> + <div style="margin:10px; display:flex; flex-direction:row; padding:10px;"> + <input style="flex:1; margin-right:10px;" id="share-email" placeholder="<user@email.com>"> + <select style="margin-right:10px;" id="share-permissions"> + <option value="viewer">Viewer</option> + <option value="editor">Editor</option> + </select> + <button onclick="add_shared_user()">Share</button> + </div> + </div> + </div> + <div id="collection-modal" class="modal"> + <div id="collection-box" class="collection-box"> + <p style="margin-top:5px; margin-bottom:5px; margin-left:10px;">Collection options</p> + <hr style="width: 100%; border-top: 3px double lightgray; margin:0"> + <div style="display:grid; grid-template-columns: 30% 70%; margin:15px"> + <label for="collection-title-field">Title: </label> <input onblur="collection_info_updated('title')" id="collection-title-field"> + <label for="collection-subtitle-field">Subtitle: </label> <input onblur="collection_info_updated('subtitle')" id="collection-subtitle-field"> + <label for="collection-info-field">Information: </label> <input onblur="collection_info_updated('info')" id="collection-info-field"> + </div> + </div> + </div> + <p style="display:none" id="collection_id">{{ collection_id }}</p> + <div class="topnav"> + <a onclick="open_collection_modal()" class="collection-title" id="collection-title"></a> + <a onclick="open_share_modal()">Share</a> + <a href="/viewer?collection={{ collection_id }}">Viewer</a> + <a class="split" href="/">Home</a> + </div> + + <div class="page-container"> + <div class="left-column"> + <div class="tab-section"> + <div class="tab-header"> + <button class="tab active" onclick="set_tab(event, 'media_tab')">Media</button> + <button class="tab" onclick="set_tab(event, 'text_tab')">Text</button> + <button class="tab" onclick="set_tab(event, 'routes_tab')">Routes</button> + </div> + <div id="media_tab" class="tab-content" style="display:flex; flex-direction:column"> + <div class="tab-filters" id="media-filters"> + <input type="file" id="media_upload" style="display:none" accept=".JPG,.PNG,.JPEG,.HEIC,.HEIF,.MOV,.MP4,.WEBM" onchange="upload_media_files();" multiple/> + <label for="media_upload"><a style="text-decoration:underline; cursor:pointer;">Upload Media</a></label> + <label style="margin-left:15px;" for="sort-type">Sort by: </label> + <select onchange="update_media_grid()" id="sort-type"> + <option value="none">None</option> + <option value="name">Name</option> + <option value="timestamp">Date/time</option> + <option value="id">Filename</option> + </select> + <button id="sort-direction-media" onclick="toggle_sort_direction('media')">Ascending</button> + <label style="margin-left:15px;" for="hide-location">Hide media with location: </label> + <input onchange="update_media_grid()" id="hide-location" type="checkbox"> + <label style="margin-left:15px;" for="hide-timestamp">Hide media with timestamp: </label> + <input onchange="update_media_grid()" id="hide-timestamp" type="checkbox"> + </div> + <div style="overflow:auto; flex-grow:1"> + <div class="media-grid" id="media_grid"></div> + </div> + </div> + <div id="text_tab" class="tab-content" style="display:flex; flex-direction:column"> + <div class="tab-filters"> + <button id="add-note">Add Note</button> + <label for="sort-notes">Sort by:</label> + <select onchange="update_media_grid()" id="sort-type"> + <option value="none">None</option> + <option value="name">Name</option> + <option value="timestamp">Date/time</option> + </select> + <button id="sort-direction-media" onclick="toggle_sort_direction('media')">Ascending</button> + </div> + </div> + <div id="routes_tab" class="tab-content">Not yet supported.</div> + </div> + <div class="media-preview" id="media-preview"> + <img id="preview-img" onclick="open_media_preview()" style="object-fit: contain; max-width:100%; max-height:100%; position: relative; height: 60vh; width: auto;"> + <video type="video/mp4" id="preview-video" style="object-fit: contain; max-width:100%; max-height:100%; position: relative; height: 60vh; width: auto;" controls></video> + </div> + </div> + <div class="right-column"> + <div class="map-frame"> + <div id="map"></div> + </div> + <div id="content_info" class="content-info" style="display:none"> + <div id="media-content" class="content-info-edit"> + <span style="font-weight: bold; margin-left: 10px; margin-top:5px;">Edit Media</span> <a class="delete-button" onclick="delete_media()">Delete</a> + <hr style="grid-column: 1 / 3; width: 100%; margin: 0;"> + + <label class="content-info-edit-label" for="media_name">Name:</label> + <input onblur="submit_edit_changes()" onchange="mark_info_change('name')" class="content-info-edit-field" type="text" id="media_name" autocomplete="off"> + + <label class="content-info-edit-label" for="media_id">Filename:</label> + <input class="content-info-edit-field" type="text" id="media_id" disabled autocomplete="off"> + + <label class="content-info-edit-label" for="media_timestamp">Date/time:</label> + <input onblur="submit_edit_changes()" onchange="mark_info_change('timestamp')" class="content-info-edit-field" type="datetime-local" id="media_timestamp" autocomplete="off"> + + <span class="content-info-edit-label">Location:</span> + <div style="display: flex; align-items: center; gap: 8px;"> + <span id="media_coords">No location given!</span> + <button onclick="picker_clicked()" style="padding: 2px;"> + <img src="static/img/picker.png" width="20px" height="20px"> + </button> + </div> + + <label class="content-info-edit-label" for="media_info">Information:</label> + <textarea onblur="submit_edit_changes()" onchange="mark_info_change('info')" class="content-info-edit-field" id="media_info" style="min-height: 60px; resize:none;"></textarea> + </div> + </div> + </div> + </div> + </body> + +</html>
\ No newline at end of file diff --git a/templates/home.html b/templates/home.html new file mode 100644 index 0000000..d54d2b7 --- /dev/null +++ b/templates/home.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>Photocosm - Home</title> + <link rel="stylesheet" href="{{ url_for('static', filename='css/navbar.css') }}"> + </head> + <body style="margin:0px"> + <div class="topnav"> + <a class="active" href="#home">Home</a> + {% if current_user.is_authenticated %} + <a href="/logout" class="split">Logout, {{current_user.name}}</a> + {% else %} + <a href="/login" class="split">Log In</a> + <a href="/signup" class="split">Sign Up</a> + {% endif %} + </div> + {% with messages = get_flashed_messages() %} + {% if messages %} + <div class="notification is-danger"> + {{ messages[0] }} + </div> + {% endif %} + {% endwith %} + <div style="margin-left:10%"> + <h2>Collections</h2> + {% for collection in collections %} + <a href="editor?collection={{ collection['id'] }}">{{ collection['id'] }}</a> <br> + {% endfor %} + </div> + </body> +</html>
\ No newline at end of file diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..26a2329 --- /dev/null +++ b/templates/login.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>Create Account</title> + </head> + <body> + <div class="column is-4 is-offset-4"> + <h3 class="title">Login</h3> + <div class="box"> + {% with messages = get_flashed_messages() %} + {% if messages %} + <div class="notification is-danger"> + {{ messages[0] }} + </div> + {% endif %} + {% endwith %} + <form method="POST" action="/login"> + <div class="field"> + <div class="control"> + <input class="input is-large" type="email" name="email" placeholder="Your Email" autofocus=""> + </div> + </div> + + <div class="field"> + <div class="control"> + <input class="input is-large" type="password" name="password" placeholder="Your Password"> + </div> + </div> + <div class="field"> + <label class="checkbox"> + <input type="checkbox" name="remember"> + Remember me + </label> + </div> + <button class="button is-block is-info is-large is-fullwidth">Login</button> + </form> + </div> + </div> + </body> +</html>
\ No newline at end of file diff --git a/templates/signup.html b/templates/signup.html new file mode 100644 index 0000000..dffeb62 --- /dev/null +++ b/templates/signup.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>Create Account</title> + </head> + <body> + <div> + <h3 class="title">Create an account</h3> + <div class="box"> + {% with messages = get_flashed_messages() %} + {% if messages %} + <div class="notification is-danger"> + {{ messages[0] }}. Go to <a href="{{ url_for('auth.login') }}">login page</a>. + </div> + {% endif %} + {% endwith %} + <form method="POST" action="/signup"> + <div class="field"> + <div class="control"> + <input class="input is-large" type="email" name="email" placeholder="Email" autofocus=""> + </div> + </div> + + <div class="field"> + <div class="control"> + <input class="input is-large" type="text" name="name" placeholder="Name" autofocus=""> + </div> + </div> + + <div class="field"> + <div class="control"> + <input class="input is-large" type="password" name="password" placeholder="Password"> + </div> + </div> + + <div class="field"> + <div class="control"> + <input class="input is-large" type="file" name="profile_picture" accept=".jpg,.jpeg,.png"> + </div> + </div> + + <button class="button is-block is-info is-large is-fullwidth">Sign Up</button> + </form> + </div> + </div> + </body> +</html>
\ No newline at end of file diff --git a/users.json b/users.json new file mode 100644 index 0000000..6ca29f6 --- /dev/null +++ b/users.json @@ -0,0 +1 @@ +{"john@gmail.com": {"email": "john@gmail.com", "password": "pbkdf2:sha256:1000000$3Ji8ZFYGLtwtvOmX$6be0a3a2f1bb5560ac4b8591fe084396cc900d7c3be55d9d997d634764196a5d", "name": "John"}, "fred@gmail.com": {"email": "fred@gmail.com", "password": "pbkdf2:sha256:1000000$771YwAvpHFWHsLpj$bdd20e8da550c83b3ee18b78d0aa4d5b50a09ceba3a99aeb3ef777ddc8ce1ef4", "name": "fred"}, "goid@gmail.com": {"email": "goid@gmail.com", "password": "pbkdf2:sha256:1000000$Yn6f2wpThAsnmRxk$3a3be7f539d42489de861ab30dbc8e989fda5405c9ebdbc8b87acb9fadf9239a", "name": "goid"}}
\ No newline at end of file |
