1<!DOCTYPE html> 2<html lang="en-US"> 3 <head>
4<script> 5 window.ddjskey = "D9F68DAD89670E48567E99279F458A"; 6 window.ddoptions = {}; 7 </script>
7 8
8<script src="https://dd.bostonmagazine.com/tags.js" async> 9</script>
9 10 11 <meta name="viewport" content="width=device-width, initial-scale=1" /> 12 <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
12<script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"1134648183",accountID:"2293006",trustKey:"2293006",xpid:"VgQOUlZTDhABVFZaBgEHVl0I",licenseKey:"b9d80a2312",applicationID:"1078100099",browserID:"1134648183"};;/*! For license information please see nr-loader-spa-1.323.0.min.js.LICENSE.txt */ 13(()=>{var e={8122(e,t,r){"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),s=0===Object.keys(r).length?e:r;for(let a in s)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):e[a]instanceof Map||e[a]instanceof Set||e[a]instanceof Date||e[a]instanceof RegExp?r[a]=e[a]:"object"==typeof e[a]&&null!==t[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){r[a]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>a});var n=r(384),i=r(8122);const s={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function a(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,s)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["A",0,"@newrelic/rrweb","x",0,"1.323.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},9752(e,t,r){"use strict";const n="newrelic-iframe-",i=n+"timing-update",s=n+"api",a=n+"api-response",o=n+"vitals-update",c=n+"ajax";r.d(t,["$8",0,o,"Gi",0,a,"KU",0,c,"Pl",0,n,"cS",0,s,"cr",0,i])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)();r.d(t,["OF",0,d,"RI",0,i,"WN",0,f,"bv",0,s,"gm",0,a,"lR",0,l,"m",0,c,"mw",0,o,"sb",0,u,"zk",0,()=>{const e=a?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<a.performance.now())return e}])},7295(e,t,r){"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,a;i>0?(s=r.substring(0,i),a=r.substring(i)):(s=r,a="*");let[c]=s.split(":");n.push({hostname:o(c),pathname:o(a,!0)})}}function o(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),a=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};
13e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,o=i.i.handlers;if(s&&!s.aborted&&s.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof a.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete o[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),s=r(2646),a=r(5607);const o="nr@context:".concat(a.W),c=function e(t,r){var n={},a={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var o=h(n);g(e).forEach(e=>{e.apply(o,r)});var d=v()[a[e]];d&&d.push([f,e,r,o]);return o},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{a[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[a[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof s.y?e:e?(0,i.I)(e,o,()=>new s.y(o)):new s.y(o)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908(e,t,r){"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=a;var i=s.handlers={};function s(e,t,r,s){a(s||n.d,i,e,t,r)}function a(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var a=t[s]=t[s]||{};(a[r]=a[r]||[]).push([e,i])}},3878(e,t,r){"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>a,ZF:()=>o,bz:()=>s,el:()=>c});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function s(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,s=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var o=0;o<e;o++)a.push(i(r,s++).toString(16));return a.join("")}function o(){return a(16)}function c(){return a(32)}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","g",0,{OFF:0,FULL:1,ERROR:2},"iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},733(e,t,r){"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},9119(e,t,r){"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},7485(e,t,r){"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},7866(e,t,r){"use strict";r.d(t,["Nc",0,/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,"cn",0,/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i,"fL",0,/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,"h3",0,/function (.+?)\s*\(/,"hB",0,/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i])},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},8990(e,t,r){"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389(e,t,r){"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},1910(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},3304(e,t,r){"use strict";r.d(t,{A:()=>i});var n=r(7836);function i(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}})())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},9232(e,t,r){"use strict";r.d(t,["f",0,{MFE:"MFE",BA:"BA"}])},7560(e,t,r){"use strict";r.d(t,{N:()=>a,j:()=>c});var n=r(9119),i=r(944);const s=(0,r(6389).J)(e=>(0,i.R)(80,e));function a(e){if(!Array.isArray(e?.assets)||!e.assets.length)return;
13const t=e.assets.map(o).filter(Boolean);return t.length?{assets:t,scripts:t.filter(e=>e.isScript)}:void 0}function o(e){if(!e||"object"!=typeof e)return;const{matcher:t,type:r}=e;let i="string"==typeof t&&t.endsWith(".js");return void 0!==r&&(!function(e){return"script"===e||"asset"===e}(r)?s(r):i=function(e){return"script"===e}(r)),a=t,"[object RegExp]"===Object.prototype.toString.call(a)?{pattern:t,test:e=>(t.lastIndex=0,t.test((0,n.L)(e))),isScript:i}:"string"==typeof t&&t.length>0?{pattern:t,test:e=>(0,n.L)(e).includes(t),isScript:i}:void s(t);var a}function c(e,t,{scriptsOnly:r=!1}={}){if(!e||!t)return!1;return(r?e.scripts:e.assets).some(e=>e.test(t))}},5718(e,t,r){"use strict";r.d(t,{xo:()=>T,AZ:()=>v,cI:()=>g,Qr:()=>A,QL:()=>y});var n=r(6154),i=r(1863),s=r(9119),a=r(7866);class o{dom=new c;performance=new c;constructor(e){this.url=e,this.claimedBy=new Set}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}function d(e=()=>{},t){return{get:()=>void 0!==t?t:e(),set:e=>{t=e}}}let u;try{u=v(y())[0]}catch(e){u=v(e)[0]}const l=new Map;let f=[];const h=new WeakMap;function p(e){let t=h.get(e);return t||(t={weighedAssetUrls:new Set,recordManifestScriptWindow:(t,r)=>{t&&(e.scriptStart=e.scriptStart>0?Math.min(e.scriptStart,t):t),r&&(e.scriptEnd=e.scriptEnd>0?Math.max(e.scriptEnd,r):r)}},h.set(e,t)),t}function g(e){return l.get(e)}function m(e){const t=g(e);
13if(t)return t;const r=new o(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=m((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&(0,s.L)(e.name).endsWith(".js"))(e)){const t=m((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e}if(!f.length)return;const t=[];f.forEach(({test:r,addedAt:n},s)=>{(r(e)||(0,i.t)()-n>1e4)&&t.push(s)}),f=f.filter((e,r)=>!t.includes(r))})}).observe({type:"resource",buffered:!0})}function v(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(a.cn)||e.match(a.hB)||e.match(a.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function y(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}function b(e,t){return(0,s.L)(e.name)===t}function E(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType,w(e,t)}function w(e,t){const r=(0,s.L)(t.name),{weighedAssetUrls:n}=p(e);n.has(r)||(n.add(r),e.totalWeight=(e.totalWeight||0)+(t.transferSize||0),"blocking"===t.renderBlockingStatus?e.renderBlocking=!0:"non-blocking"===t.renderBlockingStatus&&!0!==e.renderBlocking&&(e.renderBlocking=!1))}function R(e,t,r,n,i){if(w(e,t),"scripts"!==i&&"all"!==i)return;if("all"===i||r.isScript){const r=Math.floor(t.startTime),n=Math.floor(t.responseEnd);e.fetchStart=e.fetchStart>0?Math.min(e.fetchStart,r):r,e.fetchEnd=e.fetchEnd>0?Math.max(e.fetchEnd,n):n}if(r.isScript){const r=g((0,s.L)(t.name));if(r){const t=()=>{const{start:t,end:n}=r.script;p(e).recordManifestScriptWindow(t,n)};t(),!r.dom.end&&r.dom.value&&["load","error"].forEach(e=>r.dom.value.addEventListener(e,t,{once:!0}))}n.resolved||(e.asset=t.name,e.type=t.initiatorType,n.resolved=!0)}}function T(e,t){const r=t?.manifest;if(!r||!r.assets.length)return;const s={resolved:!1},a=new Set(r.assets);(n.gm.performance?.getEntriesByType("resource")||[]).forEach(r=>{const n=[...a].find(e=>e.test(r.name));n&&(R(e,r,n,s,t.timingMethod),a.delete(n))}),a.size&&function(e,t,r,s){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:n=>{const i=[...t].find(e=>e.test(n.name));return i&&(R(e,n,i,r,s),t.delete(i)),0===t.size}})}(e,a,s,t.timingMethod)}function A(e){const t=e?.id,r={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown",totalWeight:0,renderBlocking:void 0},a=y();if(!a)return r;const o=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const e=v(a),c=(e.length>1?e.filter(e=>u!==e):e)[0];if(!c)return r;if(o.includes(c))return r.asset=(0,s.L)(o),r.type="inline",r;r.correlation=g(c);const l=r.correlation?.performance.value||n.gm.performance?.getEntriesByType("resource")?.find(e=>b(e,c));if(l)E(r,l);else{(function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1})(c)&&(r.asset=c,r.type="preload"),function(e,t){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:r=>!!b(r,t)&&(E(e,r),!0)})}(r,c)}const h=r.correlation,m=!!t&&!!h?.claimedBy.has(t);h&&t&&h.claimedBy.add(t);const y=()=>{const e=h?.script.start;if(!m||!e)return!1;return r.registeredAt-e>1e4};let w=0,R=0;p(r).recordManifestScriptWindow=(e,t)=>{e&&(w=w>0?Math.min(w,e):e),t&&(R=R>0?Math.max(R,t):t)},Object.defineProperty(r,"scriptStart",d(()=>{const e=y()?r.registeredAt:h?.script.start??r.fetchEnd;return w>0?Math.min(e,w):e})),Object.defineProperty(r,"scriptEnd",d(()=>{const e=y()?r.registeredAt:h?.script.end??r.registeredAt;return R>0?Math.max(e,R):e}))}catch(e){}return r}},5732(e,t,r){"use strict";r.d(t,{$5:()=>m,B5:()=>g,K6:()=>u,M$:()=>
13o,Ms:()=>d,NG:()=>c,Ux:()=>h,YA:()=>p,yx:()=>l});var n=r(5718),i=r(7560),s=r(9119),a=r(9232);function o(e){return e?.type===a.f.MFE}function c(e,t){if(!y(e,t))return;const r=t.runtime.registeredEntities;return r?.find(t=>t.metadata.target.iframeInterfaceId===e)}function d(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities;return r?.filter(t=>String(t.metadata.target.id)===String(e)).map(e=>e.metadata.target)||[]}function u(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=(0,s.L)(e),a=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!1}):!!t.metadata.timings?.asset&&(0,s.L)(t.metadata.timings.asset)===n});return f(a).map(e=>e.metadata.target)}function l(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!0}):!!t.metadata.timings?.asset?.endsWith(e)});return f(n).map(e=>e.metadata.target)}function f(e){if(!e?.length)return e||[];const t=new Map,r=[];for(const n of e){const e=n.metadata?.timings?.asset;if(!e){r.push(n);continue}const i="".concat(e,"::").concat(n.metadata?.target?.id),s=t.get(i);if(s){if(s.metadata.target?.blocked&&!n.metadata.target?.blocked){const e=r.indexOf(s);-1!==e&&(r[e]=n),t.set(i,n)}}else t.set(i,n),r.push(n)}return r}function h(e,t){return v(t)?o(e)?e.attributes:t.agentRef.runtime.v2Target.attributes:{}}function p(e,t){return g(e,t)?{"child.id":e.id,"child.type":e.type,...h(void 0,t)}:{}}function g(e,t){return o(e)&&!!v(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function m(e){if(!e?.runtime)return[];if(!y(!0,e)||!e.runtime.registeredEntities?.length)return[e.runtime.v2Target];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...l(r[i--],e))}catch(e){}const i=function(e){const t=new Set,r=[];for(const n of e){const e=n?.instance;t.has(e)||(t.add(e),r.push(n))}return r}(t);return i.length||i.push(e.runtime.v2Target),i}function v(e){return 2===e?.harvestEndpointVersion}function y(e,t){return!!e&&!!t?.init.api.register.enabled}},5289(e,t,r){"use strict";r.d(t,{GG:()=>a,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function a(e,t){if(s())return e();const r=(0,i.J)(e),a=setInterval(()=>{s()&&(clearInterval(a),r())},500);(0,n.sp)("load",r,t)}function o(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),a=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,a.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>s,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},8139(e,t,r){"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),a=r(6154);const o={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e,t){var r=function(e){return(e||n.ee).get("events")}(e);if(o[r.debugId]++)return r;o[r.debugId]=1;var f=(0,i.YM)(r,!0,t);function p(e){f.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,p),c&&h(c.prototype,p),h(a.gm,p)),r.on(d+"-start",function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)&&"newrelic"!==e[0]){var n=(0,s.I)(r,l,function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?f(e,"fn-",null,e.name||"anonymous"):r});this.wrapped=e[1]=n}}),r.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),r}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434(e,t,r){"use strict";r.d(t,{YM:()=>d});var n=r(7836),i=r(5607),s=r(5732);const a="nr@original:".concat(i.W);var o=Object.prototype.hasOwnProperty,c=!1;function d(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,a){r||(r="");const o="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];l(u)||(e[d]=i(u,o?d+r:r,n,d,s,a))}},i.flag=a,i;function i(t,n,i,c,f,h){return l(t)?t:(n||(n=""),nrWrapper[a]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach(function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})}),t}catch(e){u([e],r)}for(var n in e)o.call(e,n)&&(t[n]=e[n])}
13(t,nrWrapper,e),nrWrapper);function nrWrapper(){var a,o,l,p;let g,m;try{o=this,a=[...arguments],m=h?(0,s.$5)(r):[r?.runtime?.v2Target],l="function"==typeof i?i(a,o):i||{}}catch(t){u([t,"",[a,o,c],l],e)}d(n+"start",[a,o,c,m],l,f);const v=performance.now();let y;try{return p=t.apply(o,a),y=performance.now(),p}catch(e){throw y=performance.now(),d(n+"err",[a,o,e,m],l,f),g=e,g}finally{const e=y-v,t={start:v,end:y,duration:e,isLongTask:e>=50,methodName:c,thrownError:g};t.isLongTask&&d("long-task",[t,o,m],l,f),d(n+"end",[a,o,p,m],l,f)}}}function d(r,n,i,s){if(!c||t){var a=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function l(e){return!(e&&"function"==typeof e&&e.apply&&!e[a])}r.d(t,["Jt",0,a])},9300(e,t,r){"use strict";const n=r(860).K7.ajax;r.d(t,["TZ",0,n,"f5",0,"ajaxRequest.id","mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3333(e,t,r){"use strict";var n=r(981);const i=r(860).K7.genericEvents,s=[n.R.PA,n.R.UA,n.R.BP];r.d(t,["$v",0,{RESOURCES:"experimental.resources",REGISTER:"register"},"TZ",0,i,"Zp",0,["auxclick","click","copy","keydown","paste","scrollend"],"kd",0,s,"qN",0,["focus","blur"]])},6774(e,t,r){"use strict";const n=r(860).K7.jserrors;r.d(t,["T",0,n])},993(e,t,r){"use strict";const n=r(860).K7.logging;r.d(t,["A$",0,{OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},"TZ",0,n,"p_",0,{ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"}])},3785(e,t,r){"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),a=r(3969),o=r(993);function c(e,t,r={},c=o.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)("log",[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(o.p_).some(t=>t===e.toUpperCase().trim())}},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},6344(e,t,r){"use strict";var n=r(2614);const i=r(860).K7.sessionReplay,s={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0}
13;r.d(t,["Qb",0,{API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"},"TZ",0,i,"Vh",0,"errorDuringReplay","_s",0,{DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},"bc",0,{RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},"yP",0,s])},5270(e,t,r){"use strict";r.d(t,{Aw:()=>a,SR:()=>s,rF:()=>o});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function a(e){return!0===e?.session_replay.preload&&s(e)}function o(e,t){try{if("string"==typeof t?.type&&"password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},3738(e,t,r){"use strict";const n=r(860).K7.sessionTrace,i="-start",s="-end",a="fn"+i,o="fn"+s;r.d(t,["He",0,"bstResource","Kp",0,s,"Lc",0,o,"Rz",0,"pushState","TZ",0,n,"bD",0,"resource","bc",0,{CROSS_TAB:{message:"Session Entity was set to OFF on another tab"},ENTITLEMENTS:{message:"Session Trace is not allowed and will not be started"},RESET:{message:"Session was reset"},SESSION_CHANGED:{message:"Session identifier changed unexpectedly"}},"d3",0,i,"uP",0,a])},3962(e,t,r){"use strict";const n=r(860).K7.softNav;r.d(t,["O2",0,{INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},"OV",0,"popstate","Qu",0,{INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},"TZ",0,n,"ih",0,{IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"},"pP",0,"initialPageLoad","tC",0,["click","keydown","submit"]])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","hw",0,"api-ixn-","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>u});var n=r(3241),i=r(9908),s=r(1863),a=r(944),o=r(3969),c=r(8362),d=r(860);function u(e,t,r,s){const u=s||r;!u||u[e]&&u[e]!==c.d.prototype[e]||(u[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,a.R)(23,e)}})}function l(e,t,r,n,a){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(a||null===r)&&(0,i.p)("api-"+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",s="browser/blobs",a="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},d={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:s,[o.sessionReplay]:s,[o.logging]:a,[o.genericEvents]:"ins"};r.d(t,["$J",0,d,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,a,"df",0,s,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],s=t[n++];r.o(e,i)?0===s&&n++:0===s?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:s})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>({212:"nr-spa-compressor",238:"nr-spa-iframe-message-handler",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.323.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.323.0.PROD:";r.l=(n,i,s,a)=>
13{if(e[n])return void e[n].push(i);let o,c;if(void 0!==s){const e=document.getElementsByTagName("script");for(var d=0;d<e.length;d++){const r=e[d];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+s){o=r;break}}}if(!o){c=!0;var u={478:"sha512-ORjtmy+nQMgxbu0os8+oTRa5sPzbinyuWSvpZrrstVLIaHofRRlfODdH+oUmkIgeQpM+vPf3vG/4RzvCsFVh1A==",249:"sha512-o7+K6xC0z3TqynjVxpd+jgiSgqy8rrPeRcUSqt5J0Rqg5Su5CycLMYfpwiM3WBCHiNDrG5aZoXJQ6HRc335XYQ==",212:"sha512-kRvBt1IYQDBnClTEWNaE8sDFqbXXM3Vdyf972Uf4MFbJxl7u3KmdO+jdB1H4achPEoT9YtNXHswaESey6sCH0A==",238:"sha512-U5EGmyYbFVR2UMNAuZJ7fTgVVtPa5b8RPMySDwXo7z3frRdkUJ2x1VAQTLQCeBab8VlGVGRV8FiSHIn/pwN72A=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+s),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),u[a]&&(o.integrity=u[a])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={38:0,788:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const s=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=s);const a=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(a,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,s,a]=n;var o,c,d=0;if(i.some(t=>0!==e[t])){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)a(r)}for(t&&t(n);d<i.length;d++)c=i[d],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.323.0.PROD"]=self["webpackChunk:NRBA-1.323.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),s=r(1741);var a=r(2555),o=r(3333),c=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(2614),l=r(944),f=r(8122);const h="[data-nr-mask]",p=e=>(0,f.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0,capture_payloads:c.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(o.$v.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,l.R)(1,t)}}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:u.wk,inactiveMs:u.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inl
13ine_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(h):""===t||null===t?e.mask_selector=h:(0,l.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,l.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var g=r(6154),m=r(9324);let v=0;const y={buildEnv:"PROD",distMethod:"CDN",version:m.x,originTime:g.WN},b={consented:!1},E={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||b.consented},set consented(e){b.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++v},listeningForIframeMessages:!1};var w=r(9232);var R=r(7836),T=r(3241);const A={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var S=r(9908),x=r(9752);function O(e,t={},n,o){let{init:c,info:d,loader_config:u,runtime:l={},exposed:h=!0}=t;if(!d){const e=(0,i.pV)();c=e.init,d=e.info,u=e.loader_config}var m;e.init=p(c||{}),e.loader_config=(m=u||{},(0,f.a)(m,A)),d.jsAttributes??={},g.bv&&(d.jsAttributes.isWorker=!0),e.info=(0,a.D)(d);const v=e.init;e.runtime??=(e=>{const t=(0,f.a)(e,E),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:w.f.BA,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(s.W.prototype).forEach(r=>{const n=s.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=R.ee.get(e.agentIdentifier),e.exposed=h,(0,T.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&g.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(x.Pl)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var _=r(1863),k=r(4261),N=r(1738);var L=r(1687),M=r(4234),P=r(5289),I=r(5270),j=r(7767),C=r(6389),D=r(7699);const B=new WeakSet,H=new WeakMap;class W extends M.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,C.J)(()=>{(0,L.Ak)(e,this.featureName),t()}))}):(0,L.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,a.f)(e.info))return(0,l.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(H.has(e))return H.get(e);const i=(async()=>
13{if((0,j.V)(e.init))try{const{setupAgentSession:t}=await r.e(478).then(r.bind(r,8766));t(e)}catch(e){(0,l.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(D.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await r.e(238).then(r.bind(r,6417));t(e)}catch(e){(0,l.R)(23,e)}const[{Connector:i},{Harvester:s}]=await Promise.all([r.e(478).then(r.bind(r,6589)),r.e(478).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new s(e);const a=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(a.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();H.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,l.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,l.R)(34,e),this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};g.RI?(0,P.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,I.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!B.has(e)&&(B.add(e),!(0,a.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}O(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var U=r(6630);class K extends W{static featureName=U.T;constructor(e){var t;super(e,U.T),this.setupInspectionEvents(),t=e,(0,N.Y)(k.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+k.Fw,[(0,_.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(478).then(r.bind(r,908)):r.e(478).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,T.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,P.sB)(t=>{e(t,"DOMContentLoaded")}),(0,P.GG)(t=>{e(t,"load")}),(0,P.Qr)(t=>{e(t,"navigate")}),this.ee.on(u.tS.UPDATE,(e,t)=>{(0,T.W)({type:"lifecycle",name:"session",data:t})})}}class F extends e.d{constructor(e){var t;(super(),g.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(K),O(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(k.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,k.cD,n);(0,l.R)(40,typeof r)}else(0,l.R)(39,typeof e)},t),function(e){(0,N.Y)(k.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,l.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,k.Dl,!0)},e)}(this),function(e){(0,N.Y)(k.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,k.nb,!1);(0,l.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(k.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+k.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,l.R)(65,typeof t)},e)}(this),this.run()):(0,l.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,l.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,l.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var V=r(2843),z=r(782);class G extends W{static featureName=z.T;constructor(e){super(e,z.T),g.RI&&((0,V.u)(()=>(0,S.p)("docHidden",[(0,_.t)()],void 0,z.T,this.ee),!0),(0,V.G)(()=>(0,S.p)("winPagehide",[(0,_.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(478).then(r.bind(r,9917))))}}var q=r(3969);class Y extends W{static featureName=q.TZ;constructor(e){super(e,q.TZ),this.importAggregator(e,()=>r.e(478).then(r.bind(r,6555)))}}var Z=r(6774),J=r(3878),X=r(3304);class Q{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,X.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function ee(e){return ne(e)?e:new Q(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function te(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(ne(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return ee(e.reason)}const r=ee(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function re(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new Q(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return ne(e.error)?e.error:ee(e)}function ne(e){return e instanceof Error&&!!e.stack}function ie(e,r,n,i,s=(0,_.t)()){"string"==typeof e&&(e=new Error(e)),(0,S.p)("err",[e,s,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var se=r(993),ae=r(3785);function oe(e,{customAttributes:t={},level:r=se.p_.INFO}={},n,i,s=(0,_.t)()){(0,ae.R)(n.ee,e,t,r,!1,i,s)}function ce(e,r,n,i,s=(0,_.t)()){(0,S.p)("api-"+k.hG,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}function de(e,r,n,i,s=(0,_.t)()){const{start:a,end:o,customAttributes:c}=r||{},d={customAttributes:c||{}};if("object"!=typeof d.customAttributes||"string"!=typeof e||0===e.length)return void(0,l.R)(57);const u=(e,t)=>
13null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(d.start=u(a,0),d.end=u(o,s),Number.isNaN(d.start)||Number.isNaN(d.end))(0,l.R)(57);else{if(d.duration=d.end-d.start,!(d.duration<0))return(0,S.p)("api-"+k.V1,[d,e,i],void 0,t.K7.genericEvents,n.ee),d;(0,l.R)(58)}}function ue(e,r={},n,i,s=(0,_.t)()){(0,S.p)("api-"+k.fF,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}var le=r(5718);const fe=(e,t)=>e?.nrMfeId===t.id&&(!e?.nrMfeObserved||e?.nrMfeObserved===t.instance),he=e=>{try{return g.gm.CSS.escape(e)}catch(t){return e}},pe=(e,t={})=>{const r=t.id,n=t.instance;if(!e||!r||!n)return!1;try{let r=1===e.nodeType?e:e.parentElement;for(;r?.tagName;){if(fe(r.dataset,t))return r.dataset.nrMfeObserved=n,!0;r=r.parentNode}}catch(e){}return!1},ge=(e,t)=>{const r=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]')),n=(Array.from(r)||[]).find(t=>fe(t.dataset,e));let i=!!n;i&&(n.dataset.nrMfeObserved??=e.instance);const s=new g.gm.MutationObserver(r=>{r.forEach(r=>{r.addedNodes.forEach(r=>{const n=1===r.nodeType?r:null;!i&&fe(n?.dataset,e)&&(s.disconnect(),s.observe(n,{childList:!0,subtree:!0}),i=!0,n.dataset.nrMfeObserved=e.instance),(e=>{try{return e?.textContent?.trim()||["img","video","canvas","svg"].includes(e?.nodeName?.toLowerCase())}catch(e){return!1}})(r)&&(i||pe(r,e))&&t(r,s)})})});return s.observe(n||g.gm.document,{childList:!0,subtree:!0}),s},me=(e,t,r)=>{try{const n=new g.gm.PerformanceObserver(e=>{e.getEntries().forEach(r)});return n.observe(t),e.push(n),n}catch(e){return null}};function ve(e,t){let r,n,i=!1;const s=e=>null==e?e:e-(t?.scriptStart||t?.registeredAt||0),a={fcp:{get value(){const e=s(r);return e>1e4?void 0:e},set value(e){i||(r=e)}},lcp:{get value(){if(void 0!==a.fcp.value)return s(n)},set value(e){i||(n=e)}},cls:{value:void 0},inp:{value:void 0},disconnect:()=>{}};if(!(e&&g.RI&&g.gm.MutationObserver&&g.gm.PerformanceObserver))return a;const o=[];setTimeout(()=>{r||a.disconnect()},1e4);const c=()=>{if(!i){if(null==r){const e=(0,_.t)();if(s(e)>1e4)return void a.disconnect();r=e}n??=(0,_.t)(),a.cls.value??=0}},d=ge(e,(e,t)=>{c(),t.disconnect()});o.push(d);let u=0,l=null;const f=new Set;try{l=new g.gm.ResizeObserver(e=>{i||e.forEach(e=>{try{const t=e.contentRect.width*e.contentRect.height;t>u&&(u=t,a.lcp.value=(0,_.t)()),l.unobserve(e.target)}catch(e){}})})}catch(e){}const h=ge(e,e=>{if(c(),l)try{const t=1===e.nodeType?e:e.parentElement;t&&!f.has(t)&&(f.add(t),"IMG"===t.tagName?t.complete?l.observe(t):t.addEventListener("load",()=>{l.observe(t)},{once:!0}):"VIDEO"===t.tagName?t.readyState>=2?l.observe(t):t.addEventListener("loadeddata",()=>{l.observe(t)},{once:!0}):l.observe(t))}catch(e){}});l&&o.push(l),o.push(h),me(o,{type:"layout-shift",buffered:!0},t=>{i||t.hadRecentInput||(t.sources||[]).some(r=>!!pe(r.node,e)&&(c(),a.cls.value+=t.value,!0))}),me(o,{type:"event",buffered:!0,durationThreshold:40},t=>{!i&&t.interactionId&&pe(t.target,e)&&(void 0===a.inp.value||t.duration>a.inp.value)&&(c(),a.inp.value=t.duration)});const p=["pointerdown","keydown"],m=()=>{p.forEach(e=>{g.gm.removeEventListener(e,v,{passive:!0})})};a.disconnect=()=>{i=!0,o.forEach(e=>{try{e?.disconnect()}catch(e){}}),m(),["visibilitychange","pagehide"].forEach(e=>{g.gm.removeEventListener(e,a.disconnect,{once:!0,passive:!0})})};const v=t=>{pe(t?.target,e)&&((()=>{try{h?.disconnect(),l?.disconnect()}catch(e){}})(),m())};p.forEach(e=>{g.gm.addEventListener(e,v,{passive:!0})}),["visibilitychange","pagehide"].forEach(e=>{g.gm.addEventListener(e,a.disconnect,{once:!0,passive:!0})});const y=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]'));return Array.from(y||[]).some(t=>fe(t.dataset,e))&&c(),a}var ye=r(9566),be=r(7560),Ee=r(9119);const we=["entry","scripts","all"],Re=["name","id","type"],Te=new Map([[ce,"addPageAction"],[oe,"log"],[de,"measure"],[ie,"noticeError"],[ue,"recordCustomEvent"]]),Ae={experimental:(0,C.J)(()=>(0,l.R)(54,"newrelic.register")),disabled:(0,C.J)(()=>(0,l.R)(55)),invalidTarget:(0,C.J)(e=>(0,l.R)(48,e)),deregistered:(0,C.J)(()=>(0,l.R)(68)),invalidTimingMethod:(0,C.J)(e=>(0,l.R)(80,e)),duplicateName:(0,C.J)(e=>(0,l.R)(81,e)),duplicateId:(0,C.J)(e=>(0,l.R)(82,e))};function Se(e){(0,N.Y)(k.eY,function(t){return xe(e,t)},e)}function xe(e,r){Ae.experimental(),r||={},r.instance=(0,ye.LA)(8),r.type=w.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents?.[0].entityGuid},type:w.f.BA},r.manifest=(0,be.N)(r.manifest),void 0===r.timingMethod||we.includes(r.timingMethod)||(Ae.invali
13dTimingMethod(r.timingMethod),r.timingMethod=void 0);const n=(0,le.Qr)(r);r.manifest&&(0,le.xo)(n,r);const i=ve(r,n),s=(0,Ee.L)(""+location),a={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...a,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||w.f.BA,"parent.id":r.parent?.id})}),Object.entries(r.tags).forEach(([e,t])=>{Re.includes(e)||(a["source.".concat(e)]=t)});let o=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,o=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(Ae.disabled),u(r.id)&&u(r.name)||d(()=>Ae.invalidTarget(r)),c.forEach(e=>{try{const{name:t,id:n}=e.metadata.target;t===r.name&&n!==r.id&&Ae.duplicateName(r),n===r.id&&t!==r.name&&Ae.duplicateId(r)}catch(e){}});const f={addPageAction:(t,n={})=>m(ce,[t,{...a,...n},e],r),deregister:()=>{p(),d(Ae.deregistered)},log:(t,n={})=>m(oe,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(de,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(ie,[t,{...a,...n},e],r),recordCustomEvent:(t,n={})=>m(ue,[t,{...a,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return a},target:r,timings:n,vitals:i,events:{latestTimestamp:void 0}}},h=()=>(r.blocked&&o(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,_.t)(),i.disconnect(),n.fcp=i.fcp,n.lcp=i.lcp,n.cls=i.cls,n.inp=i.inp;const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart,r={assetUrl:n.asset,assetType:n.type,registerUrl:s,deregisterUrl:(0,Ee.L)(""+location),pageUrl:void 0,currentUrl:void 0,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,t
13imeToRegister:n.registeredAt,totalWeight:n.totalWeight,...void 0!==n.renderBlocking&&{renderBlocking:n.renderBlocking},...i.fcp.value>=0&&{"vitals.fcp.value":i.fcp.value},...i.lcp.value>=0&&{"vitals.lcp.value":i.lcp.value},...i.cls.value>=0&&{"vitals.cls.value":i.cls.value},...i.inp.value>=0&&{"vitals.inp.value":i.inp.value}};f.recordCustomEvent("MicroFrontEndTiming",r)}h()||(c.push(f),(0,V.G)(p));const g=(e,t)=>{h()||(a[e]=t)},m=(r,n,i)=>{if(h()&&r!==xe)return;const s=f.metadata.events.latestTimestamp??(0,_.t)();f.metadata.events.latestTimestamp=void 0;const a=Te.get(r)||"unknown";(0,S.p)(q.xV,["API/register/".concat(a,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,s)}catch(e){(0,l.R)(50,e)}};return f}class Oe extends W{static featureName=Z.T;constructor(e){var t;super(e,Z.T),t=e,(0,N.Y)(k.o5,(e,r)=>ie(e,r,t),t),function(e){(0,N.Y)(k.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,N.Y)(k.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Se(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,S.p)("ierr",[ee(t),(0,_.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),g.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,S.p)("err",[te(t),(0,_.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",t=>{this.abortHandler&&(0,S.p)("err",[re(t),(0,_.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e,()=>r.e(478).then(r.bind(r,9377)))}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var _e=r(8990);let ke=1;function Ne(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,_e.I)(e,"nr@id",function(){return ke++})}function Le(e){if("string"==typeof e)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,X.A)(e).length}catch(e){return}}}var Me=r(8139),Pe=r(3434),Ie=r(5732);const je={},Ce=["open","send","setRequestHeader"];function De(e,t){var r=e||R.ee;const n=function(e){return(e||R.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(je[n.debugId]++)return n;je[n.debugId]=1,(0,Me.u)(r,t);var i=(0,Pe.YM)(n,void 0,t),s=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,o=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],f=[],h=g.gm.XMLHttpRequest=function(e){const r=new s(e),a=n.context(r);a.targets=(0,Ie.$5)(t);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(o=a,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",E)}),(0,J.jT)(!1))}catch(e){(0,l.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var o;return r};function p(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,h),h.prototype=s.prototype,i.inPlace(h.prototype,Ce,"-xhr-",E),n.on("send-xhr-start",function(e,t){p(e,t),function(e){f.push(e),a&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",p),a){var m=o&&o.resolve();if(!c&&!o){var v=1,y=document.createTextNode(v);new a(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<f.length;e++)p(0,f[e]);f.length&&(f=[])}function E(e,t){return t}return n}var Be="fetch-",He=Be+"body-",We=["arrayBuffer","blob","json","text","formData"],Ue=g.gm.Request,Ke=g.gm.Response,Fe="prototype";const Ve={};function ze(e,t){const r=function(e){return(e||R.ee).get("fetch")}(e);if(!(Ue&&Ke&&g.gm.fetch))return r;if(Ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},a=(0,Ie.$5)(t);var o;r.emit(i+"before-start",[e],n),n[R.P]&&n[R.P].dt&&(o=n[R.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,o],c),c.then(function(e){return r.emit(i+"end",[null,e,a],c),e},function(e){throw r.emit(i+"end",[e,void 0,a],c),e})})}
13return Ve[r.debugId]=1,We.forEach(e=>{n(Ue[Fe],e,He),n(Ke[Fe],e,He)}),n(g.gm,"fetch",Be),r.on(Be+"end",function(e,n,i){var s=this;if(s.targets=i||[t.runtime.v2Target],n){var a=n.headers.get("content-length");null!==a&&(s.rxSize=a),r.emit(Be+"done",[null,n],s)}else r.emit(Be+"done",[e],s)}),r}var Ge=r(7485);class qe{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s,a=(0,ye.ZF)(),o=(0,ye.el)(),c=Date.now();this.agentRef.runtime?.timeKeeper?.ready&&(s=Math.floor(this.agentRef.runtime.timeKeeper.correctAbsoluteTimestamp(c)));var d={spanId:a,traceId:o,timestamp:c,timestampCorrected:s};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(d.traceContextParentHeader=this.generateTraceContextParentHeader(a,o),d.traceContextStateHeader=this.generateTraceContextStateHeader(a,s??c,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(d.newrelicHeader=this.generateTraceHeader(a,o,s??c,r,n,i)),d}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,s){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(a.d.tk=s),btoa((0,X.A)(a))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,Ge.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Ye=r(7295);function Ze(e){return"string"==typeof e?e:e instanceof(0,i.dV)().o.REQ?e.url:g.gm?.URL&&e instanceof URL?e.href:void 0}function $e(e,t){var r=(0,Ge.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}var Je=["load","error","abort","timeout"],Xe=Je.length,Qe=(0,i.dV)().o.REQ,et=(0,i.dV)().o.XHR;const tt="X-NewRelic-App-Data",rt="internal-error";class nt extends W{static featureName=c.TZ;constructor(e){super(e,c.TZ),this.dt=new qe(e),this.handler=(e,t,r,n)=>(0,S.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};$e(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ze(this.ee,e),De(this.ee,e),function(e,r,n,i){const s=[c.mo.ALL,c.mo.FAILURES].includes(e.init.ajax?.capture_payloads);function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=A,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){O(t,e)},(0,J.jT)(!1)),g.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,J.jT)(!1))}function o(e){this.params={method:e[0]},$e(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){s&&e.length>=2&&(this.requestHeaders??={},this.requestHeaders[e[0].toLowerCase()]=e[1])}function l(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=Le(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.requestBody=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"
13!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit(rt,[e])}catch(e){}}};for(var o=0;o<Xe;o++)t.addEventListener(Je[o],this.listener,(0,J.jT)(!1))}function f(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function h(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function m(){this.endTime=(0,_.t)()}function v(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function y(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function b(e,t,r){t instanceof et&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function E(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,_.t)()-this.xhrCbStart,this.onload,t],t)}function w(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,Ge.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)o(e[0].headers,n)&&(this.dt=n);else{var s={};for(var a in r)s[a]=r[a];s.headers=new Headers(r.headers||{}),o(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function o(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function R(e,t){this.params={},this.metrics={},this.startTime=(0,_.t)(),this.dt=t;let[r,n={}]=e;$e(this,Ze(r));const i=(""+(r&&r instanceof Qe&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Le(n.body||r?.body)||0;try{var a=n.headers||r?.headers;if(s&&a)if(this.requestHeaders??={},a instanceof Headers)a.forEach(function(e,t){this.requestHeaders[t.toLowerCase()]=e}.bind(this));else if("object"==typeof a)for(var o in a)this.requestHeaders[o.toLowerCase()]=a[o]}catch(e){}this.requestBody=n.body||r?.body}function T(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,Ye.iW)(this.params))return;this.params.status=t?t.status:0;const n=()=>{const e=+this.rxSize,t=null==this.rxSize||isNaN(e)?void 0:e,r={txSize:this.txSize,rxSize:t,duration:this.endTime-this.startTime},n=[this.params,r,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>x(n,this,e))};t&&s?t.clone().text().then(e=>{this.responseBody=e,this.rxSize&&"0"!==this.rxSize&&0!==this.rxSize||void 0===e||0===this.params.status||(this.rxSize=Le(e)),t?.headers&&(this.responseHeaders={},t.headers.forEach(function(e,t){this.responseHeaders[t.toLowerCase()]=e}.bind(this)))}).catch(e=>{r.emit(rt,[e])}).finally(()=>{n()}):n()}function A(e){const t=this.params,n=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<Xe;t++)e.removeEventListener(Je[t],this.listener,!1);if(t.aborted)return;if((0,Ye.iW)(t))return;if(n.duration=this.endTime-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):O(this,e),n.cbTime=this.cbTime,s){try{this.responseBody=e.responseText}catch(t){this.responseBody=e.response}if((!n.rxSize||0===n.rxSize)&&void 0!==this.responseBody&&0!==t.status){const e=Le(this.responseBody);void 0!==e&&(n.rxSize=e)}try{this.responseHeaders=function(e){const t={};return e?(e.split("\r\n").forEach(function(e){const r=e.indexOf(": ");if(r>0){const n=e.substring(0,r),i=e.substring(r+2);t[n.toLowerCase()]=i}}),t):t}(e.getAllResponseHeaders())}catch(e){r.emit(rt,[e])}}const i=[t,n,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>x(i,this,e))}function x(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function O(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?Le(e.response):"text"===r||""===r||void 0===r?Le(e.responseText):void 0}(n,e.lastSize);if(void 0!==i&&0!==n.status&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(tt)>=0){var s=n.getResponseHeader(tt);s&&((0,S.p)("sm",["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=s.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",o),r.on("open-xhr-end",d),r.on("send-xhr-start",l),r.on("setRequestHeader-xhr-start",u),r.on("xhr-cb-time",f),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",m),r.on("addEventListener-end",v),r.on("removeEventListener-end",y),r.on("fn-end",E),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",b),r.on("fetch-done",T)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>r.e(478).then(r.bind(r,3845)))}}const it={},st=["pushState","replaceState"];function at(e,t){const r=function(e){return(e||R.ee).get("history")}(e);return!g.RI||it[r.debugId]++||(it[r.debugId]=1,(0,Pe.YM)(r,void 0,t).inPlace(window.history,st,"-")),r}var ot=r(3738);function ct(e){(0,N.Y)(k.BL,function(r=Date.now()){const n=r-g.WN;n<0&&(0,l.R)(62,r),(0,S.p)(q.XG,[k.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:k.BL,start:r,origin:"nr"}),(0,S.p)("api-"+k.hG,[n,k.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:dt,bD:ut,d3:lt,Kp:ft,TZ:ht,Lc:pt,uP:gt,Rz:mt}=ot;class vt extends W{static featureName=ht;constructor(e){var n;super(e,ht),n=e,(0,N.Y)(k.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const r={n:e.name,s:e.start-g.WN,e:(e.end||e.start)-g.WN,o:e.origin||"",t:"api"};r.s<0||r.e<0||r.e<r.s?(0,l.R)(61,{start:r.s,end:r.e}):(0,S.p)("bstApi",[r],void 0,t.K7.sessionTrace,n.ee)},n),ct(e);
13if(!(0,j.V)(e.init))return void this.deregisterDrain();const i=this.ee;let s;at(i,e),this.eventsEE=(0,Me.u)(i,e),this.eventsEE.on(gt,function(e,t){this.bstStart=(0,_.t)()}),this.eventsEE.on(pt,function(e,r){(0,S.p)("bst",[e[0],r,this.bstStart,(0,_.t)()],void 0,t.K7.sessionTrace,i)}),i.on(mt+lt,function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash}),i.on(mt+ft,function(e){(0,S.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,i)});try{s=new PerformanceObserver(e=>{const r=e.getEntries();(0,S.p)(dt,[r],void 0,t.K7.sessionTrace,i)}),s.observe({type:ut,buffered:!0})}catch(e){}this.importAggregator(e,()=>r.e(478).then(r.bind(r,6974)),{resourceObserver:s})}}var yt=r(733),bt=r(6344);class Et extends W{static featureName=bt.TZ;#i;recorder;constructor(e){var n;let i;super(e,bt.TZ),n=e,(0,N.Y)(k.CH,function(){(0,S.p)(k.CH,[],void 0,t.K7.sessionReplay,n.ee)},n),function(e){(0,N.Y)(k.Tb,function(){(0,S.p)(k.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);const s="".concat(u.Wt).concat((0,yt.Y)(e.info.licenseKey,e.info.applicationID));try{i=JSON.parse(localStorage.getItem(s))}catch(e){}(0,I.SR)(e.init)&&this.ee.on(k.CH,()=>this.#s()),this.#a(i)&&this.importRecorder().then(e=>{e.startRecording(bt.Qb.PRELOAD,i?.sessionReplayMode)}),this.abortHandler=this.#n,this.importAggregator(this.agentRef,()=>r.e(478).then(r.bind(r,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,S.p)(bt.Vh,[e],void 0,this.featureName,this.ee))})}#a(e){return e&&(e.sessionReplayMode===u.g.FULL||e.sessionReplayMode===u.g.ERROR)||(0,I.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#i??=Promise.all([r.e(478),r.e(249)]).then(r.bind(r,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#i)}#s(){this.blocked||(this.featAggregate?this.featAggregate.mode!==u.g.FULL&&this.featAggregate.initializeRecording(u.g.FULL,!0,bt.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(bt.Qb.API,u.g.FULL)}))}#n(){this.recorder?.stopRecording()}}var wt=r(3962);class Rt extends W{static featureName=wt.TZ;constructor(e){if(super(e,wt.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,N.Y)(k.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var s={},a=this,o="function"==typeof i;return(0,S.p)(q.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((o?"":"no-")+"fn-start",[(0,_.t)(),a,o],s),o)try{return i.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw r.emit("fn-err",[arguments,this,t],s),t}finally{r.emit("fn-end",[(0,_.t)()],s)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{N.Y.apply(this,[r,function(){return(0,S.p)(k.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,N.Y)(k.PA,function(){(0,S.p)(k.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!g.RI||!(0,i.dV)().o.MO)return;const n=at(this.ee,e);try{this.removeOnAbort=new AbortController}catch(e){}wt.tC.forEach(e=>{(0,J.sp)(e,e=>{c(e)},!0,this.removeOnAbort?.signal)}
13);const s=()=>(0,S.p)("newURL",[(0,_.t)(),""+window.location],void 0,this.featureName,this.ee);n.on("pushState-end",s),n.on("replaceState-end",s),(0,J.sp)(wt.OV,e=>{c(e),(0,S.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let a=!1;const o=new((0,i.dV)().o.MO)((e,t)=>{a||(a=!0,requestAnimationFrame(()=>{(0,S.p)("newDom",[(0,_.t)()],void 0,this.featureName,this.ee),a=!1}))}),c=(0,C.s)(e=>{"loading"!==document.readyState&&((0,S.p)("newUIEvent",[e],void 0,this.featureName,this.ee),o.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0}))},100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),o.disconnect(),this.abortHandler=void 0},this.importAggregator(e,()=>r.e(478).then(r.bind(r,4393)),{domObserver:o})}}var Tt=r(981);const At={},St=new Set;function xt(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class Ot{constructor(e,t){this.timestamp=(0,_.t)(),this.currentUrl=(0,Ee.L)(window.location.href),this.socketId=(0,ye.LA)(8),this.requestedUrl=(0,Ee.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class _t extends W{static featureName=o.TZ;constructor(e){super(e,o.TZ);const n=e.init.feature_flags.includes("websockets")||e.init.web_sockets?.enabled,s=!e.init.feature_flags.includes("no_spv"),a=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,n,s];var c;let d;if(c=e,(0,N.Y)(k.hG,(e,t)=>ce(e,t,c),c),function(e){(0,N.Y)(k.fF,(t,r)=>ue(t,r,e),e)}(e),ct(e),Se(e),function(e){(0,N.Y)(k.V1,(t,r)=>de(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},n){const u=function(e,t){if(!(0,i.dV)().o.WS)return e;const r=e.get("websockets");if(At[r.debugId]++)return r;At[r.debugId]=1,(0,V.G)(()=>{const e=(0,_.t)();St.forEach(t=>{t.nrData.closedAt=e,t.nrData.closeCode=1001,t.nrData.closeReason="Page navigating away",t.nrData.closeWasClean=!1,t.nrData.openedAt&&(t.nrData.connectedDuration=e-t.nrData.openedAt),r.emit("ws",[t.nrData,t.targets],t)})});
13class n extends WebSocket{static name=Tt.R.WS;static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return n.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new Ot(e[0],e[1]),this.targets=(0,Ie.$5)(t),this.addEventListener("open",()=>{this.nrData.openedAt=(0,_.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),St.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=xt(e.data);this.nrData.messageOrigin??=(0,Ee.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,_.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,St.delete(this),r.emit("ws",[this.nrData,this.targets],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=xt(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return g.gm.WebSocket=n,r}(this.ee,e);u.on("ws",(e,t)=>{(0,S.p)("ws-complete",[e,t],void 0,this.featureName,this.ee)})}if(s){if("function"==typeof g.gm.ReportingObserver){const l=new g.gm.ReportingObserver(e=>{e.forEach(e=>{(0,S.p)("spv",[kt(e),(0,_.t)()],void 0,t.K7.genericEvents,this.ee)}),l.disconnect()},{types:["csp-violation"],buffered:!0});l.observe()}g.gm.addEventListener("securitypolicyviolation",e=>{(0,S.p)("spv",[kt(e),e.timeStamp],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal))}if(g.RI){if(ze(this.ee,e),De(this.ee,e),d=at(this.ee,e),e.init.user_actions.enabled){function f(t){const r=(0,Ge.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function h(){d.emit("navChange")}o.Zp.forEach(e=>(0,J.sp)(e,e=>(0,S.p)("ua",[e],void 0,this.featureName,this.ee),!0)),o.qN.forEac
13h(e=>{const t=(0,C.s)(e=>{(0,S.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,J.sp)(e,t)}),g.gm.addEventListener("error",()=>{(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{f(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!f(Ze(e[0]))&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),d.on("pushState-end",h),d.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,J.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",h,(0,J.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,S.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}a.some(e=>e)?this.importAggregator(e,()=>r.e(478).then(r.bind(r,8019))):this.deregisterDrain()}}function kt(e){const t=e.body??e;return{blockedUrl:t.blockedURL??e.blockedURI,documentUrl:t.documentURL??e.documentURI,effectiveDirective:t.effectiveDirective,originalPolicy:t.originalPolicy,sourceFile:t.sourceFile,statusCode:t.statusCode,lineNumber:t.lineNumber,columnNumber:t.columnNumber,disposition:"reporting"===t.disposition?"report":t.disposition,sample:t.sample,referrer:t.referrer}}var Nt=r(2646);const Lt=new Map;function Mt(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const a=function(e){return(e||R.ee).get("logger")}(e),o=(0,Pe.YM)(a,void 0,s),c=new Nt.y(R.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[Pe.Jt]||t[r];return Lt.set(d,c),o.inPlace(t,[r],"wrap-logger-",()=>Lt.get(d),void 0,!0),a}var Pt=r(1910);class It extends W{static featureName=se.TZ;constructor(e){var t;super(e,se.TZ),t=e,(0,N.Y)("log",(e,r)=>oe(e,r,t),t),function(e){(0,N.Y)(k.Wb,(t,r,{customAttributes:n={},level:i=se.p_.INFO}={})=>{Mt(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Se(e);const n=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,Pt.i)(g.gm.console[t]),Mt(n,g.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([t],r,i,s=[e.runtime.v2Target]){const{level:a,customAttributes:o,autoCaptured:c}=this;s.forEach(e=>{(0,ae.R)(n,t,o,a,c,e)})}),this.importAggregator(e,()=>r.e(478).then(r.bind(r,5288)))}}new F({features:[nt,K,G,vt,Et,Y,Oe,_t,It,Rt],loaderType:"spa"})})()})();</script>
13 14 <meta content="utf-8" http-equiv="encoding"> 15
15<script type="text/javascript" id="OptanonWrapper"> 16 /** 17 * Delete all cookies except whitelisted ones 18 */ 19 function deleteUnconsentedCookies() { 20 // Get all cookies 21 const cookies = document.cookie.split(';'); 22 23 // Get whitelisted cookies from PHP 24 const whitelistedCookies = ["wordpress_logged_in","wordpress_logged_in_*","wordpress_sec_*","OptanonConsent","OptanonAlertBoxClosed","eupubconsent-v2","OneTrustWPCCPANotice","OneTrustGroupConsent","gform_*","gf_csrf_token_*","ep_auth_token","wp-query-monitor-*","wp_fail2ban_*","srm_redirect_*"]; 25 26 // Get all domains to try 27 const domain = window.location.hostname; 28 const domains = domain.split('.'); 29 const paths = ['/', '']; 30 31 // Try to delete each cookie 32 cookies.forEach(cookie => { 33 const cookieName = cookie.split('=')[0].trim(); 34 35 // Check if cookie matches any whitelist pattern 36 const isWhitelisted = whitelistedCookies.some(pattern => { 37 const regexPattern = pattern 38 .replace(/\./g, '\\.') 39 .replace(/\*/g, '.*'); 40 return new RegExp('^' + regexPattern + '$').test(cookieName); 41 }); 42 43 if (!isWhitelisted) { 44 45 // Try every combination of domain and path 46 domains.forEach((d, i) => { 47 const domainPart = '.' + domains.slice(i).join('.'); 48 paths.forEach(path => { 49 // Try with domain 50 document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=${domainPart}; path=${path}`; 51 // Try without domain 52 document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}`; 53 // Try with exact domain 54 document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=${domain}; path=${path}`; 55 }); 56 }); 57 } 58 }); 59 } 60 /** 61 * OptanonWrapper callback function. We use the OptanonWrapper function to listen 62 * for a user event and determine script behavior based on the user event. 63 * 64 * @return void 65 */ 66 function OptanonWrapper() { 67 68 // Get all registered script IDs from js_onetrust_handles. 69 const scriptIds = ["mc-datalayer-yaml","gpt","mc-ads","mc-hubspot-subscription-form","mc-integrations-hubspot","mc-integrations-hubspot-legacy","metrocorp-ads-secondary","nativo-tracking"]; 70 71 // These will be needed for the fetch request, to delete HttpOnly cookies. 72 const ajaxurl = 'https://www.bostonmagazine.com/wp-admin/admin-ajax.php'; 73 const nonce = 'bfb54cd2b2'; 74 75 76 // OneTrust event listener that fires when a user confirms consent preferences in the banner. 77 Optanon.OnConsentChanged( function() { 78 79 // Get the active groups from a OneTrust global. 80 const activeGroups = window.OnetrustActiveGroups; 81 const hasDeclinedCategories = !activeGroups.includes('C0002') || 82 !activeGroups.includes('C0003') || 83 !activeGroups.includes('C0004'); 84 85 // if any category is declined, disable all OT registered scripts. 86 if (hasDeclinedCategories) { 87 // Disable all tracked scripts 88 scriptIds.forEach(id => { 89 const script = document.getElementById(id); 90 if (script) { 91 script.type = 'text/plain'; 92 } 93 }); 94 // Delete all client side cookies except whitelisted ones. 95 deleteUnconsentedCookies(); 96 97 // Server request to delete server side (HttpOnly) cookies. 98 fetch(ajaxurl, { 99 method: 'POST', 100 credentials: 'same-origin', 101 headers: { 102 'Content-Type': 'application/x-www-form-urlencoded', 103 }, 104 body: new URLSearchParams({ 105 action: 'delete_unconsented_cookies', 106 nonce: nonce 107 }) 108 }); 109 } 110 }); 111 } 112 </script>
112 113
113<script type="text/javascript" id="ot-inserter"> 114 (function() { 115 const otUrl = 'https://cdn.cookielaw.org/scripttemplates/otSDKStub.js'; 116 const otScript = document.createElement('script'); 117 otScript.async = true; 118 otScript.type = 'text/javascript'; 119 otScript.src = otUrl; 120 otScript.setAttribute('id', 'onetrustSDK'); 121 otScript.setAttribute('charset', 'UTF-8'); 122 otScript.setAttribute('data-domain-script', '01947541-75bb-7dce-8570-43f9ca73af23'); 123 const otNode = document.getElementById('ot-inserter'); 124 otNode.parentNode.insertBefore(otScript, otNode.nextSibling); 125 })(); 126 </script>
126 127 <link rel="preconnect" href="https://securepubads.g.doubleclick.net" /><link rel="preconnect" href="https://www.googleadservices.com" /><link rel="preconnect" href="https://s.ntv.io" /><link rel="preconnect" href="https://ib.adnxs.com" /><link rel="preconnect" href="https://ap.lijit.com" /> <!-- Below is a recommended list of pre-connections, which allow the network to establish each connection quicker, speeding up response times and improving ad performance. --> 128 <link rel="preconnect" href="https://a.pub.network/" crossorigin /> 129 <link rel="preconnect" href="https://b.pub.network/" crossorigin /> 130 <link rel="preconnect" href="https://c.pub.network/" crossorigin /> 131 <link rel="preconnect" href="https://d.pub.network/" crossorigin /> 132 <link rel="preconnect" href="https://btloader.com/" crossorigin /> 133 <link rel="preconnect" href="https://api.btloader.com/" crossorigin /> 134 <link rel="preconnect" href="https://cdn.confiant-integrations.net" crossorigin /> 135 <!-- Below is a link to a CSS file that accounts for Cumulative Layout Shift, a new Core Web Vitals subset that Google uses to help rank your site in search --> 136 <!-- The file is intended to eliminate the layout shifts that are seen when ads load into the page. If you don't want to use this, simply remove this file --> 137 <!-- To find out more about CLS, visit https://web.dev/vitals/ --> 138 <link rel="stylesheet" href="https://a.pub.network/bostonmagazine-com/cls.css"> 139
139<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 140 var freestar = freestar || {}; 141 freestar.queue = freestar.queue || []; 142 freestar.config = freestar.config || {}; 143 freestar.config.enabled_slots = []; 144 freestar.config.targeting = [ 145 { 146 "bostonmagazine_banner-1": { 147 "pos": ["1"], 148 } 149 }, 150 { 151 "bostonmagazine_banner-2": { 152 "pos": ["2"], 153 } 154 }, 155 { 156 "bostonmagazine_banner-3": { 157 "pos": ["3"], 158 } 159 }, 160 { 161 "bostonmagazine_rail-1": { 162 "pos": ["1"], 163 } 164 }, 165 { 166 "bostonmagazine_rail-2": { 167 "pos": ["2"], 168 } 169 }, 170 { 171 "bostonmagazine_rail-3": { 172 "pos": ["3"], 173 } 174 }, 175 { 176 "bostonmagazine_curated_module-1": { 177 "pos": ["1"], 178 } 179 }, 180 { 181 "bostonmagazine_curated_module-2": { 182 "pos": ["2"], 183 } 184 }, 185 { 186 "bostonmagazine_curated_module-3": { 187 "pos": ["3"], 188 } 189 }, 190 ]; 191 freestar.initCallback = function () { (freestar.config.enabled_slots.length === 0) ? freestar.initCallbackCalled = false : freestar.newAdSlots(freestar.config.enabled_slots) } 192 </script>
192 193
193<script src="https://a.pub.network/bostonmagazine-com/pubfig.min.js" data-cfasync="false" async type="text/plain" class="optanon-category-C0004"></script>
193 194 <style> 195 #pmLink { 196 visibility: hidden; 197 text-decoration: none; 198 cursor: pointer; 199 background: transparent; 200 border: none; 201 } 202 203 #pmLink:hover { 204 visibility: visible; 205 color: grey; 206 } 207 </style> 208
208<script type="text/plain" class="optanon-category-C0004"> 209 freestar.config.disabledProducts = { 210 superflex: true 211 }; 212 </script>
212 213 <link rel="preconnect" href="https://www.bostonmagazine.com/" /><link rel="preconnect" href="https://s.ntv.io/" /><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1, noarchive' /> 214 215 <!-- This site is optimized with the Yoast SEO Premium plugin v27.9 (Yoast SEO v27.9) - https://yoast.com/product/yoast-seo-premium-wordpress/ --> 216 <title>City Life Archives - Boston Magazine</title> 217 <meta name="description" content="Discover the news about Boston from the people who know the city best. Boston Magazine's news section will keep you up to date on the most relevant politics, weather, sports, policies, neighborhoods, and more." /> 218 <link rel="canonical" href="https://www.bostonmagazine.com/news/" /> 219 <link rel="next" href="https://www.bostonmagazine.com/news/page/2/" /> 220 <meta property="og:locale" content="en_US" /> 221 <meta property="og:type" content="article" /> 222 <meta property="og:title" content="City Life Archives" /> 223 <meta property="og:url" content="https://www.bostonmagazine.com/news/" /> 224 <meta property="og:site_name" content="Boston Magazine" /> 225 <meta name="twitter:card" content="summary_large_image" /> 226 <!-- / Yoast SEO Premium plugin. --> 227 228 229<link rel='dns-prefetch' href='//securepubads.g.doubleclick.net' /> 230<link rel='dns-prefetch' href='//s.ntv.io' /> 231<link rel='dns-prefetch' href='//use.typekit.net' /> 232<link rel='dns-prefetch' href='//p.typekit.net' /> 233<link rel='preconnect' href='https://use.typekit.net' /> 234<link rel='preconnect' href='https://p.typekit.net' /> 235<link rel="alternate" type="application/rss+xml" title="Boston Magazine » City Life Vertical Feed" href="https://www.bostonmagazine.com/news/feed/" /> 236<style id="wp-img-auto-sizes-contain-inline-css"> 237img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 238/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 239</style> 240<style id="wp-emoji-styles-inline-css"> 241 242 img.wp-smiley, img.emoji { 243 display: inline !important; 244 border: none !important; 245 box-shadow: none !important; 246 height: 1em !important; 247 width: 1em !important; 248 margin: 0 0.07em !important; 249 vertical-align: -0.1em !important; 250 background: none !important; 251 padding: 0 !important; 252 } 253/*# sourceURL=wp-emoji-styles-inline-css */ 254</style> 255 256<style id="global-styles-inline-css"> 257:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: var(--wp--custom--color--black);--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: var(--wp--custom--color--white);--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--red: var(--wp--custom--color--red);--wp--preset--color--gray-ads: var(--wp--custom--color--gray-ads);--wp--preset--color--gray-lightest: var(--wp--custom--color--gray-lightest);--wp--preset--color--gray-medium: var(--wp--custom--color--gray-medium);--wp--preset--color--gray-ghost: var(--wp--custom--color--gray-ghost);--wp--preset--color--gray: var(--wp--custom--color--gray);--wp--preset--color--twitter-blue: var(--wp--custom--color--twitter-blue);--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
257--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: var(--wp--custom--font--size--014);--wp--preset--font-size--medium: var(--wp--custom--font--size--018);--wp--preset--font-size--large: var(--wp--custom--font--size--024);--wp--preset--font-size--x-large: var(--wp--custom--font--size--028);--wp--preset--font-size--x-small: var(--wp--custom--font--size--012);--wp--preset--font-size--normal: var(--wp--custom--font--size--016);--wp--preset--font-size--xx-large: var(--wp--custom--font--size--036);--wp--preset--font-size--xxx-large: var(--wp--custom--font--size--042);--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);--wp--custom--color--white: #fff;--wp--custom--color--black: #000;--wp--custom--color--red: #d2232a;--wp--custom--color--gray-ads: #DEDFDE;--wp--custom--color--gray-lightest: #ddd;--wp--custom--color--gray-medium: #bbbdbf;--wp--custom--color--gray-ghost: #FAFAFA;--wp--custom--color--gray: #5A5A5A;--wp--custom--color--twitter-blue: #1dcaff;--wp--custom--color--captions: #909090;--wp--custom--font--family--primary: 'ivypresto-display', serif;--wp--custom--font--family--secondary: 'Helvetica', sans-serif;--wp--custom--font--family--tertiary: 'Georgia', serif;--wp--custom--font--size--012: 0.75rem;--wp--custom--font--size--014: 0.875rem;--wp--custom--font--size--016: 1rem;--wp--custom--font--size--018: 1.125rem;--wp--custom--font--size--024: 1.5rem;--wp--custom--font--size--028: 1.75rem;--wp--custom--font--size--032: 2rem;--wp--custom--font--size--036: 2.25rem;--wp--custom--font--size--042: 2.625rem;--wp--custom--font--weight--regular: 400;--wp--custom--font--weight--medium: 500;--wp--custom--font--weight--semi-bold: 600;--wp--custom--font--weight--bold: 700;}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }.wp-site-blocks { padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom); }.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 24px; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 24px; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 24px;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 24px;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 24px;}:root :where(.is-layout-grid){gap: 24px;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained >
257 :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{--wp--style--root--padding-top: 0px;--wp--style--root--padding-right: 0px;--wp--style--root--padding-bottom: 0px;--wp--style--root--padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-red-color{color: var(--wp--preset--color--red) !important;}.has-gray-ads-color{color: var(--wp--preset--color--gray-ads) !important;}.has-gray-lightest-color{color: var(--wp--preset--color--gray-lightest) !important;}.has-gray-medium-color{color: var(--wp--preset--color--gray-medium) !important;}.has-gray-ghost-color{color: var(--wp--preset--color--gray-ghost) !important;}.has-gray-color{color: var(--wp--preset--color--gray) !important;}.has-twitter-blue-color{color: var(--wp--preset--color--twitter-blue) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-red-background-color{background-color: var(--wp--preset--color--red) !important;}.has-gray-ads-background-color{background-color: var(--wp--preset--color--gray-ads) !important;}.has-gray-lightest-background-color{background-color: var(--wp--preset--color--gray-lightest) !important;}.has-gray-medium-background-color{background-color: var(--wp--preset--color--gray-medium) !important;}.has-gray-ghost-background-color{background-color: var(--wp--preset--color--gray-ghost) !important;}.has-gray-background-color{background-color: var(--wp--preset--color--gray) !important;}.has-twitter-blue-background-color{background-color: var(--wp--preset--color--twitter-blue) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-red-border-color{border-color: var(--wp--preset--color--red) !important;}.has-gray-ads-border-color{border-color: var(--wp--preset--color--gray-ads) !important;}.has-gray-lightest-border-color{border-color: var(--wp--preset--color--gray-lightest) !important;}.has-gray-medium-border-color{border-color: var(--wp--preset--color--gray-medium) !important;}.has-gray-ghost-border-color{border-color: var(--wp--preset--color--gray-ghost) !important;}.has-gray-border-color{border-color: var(--wp--preset--color--gray) !important;}.has-twitter-blue-border-color{border-color: var(--wp--preset--color--twitter-blue) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
257.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-x-small-font-size{font-size: var(--wp--preset--font-size--x-small) !important;}.has-normal-font-size{font-size: var(--wp--preset--font-size--normal) !important;}.has-xx-large-font-size{font-size: var(--wp--preset--font-size--xx-large) !important;}.has-xxx-large-font-size{font-size: var(--wp--preset--font-size--xxx-large) !important;} 258/*# sourceURL=global-styles-inline-css */ 259</style> 260 261<link rel='stylesheet' id='metro_typekit-css' href='https://use.typekit.net/fhn8jjz.css?ver=7.1.2' media='all' /> 262<link rel='stylesheet' id='bostonmagazine-css' href='https://bomag.o0bc.com/wp-content/themes/metrocorp/dist/css/boston.min.css?ver=1790714179' media='all' /> 263<link rel='stylesheet' id='METROCORP_BLOCK_EDITOR_frontend-css' href='https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-block-editor/dist/css/frontend.css?ver=24b99fd25b7c352eb6fc' media='all' /> 264<link rel='stylesheet' id='tablepress-default-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/css/build/default.css?ver=3.2.1-BGMP' media='all' /> 265<link rel='stylesheet' id='tablepress-datatables-buttons-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.buttons.css?ver=3.2.1-BGMP' media='all' /> 266<link rel='stylesheet' id='tablepress-datatables-fixedheader-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.fixedheader.css?ver=3.2.1-BGMP' media='all' /> 267<link rel='stylesheet' id='tablepress-datatables-fixedcolumns-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.fixedcolumns.css?ver=3.2.1-BGMP' media='all' /> 268<link rel='stylesheet' id='tablepress-datatables-scroll-buttons-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.scroll-buttons.css?ver=3.2.1-BGMP' media='all' /> 269<link rel='stylesheet' id='tablepress-responsive-tables-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/responsive-tables.css?ver=3.2.1-BGMP' media='all' /> 270<link rel='stylesheet' id='tablepress-datatables-columnfilterwidgets-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.columnfilterwidgets.css?ver=3.2.1-BGMP' media='all' /> 271<link rel='stylesheet' id='tablepress-datatables-serverside-processing-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.serverside-processing.css?ver=3.2.1-BGMP' media='all' />
272<script id="gpt-js-extra"> 273var mcAds = {"advertiserSlug":"","currentSite":"bostonmagazine","gptNetworkID":"/61381659/site195.tmus/","hasBannerThree":"true","isArchive":"false","isGeodir":"false","isSingle":"","postType":"post","slots":{"banner-1":{"adUnit":"banner","adSizes":"[[728, 90], [320, 100], [970, 250], [320, 50], [970, 90]]","id":"banner-1","mapping":"bannerOneMapping","hasSettings":true,"targeting":{"pos":"1"},"isRefresh":"true","isLazy":"false","isPrebid":"true"},"banner-2":{"adUnit":"banner","adSizes":"[[728, 90], [320, 100], [970, 250], [300, 250], [320, 50], [970, 90]]","id":"banner-2","mapping":"bannerMapping","hasSettings":true,"targeting":{"pos":"2"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"banner-3":{"adUnit":"banner","adSizes":"[[728, 90], [320, 100], [970, 250], [300, 250], [320, 50], [970, 90], [1,1]]","id":"banner-3","mapping":"bannerMapping","hasSettings":true,"targeting":{"pos":"3"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"adslot_0":{"adUnit":"native_river","adSizes":"fluid","id":"adslot_0","targeting":{"pos":"1"}},"adslot_1":{"adUnit":"native_river","adSizes":"fluid","id":"adslot_1","targeting":{"pos":"2"}},"adslot_2":{"adUnit":"native_river","adSizes":"fluid","id":"adslot_2","targeting":{"pos":"3"}},"curated_module-1":{"adUnit":"curated_module","adSizes":"fluid","id":"curated_module-1","hasSettings":true,"targeting":{"pos":"1"},"isRefresh":"false","isLazy":"true","isPrebid":"false"},"curated_module-2":{"adUnit":"curated_module","adSizes":"fluid","id":"curated_module-2","hasSettings":true,"targeting":{"pos":"2"},"isRefresh":"false","isLazy":"true","isPrebid":"false"},"rail-1":{"adUnit":"rail","adSizes":"[[320, 100], [320, 50], [300, 250], [300, 600], [1,1]]","id":"rail-1","mapping":"railMapping","hasSettings":true,"targeting":{"pos":"1"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"rail-2":{"adUnit":"rail","adSizes":"[[320, 100], [320, 50], [300, 250], [300, 600], [1,1]]","id":"rail-2","mapping":"railMapping","hasSettings":true,"targeting":{"pos":"2"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"rail-3":{"adUnit":"rail","adSizes":"[[320, 100], [320, 50], [300, 250], [300, 600], [1,1]]","id":"rail-3","mapping":"railMapping","hasSettings":true,"targeting":{"pos":"3"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"toprailsponsor-1":{"adUnit":"toprailsponsor","adSizes":"[[300, 150], [300, 90], [1,1]]","id":"toprailsponsor-1","mapping":"toprailMapping","targeting":{"pos":"1"}},"interstitial":{"adUnit":"interstitial","id":"interstitial","outOfPage":true},"skin":{"adUnit":"skin","adSizes":"[1, 1]","id":"skin"},"ad-reveal":{"adUnit":"ad-reveal","adSizes":"[[1300, 500], [780, 300], [360, 585]]","id":"ad-reveal","hasSettings":true,"mapping":"adrevealMapping","isRefresh":"false","isLazy":"false","isPrebid":"false"},"bottom-anchor":{"adUnit":"BOTTOM_ANCHOR","id":"bottom-anchor","isMobile":true,"outOfPage":true,"outOfPageFormat":"BOTTOM_ANCHOR","targeting":{"test":"outofpage"}}},"slotsFired":[],"slotsViewed":[],"targeting":{"vertical":"news","cat":[],"environment":"production","post_type":"section","vertical-landing":"news-171017"},"debug":""}; 274//# sourceURL=gpt-js-extra 275</script>
vendor: 1 bytes, line 275
275
276<script type="text/plain" src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" id="gpt" class="optanon-category-C0004"></script>
276<script type="text/plain" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-ads/dist/js/metrocorp-ads.js?ver=1.0.0" id="mc-ads" class="optanon-category-C0004"></script>
276<script type="text/plain" src="https://s.ntv.io/serve/load.js" id="nativo-tracking" class="optanon-category-C0004"></script>
276<link rel="https://api.w.org/" href="https://www.bostonmagazine.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.bostonmagazine.com/wp-json/wp/v2/mc-tax-vertical/171017" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.bostonmagazine.com/xmlrpc.php?rsd" /> 277<meta name="generator" content="WordPress 7.1.2" /> 278<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/FoundersGrotesk/FoundersGroteskX-CondensedWeb-Medium.woff' as='font' type='font/woff' crossorigin> 279<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter/inter-v12-latin-regular.woff2' as='font' type='font/woff' crossorigin> 280<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter/inter-v12-latin-500.woff2' as='font' type='font/woff' crossorigin> 281<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter-v12-latin-600.woff2' as='font' type='font/woff' crossorigin> 282<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter-v12-latin-700.woff2' as='font' type='font/woff' crossorigin>
283<script type="application/ld+json">{ 284 "@context": "http:\/\/schema.org", 285 "@type": "WebPage", 286 "publisher": { 287 "@type": "Organization", 288 "name": "Boston Magazine", 289 "logo": { 290 "@type": "ImageObject", 291 "url": "https:\/\/www.bostonmagazine.com\/wp-content\/themes\/metrocorp-bostonmagazine\/images\/logo-bostonmag.png" 292 } 293 }, 294 "mainEntityOfPage": { 295 "@type": "WebPage", 296 "@id": "https:\/\/www.bostonmagazine.com\/news" 297 } 298}</script>
298<meta name="google-site-verification" content="0XaV9QKUdAM56rDbamBZ6GVmS2NqzAhSO1DgPDye__o" /><link rel="icon" href="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-32x32.png" sizes="32x32" /> 299<link rel="icon" href="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-192x192.png" sizes="192x192" /> 300<link rel="apple-touch-icon" href="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-180x180.png" /> 301<meta name="msapplication-TileImage" content="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-270x270.png" />
302<script type="text/javascript"> 303 window.dataLayer = window.dataLayer || []; 304</script>
304 305
306<script type="text/javascript"> 307 window.gtag = window.gtag || function() { 308 window.dataLayer.push( arguments ); 309 }; 310 311 /** 312 * Read the consent state OneTrust stores in the OptanonConsent cookie. 313 * 314 * @return {?string} The raw groups value, or null when nothing is stored. 315 */ 316 function mcStoredConsentGroups() { 317 var cookie = document.cookie.match( /(?:^|;\s*)OptanonConsent=([^;]*)/ ); 318 319 if ( ! cookie ) { 320 return null; 321 } 322 323 try { 324 var groups = decodeURIComponent( cookie[1] ).match( /groups=([^&]*)/ ); 325 return groups && groups[1] ? groups[1] : null; 326 } catch ( e ) { 327 return null; 328 } 329 } 330 331 /** 332 * Map OneTrust categories onto Consent Mode v2 signals. 333 * 334 * Reads either the cookie format ( C0002:1 ) or the OnetrustActiveGroups 335 * format ( ,C0001,C0002, ) so the default and update commands cannot 336 * drift apart. 337 * 338 * @param {string} groups The category string to read. 339 * @return {Object} Consent Mode v2 signals. 340 */ 341 function mcConsentSignals( groups ) { 342 var isActive = function( category ) { 343 return -1 !== groups.indexOf( category + ':1' ) || 344 -1 !== groups.indexOf( ',' + category + ',' ); 345 }; 346 347 var advertising = isActive( 'C0004' ) ? 'granted' : 'denied'; 348 349 return { 350 analytics_storage: isActive( 'C0002' ) ? 'granted' : 'denied', 351 ad_storage: advertising, 352 ad_user_data: advertising, 353 ad_personalization: advertising 354 }; 355 } 356 357 function mcUpdateGoogleConsent() { 358 window.gtag( 'consent', 'update', mcConsentSignals( window.OnetrustActiveGroups || '' ) ); 359 } 360 361 var mcStoredGroups = mcStoredConsentGroups(); 362 var mcDefaultConsent = mcStoredGroups ? mcConsentSignals( mcStoredGroups ) : { 363 analytics_storage: 'denied', 364 ad_storage: 'denied', 365 ad_user_data: 'denied', 366 ad_personalization: 'denied' 367 }; 368 369 mcDefaultConsent.wait_for_update = 1000; 370 371 window.gtag( 'consent', 'default', mcDefaultConsent ); 372 373 window.addEventListener( 'OneTrustGroupsUpdated', mcUpdateGoogleConsent ); 374 375 if ( window.OnetrustActiveGroups ) { 376 mcUpdateGoogleConsent(); 377 } 378</script>
378 379
380<script type="text/javascript">dataLayer.push({"content_type":"non-post","post_id":"non-post"}); var gtmLoaded=true;</script>
380 381<!-- Google Tag Manager --> 382<noscript> 383<iframe data-src="//www.googletagmanager.com/ns.html?id=GTM-WFHFBM" height="0" width="0" class="optanon-category-C0004" style="display:none;visibility:hidden"></iframe></noscript>
384<script type="text/javascript"> 385if ( typeof dataLayer[0].gaReferer === 'undefined' ) { 386 var referrer = document.referrer, siteURL = window.location.origin; 387 if ( ! referrer || referrer.indexOf( siteURL ) === 0 ) { 388 dataLayer[0].gaReferer = null; 389 } else { 390 dataLayer[0].gaReferer = referrer; 391 } 392} 393 394dataLayer.push({ 395 'gtm.start': new Date().getTime(), 396 event: 'gtm.js' 397}); 398</script>
vendor: 1 bytes, line 398
398
399<script async type="text/javascript" src="https://www.googletagmanager.com/gtm.js?id=GTM-WFHFBM"></script>
399<!-- End Google Tag Manager --> 400<!-- Start of HubSpot Embed Code -->
401<script type="text/plain" class="optanon-category-C0004" id="hs-script-loader" async defer src="//js.hs-scripts.com/43837035.js"></script>
401 402<!-- End of HubSpot Embed Code --> 403<meta name="p:domain_verify" content="3a9adbe7c6bf24035a0284a21da2840a"/> 404 </head> 405 <body class="archive tax-mc-tax-vertical term-news term-171017 wp-theme-metrocorp wp-child-theme-metrocorp-bostonmagazine current-site-bostonmagazine"> 406 <div class="hat-nav container"> 407 <nav class="hat-nav__menu"> 408 <ul class="hat-nav__list"> 409 <li> 410 <a href="https://www.bostonglobe.com/" data-track-name="BDCHatNav_BG">The Boston Globe</a> 411 </li> 412 <li> 413 <a href="https://www.boston.com/" data-track-name="BDCHatNav_BDC">Boston.com</a> 414 </li> 415 <li> 416 <a href="https://www.bostonmagazine.com/" class="active">Boston Magazine</a> 417 </li> 418 <li> 419 <a href="https://www.boston.com/tag/the-b-side/" data-track-name="BDCHatNav_BSide">B-Side</a> 420 </li> 421 </ul> 422 </nav> 423</div> 424 <div align="center" data-freestar-ad="__360x585 __1300x500" id="bostonmagazine_ad-reveal" class="gpt-ad"> 425
425<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 426 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_ad-reveal", slotId: "bostonmagazine_ad-reveal" }); 427 </script>
427 428 </div><div id="under-reveal"></div><div class="header-navigation-spacer"></div> 429<div class="header-navigation js-header-menu-full" id="js-header-navigation"> 430 <div class="container header-navigation-inner"> 431 <div class="navigation-logo"> 432 <a href="//www.bostonmagazine.com" aria-label="Boston Magazine" > 433 <svg class="mc-icon bostonmagazine-logo" aria-hidden="true"><title>Boston Magazine</title><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-logo"></svg> </a> 434 </div> 435 <button 436 id="js-mobile-menu-toggle" 437 class="mobile-menu-toggle" 438 aria-hidden="true" 439 aria-label="Toggle navigation menu" 440 aria-expanded="false" 441 aria-controls="js-header-navigation-wrapper" 442 > 443 <svg class="mc-icon hamburger" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-hamburger"></svg> <svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg> </button> 444 445 <div class="header-menu-wrapper" id="js-header-navigation-wrapper"> 446 447 <div class="header-menu"><ul id="menu-primary-menu" class="menu-header-main"><li id="menu-item-2933157" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2933157"><a href="https://www.bostonmagazine.com/issues/">Magazine</a></li> 448<li id="menu-item-2417140" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2417140"><a href="/find-it-boston-search/">Find It / Boston</a> 449<ul class="sub-menu"> 450 <li id="menu-item-2417143" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417143"><a href="/find-a-doctor/">Doctors</a></li> 451 <li id="menu-item-2417146" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417146"><a href="/dentists/">Dentists</a></li> 452 <li id="menu-item-2669250" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2669250"><a href="/lawyers/">Lawyers</a></li> 453 <li id="menu-item-2763054" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2763054"><a href="/senior-living/">Senior Living</a></li> 454 <li id="menu-item-2452224" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2452224"><a href="/wedding/">Wedding Experts</a></li> 455 <li id="menu-item-2464168" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2464168"><a href="/private-schools/">Private Schools</a></li> 456 <li id="menu-item-2477508" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477508"><a href="/home-design/">Home Design Experts</a></li> 457 <li id="menu-item-2511746" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511746"><a href="/real-estate-agents/">Real Estate Agents</a></li> 458</ul> 459</li> 460<li id="menu-item-2351177" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical current-menu-item menu-item-has-children menu-item-2351177"><a href="https://www.bostonmagazine.com/news" aria-current="page">City Life</a> 461<ul class="sub-menu"> 462 <li id="menu-item-2667249" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2667249"><a href="/fashion-style/">Style</a></li> 463 <li id="menu-item-2351199" class="no-children menu-item menu-item-type-custom menu-item-object-custom menu-item-2351199"><a href="/education/">Education</a></li> 464 <li id="menu-item-2429289" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2429289"><a href="/private-schools/">Find a Private School</a></li> 465</ul> 466</li> 467<li id="menu-item-2351186" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351186"><a href="https://www.bostonmagazine.com/restaurants">Restaurants</a> 468<ul class="sub-menu"> 469 <li id="menu-item-2593122" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2593122"><a href="/best-restaurants-in-boston/">50 Best Restaurants</a></li> 470</ul> 471</li> 472<li id="menu-item-2351180" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vert
472ical menu-item-has-children menu-item-2351180"><a href="https://www.bostonmagazine.com/health">Wellness</a> 473<ul class="sub-menu"> 474 <li id="menu-item-2351202" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2351202"><a href="https://www.bostonmagazine.com/health">Be Well Boston</a></li> 475 <li id="menu-item-2351205" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351205"><a href="/dentists/">Find a Dentist</a></li> 476 <li id="menu-item-2351206" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351206"><a href="/find-a-doctor/">Find a Doctor</a></li> 477</ul> 478</li> 479<li id="menu-item-2456643" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2456643"><a href="/weddings/">Weddings</a> 480<ul class="sub-menu"> 481 <li id="menu-item-2593127" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593127"><a href="https://www.bostonmagazine.com/weddings">Guides & Advice</a></li> 482 <li id="menu-item-2351247" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351247"><a href="/weddings/2026/01/06/best-of-boston-weddings-2026/">Best of Boston Weddings</a></li> 483 <li id="menu-item-2351214" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351214"><a href="/wedding/">Find a Wedding Expert</a></li> 484 <li id="menu-item-2351244" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351244"><a href="/category/real-weddings/">Real Weddings</a></li> 485 <li id="menu-item-2757961" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2757961"><a href="/bubblybrunch">Bubbly Brunch Event</a></li> 486</ul> 487</li> 488<li id="menu-item-2351189" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351189"><a href="https://www.bostonmagazine.com/property">Home & Property</a> 489<ul class="sub-menu"> 490 <li id="menu-item-2593129" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593129"><a href="https://www.bostonmagazine.com/property">Properties & News</a></li> 491 <li id="menu-item-2477503" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477503"><a href="/home-design/">Find a Home Design Expert</a></li> 492 <li id="menu-item-2511748" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511748"><a href="/realestate-agents/">Find a Real Estate Agent</a></li> 493 <li id="menu-item-2351251" class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351251"><a href="/tag/home-design">Home Design</a></li> 494 <li id="menu-item-2351253" class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351253"><a href="/property/2024/11/14/best-of-boston-home-2025/">Best of Boston Home</a></li> 495</ul> 496</li> 497<li id="menu-item-2351183" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351183"><a href="https://www.bostonmagazine.com/arts-entertainment">Things To Do</a> 498<ul class="sub-menu"> 499 <li id="menu-item-2351248" class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351248"><a href="https://www.bostonmagazine.com/things-to-do/weekend/">Things To Do This Weekend</a></li> 500 <li id="menu-item-2351220" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2351220"><a href="https://www.bostonmagazine.com/arts-entertainment">Arts & Entertainment</a></li> 501 <li id="menu-item-2351223" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351223"><a href="/events/">Boston magazine Events</a></li> 502 <li id="menu-item-2803594" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2803594"><a href="https://www.bostonmagazine.com/bestofbostonsoiree/">Best of Boston Soiree 2026</a></li> 503</ul> 504</li> 505<li id="menu-item-2351197" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2351197"><a href="/travel/">Travel</a> 506<ul class="sub-menu"> 507 <li id="menu-item-2806575" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2806575"><a href="http://bostonmagazine.com/travelawards">New England Travel Awards</a></li> 508</ul> 509</li> 510<li id="menu-item-174761" class="menuBes menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-174761"><a href="/best-of-boston/">Best of Boston</a> 511<ul class="sub-menu"> 512 <li id="menu-item-2734635" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2734635"><a href="/best-of-boston/">Latest Winners</a></li> 513</ul> 514</li> 515</ul></div> 516 <div class="header-tablet-elements">
517 <div class="header-subscribe"> 518 <div class="thin-line"> 519 <span class="screen-reader-text">Subscribe</span> 520 <svg class="mc-icon bostonmagazine-subscribe" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-subscribe"></svg> </div> 521 <ul id="menu-top-left" class="menu-header-subscribe"><li id="menu-item-2351233" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351233"><a href="https://w1.buysub.com/pubs/PB/BOS/BOS_sub.jsp?cds_page_id=270289&cds_mag_code=BOS&id=1732211763015&lsid=43261101552083486&vid=6">ALL ACCESS</a></li> 522<li id="menu-item-2655360" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2655360"><a href="/newsletters">NEWSLETTERS</a></li> 523<li id="menu-item-2351235" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351235"><a href="https://bostonglobemedia.cloud.buysub.com">MY ACCOUNT</a></li> 524</ul> </div> 525 526 <div class="header-social"> 527 <div class="thin-line"> 528 <span class="screen-reader-text">Follow</span> 529 <svg class="mc-icon bostonmagazine-follow" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-follow"></svg> </div> 530 <ul id="menu-social" class="menu-header-social"><li id="menu-item-2351226" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351226"><a target="_blank" href="https://www.facebook.com/bostonmagazine"><span class="screen-reader-text">Facebook</span></a></li> 531<li id="menu-item-2351228" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351228"><a target="_blank" href="https://www.instagram.com/bostonmagazine/"><span class="screen-reader-text">Instagram</span></a></li> 532<li id="menu-item-2351231" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351231"><a target="_blank" href="https://www.twitter.com/bostonmagazine"><span class="screen-reader-text">Twitter</span></a></li> 533</ul> </div> 534 </div> 535 536 </div> 537 <div class="header-search"> 538 <div class="search-form-wrapper" id="js-search-form-wrapper" aria-hidden="true"> 539 <form role="search" method="get" class="search-form" action="https://www.bostonmagazine.com/"> 540 <label> 541 <span class="screen-reader-text">Search for:</span> 542 <input type="search" class="search-field" 543 placeholder="Search â¦" 544 value="" name="s" 545 title="Search for:" /> 546 </label> 547 <button type="submit"> 548 <svg class="mc-icon icon-search" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-icon-search"></svg> <span class="screen-reader-text">Search</span> 549 </button> 550</form>
551 </div> 552 <button id="js-toggle-search" aria-expanded="false" aria-controls="js-search-form-wrapper"> 553 <svg class="mc-icon icon-search" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-icon-search"></svg> <svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg> </button> 554 </div> 555 </div> 556</div> 557 </div> 558 <header class="site-header" role="banner" id="js-header"> 559 560 <div class="site-header-inner container"> 561 562 <div class="header-social"> 563 <div class="thin-line"> 564 <span class="screen-reader-text">Follow</span> 565 <svg class="mc-icon bostonmagazine-follow" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-follow"></svg> </div> 566 <ul id="menu-social-1" class="menu-header-social"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351226"><a target="_blank" href="https://www.facebook.com/bostonmagazine"><span class="screen-reader-text">Facebook</span></a></li> 567<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351228"><a target="_blank" href="https://www.instagram.com/bostonmagazine/"><span class="screen-reader-text">Instagram</span></a></li> 568<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351231"><a target="_blank" href="https://www.twitter.com/bostonmagazine"><span class="screen-reader-text">Twitter</span></a></li> 569</ul> </div> 570 571 <div class="header-logo"> 572 <div itemscope itemtype="https://schema.org/Organization"> <a href="https://www.bostonmagazine.com/news" aria-label="Boston Magazine"> 573 <svg class="mc-icon bostonmagazine-section-news" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-section-news"></svg> </a> 574 <span class="section-front-tagline"></span></div></div> 575 576 <div class="header-subscribe"> 577 <div class="thin-line"> 578 <span class="screen-reader-text">Subscribe</span> 579 <svg class="mc-icon bostonmagazine-subscribe" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-subscribe"></svg> </div> 580 <ul id="menu-top-left-1" class="menu-header-subscribe"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351233"><a href="https://w1.buysub.com/pubs/PB/BOS/BOS_sub.jsp?cds_page_id=270289&cds_mag_code=BOS&id=1732211763015&lsid=43261101552083486&vid=6">ALL ACCESS</a></li> 581<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2655360"><a href="/newsletters">NEWSLETTERS</a></li> 582<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351235"><a href="https://bostonglobemedia.cloud.buysub.com">MY ACCOUNT</a></li> 583</ul> </div> 584 585 </div> 586 </header> 587 588 <div class="mobile-section-front"> 589 <a href="https://www.bostonmagazine.com/news"> 590 <svg class="mc-icon bostonmagazine-section-news" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-section-news"></svg> </a> 591 <span class="section-front-tagline"> 592 </span> 593 </div> 594 595 <div class="header-navigation-secondary container"><ul id="menu-primary-menu-1" class="menu-topics"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2933157"><a href="https://www.bostonmagazine.com/issues/">Magazine</a></li> 596<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2417140"><a href="/find-it-boston-search/">Find It / Boston</a> 597<ul class="sub-menu"> 598 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417143"><a href="/find-a-doctor/">Doctors</a></li> 599 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417146"><a href="/dentists/">Dentists</a></li> 600 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2669250"><a href="/lawyers/">Lawyers</a></li> 601 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2763054"><a href="/senior-living/">Senior Living</a></li> 602 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2452224"><a href="/wedding/">Wedding Experts</a></li> 603 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2464168"><a href="/private-schools/">Private Schools</a></li> 604 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477508"><a href="/home-design/">Home Design Experts</a></li> 605 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511746"><a href="/real-estate-agents/">Real Estate Agents</a></li> 606</ul> 607</li> 608<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vert
608ical current-menu-item menu-item-has-children menu-item-2351177"><a href="https://www.bostonmagazine.com/news" aria-current="page">City Life</a> 609<ul class="sub-menu"> 610 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2667249"><a href="/fashion-style/">Style</a></li> 611 <li class="no-children menu-item menu-item-type-custom menu-item-object-custom menu-item-2351199"><a href="/education/">Education</a></li> 612 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2429289"><a href="/private-schools/">Find a Private School</a></li> 613</ul> 614</li> 615<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351186"><a href="https://www.bostonmagazine.com/restaurants">Restaurants</a> 616<ul class="sub-menu"> 617 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2593122"><a href="/best-restaurants-in-boston/">50 Best Restaurants</a></li> 618</ul> 619</li> 620<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351180"><a href="https://www.bostonmagazine.com/health">Wellness</a> 621<ul class="sub-menu"> 622 <li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2351202"><a href="https://www.bostonmagazine.com/health">Be Well Boston</a></li> 623 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351205"><a href="/dentists/">Find a Dentist</a></li> 624 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351206"><a href="/find-a-doctor/">Find a Doctor</a></li> 625</ul> 626</li> 627<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2456643"><a href="/weddings/">Weddings</a> 628<ul class="sub-menu"> 629 <li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593127"><a href="https://www.bostonmagazine.com/weddings">Guides & Advice</a></li> 630 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351247"><a href="/weddings/2026/01/06/best-of-boston-weddings-2026/">Best of Boston Weddings</a></li> 631 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351214"><a href="/wedding/">Find a Wedding Expert</a></li> 632 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351244"><a href="/category/real-weddings/">Real Weddings</a></li> 633 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2757961"><a href="/bubblybrunch">Bubbly Brunch Event</a></li> 634</ul> 635</li> 636<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351189"><a href="https://www.bostonmagazine.com/property">Home & Property</a> 637<ul class="sub-menu"> 638 <li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593129"><a href="https://www.bostonmagazine.com/property">Properties & News</a></li> 639 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477503"><a href="/home-design/">Find a Home Design Expert</a></li> 640 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511748"><a href="/realestate-agents/">Find a Real Estate Agent</a></li> 641 <li class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351251"><a href="/tag/home-design">Home Design</a></li> 642 <li class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351253"><a href="/property/2024/11/14/best-of-boston-home-2025/">Best of Boston Home</a></li> 643</ul> 644</li> 645<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351183"><a href="https://www.bostonmagazine.com/arts-entertainment">Things To Do</a> 646<ul class="sub-menu"> 647 <li class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351248"><a href="https://www.bostonmagazine.com/things-to-do/weekend/">Things To Do This Weekend</a></li> 648 <li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vert
648ical menu-item-2351220"><a href="https://www.bostonmagazine.com/arts-entertainment">Arts & Entertainment</a></li> 649 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351223"><a href="/events/">Boston magazine Events</a></li> 650 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2803594"><a href="https://www.bostonmagazine.com/bestofbostonsoiree/">Best of Boston Soiree 2026</a></li> 651</ul> 652</li> 653<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2351197"><a href="/travel/">Travel</a> 654<ul class="sub-menu"> 655 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2806575"><a href="http://bostonmagazine.com/travelawards">New England Travel Awards</a></li> 656</ul> 657</li> 658<li class="menuBes menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-174761"><a href="/best-of-boston/">Best of Boston</a> 659<ul class="sub-menu"> 660 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2734635"><a href="/best-of-boston/">Latest Winners</a></li> 661</ul> 662</li> 663</ul></div> 664 <div style="width:1px;height:1px;margin:-1px 0 0 0;padding:0;display:block;"> 665 <div align="center" data-freestar-ad="" id="bostonmagazine_skin" class="gpt-ad"> 666
666<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 667 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_skin", slotId: "bostonmagazine_skin" }); 668 </script>
668 669 </div> </div> 670 671 <div align="center" data-freestar-ad="" id="bostonmagazine_interstitial" class="gpt-ad out-of-page"> 672
672<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 673 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_interstitial", slotId: "bostonmagazine_interstitial" }); 674 </script>
674 675 </div><div align="center" data-freestar-ad="" id="bostonmagazine_bottom-anchor" class="gpt-ad out-of-page"> 676
676<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 677 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_bottom-anchor", slotId: "bostonmagazine_bottom-anchor" }); 678 </script>
678 679 </div> 680 681 <div align="center" data-freestar-ad="__320x100 __970x250" id="bostonmagazine_banner-1" class="gpt-ad advertisement container"> 682
682<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 683 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_banner", slotId: "bostonmagazine_banner-1" }); 684 </script>
684 685 </div> 686 <div class="list-post" style="display:none" aria-hidden="true"> 687 <a href="https://www.bostonmagazine.com/scrapertrap" class="post-image-link"><img width="400" height="250" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="attachment-image-list size-image-list wp-post-image" alt=""></a> 688 689 <div class="list-post-card"> 690 <a href="https://www.bostonmagazine.com/scrapertrap" class="post-slug">I'm a scraper</a> 691 <div class="post-title"> 692 <a href="https://www.bostonmagazine.com/scrapertrap">This search result is here to prevent scraping</a> 693 </div> 694 <div class="post-excerpt"> 695 <p>If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-) 696 Note that clicking the link below will block access to this site for 24 hours.</p> 697 </div> 698 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/scrapertrap" class="byline">I'm a scraper</a></span> 699 </div> 700</div> 701 702 <div class="content-with-sidebar"> 703 <div class="featured-post"> 704 705 <a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/" class="post-image-link"> 706 <img width="300" height="200" src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-300x200.jpg" class="attachment-thumbnail size-thumbnail" alt="Stone archway above a doorway with the words "PUBLIC SCHOOL" carved into it, set in a brick building with three white-framed windows above." sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 * 2 ) - 35px ), 605px" srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-600x400.jpg 600w" data-no-lazy="true" decoding="async" fetchpriority="high" /> </a> 707 <div class="featured-post-card"> 708 <a href="https://www.bostonmagazine.com/category/news/" class="post-slug">News</a> <h2 class="post-title"> 709 <a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/"> 710 The Top Public High Schools in Greater Boston, Ranked for 2026 </a> 711 </h2> 712 <div class="post-excerpt"> 713 <p> 714 <p><span class="s1">We crunched the numbers to come up with our guide to the regionâs top-performing schools. Does your town make the grade?</span></p> 715 </p> 716 </div> 717 </div> 718 </div> 719 <div class="trending-widget"> 720 <div align="center" data-freestar-ad="__300x150 __300x150" id="bostonmagazine_toprailsponsor-1" class="gpt-ad toprail-bewell"> 721
721<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 722 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_toprailsponsor", slotId: "bostonmagazine_toprailsponsor-1" }); 723 </script>
723 724 </div> 725 <h2 class="title-line">Trending</h2> 726 727 <ol> 728 <li> 729 <h3 class="trending-post-title post-title"> 730 <a href="https://www.bostonmagazine.com/news/2026/09/29/massachusetts-best-state-data/"> 731 We’re No. 1! Obviously. </a> 732 </h3> 733 </li> 734 <li> 735 <h3 class="trending-post-title post-title"> 736 <a href="https://www.bostonmagazine.com/news/2026/09/29/best-dentists-greater-boston/"> 737 Our All-New List of Top Dentists in Greater Boston Is Here </a> 738 </h3> 739 </li> 740 <li> 741 <h3 class="trending-post-title post-title"> 742 <a href="https://www.bostonmagazine.com/news/2026/09/13/boston-greek-restaurant-feud-lawsuit-xenia-krasi/"> 743 Inside Demetri Tsolakis’s Legal Battle With His Former Boss </a> 744 </h3> 745 </li> 746 <li> 747 <h3 class="trending-post-title post-title"> 748 <a href="https://www.bostonmagazine.com/news/therians-identity/"> 749 Meet the Kids Who Identify as Animals </a> 750 </h3> 751 </li> 752 <li> 753 <h3 class="trending-post-title post-title"> 754 <a href="https://www.bostonmagazine.com/news/2026/09/23/jonathan-tucker-boston/"> 755 Jonathan Tucker Would Like a Word With TD Garden’s Owner </a> 756 </h3> 757 </li> 758 </ol> 759 760</div> 761 762 </div> 763 <div class="container"> 764 <hr class="double"> 765 <div class="grid-content"> 766 <div class="grid-post"> 767 <a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/" class="post-image-link"> 768 <img width="300" height="200" class="attachment-thumbnail size-thumbnail lazyload" alt="A blue graduation cap with a tassel, featuring the words "NOW WHAT?" written in white on the top, set against a white background with the word "Boston" partially visible in large blue letters behind it." decoding="async" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-300x200.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-600x400.jpg 600w" data-sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 ) - 35px ), 605px" /> </a> 769 <div class="grid-post-card"> 770 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"> 771 <a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/"> 772 The Great College Reckoning: Is Higher Education Still Worth It? </a> 773 </h2> 774 </div> 775 </div> 776 <div class="grid-post"> 777 <a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/" class="post-image-link"> 778 <img width="300" height="200" class="attachment-thumbnail size-thumbnail lazyload" alt="" decoding="async" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-300x200.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-600x400.jpg 600w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat.jpg 900w" data-sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 ) - 35px ), 605px" /> </a> 779 <div class="grid-post-card"> 780 <a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a> <h2 class="post-title"> 781 <a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/"> 782 What It Actually Takes to Apply to Private School </a> 783 </h2> 784 </div> 785 </div> 786 <div class="grid-post"> 787 <a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/" class="post-image-link"> 788 <img width="300" height="200" class="attachment-thumbnail size-thumbnail lazyload" alt="" decoding="async" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-300x200.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-600x400.jpg 600w" data-sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 ) - 35px ), 605px" /> </a> 789 <div class="grid-post-card"> 790 <a href="https://www.bostonmagazine.com/category/guides/" class="post-slug">Guides</a> <h2 class="post-title"> 791 <a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/"> 792 Greater Boston’s Top Hospitals for Surgery, By Procedure and Specialty </a> 793 </h2> 794 </div> 795 </div> 796 </div> 797 798 <hr class="solid"> 799 800 </div> 801 802 803 804 <div class="container find-a-pro-container"> 805 <div class="find-a-pro js-opened bdocs-open" id="js-find-a-pro"> 806 <h2 class="find-a-pro-title h2-dirmod-boston"><span><em>Find It Boston</em>What you need, when you need it.</span></h2> 807 <div class="find-a-pro-inner"> 808 <ul class="ul-bostonmagazine"> 809 <li><button class="js-directory-toggle" aria-expanded="true" aria-controls="js-find-a-pro-overlay-9"><span class="button">Doctors</span></button> <div class="find-a-pro-overlay js-expanded" id="js-find-a-pro-overlay-9" aria-hidden="false"> 810 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 811 812 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-9" aria-expanded="true"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 813 <div class="js-directory-form">
814<form id="directory-search-form_9" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/find-a-doctor/" method="get"> 815 816 <div class="directory-search-form__search-input s text"> 817 <label class="search-input-label" for="s_9"><span class="visually-hidden">Search For...</span> 818 819 <input id="s_9" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search For..." autocomplete="off"/> </label> 820 821 </div> <div class="directory-search-form__search-input cat select"> 822 <label class="search-input-label" for="cat_9"><span class="visually-hidden">Specialty</span> 823 824 <select name="cat[]" id="cat_9" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Specialty</option><option value="370">Addiction Psychiatry</option><option value="376">Adolescent Medicine</option><option value="325">Allergy & Immunology</option><option value="1254">Anesthesiology</option><option value="1246">Anti-Aging Regenerative Medicine</option><option value="1653">Bariatric Surgery</option><option value="408">Cardiac Electrophysiology</option><option value="423">Cardiovascular Disease</option><option value="437">Child & Adolescent Psychiatry</option><option value="442">Child Neurology</option><option value="445">Clinical Genetics</option><option value="460">Colon & Rectal Surgery</option><option value="23">Dermatology</option><option value="478">Developmental-Behavioral Pediatrics</option><option value="1222">Diabetes & Metabolism</option><option value="480">Diagnostic Radiology</option><option value="1261">Emergency Medicine</option><option value="1219">Endocrinology</option><option value="1264">Facial Plastic Surgery/Otolaryngology</option><option value="114">Family Medicine</option><option value="1234">Female Hair Loss</option><option value="496">Gastroenterology</option><option value="499">Geriatric Medicine</option><option value="502">Geriatric Psychiatry</option><option value="505">Gynecologic Oncology</option><option value="512">Hand Surgery</option><option value="513">Hematology</option><option value="866">Hospice & Palliative Medicine</option><option value="515">Infectious Disease</option><option value="1243">Integrative Gastroenterology</option><option value="54">Internal Medicine</option><option value="516">Interventional Cardiology</option><option value="517">Maternal & Fetal Medicine</option><option value="520">Medical Oncology</option><option value="839">Neonatal-Perinatal Medicine</option><option value="529">Nephrology</option><option value="533">Neurological Surgery</option><option value="536">Neurology</option><option value="538">Neuroradiology</option><option value="760">Nuclear Medicine</option><option value="215">Obstetrics & Gynecology</option><option value="540">Ophthalmology</option><option value="971">Orthopedic Surgery</option><option value="1737">Other</option><option value="547">Otolaryngology</option><option value="549">Pain Medicine</option><option value="78">Pathology</option><option value="1014">
824Pediatric Allergy & Immunology</option><option value="1265">Pediatric Anesthesiology</option><option value="553">Pediatric Cardiology</option><option value="1270">Pediatric Critical Care Medicine</option><option value="1252">Pediatric Dermatology</option><option value="1253">Pediatric Emergency Medicine</option><option value="555">Pediatric Endocrinology</option><option value="556">Pediatric Gastroenterology</option><option value="558">Pediatric Hematology-Oncology</option><option value="1646">Pediatric Infectious Diseases</option><option value="560">Pediatric Nephrology</option><option value="1648">Pediatric Neurological Surgery</option><option value="1649">Pediatric Orthopedic Surgery</option><option value="563">Pediatric Otolaryngology</option><option value="565">Pediatric Pulmonology</option><option value="1659">Pediatric Radiology</option><option value="1656">Pediatric Rehabilitation Medicine</option><option value="568">Pediatric Rheumatology</option><option value="571">Pediatric Surgery</option><option value="576">Pediatric Urology</option><option value="1228">
824Pediatrics</option><option value="582">Physical Medicine & Rehabilitation</option><option value="183">Plastic Surgery</option><option value="1267">Podiatry</option><option value="589">Psychiatry</option><option value="592">Pulmonary Disease</option><option value="594">Radiation Oncology</option><option value="963">Reproductive Endocrinology/Infertility</option><option value="597">Rheumatology</option><option value="603">Sleep Medicine</option><option value="1000">Sports Medicine</option><option value="178">Surgery</option><option value="1647">Surgical Oncology</option><option value="608">Thoracic & Cardiac Surgery</option><option value="1644">Thoracic Surgery</option><option value="996">Urogynecology/Female Pelvic Medicine & Reconstructive Surgery</option><option value="619">Urology</option><option value="624">Vascular & Interventional Radiology</option><option value="627">Vascular Surgery</option></select> </label> 825 826 </div> 827 828 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 829 830 <a href="https://www.bostonmagazine.com/find-a-doctor" class="directory-search-form__see-all">See All</a> 831</form> 832</div><div class="bdoctors-search-sponsor-hm" id="hmbg-bdocs"> 833 <a href="https://www.massgeneralbrigham.org/" id="find-mme-specialist" target="_blank"> 834 <span class="search-sponsor-cta-text">Find a specialist Today</span> 835 <em>Brought to you by</em> 836 <img src="https://www.bostonmagazine.com/wp-content/uploads/sites/2/2020/12/300x250-mgb.png" alt="Mass General Brigham - logo"/> 837 </a> 838</div> 839 </div> 840 </div> 841 <!-- .find-a-pro-overlay --> 842 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-28"><span class="button">Weddings</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-28" aria-hidden="true"> 843 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 844 845 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-28" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 846 <div class="js-directory-form"> 847<form id="directory-search-form_28" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/wedding/" method="get"> 848 849 850 <div class="directory-search-form__search-input"> 851 <label class="search-input-label" for="search-input_28"> 852 <span class="visually-hidden"> 853 Search for... </span> 854 <input id="search-input_28" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/> 855 </div> 856 857 858 859 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 860 861 <a href="https://www.bostonmagazine.com/wedding" class="directory-search-form__see-all">See All</a> 862</form> 863</div> </div> 864 </div> 865 <!-- .find-a-pro-overlay --> 866 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-19"><span class="button">Dentists</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-19" aria-hidden="true"> 867 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 868 869 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-19" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 870 <div class="js-directory-form"> 871<form id="directory-search-form_19" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/dentists/" method="get"> 872 873 <div class="directory-search-form__search-input cat select"> 874 <label class="search-input-label" for="cat_19"><span class="visually-hidden">Specialty</span> 875 876 <select name="cat[]" id="cat_19" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Specialty</option><option value="2454">Airway Dentistry</option><option value="87">Cosmetic Dentistry</option><option value="2393">Dental Anesthesiology</option><option value="2098">Dental Implants</option><option value="38">Endodontics</option><option value="2448">Functional Wellness</option><option value="29">General Dentistry</option><option value="2103">Implant Dentistry</option><option value="809">Oral and Maxillofacial Surgery</option><option value="2101">Oral Medicine</option><option value="2400">Oral Pathology</option><option value="99">Orthodontics</option><option value="115">
876Pediatric Dentistry</option><option value="68">Periodontics</option><option value="336">Prosthodontics</option><option value="2451">Sleep Dentistry</option><option value="2460">TMD</option><option value="2457">TMJ</option></select> </label> 877 878 </div> <div class="directory-search-form__search-input mc_city select"> 879 <label class="search-input-label" for="mc_city_19"><span class="visually-hidden">Location</span> 880 881 <select name="mc_city[]" id="mc_city_19" class="postform header-search-select header-search-select--mc_city"><option value="0" selected="">Location</option><option value="acton">Acton</option><option value="amesbury">Amesbury</option><option value="andover">Andover</option><option value="arlington">Arlington</option><option value="ashland">Ashland</option><option value="bedford">Bedford</option><option value="bellingham">Bellingham</option><option value="belmont">Belmont</option><option value="beverly">Beverly</option><option value="billerica">Billerica</option><option value="boston">Boston</option><option value="braintree">Braintree</option><option value="brighton">Brighton</option><option value="brockton">Brockton</option><option value="brookline">Brookline</option><option value="burlington">Burlington</option><option value="cambridge">Cambridge</option><option value="canton">Canton</option><option value="chelmsford">Chelmsford</option><option value="chestnut-hill">Chestnut Hill</option><option value="cohasset">Cohasset</option><option value="concord">Concord</option><option value="danvers">Danvers</option><option value="dedham">Dedham</option><option value="dover">Dover</option><option value="easton">Easton</option><option value="everett">Everett</option><option value="foxboro">Foxboro</option><option value="framingham">Framingham</option><option value="franklin">Franklin</option><option value="hanover">Hanover</option><option value="haverhill">Haverhill</option><option value="hingham">Hingham</option><option value="holliston">Holliston</option><option value="hopkinton">Hopkinton</option><option value="hudson">Hudson</option><option value="ipswich">Ipswich</option><option value="lawrence">Lawrence</option><option value="lexington">Lexington</option><option value="lincoln">Lincoln</option><option value="littleton">Littleton</option><option value="lowell">Lowell</option><option value="lynn">Lynn</option><option value="lynnfield">Lynnfield</option><option value="malborough">Malborough</option><option value="malden">Malden</option><option value="mansfield">Mansfield</option><option value="marblehead">Marblehead</option><option value="marlborough">Marlborough</option><option value="marshfield">Marshfield</option><option value="maynard">Maynard</option><option value="medfield">Medfield</option><option value="medford">Medford</option><option value="melrose">Melrose</option><option value="methuen">Methuen</option><option value="middleboro">Middleboro</option><option value="middleton">Middleton</option><option value="milford">Milford</option><option value="milton">Milton</option><option value="natick">Natick</option><option value="needham">Needham</option><option value="needham-heights">Needham Heights</option><option value="newburyport">Newburyport</option><option value="newton">Newton</option><option value="newton-center">Newton Center</option><option value="newton-centre">Newton Centre</option><option value="newton-highlands">Newton Highlands</option><option value="newtonville">Newtonville</option><option value="north-andover">North Andover</option><option value="north-chelmsford">North Chelmsford</option><option value="north-easton">North Easton</option><option value="north-quincy">North Quincy</option><option value="north-reading">North Reading</option><option value="norwell">Norwell</option><option value="norwood">Norwood</option><option value="peabody">Peabody</option><option value="plainville">Plainville</option><option value="plymouth">Plymouth</option><option value="quincy">Quincy</option><option value="raynham">Raynham</option><option value="reading">Reading</option><option value="revere">Revere</option><option value="salem">Salem</option><option value="salisbury">Salisbury</option><option value="saugus">Saugus</option><option value="sharon">Sharon</option><option value="sherborn">Sherborn</option><option value="somerville">Somerville</option><option value="south-easton">South Easton</option><option value="south-weymouth">South Weymouth</option><option value="southborough">Southborough</option><option value="stoneham">Stoneham</option><option value="stoughton">Stoughton</option><option value="stow">Stow</option><option value="sudbury">Sudbury</option><option value="swampscott">Swampscott</option><option value="taunton">Taunton</option><option value="tewksbury">Tewksbury</option><option value="waban">Waban</option><option value="wakefield">Wakefield</option><option value="walpole">Walpole</option><option value="waltham">Waltham</option><option value="watertown">Watertown</option><option value="wayland">Wayland</option><option value="wellesley">Wellesley</option><option value="wellesley-hills">Wellesley Hills</option><option value="west-newton">West Newton</option><option value="west-roxbury">West Roxbury</option><option value="westford">Westford</option><option value="weston">Weston</option><option value="westwood">
881Westwood</option><option value="weymouth">Weymouth</option><option value="wilmington">Wilmington</option><option value="winchester">Winchester</option><option value="woburn">Woburn</option><option value="wrentham">Wrentham</option></select> </label> 882 883 </div> <div class="directory-search-form__search-input s text"> 884 <label class="search-input-label" for="s_19"><span class="visually-hidden">Search For...</span> 885 886 <input id="s_19" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search For..." autocomplete="off"/> </label> 887 888 </div> 889 890 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 891 892 <a href="https://www.bostonmagazine.com/dentists" class="directory-search-form__see-all">See All</a> 893</form> 894</div> </div> 895 </div> 896 <!-- .find-a-pro-overlay --> 897 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-43"><span class="button">Schools</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-43" aria-hidden="true"> 898 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 899 900 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-43" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 901 <div class="js-directory-form"> 902<form id="directory-search-form_43" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/private-schools/" method="get"> 903 904 905 <div class="directory-search-form__search-input"> 906 <label class="search-input-label" for="search-input_43"> 907 <span class="visually-hidden"> 908 Search for... </span> 909 <input id="search-input_43" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/> 910 </div> 911 912 913 914 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 915 916 <a href="https://www.bostonmagazine.com/private-schools" class="directory-search-form__see-all">See All</a> 917</form> 918</div> </div> 919 </div> 920 <!-- .find-a-pro-overlay --> 921 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-47"><span class="button">Home Design</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-47" aria-hidden="true"> 922 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 923 924 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-47" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 925 <div class="js-directory-form"> 926<form id="directory-search-form_47" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/home-design/" method="get"> 927 928 929 <div class="directory-search-form__search-input"> 930 <label class="search-input-label" for="search-input_47"> 931 <span class="visually-hidden"> 932 Search for... </span> 933 <input id="search-input_47" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/> 934 </div> 935 936 937 938 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 939 940 <a href="https://www.bostonmagazine.com/home-design" class="directory-search-form__see-all">See All</a> 941</form> 942</div> </div> 943 </div> 944 <!-- .find-a-pro-overlay --> 945 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-51"><span class="button">Real Estate</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-51" aria-hidden="true"> 946 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 947 948 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-51" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 949 <div class="js-directory-form"> 950<form id="directory-search-form_51" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/real-estate-agents/" method="get"> 951 952 953 <div class="directory-search-form__search-input"> 954 <label class="search-input-label" for="search-input_51"> 955 <span class="visually-hidden"> 956 Search for... </span> 957 <input id="search-input_51" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/> 958 </div> 959 960 961 962 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 963 964 <a href="https://www.bostonmagazine.com/real-estate-agents" class="directory-search-form__see-all">See All</a> 965</form> 966</div> </div> 967 </div> 968 <!-- .find-a-pro-overlay --> 969 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-67"><span class="button">Lawyers</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-67" aria-hidden="true"> 970 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 971 972 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-67" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 973 <div class="js-directory-form"> 974<form id="directory-search-form_67" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/lawyers/" method="get"> 975 976 <div class="directory-search-form__search-input cat select"> 977 <label class="search-input-label" for="cat_67"><span class="visually-hidden">Specialty</span> 978 979 <select name="cat[]" id="cat_67" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Specialty</option><option value="127">Antitrust Law</option><option value="102">Appellate Law</option><option value="117">Arbitration And Mediation</option><option value="161">Attorneys for Nonprofits</option><option value="143">Aviation</option><option value="115">Banking And Financial</option><option value="88">Bankruptcy And Workout</option><option value="122">Business Law</option><option value="79">Civil Law Litigation</option><option value="50">Civil Rights</option><option value="47">Class Action</option><option value="105">Commercial Litigation</option><option value="99">Construction</option><option value="164">Consumer Debt</option><option value="84">Corporate Counsel</option><option value="31">Corporate Law</option><option value="55">
979Criminal Defense</option><option value="23">Criminal Defense/White Collar</option><option value="107">Education</option><option value="57">Elder Law</option><option value="136">Eminent Domain</option><option value="315">Energy/Oil and Gas</option><option value="320">Family Law</option><option value="63">First Amendment and Media</option><option value="167">Gaming Law</option><option value="128">Government And Administrative</option><option value="159">Healthcare Law</option><option value="93">Immigration Law</option><option value="110">Insurance</option><option value="87">Intellectual Property Rights</option><option value="341">International Law</option><option value="96">Labor And Employment</option><option value="317">Land Use/Environmental</option><option value="155">Medical Malpractice (Defense)</option><option value="153">Medical Malpractice (Plaintiff)</option><option value="40">Personal Injury</option><option value="116">Product Liability</option><option value="158">Professional Malpractice (Non-Medical Defense)</option><option value="337">Real Estate (Commercial)</option><option value="340">Real Estate (Residential)</option><option value="90">Securities Law</option><option value="137">Sports Law</option><option value="71">Tax Law</option><option value="162">Technology/Virtual</option><option value="45">Trusts and Estates</option><option value="62">Whistleblowers</option><option value="168">Workers' Compensation</option></select> </label> 980 981 </div> <div class="directory-search-form__search-input s text"> 982 <label class="search-input-label" for="s_67"><span class="visually-hidden">Search</span> 983 984 <input id="s_67" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search" autocomplete="off"/> </label> 985 986 </div> 987 988 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 989 990 <a href="https://www.bostonmagazine.com/lawyers" class="directory-search-form__see-all">See All</a> 991</form> 992</div><div class="bdoctors-search-sponsor-hm" id="hmbg-bdocs"> 993 <a href="https://www.rubinrudman.com/2024-boston-magazines-top-lawyers-list/?utm_source=bostonmagazine&utm_campaign=findit-lawyers&utm_term=dec2024" id="find-mme-specialist" target="_blank"> 994 <span class="search-sponsor-cta-text">Find a lawyer Today</span> 995 <em>Brought to you by</em> 996 <img src="https://www.bostonmagazine.com/wp-content/uploads/sites/2/2024/12/rubin-rudman-homepage-placement.png" id="logo-lawyers" alt="Rubin and Rudman - logo"/> 997 </a> 998</div> 999 </div> 1000 </div> 1001 <!-- .find-a-pro-overlay --> 1002 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-69"><span class="button">Mortgages</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-69" aria-hidden="true"> 1003 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 1004 1005 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-69" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 1006 <div class="js-directory-form"> 1007<form id="directory-search-form_69" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/mortgage-lenders/" method="get"> 1008 1009 1010 <div class="directory-search-form__search-input"> 1011 <label class="search-input-label" for="search-input_69"> 1012 <span class="visually-hidden"> 1013 Search for... </span> 1014 <input id="search-input_69" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/> 1015 </div> 1016 1017 1018 1019 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 1020 1021 <a href="https://www.bostonmagazine.com/mortgage-lenders" class="directory-search-form__see-all">See All</a> 1022</form> 1023</div> </div> 1024 </div> 1025 <!-- .find-a-pro-overlay --> 1026 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-74"><span class="button">Senior Living</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-74" aria-hidden="true"> 1027 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 1028 1029 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-74" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 1030 <div class="js-directory-form"> 1031<form id="directory-search-form_74" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/senior-living/" method="get"> 1032 1033 <div class="directory-search-form__search-input s text"> 1034 <label class="search-input-label" for="s_74"><span class="visually-hidden">Search For...</span> 1035 1036 <input id="s_74" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search For..." autocomplete="off"/> </label> 1037 1038 </div> <div class="directory-search-form__search-input cat select"> 1039 <label class="search-input-label" for="cat_74"><span class="visually-hidden">Category</span> 1040 1041 <select name="cat[]" id="cat_74" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Category</option><option value="140">Assisted Living</option><option value="139">Home Healthcare</option><option value="21">Independent Living</option><option value="122">Memory Care</option><option value="182">Personal Care</option></select> </label> 1042 1043 </div> 1044 1045 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 1046 1047 <a href="https://www.bostonmagazine.com/senior-living" class="directory-search-form__see-all">See All</a> 1048</form> 1049</div> </div> 1050 </div> 1051 <!-- .find-a-pro-overlay --> 1052 </li> </ul> 1053 </div> 1054 </div> 1055</div> 1056 1057 <div align="center" data-freestar-ad="__320x100 __970x250" id="bostonmagazine_banner-2" class="gpt-ad advertisement container"> 1058
1058<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1059 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_banner", slotId: "bostonmagazine_banner-2" }); 1060 </script>
1060 1061 </div> 1062 <div class="container"> 1063 <h2 class="title-line">Latest Stories</h2> <div class="content-with-sidebar"> 1064 1065 <div class="list-content"> 1066 <div class="list-post"> 1067 1068 <a href="https://www.bostonmagazine.com/news/2026/09/29/massachusetts-best-state-data/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="Massachusetts license plate with the custom text "NUMBAH 1!" in red letters, featuring the phrases "The Spirit of America" and "MASSHOLE" on the frame. The plate has an October registration sticker and a blue sticker with the number 26." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_BostonMagazineOctober2026-cover-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_BostonMagazineOctober2026-cover-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_BostonMagazineOctober2026-cover-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_BostonMagazineOctober2026-cover-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_BostonMagazineOctober2026-cover-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1069 <div class="list-post-card"> 1070 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/29/massachusetts-best-state-data/"><p>We’re No. 1! Obviously.</p></a></h2> 1071 <div class="post-excerpt"> 1072 <p> 1073 <p>Sure, Massachusetts gives us plenty to complain about. But from schools and healthcare to sports and Dunkinâ, here are 61 reasons weâre still awfully hard to beat.</p> 1074</p> 1075 </div> 1076 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/david-s-bernstein/" class="byline">David S. Bernstein</a></span> </div> 1077</div> 1078<div class="list-post"> 1079 1080 <a href="https://www.bostonmagazine.com/news/2026/09/29/best-dentists-greater-boston/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="A dentist wearing blue scrubs and gloves is examining a female patient with long blonde hair seated in a dental chair. The dentist is holding a dental mirror and an instrument while the patient has her mouth open. The dental office is clean and modern with white cabinets and dental equipment visible." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-2227218644-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-2227218644-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-2227218644-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-2227218644-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-2227218644-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1081 <div class="list-post-card"> 1082 <a href="https://www.bostonmagazine.com/category/news/" class="post-slug">News</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/29/best-dentists-greater-boston/"><p>Our All-New List of Top Dentists in Greater Boston Is Here</p></a></h2> 1083 <div class="post-excerpt"> 1084 <p> 1085 <p class="p1"><span class="s1">Our just-released list of the </span><span class="s2">796 best dentists</span><span class="s1"> in the regionâfrom generalists to orthodontists to pediatric specialistsâas chosen by their peers.</span></p> 1086</p> 1087 </div> 1088 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/ibostoni-magazine-staff/" class="byline">Boston magazine staff</a></span> </div> 1089</div> 1090<div class="list-post"> 1091 1092 <a href="https://www.bostonmagazine.com/news/therians-identity/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_therians_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_therians_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_therians_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_therians_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_therians_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1093 <div class="list-post-card"> 1094 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/therians-identity/"><p>Meet the Kids Who Identify as Animals</p></a></h2> 1095 <div class="post-excerpt"> 1096 <p> 1097 <p class="p1">
1097A rising subculture of kids says they donât feel entirely human. Hereâs what their parents are learning to do with that.</p> 1098</p> 1099 </div> 1100 </div> 1101</div> 1102<div align="center" data-freestar-ad="__336x280 __605x271" id="bostonmagazine_native_river-0" class="gpt-ad native-river"> 1103
1103<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1104 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_native_river", slotId: "bostonmagazine_native_river-0" }); 1105 </script>
1105 1106 </div><div class="list-post"> 1107 1108 <a href="https://www.bostonmagazine.com/news/2026/09/24/why-do-we-call-it-a-packie/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_backpage_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_backpage_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_backpage_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_backpage_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_backpage_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1109 <div class="list-post-card"> 1110 <a href="https://www.bostonmagazine.com/category/opinion/humor/" class="post-slug">Humor</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/24/why-do-we-call-it-a-packie/"><p>Why Do We Call It a “Packie” When the Rest of the Country Calls It a “Liquor Store”?</p></a></h2> 1111 <div class="post-excerpt"> 1112 <p> 1113 <p>The term comes from an 1890 Supreme Court decision allowing liquor to be shipped across state lines to “package stores.”</p> 1114</p> 1115 </div> 1116 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/steve-calechman/" class="byline">Steve Calechman</a></span> </div> 1117</div> 1118<div class="list-post"> 1119 1120 <a href="https://www.bostonmagazine.com/arts-entertainment/2026/09/23/jonathan-tucker-boston/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1121 <div class="list-post-card"> 1122 <a href="https://www.bostonmagazine.com/category/qa/" class="post-slug">Q&A</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/arts-entertainment/2026/09/23/jonathan-tucker-boston/"><p>Jonathan Tucker Is Very Good at Playing Cops. He’s Also Being Sued Over a Weed Store.</p></a></h2> 1123 <div class="post-excerpt"> 1124 <p> 1125 <p>The Charlestown native danced with Boston Ballet as a kid and currently plays a Boston police officer on Netflixâs <em>
1125I Will Find You</em>. His local cannabis dispensaries are also going to court over their name. Heâd like to talk about the last one.</p> 1126</p> 1127 </div> 1128 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jonathan-soroff/" class="byline">Jonathan Soroff</a></span> </div> 1129</div> 1130<div class="nativo-section-front-1"></div><div class="list-post"> 1131 1132 <a href="https://www.bostonmagazine.com/news/2026/09/20/networking-after-50-awkward/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-600x400.jpg 600w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat.jpg 900w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1133 <div class="list-post-card"> 1134 <a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/20/networking-after-50-awkward/"><p>A Wildly Inefficient Manâs Guide to Networking</p></a></h2> 1135 <div class="post-excerpt"> 1136 <p> 1137 <p>The career coach said itâs never too late to reconnect with colleagues. Our columnist, 30-plus years into his professional life, decided to find out.</p> 1138</p> 1139 </div> 1140 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/steve-calechman/" class="byline">Steve Calechman</a></span> </div> 1141</div> 1142 </div> 1143 1144 <div class="advertisement-side"> 1145 <div class="sticky"><div align="center" data-freestar-ad="__336x280 __300x600" id="bostonmagazine_rail-1" class="gpt-ad freestar-sticky"> 1146
1146<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1147 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_rail", slotId: "bostonmagazine_rail-1" }); 1148 </script>
1148 1149 </div></div> </div> 1150 </div> 1151</div> 1152 1153 <div class="container post-article-container"> 1154 <hr class="double"> 1155 <div class="newsletter"> 1156 <h2 class="newsletter-title"> 1157 Get a compelling long read and must-have lifestyle tips in your inbox every Sunday morning â great with coffee! </h2> 1158 <div class="newsletter-inner"> 1159 <div class="hbspt-form js-hubspot-newsletter"></div> 1160 </div> 1161 </div> 1162</div> 1163 1164 <div class="three-column-module container"> 1165 <h2 class="title-line">In This Section</h2> 1166 <div class="grid-content with-separator"> 1167 <div class="grid-post"><a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-184996589.jpg" alt="The Top Public High Schools in Greater Boston, Ranked" /></span><h3 class="post-title">The Top Public High Schools in Greater Boston, Ranked</h3></a><div class="guide-list"><p>We crunched the numbers to come up with our annual guide to the top-performing schools in the region.</p> 1168</div></div><div class="grid-post"><a href="https://www.bostonmagazine.com/boston-power-list-2026/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/05/1200x800_150-featured-image.jpg" alt="The 150 Most Influential Bostonians" /></span><h3 class="post-title">The 150 Most Influential Bostonians</h3></a><div class="guide-list"><p><span style="font-weight: 400">Power looks different in every town. </span>Ours comes with lab coats, a Bakemas cookie, and 351 town names in alphabetical order.</p> 1169</div></div><div class="grid-post"><div align="center" data-freestar-ad="__372x409 __300x390" id="bostonmagazine_curated_module-1" class="gpt-ad"> 1170
1170<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1171 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_curated_module", slotId: "bostonmagazine_curated_module-1" }); 1172 </script>
1172 1173 </div></div> </div> 1174 </div> 1175 1176 <div class="container"> 1177 <hr class="double"> <div class="content-with-sidebar"> 1178 1179 <div class="list-content"> 1180 <div class="list-post"> 1181 1182 <a href="https://www.bostonmagazine.com/news/2026/09/13/boston-greek-restaurant-feud-lawsuit-xenia-krasi/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1183 <div class="list-post-card"> 1184 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/13/boston-greek-restaurant-feud-lawsuit-xenia-krasi/"><p>Inside Boston’s Great Greek Restaurant Feud</p></a></h2> 1185 <div class="post-excerpt"> 1186 <p> 1187 <p>George Aboujaoude hired Demetri Tsolakis, and together they built one of the Seaportâs first great restaurants. Then Tsolakis went out on his own and built one of the best Greek restaurant groups in America. Now theyâre battling in courtâand neither of them is backing down.</p> 1188</p> 1189 </div> 1190 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/wyndham-lewis/" class="byline">Wyndham Lewis</a></span> </div> 1191</div> 1192<div class="list-post"> 1193 1194 <a href="https://www.bostonmagazine.com/education/2026/09/08/why-you-should-have-college-roommates/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1195 <div class="list-post-card"> 1196 <a href="https://www.bostonmagazine.com/category/opinion/" class="post-slug">Opinion</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/education/2026/09/08/why-you-should-have-college-roommates/"><p>Why You Should Have Roommates in College</p></a></h2> 1197 <div class="post-excerpt"> 1198 <p> 1199 <p>As loneliness among students reaches crisis levels, one writerâs case for not rooming aloneâand the real education that happens after midnight.</p> 1200</p> 1201 </div> 1202 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/john-d-spooner/" class="byline">John D. Spooner</a></span> </div> 1203</div> 1204<div align="center" data-freestar-ad="__336x280 __605x271" id="bostonmagazine_native_river-1" class="gpt-ad native-river"> 1205
1205<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1206 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_native_river", slotId: "bostonmagazine_native_river-1" }); 1207 </script>
1207 1208 </div><div class="list-post"> 1209 1210 <a href="https://www.bostonmagazine.com/news/2026/09/03/ed-markey-interview-2026/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="An older man with white hair wearing a dark blue suit, white shirt, and blue patterned tie is standing behind a wooden podium, smiling and pointing forward. The background includes an American flag and blurred elements suggesting a formal setting." srcset="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/03/GettyImages-2206451078.jpg" data-srcset="" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1211 <div class="list-post-card"> 1212 <a href="https://www.bostonmagazine.com/category/qa/" class="post-slug">Q&A</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/03/ed-markey-interview-2026/"><p>Ed Markey Is a âWalking, Talking Antidepressant”</p></a></h2> 1213 <div class="post-excerpt"> 1214 <p> 1215 <p>The Senator would rather talk about Donald Trump than his 2026 primary challenger.</p> 1216</p> 1217 </div> 1218 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jonathan-soroff/" class="byline">Jonathan Soroff</a></span> </div> 1219</div> 1220<div class="list-post"> 1221 1222 <a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="A blue graduation cap with a tassel, featuring the words "NOW WHAT?" written in white on the top, set against a white background with the word "Boston" partially visible in large blue letters behind it." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1223 <div class="list-post-card"> 1224 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/"><p>The Great College Reckoning: Is Higher Education Still Worth It?</p></a></h2> 1225 <div class="post-excerpt"> 1226 <p> 1227 <p>The deal was simple: pay for the degree, get a good job. But now AI, school closures, and a shrinking number of students are breaking that contractâand no American city has more riding on what happens next than ours.</p> 1228</p> 1229 </div> 1230 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jason-schwartz/" class="byline">Jason Schwartz</a></span> </div> 1231</div> 1232<div class="nativo-section-front-2"></div><div class="list-post"> 1233 1234 <a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="Stone archway above a doorway with the words "PUBLIC SCHOOL" carved into it, set in a brick building with three white-framed windows above." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1235 <div class="list-post-card"> 1236 <a href="https://www.bostonmagazine.com/category/news/" class="post-slug">News</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/"><p>The Top Public High Schools in Greater Boston, Ranked for 2026</p></a></h2> 1237 <div class="post-excerpt"> 1238 <p> 1239 <p><span class="s1">We crunched the numbers to come up with our guide to the regionâs top-performing schools. Does your town make the grade?</span></p> 1240</p> 1241 </div> 1242 </div> 1243</div> 1244 </div> 1245 1246 <div class="advertisement-side"> 1247 <div class="sticky"><div align="center" data-freestar-ad="__336x280 __300x600" id="bostonmagazine_rail-2" class="gpt-ad freestar-sticky"> 1248
1248<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1249 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_rail", slotId: "bostonmagazine_rail-2" }); 1250 </script>
1250 1251 </div></div> </div> 1252 </div> 1253</div> 1254 1255 <div class="three-column-module container"> 1256 <h2 class="title-line"></h2> 1257 <div class="grid-content with-separator"> 1258 <div class="grid-post"><a href="https://www.bostonmagazine.com/best-of-boston/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/06/Best-of-Boston-2026.jpg" alt="Best of Boston 2026" /></span><h3 class="post-title">Best of Boston 2026</h3></a><div class="guide-list"><p>Our annual group love letter to the 250-plus things that are absolutely superlative about this city.</p> 1259</div></div><div class="grid-post"><a href="https://www.bostonmagazine.com/tag/the-salty-cod/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2025/01/Driveway-Shovelerfeat.jpg" alt="The Salty Cod: A Column" /></span><h3 class="post-title">The Salty Cod: A Column</h3></a><div class="guide-list"><p>Humorist Steve Calechman grapples with your uniquely New England dilemmas.</p> 1260</div></div><div class="grid-post"><div align="center" data-freestar-ad="__372x409 __300x390" id="bostonmagazine_curated_module-2" class="gpt-ad"> 1261
1261<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1262 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_curated_module", slotId: "bostonmagazine_curated_module-2" }); 1263 </script>
1263 1264 </div></div> </div> 1265 </div> 1266 1267 <div class="container"> 1268 <hr class="double"> <div class="content-with-sidebar"> 1269 1270 <div class="list-content"> 1271 <div class="list-post"> 1272 1273 <a href="https://www.bostonmagazine.com/news/2026/08/23/massachusetts-state-flag/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1274 <div class="list-post-card"> 1275 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/08/23/massachusetts-state-flag/"><p>Why Can’t Massachusetts Make a Good State Flag?</p></a></h2> 1276 <div class="post-excerpt"> 1277 <p> 1278 <p>Maine rebranded itself with one of the countryâs most beloved flags. Massachusetts has held two commissions and produced reports, surveys, scoring systems, finalists, and no flags. What gives?</p> 1279</p> 1280 </div> 1281 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jason-schwartz/" class="byline">Jason Schwartz</a></span> </div> 1282</div> 1283<div class="list-post"> 1284 1285 <a href="https://www.bostonmagazine.com/news/2026/08/16/cape-cod-rescue-story-wellfleet-navy-wreck/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1286 <div class="list-post-card"> 1287 <a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/08/16/cape-cod-rescue-story-wellfleet-navy-wreck/"><p>Adrift off Wellfleet: A Cape Cod Coming-of-Age Story</p></a></h2> 1288 <div class="post-excerpt"> 1289 <p> 1290 <p>Four teenagers set out for a sunken Navy wreck off Eastham. The trip did not go as planned.</p> 1291</p> 1292 </div> 1293 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/beth-mccullough-kerner/" class="byline">Beth McCullough-Kerner</a></span> </div> 1294</div> 1295<div align="center" data-freestar-ad="__336x280 __605x271" id="bostonmagazine_native_river-2" class="gpt-ad native-river"> 1296
1296<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1297 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_native_river", slotId: "bostonmagazine_native_river-2" }); 1298 </script>
1298 1299 </div><div class="list-post"> 1300 1301 <a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-600x400.jpg 600w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat.jpg 900w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1302 <div class="list-post-card"> 1303 <a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/"><p>What It Actually Takes to Apply to Private School</p></a></h2> 1304 <div class="post-excerpt"> 1305 <p> 1306 <p>The admissions race means SSAT tutors, educational consultants, Zoom meetings, and mahjong nights. For one mom, at least, the actual acceptance was the easiest part.</p> 1307</p> 1308 </div> 1309 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/brittany-kooienga/" class="byline">Brittany Kooienga</a></span> </div> 1310</div> 1311<div class="nativo-section-front-3"></div><div class="list-post"> 1312 1313 <a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1314 <div class="list-post-card"> 1315 <a href="https://www.bostonmagazine.com/category/guides/" class="post-slug">Guides</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/"><p>Greater Boston’s Top Hospitals: Our First Directory Is Here</p></a></h2> 1316 <div class="post-excerpt"> 1317 <p> 1318 <p>Our inaugural guide to the region’s most excellent care.</p> 1319</p> 1320 </div> 1321 </div> 1322</div> 1323<span class="pagination"><span class="page-numbers current">1</span><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/2/"> 2 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/3/"> 3 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/4/"> 4 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/5/"> 5 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/6/"> 6 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/7/"> 7 </a><a href=https://www.bostonmagazine.com/news/page/2/ class="next page-numbers" > > </a><a href=https://www.bostonmagazine.com/news/page/15/ class="last page-numbers"> >> </a></span><div class="post-navigation"></div> </div> 1324 1325 <div class="advertisement-side"> 1326 <div class="sticky"><div align="center" data-freestar-ad="__336x280 __300x600" id="bostonmagazine_rail-3" class="gpt-ad freestar-sticky"> 1327
1327<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1328 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_rail", slotId: "bostonmagazine_rail-3" }); 1329 </script>
1329 1330 </div></div> </div> 1331 </div> 1332</div> 1333 1334 <div align="center" data-freestar-ad="__320x100 __970x250" id="bostonmagazine_banner-3" class="gpt-ad advertisement container"> 1335
1335<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1336 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_banner", slotId: "bostonmagazine_banner-3" }); 1337 </script>
1337 1338 </div> 1339 1340 1341<footer class="site-footer" role="contentinfo" id="js-footer"> 1342 <div class="footer-navigation"><ul id="menu-footer-menu" class="menu-footer-main container"><li id="menu-item-174641" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-174641"><a href="https://www.bostonmagazine.com/about/">About</a></li> 1343<li id="menu-item-203231" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-203231"><a href="https://www.bostonmagazine.com/contact/">Contact</a></li> 1344<li id="menu-item-461741" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-461741"><a href="https://www.bostonmagazine.com/masthead/">Masthead</a></li> 1345<li id="menu-item-174651" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174651"><a href="https://w1.buysub.com/pubs/BM/BOS/BOS_sub.jsp?cds_page_id=270289&cds_mag_code=BOS&id=1739901742813&lsid=50491202228084314&vid=1">Subscribe</a></li> 1346<li id="menu-item-174671" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174671"><a href="/boston-magazine-media-kit/">Advertise</a></li> 1347<li id="menu-item-174661" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174661"><a href="https://bostonglobemedia.cloud.buysub.com">Customer Service</a></li> 1348<li id="menu-item-2323712" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2323712"><a href="https://www.bostonmagazine.com/careers/">Careers and Internships at Boston Magazine</a></li> 1349<li id="menu-item-174681" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174681"><a href="https://www.bostonglobe.com/about/help/privacy-policy/">Privacy Policy</a></li> 1350<li id="menu-item-2796278" class="ot-info-display menu-item menu-item-type-custom menu-item-object-custom menu-item-2796278"><a href="#">Your Privacy Choices</a></li> 1351</ul></div> <div class="site-footer-inner container"> 1352 <a href="https://www.bostonmagazine.com" class="footer-logo" aria-label="Boston Magazine"> 1353 <span><svg class="mc-icon bostonmagazine-logo" aria-hidden="true"><title>Boston Magazine</title><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-logo"></svg></span> 1354 </a> 1355 <ul id="menu-social-2" class="menu-footer-social"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351226"><a target="_blank" href="https://www.facebook.com/bostonmagazine"><span class="screen-reader-text">Facebook</span></a></li> 1356<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351228"><a target="_blank" href="https://www.instagram.com/bostonmagazine/"><span class="screen-reader-text">Instagram</span></a></li> 1357<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351231"><a target="_blank" href="https://www.twitter.com/bostonmagazine"><span class="screen-reader-text">Twitter</span></a></li> 1358</ul> <p class="footer-copyright">©2026 Boston Globe Media Partners, LLC</p> 1359 </div> 1360 </footer> 1361 1362<div class="container" id="gutter-container"></div> 1363
1364<script type="speculationrules"> 1365{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/sites/2/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/metrocorp-bostonmagazine/*","/wp-content/themes/metrocorp/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 1366</script>
1366 1367<button id="pmLink">Privacy Manager</button>
1367<script type="text/javascript" id="ot-manage-links"> 1368 const otDisplayClassEl = document.getElementsByClassName("ot-info-display"); 1369 for ( const otLinkEl of otDisplayClassEl ) { 1370 let otLinks = otLinkEl.getElementsByTagName("a"); 1371 for ( const otLinkEl of otLinks ) { 1372 let otLinkElAttr = otLinkEl.getAttribute("href") 1373 if( otLinkElAttr === "#" ) { 1374 otLinkEl.addEventListener( "click", function() { 1375 OneTrust.ToggleInfoDisplay(); 1376 event.preventDefault(); 1377 }); 1378 } 1379 } 1380 } 1381 </script>
1381 1382
1382<script id="mc-breaking-news-banner-script-js" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-breakingnewsbanner/assets/js/breaking-news-bar.js?ver=1"></script>
vendor: 1 bytes, line 1382
1382
1383<script id="metrocorp-js-extra"> 1384var mcGlobal = {"isSingle":"","directoryName":"Boston Magazine"}; 1385//# sourceURL=metrocorp-js-extra 1386</script>
vendor: 1 bytes, line 1386
1386
1387<script id="metrocorp-js" src="https://bomag.o0bc.com/wp-content/themes/metrocorp/dist/js/metrocorp.min.js?ver=1790714179" defer></script>
vendor: 1 bytes, line 1387
1387
1388<script id="metrocorp-secondary-js" src="https://bomag.o0bc.com/wp-content/themes/metrocorp/dist/js/metrocorp-secondary.min.js?ver=1790714179" defer></script>
vendor: 1 bytes, line 1388
1388
1389<script type="text/plain" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-ads//dist/js/metrocorp-ads-secondary.js?ver=88982254c2d846b515d0" id="metrocorp-ads-secondary" class="optanon-category-C0004"></script>
1389<script type="text/plain" src="//js.hsforms.net/forms/v2.js?ver=1.0.0" id="mc-integrations-hubspot" class="optanon-category-C0004"></script>
1389<script id="mc-hubspot-subscription-form-js-extra"> 1390var mcHubSpot = {"portalId":"43837035","formId":"bfc3022c-8482-4600-8cb5-1f8e1b257cd2","isSingle":"false","title":"","vertical":""}; 1391//# sourceURL=mc-hubspot-subscription-form-js-extra 1392</script>
vendor: 1 bytes, line 1392
1392
1393<script type="text/plain" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-hubspot/assets/js/metrocorp-hubspot-subscription-form.js?ver=1790714175" id="mc-hubspot-subscription-form" class="optanon-category-C0004"></script>
1393<script id="wp-emoji-settings" type="application/json"> 1394{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://cdn10.bostonmagazine.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}} 1395</script>
vendor: 1 bytes, line 1395
1395
1396<script type="module"> 1397/*! This file is auto-generated */ 1398var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); 1399//# sourceURL=https://www.bostonmagazine.com/wp-includes/js/wp-emoji-loader.min.js 1400</script>
1400 1401<!-- Start of AdCellerant Embed Code -->
1402<script src="https://js.adsrvr.org/up_loader.1.1.0.js" type="text/plain" class="optanon-category-C0004"></script>
vendor: 1 bytes, line 1402
1402
1403<script type="text/plain" class="optanon-category-C0004"> 1404 function initAdCellerant() { 1405 if (typeof ttd_dom_ready === 'undefined') { 1406 setTimeout(initAdCellerant, 100); 1407 return; 1408 } 1409 1410 ttd_dom_ready(function() { 1411 if (typeof TTDUniversalPixelApi === 'function') { 1412 var universalPixelApi = new TTDUniversalPixelApi(); 1413 universalPixelApi.init("1qqfa0h", ["g7kke2y"], "https://insight.adsrvr.org/track/up"); 1414 } 1415 }); 1416 } 1417 initAdCellerant(); 1418</script>
1418 1419<!-- End of AdCellerant Embed Code --> 1420 1421 <div align="center" data-freestar-ad="" id="bostonmagazine_bottom-anchor" class="gpt-ad"> 1422
1422<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1423 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_bottom-anchor", slotId: "bostonmagazine_bottom-anchor" }); 1424 </script>
1424 1425 </div>
1426<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"b9d80a2312","applicationID":"1078100099","transactionName":"ZFNbMkJTVxVYVRcMDV0ZehNDRlYLFmICHUIeFlQFHUZYHhRABhcWWlVYCg==","queueTime":0,"applicationTime":220,"atts":"SBRMRApJREobV0FfGU5L","errorBeacon":"bam.nr-data.net","agent":""}</script>
1426</body> 1427</html> 1428 1429<!-- plugin=object-cache-pro client=phpredis metric#hits=6732 metric#misses=207 metric#hit-ratio=97.0 metric#bytes=2594971 metric#prefetches=0 metric#store-reads=187 metric#store-writes=5 metric#store-hits=520 metric#store-misses=5 metric#sql-queries=3 metric#ms-total=267.64 metric#ms-cache=92.16 metric#ms-cache-avg=0.4825 metric#ms-cache-ratio=34.4 -->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.