Professors and students at the University of Pennsylvania— where I teach — breathed a sigh of relief on Thursday when the university rejected a compact that would have given us preferential treatment in federal funding. All we needed to do in exchange was comply with the Trump administration’s demands around teaching, student costs, and much else.
As our faculty senate warned, the compact asked universities to “surrender their institutional autonomy.” I’m delighted — and proud — that Penn joined four other institutions — MIT, Brown, the University of Southern California, and the University of Virginia — in rejecting the offer, which the White House sent to nine schools earlier this month.
Now comes the hard part: to institute the goals of the compact on our own. The problem wasn’t with the demands of the Trump administration. It was with the mechanism of enforcement, which would have let it determine if we were satisfying them.
Consider the compact’s requirement that we foster “a vibrant marketplace of ideas” and abolish “institutional units” that “belittle” conservative ideas. Of course, we should aim for a full and free dialogue of all ideas, including conservative ones.
But do you trust Donald Trump and his disciples to determine — fairly and impartially — whether universities are belittling conservatives? I certainly don’t.
Trump’s vice president, JD Vance, has already declared that “the universities are the enemy.” The only way to make friends with Trump is to echo his own ideas, which is what the compact would have required us to do.
University of Pennsylvania students at graduation, at Franklin Field, in May.
But if we’re honest, we’ll also admit that we have indeed belittled — or suppressed — conservatives, via the cultures we have created on our campuses. We talk a good game about the free exchange of ideas. If you think we’re living that ideal, however, you haven’t talked to right-leaning students.
I have. They come out to me in my office, with the door shut, because they’re afraid of being canceled by their peers or their professors. In a 2024 survey, 12% of Penn students said they planned to vote for Trump. That’s a small fraction, but Penn is a big place; we have about 12,000 undergraduates, which means more than 1,000 students probably backed Trump.
We almost never hear from them, which harms everyone. We won’t understand the Trump phenomenon if they are biting their tongues. I want my conservative students to speak their minds, especially in class, so they can teach the rest of us.
They don’t. “When we act as though virtually everything that gets turned in is some kind of A — where A is supposedly meaning ‘excellent work’ — we are simply being dishonest to our students,” Yale philosopher Shelly Kagan told the New York Times in 2023.
And earlier this month, the Times reported that Harvard students routinely skip classes, and even register for two courses that meet at the same time. When they do show up, they often spend the class period surfing on their phones or laptops.
Again, though, I don’t want the federal government monitoring our “commitment to grade integrity” — to quote the Trump compact — or penalizing us if we fall short. That would give the White House another cudgel to use against a school that said or did something Trump didn’t like. We should instead address the problem on our own, by instituting grade curves and making effective teaching a requirement for tenure and promotion.
Ditto for college costs, which the Trump compact properly identifies as a huge burden on our students. But the answer is not to freeze tuition for five years, as the compact demands, even as it instructs us to limit our enrollment of international students. Cutting the number of students from other countries — most of whom pay our full sticker price — would make it even harder for us to keep that price down.
Rather, we need to make a stronger argument for public assistance to all our universities. Over the past four decades, as state governments slashed their aid to higher education, students and their families have had to finance college on their own. What began as a public good — to serve all Americans, and to sustain our democracy — has become a private one.
But we’ll never make the case for more government dollars unless we can show we’re doing well with what we already have. That will require us to put good teaching — and the free exchange of ideas — front and center. I’m glad we rebuffed Trump’s effort to impose his will on us. Now we’ll find out if we can muster the will — and the courage — to do the job ourselves.
Jonathan Zimmerman teaches education and history at the University of Pennsylvania. He is the author of “The Amateur Hour: A History of College Teaching in America” and nine other books.
Violent crime is way down from its pandemic highs in Philadelphia. But you wouldn’t know it from Republicans’ digital ads for the sheriff and district attorney races urging voters to “keep Philly crime out of Bucks County.”
🌡️ The tactic follows the playbook of President Donald Trump, who has made exaggerated claims about crime in blue cities throughout his presidency.
🌡️ Democrats, meanwhile, seek to portray the GOP incumbents as Trump allies and thus inspire voters who are frustrated with national politics to turn out as a sort of protest.
🌡️ These tensions in the purple suburban county, which Trump narrowly won last November, mean the local races will be a temperature check on how swing voters are responding to his second term as well as to gauge their enthusiasm ahead of the 2026 midterms.
In other government news: Pennsylvania state government relies on H-1B workers. Trump wants to charge employers $100,000 for those visas. And U.S. Sen. Dave McCormick of Pennsylvania has joinedfellowSenate Republicans in urging top health officials in the Trump administration to rescind approval for an abortion pill.
Following years of growth, Penn Medicine, the region’s biggest provider of cancer care and a national leader in developing new treatments, is spending more than $500 million on two new cancer facilities in Philadelphia and central New Jersey.
Other regional health systems are expanding their cancer services, too, especially in the suburbs, as more patients seek care closer to home.
The trend comes amid financial pressure to increase revenue — and as cancer diagnoses rise.
More health news: A cold triggered an autoimmune disease in a Pennsylvania man. Now he’s channeling his challenges into advocacy for people with rare diseases.
What you should know today
DNA analysis confirmed Sunday that the body recovered the day before in East Germantown is that of 23-year-old Kada Scott, according to law enforcement sources. New details also emerged about what led investigators to her remains.
Billionaire Marc Rowan made secret large donations to the University of Pennsylvania, where he heads Wharton’s advisory board, after he led campaigns to oust leaders and urged alumni to stop donating.
Former defensive end Brandon Graham is considering ending his retirement and rejoining the Eagles, league sources told The Inquirer.
Singer David Byrne, amid three shows at the Met Philadelphia, attended the city’s “No Kings” march on Saturday. “I wanted to be here for this,” a fan recalled him saying.
Michael Days, the award-winning journalist who led the Philadelphia Daily News and Philadelphia Inquirer in various roles over a celebrated career, died suddenly on Saturday at the age of 72 in Trenton.
A longtime mentor to young journalists and past president of the National Association of Black Journalists’ Philadelphia chapter, Days is remembered by former colleagues and peers as a respected leader and steadfast advocate of his team.
“He was the kind of person who wanted to serve,” his wife, Angela Dodson, said Sunday. “People could talk to him, and he had something wise to say.”
Cheers to Dana Carter, who solved Sunday’s anagram: Pemberton. A soybean farmer in the Burlington County borough says his job is harder now because of warehouses, rising costs, and tariffs. He’s determined to adapt and endure.
Photo of the day
Kim Sephes with her children Solomon, 4, and Darius, 8 (right). She is carrying one-month-old Adam outside their East Mount Airy home.
The latest in our How I Bought My House series features a family of eight who made a few compromises, but ultimately found a haven on a quiet block.
📬 Your ‘only in Philly’ story
Think back to the night that changed your life that could only happen in Philly, a true example of the Philly spirit, the time you finally felt like you belonged in Philly if you’re not a lifer, something that made you fall in love with Philly all over again — or proud to be from here if you are. Then email it to us for a chance to be featured in the Monday edition of this newsletter.
This “only in Philly” story comes from reader Diane Page, who describes a memorable exchange:
Walked into a tiny bakery in South Philly. “How long you been here?” I inquire. “99 years next month,” the counterman says. I peruse the baked goods. “I’ll take one of these rolls.” “Just one?” he asks. “Yep,” I say. “What, ya havin’ a party?” was the deadpan reply.
I’d been baptized with that Philly attitude, fell in love with the city right then and there.
May you fall in love with Philadelphia anew today. See you back here tomorrow.
By submitting your written, visual, and/or audio contributions, you agree to The Inquirer’s Terms of Use, including the grant of rights in Section 10.
The Philadelphia region is once again back in the spotlight at HBO, this time courtesy of Task, from the makers of Mare of Easttown. The show was spotted last year filming everywhere from Center City to Coatesville.
And, boy, did we make the cut.
story continues after advertisement
With the show underway, it's clear that the Philadelphia region is integral to Task. Here, we'll be rounding up all the local spots — sans private homes — we can identify in Task, updating each Sunday after episodes air. Check out the map below to see what locations wound up in the show, and why the series takes us there.
Loading…
Coatesville
High Bridge
This instantly recognizable Coatesville landmark serves as the location for where County Chief Dorsey (Raphael Sbarge) appears to seal Grasso's (Fabien Frankel) fate with the Dark Hearts.
Media
Delaware County Courthouse and Government Center
Courtesy of Delaware County Government Center and Courthouse
Here, Tom (Mark Ruffalo) gives a touching family statement at a court hearing for his son, Ethan (Andrew Russel), in what is the emotional climax of the series. As The Inquirer reported last year, the production took over Courtroom 15 for filming.
West Chester
Stroud Preserve
David Swanson / Staff Photographer
The last we see of Maeve (Emilia Jones) in the series, she is driving past Stroud Preserve's Creek Road parking lot with her cousins in tow. Where they're heading is anybody's guess, but we hope it's somewhere with fewer Dark Hearts members.
story continues after advertisement
That was every location we could spot in this week’s episode. Let us know below if we missed anything.
Otherwise, explore the map of all locations featured to date. Tap onHover overa pin to learn more.
What did we miss?
Did you spot any locations in this week’s episode that we missed? Let us know.
That's it for Task. But rest assured, if HBO decides to focus on Philly again, we'll be back. Until then, see youse later.
Staff Contributors
Design and Development: Sam Morris
Reporting: Nick Vadala
Editing: Emily Babay
First seen in episode
(()=>{var gr=Object.create;var et=Object.defineProperty;var mr=Object.getOwnPropertyDescriptor;var yr=Object.getOwnPropertyNames;var wr=Object.getPrototypeOf,br=Object.prototype.hasOwnProperty;var tt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Mr=(e,t,r,n)=>{if(t&&typeof t==”object”||typeof t==”function”)for(let i of yr(t))!br.call(e,i)&&i!==r&&et(e,i,{get:()=>t[i],enumerable:!(n=mr(t,i))||n.enumerable});return e};var Sr=(e,t,r)=>(r=e!=null?gr(wr(e)):{},Mr(t||!e||!e.__esModule?et(r,”default”,{value:e,enumerable:!0}):r,e));var dt=tt(U=>{var Lr={0:”Jan.”,1:”Feb.”,2:”March”,3:”April”,4:”May”,5:”June”,6:”July”,7:”Aug.”,8:”Sept.”,9:”Oct.”,10:”Nov.”,11:”Dec.”};function lt(e){return e===void 0&&(e=new Date),Lr[e.getMonth()]}var Pr={0:”Jan”,1:”Feb”,2:”Mar”,3:”Apr”,4:”May”,5:”Jun”,6:”Jul”,7:”Aug”,8:”Sep”,9:”Oct”,10:”Nov”,11:”Dec”};function ut(e){return e===void 0&&(e=new Date),Pr[e.getMonth()]}function ne(e){return e==null}function ft(e){return typeof e==”number”&&isFinite(e)}function Se(e){return ft(e)&&Math.floor(e)===e}var kr=[“one”,”two”,”three”,”four”,”five”,”six”,”seven”,”eight”,”nine”],Dr=[“million”,”billion”,”trillion”,”quadrillion”,”quintillion”,”sextillion”,”septillion”,”octillion”,”nonillion”,”decillion”],ct=[“th”,”st”,”nd”,”rd”,”th”,”th”,”th”,”th”,”th”,”th”],Ar=[11,12,13];function ht(e){if(ne(e))return””;var t=+e;return Se(t)?Ar.indexOf(t%100)>-1?ct[0]:ct[t%10]:””}var Er=[“first”,”second”,”third”,”fourth”,”fifth”,”sixth”,”seventh”,”eighth”,”ninth”],$r=new RegExp(/s+([^s]*)s*$/);U.apdate=function(e){return e===void 0&&(e=new Date),lt(e)+” “+e.getDate()+”, “+e.getFullYear()},U.apdatetab=function(e){return e===void 0&&(e=new Date),ut(e)+” “+e.getDate()+”, “+e.getFullYear()},U.apmonth=lt,U.apmonthtab=ut,U.apnumber=function(e){if(ne(e))return””;var t=+e;return Se(t)?t=10?e.toString():kr[t-1]:e.toString()},U.aptime=function(e){e===void 0&&(e=new Date);var t,r,n=e.getHours(),i=e.getMinutes(),o=i===0;if(o){if(n===0)return”midnight”;if(n===12)return”noon”}return n0?n:12):(t=”p.m.”,r=n===12?n:n-12),o?r+” “+t:r+”:”+(i<10?"0"+i:i)+" "+t},U.capfirst=function(e){if(ne(e))return"";var t=String(e);return""+t.charAt(0).toUpperCase()+t.slice(1)},U.intcomma=function(e){if(ne(e))return"";var t,r=+e;return ft(r)?((t=r.toString().split("."))[0]=t[0].replace(/B(?=(d{3})+(?!d))/g,","),t.join(".")):e.toString()},U.intword=function(e){if(ne(e))return"";var t=+e;if(!Se(t))return e.toString();var r=Math.abs(t);if(r<1e6)return e.toString();var n=Math.ceil(Math.log(r+1)/Math.LN10)-1,i=n-n%3,o=t/Math.pow(10,i);return(o=Math.round(10*o)/10)+" "+Dr[Math.floor(i/3)-2]},U.ordinal=function(e,t){if(t===void 0&&(t=!1),ne(e))return"";var r=+e;return Se(r)?t&&r{(function(e,t){typeof je==”object”&&typeof Je<"u"?Je.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis=h?m:””+Array(h+1-p.length).join(u)+m},K={s:O,z:function(m){var h=-m.utcOffset(),u=Math.abs(h),p=Math.floor(u/60),c=u%60;return(h<=0?"+":"-")+O(p,2,"0")+":"+O(c,2,"0")},m:function m(h,u){if(h.date()<u.date())return-m(u,h);var p=12*(u.year()-h.year())+(u.month()-h.month()),c=h.clone().add(p,f),y=u-c<0,w=h.clone().add(p+(y?-1:1),f);return+(-(p+(u-c)/(y?c-w:w-c))||0)},a:function(m){return m1)return m(w[0])}else{var b=h.name;$[b]=h,c=b}return!p&&c&&(C=c),c||!p&&C},D=function(m,h){if(ie(m))return m.clone();var u=typeof h==”object”?h:{};return u.date=m,u.args=arguments,new te(u)},M=K;M.l=oe,M.i=ie,M.w=function(m,h){return D(m,{locale:h.$L,utc:h.$u,x:h.$x,$offset:h.$offset})};var te=function(){function m(u){this.$L=oe(u.locale,null,!0),this.parse(u),this.$x=this.$x||u.x||{},this[I]=!0}var h=m.prototype;return h.parse=function(u){this.$d=function(p){var c=p.date,y=p.utc;if(c===null)return new Date(NaN);if(M.u(c))return new Date;if(c instanceof Date)return new Date(c);if(typeof c==”string”&&!/Z$/i.test(c)){var w=c.match(F);if(w){var b=w[2]-1||0,k=(w[7]||”0″).substring(0,3);return y?new Date(Date.UTC(w[1],b,w[3]||1,w[4]||0,w[5]||0,w[6]||0,k)):new Date(w[1],b,w[3]||1,w[4]||0,w[5]||0,w[6]||0,k)}}return new Date(c)}(u),this.init()},h.init=function(){var u=this.$d;this.$y=u.getFullYear(),this.$M=u.getMonth(),this.$D=u.getDate(),this.$W=u.getDay(),this.$H=u.getHours(),this.$m=u.getMinutes(),this.$s=u.getSeconds(),this.$ms=u.getMilliseconds()},h.$utils=function(){return M},h.isValid=function(){return this.$d.toString()!==x},h.isSame=function(u,p){var c=D(u);return this.startOf(p)<=c&&c<=this.endOf(p)},h.isAfter=function(u,p){return D(u)<this.startOf(p)},h.isBefore=function(u,p){return this.endOf(p)<D(u)},h.$g=function(u,p,c){return M.u(u)?this[p]:this.set(c,u)},h.unix=function(){return Math.floor(this.valueOf()/1e3)},h.valueOf=function(){return this.$d.getTime()},h.startOf=function(u,p){var c=this,y=!!M.u(p)||p,w=M.p(u),b=function(j,H){var J=M.w(c.$u?Date.UTC(c.$y,H,j):new Date(c.$y,H,j),c);return y?J:J.endOf(a)},k=function(j,H){return M.w(c.toDate()[j].apply(c.toDate("s"),(y?[0,0,0,0]:[23,59,59,999]).slice(H)),c)},A=this.$W,E=this.$M,z=this.$D,X="set"+(this.$u?"UTC":"");switch(w){case l:return y?b(1,0):b(31,11);case f:return y?b(1,E):b(0,E+1);case d:var q=this.$locale().weekStart||0,Q=(A<q?A+7:A)-q;return b(y?z-Q:z+(6-Q),E);case a:case v:return k(X+"Hours",0);case s:return k(X+"Minutes",1);case o:return k(X+"Seconds",2);case i:return k(X+"Milliseconds",3);default:return this.clone()}},h.endOf=function(u){return this.startOf(u,!1)},h.$set=function(u,p){var c,y=M.p(u),w="set"+(this.$u?"UTC":""),b=(c={},c[a]=w+"Date",c[v]=w+"Date",c[f]=w+"Month",c[l]=w+"FullYear",c[s]=w+"Hours",c[o]=w+"Minutes",c[i]=w+"Seconds",c[n]=w+"Milliseconds",c)[y],k=y===a?this.$D+(p-this.$W):p;if(y===f||y===l){var A=this.clone().set(v,1);A.$d[b](k),A.init(),this.$d=A.set(v,Math.min(this.$D,A.daysInMonth())).$d}else b&&this.$d[b](k);return this.init(),this},h.set=function(u,p){return this.clone().$set(u,p)},h.get=function(u){return this[M.p(u)]()},h.add=function(u,p){var c,y=this;u=Number(u);var w=M.p(p),b=function(E){var z=D(y);return M.w(z.date(z.date()+Math.round(E*u)),y)};if(w===f)return this.set(f,this.$M+u);if(w===l)return this.set(l,this.$y+u);if(w===a)return b(1);if(w===d)return b(7);var k=(c={},c[o]=t,c[s]=r,c[i]=e,c)[w]||1,A=this.$d.getTime()+u*k;return M.w(A,this)},h.subtract=function(u,p){return this.add(-1*u,p)},h.format=function(u){var p=this,c=this.$locale();if(!this.isValid())return c.invalidDate||x;var y=u||"YYYY-MM-DDTHH:mm:ssZ",w=M.z(this),b=this.$H,k=this.$m,A=this.$M,E=c.weekdays,z=c.months,X=c.meridiem,q=function(H,J,se,ae){return H&&(H[J]||H(p,y))||se[J].slice(0,ae)},Q=function(H){return M.s(b%12||12,H,"0")},j=X||function(H,J,se){var ae=H{window.addEventListener(“resize”,()=>{nt(),$e()}),window.addEventListener(“scroll”,()=>{$e()})},nt=()=>{xr.setAttribute(“viewBox”,`0 0 ${window.innerWidth} ${window.innerHeight}`)},$e=()=>{let e=document.querySelector(“.js-steps”).dataset.current;re!==e&&(re=e,st()),!re||re==”all”?ot():it()},it=()=>{if(re){let e=document.querySelector(`.js-steps-step[data-step=”${re}”] .js-steps-pin`),t=document.querySelector(“.js-map-location.is-current .js-map-pin”);if(t){let r=e.getBoundingClientRect(),n=t.getBoundingClientRect(),o=document.querySelector(“.js-steps”).getBoundingClientRect(),s=o.top>0?o.top:0,a=r.width/2;ce.setAttribute(“y1”,r.top+a-s),ce.setAttribute(“x1”,r.left+a),ce.setAttribute(“y2”,n.top+a-s),ce.setAttribute(“x2”,n.left+a)}}},ot=()=>{ce.classList.add(“is-hidden”)},Cr=()=>{ce.classList.remove(“is-hidden”)},st=()=>{ot(),clearTimeout(rt),rt=setTimeout(()=>{re!==void 0&&re!==”all”&&(it(),Cr())},1200)},at={init:()=>{Tr(),nt(),$e()},onChange:()=>{st()}};var Wn=dt();var ze=e=>{if(e)return e.trim().toLowerCase().normalize(“NFD”).replace(/[u0300-u036f]/g,””).replace(/[^A-Z0-9 ]/gi,””).trim().replace(/ /g,”-“)};var pt=()=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);var pe=(e,t=null,r=null)=>{r||(r=document.querySelector(“head”));let n=document.createElement(“script”);n.type=”text/javascript”,n.src=e,t&&(n.onload=t),r.appendChild(n)},vt=()=>(window.PMNdataLayer?.[0]!==void 0&&window.PMNdataLayer[0])?.analytics?.user?.state===”Subscribed”,gt=()=>{let t=(window.PMNdataLayer?.[0]!==void 0&&window.PMNdataLayer[0])?.analytics?.user?.state;return window.location.host.includes(“zzz-systest”)||window.location.host.includes(“pmn.arcpublishing.com”)||window.location.host.includes(“stage.fusion.inquirer.com”)||typeof t>”u”},mt=()=>{let t=(window.PMNdataLayer?.[0]!==void 0&&window.PMNdataLayer[0])?.analytics?.user?.hasAdsFreeReading;return!!(t&&t==1)},Be=()=>window.location.host.includes(“localhost”),xe=(e,t=””)=>{let r=document.querySelector(`template#${e}`);if(!r||!(r instanceof HTMLTemplateElement))return console.log(`Couldn’t find .`),null;let n=r.content.cloneNode(!0).childNodes;if(n.length==0)return console.log(`Template ${r} has no children, returning null.`),null;n.length>1&&console.log(`Template ${r} has multiple children, only returning the first.`);let i=n[0];return i.setAttribute(“data-id”,t),i},Te=(e,t)=>{let r=[…e.querySelectorAll(“[data-populate]”)];e.dataset.populate&&r.unshift(e);let n=r.filter(i=>{let o=i.closest(“[data-populate-context]”);return!o||o==e});for(let i of n){let s=i.dataset.populate.trim().split(/s*,s*/).map(a=>a.split(/s*:s*/));for(let[a,d]of s){let g=a.split(“.”).reduce((x,F)=>x?.[F],t),l=g==null||g==null,v=d?.split(/s+/)||[“innerHTML”];for(let x of v)x.startsWith(“.”)&&i.classList.toggle(x.substring(1),l?!1:g),!l&&(x==”innerHTML”?i.innerHTML=g:x.startsWith(“@”)?i.setAttribute(x.substring(1),g):x.startsWith(“–“)&&i.style.setProperty(x,g))}}};var zr=()=>{mt()&&document.querySelectorAll(“.js-adbox”).forEach(t=>{t.classList.add(“is-hidden”)})},yt={init:()=>{zr()}};var wt=async(e,t)=>(await fetch(`https://inq-junto.herokuapp.com/${e}`,{method:”POST”,headers:{“Content-Type”:”application/json”},mode:”cors”,body:JSON.stringify(t)})).json(),Fe=()=>{let t=document.querySelector(“.js-inno”).dataset.junto;if(t)return t;throw new Error(“no junto id found”)},bt={getDefaultId:()=>Fe(),vote:(e,t=Fe())=>{wt(“vote”,{poll:t,ballot:e})},results:async(e=Fe())=>await wt(“results”,{poll:e})};var Br=()=>{document.querySelectorAll(“.js-form”).forEach(e=>{e.addEventListener(“submit”,t=>{t.preventDefault(),Fr(e)})})},Fr=e=>{let t=e.dataset.id,r=new FormData(e),n=new Object;for(let i of r)n[`form-${t}-${i[0]}`]=i[1];bt.vote({…n,[`form-${t}`]:Object.values(n).join(“///”)}),e.classList.add(“has-submitted”),e.querySelector(“.js-button-label”).textContent=”Form submitted!”,setTimeout(()=>{e.querySelector(“.js-form-button”).disabled=!0},500)},Mt={init:()=>{Br()}};var le,St,Hr=()=>{le=document.getElementById(“js-inno-toast”)},Or=e=>{if(!le)return;le.innerHTML=e,le.classList.add(“inno-toast–active”);let t=()=>{le.addEventListener(“transitionend”,Ir,{once:!0}),le.classList.remove(“inno-toast–active”)};clearTimeout(St),St=setTimeout(t,5e3)},Ir=()=>{le.innerHTML=””},ue={init:()=>{Hr()},showToast:Or};var Ce,xt=!1,Rr=async()=>new Promise(e=>{setTimeout(()=>{console.log(“simulating createShareLink for localhost”),e(“https://inquirer.com/interactives”),Ur()},100)}),Ur=()=>{let e=document.querySelector(“.js-gift-toast-receiver”);!e||!(e instanceof HTMLElement)||setTimeout(()=>{let t=e?.querySelector(“span”);t&&(t.innerHTML=”Gift link copied to clipboard“)},20)},qr=()=>{let e=window.services?.createShareLink;e&&(Ce=e),Be()&&(Ce=Rr),Ce&&Nr()},Gr=async e=>{let t=”text/plain”,r=async()=>{try{return await Ce(window.location.pathname)}catch{e.dataset.state=”error”,ue.showToast(“Hmm, we couldn’t generate a gift link…”)}},n=new ClipboardItem({[t]:r()});await navigator.clipboard.write([n]).catch(i=>{console.log(i),ue.showToast(“Couldn’t copy to clipboard, try again?”),e.dataset.state=”error”}),ue.showToast(“Gift link copied to clipboard!”),e.dataset.state=”complete”},Nr=()=>{document.querySelectorAll(“.js-gift”).forEach(t=>{(vt()||Be()||gt())&&t.classList.add(“is-available”)}),document.querySelectorAll(“.js-gift-button”).forEach(t=>{t instanceof HTMLButtonElement&&t.addEventListener(“click”,()=>{t.classList.contains(“disabled”)||(t.dataset.state=”loading”,xt=!0,Gr(t),setTimeout(()=>{t.dataset.state=”ready”},2e3))})});let e=document.querySelector(“.js-gift-toast-receiver”);!e||!(e instanceof HTMLElement)||Wr(e)},Wr=e=>{new MutationObserver(r=>{for(let n of r){let i=[…n.addedNodes].at(0);if(!(i instanceof HTMLElement))return;xt&&ue.showToast(i.outerHTML)}}).observe(e,{subtree:!0,childList:!0})},Tt={init:()=>{qr()}};var Zr=()=>{window.addEventListener(“message”,e=>{if(e.data[“datawrapper-height”]){let t=e.data[“datawrapper-height”];for(let r in t)document.querySelector(`#datawrapper-chart-${r}`).setAttribute(“height”,t[r])}})},jr=()=>{document.querySelectorAll(“.js-datawrapper-graphic”).forEach(e=>{pe(`https://datawrapper.dwcdn.net/${e.dataset.id}/embed.js`,null,e)})},Jr=()=>{window.addEventListener(“message”,e=>{let t=e.data;document.querySelectorAll(`iframe[src*=”${t.id}”]`).forEach(n=>{n.style.height=`${t.height}px`})},!1)},Yr=()=>{document.querySelectorAll(“.js-pym-graphic”).forEach(e=>{if(typeof window{new window.pym.Parent(e.id,e.dataset.iframe)};typeof window.pym>”u”?pe(“https://pym.nprapps.org/pym.v1.min.js”,t):t()}})},Ct={init:()=>{Zr(),jr(),Yr(),Jr()}};var ve,Vr=()=>{document.querySelectorAll(“.js-hover”).forEach(e=>{e.addEventListener(“click”,()=>{Lt(e)}),e.addEventListener(“mouseenter”,()=>{Lt(e)}),e.addEventListener(“mouseout”,()=>{Pt(e)})}),window.addEventListener(“scroll”,()=>{ve!==null&&Kr()})},Kr=()=>{(ve>window.scrollY+100||ve{Pt(e)})},Lt=e=>{e.classList.add(“is-visible”),ve=window.scrollY},Pt=e=>{e.classList.remove(“is-visible”),ve=null},kt={init:()=>{Vr()}};var N=Uint8Array,he=Uint16Array,Xr=Int32Array,Dt=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),At=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Qr=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Et=function(e,t){for(var r=new he(31),n=0;n<31;++n)r[n]=t+=1<<e[n-1];for(var i=new Xr(r[30]),n=1;n<30;++n)for(var o=r[n];o<r[n+1];++o)i[o]=o-r[n]<<5|n;return{b:r,r:i}},$t=Et(Dt,2),zt=$t.b,_r=$t.r;zt[28]=258,_r[258]=28;var Bt=Et(At,0),en=Bt.b,ii=Bt.r,Ie=new he(32768);for(S=0;S>1|(S&21845)<>2|(_&13107)<>4|(_&3855)<>8|(_&255)<>1;var _,S,ge=function(e,t,r){for(var n=e.length,i=0,o=new he(t);i<n;++i)e[i]&&++o[e[i]-1];var s=new he(t);for(i=1;i<t;++i)s[i]=s[i-1]+o[i-1]<<1;var a;if(r){a=new he(1<<t);var d=15-t;for(i=0;i<n;++i)if(e[i])for(var f=i<<4|e[i],g=t-e[i],l=s[e[i]-1]++<<g,v=l|(1<<g)-1;l>d]=f}else for(a=new he(n),i=0;i>15-e[i]);return a},me=new N(288);for(S=0;S<144;++S)me[S]=8;var S;for(S=144;S<256;++S)me[S]=9;var S;for(S=256;S<280;++S)me[S]=7;var S;for(S=280;S<288;++S)me[S]=8;var S,Ft=new N(32);for(S=0;S<32;++S)Ft[S]=5;var S;var tn=ge(me,9,1);var rn=ge(Ft,5,1),He=function(e){for(var t=e[0],r=1;rt&&(t=e[r]);return t},Y=function(e,t,r){var n=t/8|0;return(e[n]|e[n+1]<>(t&7)&r},Oe=function(e,t){var r=t/8|0;return(e[r]|e[r+1]<<8|e[r+2]<>(t&7)},nn=function(e){return(e+7)/8|0},on=function(e,t,r){return(t==null||te.length)&&(r=e.length),new N(e.subarray(t,r))};var sn=[“unexpected EOF”,”invalid block type”,”invalid length/literal”,”invalid distance”,”stream finished”,”no stream handler”,,”no callback”,”invalid UTF-8 data”,”extra field too long”,”date not in range 1980-2099″,”filename too long”,”stream finishing”,”invalid zip data”],G=function(e,t,r){var n=new Error(t||sn[e]);if(n.code=e,Error.captureStackTrace&&Error.captureStackTrace(n,G),!r)throw n;return n},Re=function(e,t,r,n){var i=e.length,o=n?n.length:0;if(!i||t.f&&!t.l)return r||new N(0);var s=!r,a=s||t.i!=2,d=t.i;s&&(r=new N(i*3));var f=function(ae){var Qe=r.length;if(ae>Qe){var _e=new N(Math.max(Qe*2,ae));_e.set(r),r=_e}},g=t.f||0,l=t.p||0,v=t.b||0,x=t.l,F=t.d,P=t.m,V=t.n,O=i*8;do{if(!x){g=Y(e,l,1);var K=Y(e,l+1,3);if(l+=3,K)if(K==1)x=tn,F=rn,P=9,V=5;else if(K==2){var ie=Y(e,l,31)+257,oe=Y(e,l+10,15)+4,D=ie+Y(e,l+5,31)+1;l+=14;for(var M=new N(D),te=new N(19),R=0;R<oe;++R)te[Qr[R]]=Y(e,l+R*3,7);l+=oe*3;for(var m=He(te),h=(1<<m)-1,u=ge(te,m,1),R=0;R>4;if(C<16)M[R++]=C;else{var c=0,y=0;for(C==16?(y=3+Y(e,l,3),l+=2,c=M[R-1]):C==17?(y=3+Y(e,l,7),l+=3):C==18&&(y=11+Y(e,l,127),l+=7);y–;)M[R++]=c}}var w=M.subarray(0,ie),b=M.subarray(ie);P=He(w),V=He(b),x=ge(w,P,1),F=ge(b,V,1)}else G(1);else{var C=nn(l)+4,$=e[C-4]|e[C-3]<i){d&&G(0);break}a&&f(v+$),r.set(e.subarray(C,I),v),t.b=v+=$,t.p=l=I*8,t.f=g;continue}if(l>O){d&&G(0);break}}a&&f(v+131072);for(var k=(1<<P)-1,A=(1<>4;if(l+=c&15,l>O){d&&G(0);break}if(c||G(2),z264){var R=z-257,q=Dt[R];X=Y(e,l,(1<>4;Q||G(3),l+=Q&15;var b=en[j];if(j>3){var q=At[j];b+=Oe(e,l)&(1<O){d&&G(0);break}a&&f(v+131072);var H=v+X;if(v<b){var J=o-b,se=Math.min(b,H);for(J+v<0&&G(3);v<se;++v)r[v]=n[J+v]}for(;v<H;++v)r[v]=r[v-b]}}t.l=x,t.p=E,t.b=v,t.f=g,x&&(g=1,t.m=P,t.d=F,t.n=V)}while(!g);return v!=r.length&&s?on(r,0,v):r.subarray(0,v)};var an=new N(0);var ln=function(e){(e[0]!=31||e[1]!=139||e[2]!=8)&&G(6,"invalid gzip data");var t=e[3],r=10;t&4&&(r+=(e[10]|e[11]<>3&1)+(t>>4&1);n>0;n-=!e[r++]);return r+(t&2)},un=function(e){var t=e.length;return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<>>0};var cn=function(e,t){return((e[0]&15)!=8||e[0]>>4>7||(e[0]<>5&1)==+!t&&G(6,”invalid zlib data: “+(e[1]&32?”need”:”unexpected”)+” dictionary”),(e[1]>>3&4)+2};function hn(e,t){return Re(e,{i:2},t&&t.out,t&&t.dictionary)}function fn(e,t){var r=ln(e);return r+8>e.length&&G(6,”invalid gzip data”),Re(e.subarray(r,-8),{i:2},t&&t.out||new N(un(e)),t&&t.dictionary)}function dn(e,t){return Re(e.subarray(cn(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}function Ht(e,t){return e[0]==31&&e[1]==139&&e[2]==8?fn(e,t):(e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31?hn(e,t):dn(e,t)}var pn=typeof TextDecodergn(e,”name”,{value:t,configurable:!0}),B=(e,t,r)=>new Promise((n,i)=>{var o=d=>{try{a(r.next(d))}catch(f){i(f)}},s=d=>{try{a(r.throw(d))}catch(f){i(f)}},a=d=>d.done?n(d.value):Promise.resolve(d.value).then(o,s);a((r=r.apply(e,t)).next())}),ai=T((e,t)=>{let r=!1,n=””,i=L.GridLayer.extend({createTile:T((o,s)=>{let a=document.createElement(“img”),d=new AbortController,f=d.signal;return a.cancel=()=>{d.abort()},r||(e.getHeader().then(g=>{g.tileType===1?console.error(“Error: archive contains MVT vector tiles, but leafletRasterLayer is for displaying raster tiles. See https://github.com/protomaps/PMTiles/tree/main/js for details.”):g.tileType===2?n=”image/png”:g.tileType===3?n=”image/jpeg”:g.tileType===4?n=”image/webp”:g.tileType===5&&(n=”image/avif”)}),r=!0),e.getZxy(o.z,o.x,o.y,f).then(g=>{if(g){let l=new Blob([g.data],{type:n}),v=window.URL.createObjectURL(l);a.src=v,a.cancel=void 0,s(void 0,a)}}).catch(g=>{if(g.name!==”AbortError”)throw g}),a},”createTile”),_removeTile:T(function(o){let s=this._tiles[o];s&&(s.el.cancel&&s.el.cancel(),s.el.width=0,s.el.height=0,s.el.deleted=!0,L.DomUtil.remove(s.el),delete this._tiles[o],this.fire(“tileunload”,{tile:s.el,coords:this._keyToTileCoords(o)}))},”_removeTile”)});return new i(t)},”leafletRasterLayer”),mn=T(e=>(t,r)=>{if(r instanceof AbortController)return e(t,r);let n=new AbortController;return e(t,n).then(i=>r(void 0,i.data,i.cacheControl||””,i.expires||””),i=>r(i)).catch(i=>r(i)),{cancel:T(()=>n.abort(),”cancel”)}},”v3compat”),Ot=class{constructor(t){this.tilev4=T((r,n)=>B(this,null,function*(){if(r.type===”json”){let x=r.url.substr(10),F=this.tiles.get(x);if(F||(F=new Le(x),this.tiles.set(x,F)),this.metadata)return{data:yield F.getTileJson(r.url)};let P=yield F.getHeader();return(P.minLon>=P.maxLon||P.minLat>=P.maxLat)&&console.error(`Bounds of PMTiles archive ${P.minLon},${P.minLat},${P.maxLon},${P.maxLat} are not valid.`),{data:{tiles:[`${r.url}/{z}/{x}/{y}`],minzoom:P.minZoom,maxzoom:P.maxZoom,bounds:[P.minLon,P.minLat,P.maxLon,P.maxLat]}}}let i=new RegExp(/pmtiles://(.+)/(d+)/(d+)/(d+)/),o=r.url.match(i);if(!o)throw new Error(“Invalid PMTiles protocol URL”);let s=o[1],a=this.tiles.get(s);a||(a=new Le(s),this.tiles.set(s,a));let d=o[2],f=o[3],g=o[4],l=yield a.getHeader(),v=yield a?.getZxy(+d,+f,+g,n.signal);if(v)return{data:new Uint8Array(v.data),cacheControl:v.cacheControl,expires:v.expires};if(l.tileType===1){if(this.errorOnMissingTile)throw new Error(“Tile not found.”);return{data:new Uint8Array}}return{data:null}}),”tilev4″),this.tile=mn(this.tilev4),this.tiles=new Map,this.metadata=t?.metadata||!1,this.errorOnMissingTile=t?.errorOnMissingTile||!1}add(t){this.tiles.set(t.source.getKey(),t)}get(t){return this.tiles.get(t)}};T(Ot,”Protocol”);var It=Ot;function Rt(e,t){return(t>>>0)*4294967296+(e>>>0)}T(Rt,”toNum”);function Ut(e,t){let r=t.buf,n=r[t.pos++],i=(n&112)>>4;if(n<128||(n=r[t.pos++],i|=(n&127)<<3,n<128)||(n=r[t.pos++],i|=(n&127)<<10,n<128)||(n=r[t.pos++],i|=(n&127)<<17,n<128)||(n=r[t.pos++],i|=(n&127)<<24,n<128)||(n=r[t.pos++],i|=(n&1)<<31,n<128))return Rt(e,i);throw new Error("Expected varint not more than 10 bytes")}T(Ut,"readVarintRemainder");function fe(e){let t=e.buf,r=t[e.pos++],n=r&127;return r<128||(r=t[e.pos++],n|=(r&127)<<7,r<128)||(r=t[e.pos++],n|=(r&127)<<14,r<128)||(r=t[e.pos++],n|=(r&127)<<21,r<128)?n:(r=t[e.pos],n|=(r&15)<<28,Ut(n,e))}T(fe,"readVarint");function qe(e,t,r,n){if(n===0){r===1&&(t[0]=e-1-t[0],t[1]=e-1-t[1]);let i=t[0];t[0]=t[1],t[1]=i}}T(qe,"rotate");function qt(e,t){let r=ye(2,e),n=t,i=t,o=t,s=[0,0],a=1;for(;a26)throw new Error(“Tile zoom level exceeds max safe number limit (26)”);if(t>ye(2,e)-1||r>ye(2,e)-1)throw new Error(“tile x/y outside zoom level bounds”);let n=yn[e],i=ye(2,e),o=0,s=0,a=0,d=[t,r],f=i/2;for(;f>0;)o=(d[0]&f)>0?1:0,s=(d[1]&f)>0?1:0,a+=f*f*(3*o^s),qe(f,d,o,s),f=f/2;return n+a}T(Gt,”zxyToTileId”);function wn(e){let t=0,r=0;for(let n=0;n<27;n++){let i=(1<<n)*(1<e)return qt(n,e-t);t+=i}throw new Error(“Tile zoom level exceeds max safe number limit (26)”)}T(wn,”tileIdToZxy”);var bn=(e=>(e[e.Unknown=0]=”Unknown”,e[e.None=1]=”None”,e[e.Gzip=2]=”Gzip”,e[e.Brotli=3]=”Brotli”,e[e.Zstd=4]=”Zstd”,e))(bn||{});function Pe(e,t){return B(this,null,function*(){if(t===1||t===0)return e;if(t===2){if(typeof globalThis.DecompressionStream>”u”)return Ht(new Uint8Array(e));let r=new Response(e).body;if(!r)throw new Error(“Failed to read response stream”);let n=r.pipeThrough(new globalThis.DecompressionStream(“gzip”));return new Response(n).arrayBuffer()}throw new Error(“Compression method not supported”)})}T(Pe,”defaultDecompress”);var Mn=(e=>(e[e.Unknown=0]=”Unknown”,e[e.Mvt=1]=”Mvt”,e[e.Png=2]=”Png”,e[e.Jpeg=3]=”Jpeg”,e[e.Webp=4]=”Webp”,e[e.Avif=5]=”Avif”,e))(Mn||{});function Nt(e){return e===1?”.mvt”:e===2?”.png”:e===3?”.jpg”:e===4?”.webp”:e===5?”.avif”:””}T(Nt,”tileTypeExt”);var Sn=127;function Wt(e,t){let r=0,n=e.length-1;for(;r>1,o=t-e[i].tileId;if(o>0)r=i+1;else if(o=0&&(e[n].runLength===0||t-e[n].tileId-1,o=/Chrome|Chromium|Edg|OPR|Brave/.test(n);this.chromeWindowsNoCache=!1,i&&o&&(this.chromeWindowsNoCache=!0)}getKey(){return this.url}setHeaders(t){this.customHeaders=t}getBytes(t,r,n,i){return B(this,null,function*(){let o,s;n?s=n:(o=new AbortController,s=o.signal);let a=new Headers(this.customHeaders);a.set(“range”,`bytes=${t}-${t+r-1}`);let d;this.mustReload?d=”reload”:this.chromeWindowsNoCache&&(d=”no-store”);let f=yield fetch(this.url,{signal:s,cache:d,headers:a});if(t===0&&f.status===416){let v=f.headers.get(“Content-Range”);if(!v||!v.startsWith(“bytes */”))throw new Error(“Missing content-length on 416 response”);let x=+v.substr(8);f=yield fetch(this.url,{signal:s,cache:”reload”,headers:{range:`bytes=0-${x-1}`}})}let g=f.headers.get(“Etag”);if(g!=null&&g.startsWith(“W/”)&&(g=null),f.status===416||i&&g&&g!==i)throw this.mustReload=!0,new Ue(`Server returned non-matching ETag ${i} after one retry. Check browser extensions and servers for issues that may affect correct ETag headers.`);if(f.status>=300)throw new Error(`Bad response code: ${f.status}`);let l=f.headers.get(“Content-Length”);if(f.status===200&&(!l||+l>r))throw o&&o.abort(),new Error(“Server returned no content-length header or content-length exceeding request. Check that your storage backend supports HTTP Byte Serving.”);return{data:yield f.arrayBuffer(),etag:g||void 0,cacheControl:f.headers.get(“Cache-Control”)||void 0,expires:f.headers.get(“Expires”)||void 0}})}};T(Zt,”FetchSource”);var Tn=Zt;function Z(e,t){let r=e.getUint32(t+4,!0),n=e.getUint32(t+0,!0);return r*ye(2,32)+n}T(Z,”getUint64″);function jt(e,t){let r=new DataView(e),n=r.getUint8(7);if(n>3)throw new Error(`Archive is spec version ${n} but this library supports up to spec version 3`);return{specVersion:n,rootDirectoryOffset:Z(r,8),rootDirectoryLength:Z(r,16),jsonMetadataOffset:Z(r,24),jsonMetadataLength:Z(r,32),leafDirectoryOffset:Z(r,40),leafDirectoryLength:Z(r,48),tileDataOffset:Z(r,56),tileDataLength:Z(r,64),numAddressedTiles:Z(r,72),numTileEntries:Z(r,80),numTileContents:Z(r,88),clustered:r.getUint8(96)===1,internalCompression:r.getUint8(97),tileCompression:r.getUint8(98),tileType:r.getUint8(99),minZoom:r.getUint8(100),maxZoom:r.getUint8(101),minLon:r.getInt32(102,!0)/1e7,minLat:r.getInt32(106,!0)/1e7,maxLon:r.getInt32(110,!0)/1e7,maxLat:r.getInt32(114,!0)/1e7,centerZoom:r.getUint8(118),centerLon:r.getInt32(119,!0)/1e7,centerLat:r.getInt32(123,!0)/1e7,etag:t}}T(jt,”bytesToHeader”);function Ge(e){let t={buf:new Uint8Array(e),pos:0},r=fe(t),n=[],i=0;for(let o=0;o<r;o++){let s=fe(t);n.push({tileId:i+s,offset:0,length:0,runLength:1}),i+=s}for(let o=0;o<r;o++)n[o].runLength=fe(t);for(let o=0;o<r;o++)n[o].length=fe(t);for(let o=0;o0?n[o].offset=n[o-1].offset+n[o-1].length:n[o].offset=s-1}return n}T(Ge,”deserializeIndex”);var Jt=class extends Error{};T(Jt,”EtagMismatch”);var Ue=Jt;function Ne(e,t){return B(this,null,function*(){let r=yield e.getBytes(0,16384);if(new DataView(r.data).getUint16(0,!0)!==19792)throw new Error(“Wrong magic number for PMTiles archive”);let n=r.data.slice(0,Sn),i=jt(n,r.etag),o=r.data.slice(i.rootDirectoryOffset,i.rootDirectoryOffset+i.rootDirectoryLength),s=`${e.getKey()}|${i.etag||””}|${i.rootDirectoryOffset}|${i.rootDirectoryLength}`,a=Ge(yield t(o,i.internalCompression));return[i,[s,a.length,a]]})}T(Ne,”getHeaderAndRoot”);function We(e,t,r,n,i){return B(this,null,function*(){let o=yield e.getBytes(r,n,void 0,i.etag),s=yield t(o.data,i.internalCompression),a=Ge(s);if(a.length===0)throw new Error(“Empty directory is invalid”);return a})}T(We,”getDirectory”);var Cn=class{constructor(t=100,r=!0,n=Pe){this.cache=new Map,this.maxCacheEntries=t,this.counter=1,this.decompress=n}getHeader(t){return B(this,null,function*(){let r=t.getKey(),n=this.cache.get(r);if(n)return n.lastUsed=this.counter++,n.data;let i=yield Ne(t,this.decompress);return i[1]&&this.cache.set(i[1][0],{lastUsed:this.counter++,data:i[1][2]}),this.cache.set(r,{lastUsed:this.counter++,data:i[0]}),this.prune(),i[0]})}getDirectory(t,r,n,i){return B(this,null,function*(){let o=`${t.getKey()}|${i.etag||””}|${r}|${n}`,s=this.cache.get(o);if(s)return s.lastUsed=this.counter++,s.data;let a=yield We(t,this.decompress,r,n,i);return this.cache.set(o,{lastUsed:this.counter++,data:a}),this.prune(),a})}prune(){if(this.cache.size>this.maxCacheEntries){let t=1/0,r;this.cache.forEach((n,i)=>{n.lastUsed{Ne(t,this.decompress).then(a=>{a[1]&&this.cache.set(a[1][0],{lastUsed:this.counter++,data:Promise.resolve(a[1][2])}),o(a[0]),this.prune()}).catch(a=>{s(a)})});return this.cache.set(r,{lastUsed:this.counter++,data:i}),i})}getDirectory(t,r,n,i){return B(this,null,function*(){let o=`${t.getKey()}|${i.etag||””}|${r}|${n}`,s=this.cache.get(o);if(s)return s.lastUsed=this.counter++,yield s.data;let a=new Promise((d,f)=>{We(t,this.decompress,r,n,i).then(g=>{d(g),this.prune()}).catch(g=>{f(g)})});return this.cache.set(o,{lastUsed:this.counter++,data:a}),a})}prune(){if(this.cache.size>=this.maxCacheEntries){let t=1/0,r;this.cache.forEach((n,i)=>{n.lastUsed{this.getHeader(t).then(s=>{i(),this.invalidations.delete(r)}).catch(s=>{o(s)})});this.invalidations.set(r,n)})}};T(Yt,”SharedPromiseCache”);var Ln=Yt,Vt=class{constructor(t,r,n){typeof t==”string”?this.source=new Tn(t):this.source=t,n?this.decompress=n:this.decompress=Pe,r?this.cache=r:this.cache=new Ln}getHeader(){return B(this,null,function*(){return yield this.cache.getHeader(this.source)})}getZxyAttempt(t,r,n,i){return B(this,null,function*(){let o=Gt(t,r,n),s=yield this.cache.getHeader(this.source);if(ts.maxZoom)return;let a=s.rootDirectoryOffset,d=s.rootDirectoryLength;for(let f=0;f0){let v=yield this.source.getBytes(s.tileDataOffset+l.offset,l.length,i,s.etag);return{data:yield this.decompress(v.data,s.tileCompression),cacheControl:v.cacheControl,expires:v.expires}}a=s.leafDirectoryOffset+l.offset,d=l.length}else return}throw new Error(“Maximum directory depth exceeded”)})}getZxy(t,r,n,i){return B(this,null,function*(){try{return yield this.getZxyAttempt(t,r,n,i)}catch(o){if(o instanceof Ue)return this.cache.invalidate(this.source),yield this.getZxyAttempt(t,r,n,i);throw o}})}getMetadataAttempt(){return B(this,null,function*(){let t=yield this.cache.getHeader(this.source),r=yield this.source.getBytes(t.jsonMetadataOffset,t.jsonMetadataLength,void 0,t.etag),n=yield this.decompress(r.data,t.internalCompression),i=new TextDecoder(“utf-8″);return JSON.parse(i.decode(n))})}getMetadata(){return B(this,null,function*(){try{return yield this.getMetadataAttempt()}catch(t){if(t instanceof Ue)return this.cache.invalidate(this.source),yield this.getMetadataAttempt();throw t}})}getTileJson(t){return B(this,null,function*(){let r=yield this.getHeader(),n=yield this.getMetadata(),i=Nt(r.tileType);return{tilejson:”3.0.0″,scheme:”xyz”,tiles:[`${t}/{z}/{x}/{y}${i}`],vector_layers:n.vector_layers,attribution:n.attribution,description:n.description,name:n.name,version:n.version,bounds:[r.minLon,r.minLat,r.maxLon,r.maxLat],center:[r.centerLon,r.centerLat,r.centerZoom],minzoom:r.minZoom,maxzoom:r.maxZoom}})}};T(Vt,”PMTiles”);var Le=Vt;var we=[{name:”Mirenda Center at Neumann University”,town:”Aston Township”,coordinates:”39.87518295957942, -75.44287264018742″,photo:”CUFT75EQJFCNXF6TBJWB47IZBE”,description:”Tom (Mark Ruffalo) mans a table at a job fair here while temporarily working as a recruiter for the FBI. Next to his station, the distinctive pillars of the centeru2019s atrium are visible.”,episode:”1″},{name:”Rita’s Italian Ice & Frozen Custard”,town:”Collingdale”,coordinates:”39.91438144966683, -75.27198755476991″,photo:”PVN6FY7AZVH57NJJ5QZMPSORVQ”,description:”Emily (Silvia Dionicio), Tomu2019s daughter, works her part-time job here. In the scene where it is shown, Tom orders a black cherry water ice, a flavor choice of which we approve.”,episode:”1″},{name:”Former Philadelphia Police Department Headquarters”,town:”Philadelphia”,coordinates:”39.95454212611587, -75.15196309318775″,photo:”L7RTCVGETVB6BGP3OI6FGI75II”,description:”We get a brief glimpse of the exterior of the former Philadelphia police headquarters, colloquially known as the Roundhouse. Whether the interior is the same building is unclear, but in the show, this appears to be where the FBIu2019s Philly field office is located.”,episode:”1″},{name:”Bangor Quarry”,town:”Bangor”,coordinates:”40.870304770450126, -75.20395382209078″,photo:””,description:”Robbie (Tom Pelphrey), Cliff (RaxFAl Castillo), and Peaches (Owen Teague) head here for a post-robbery swim. On a real-life note, you should not do the same u2014 not only is it dangerous, but itu2019s also trespassing, according to the Bangor Borough Police Department.”,episode:”1″},{name:”Lincoln Highway and 2nd Avenue”,town:”Coatesville”,coordinates:”39.98367030794463, -75.82206085300957″,photo:”DKXFYZ5EGBEHJJKLSUGLQQDAR4″,description:”The Dark Hearts motorcycle gang rides through this intersection in formation, the giveaway being Presence Bank in the background in one shot.”,episode:”2″},{name:”Polish American Citizens Club”,town:”Coatesville”,coordinates:”39.98079295642107, -75.83090353169075″,photo:”WICMTOVTBFE3HANVTH2PSHED5M”,description:”Done up as the so-called Leftyu2019s Taproom in the show, this location serves as the Dark Heartsu2019 clubhouse and watering hole. In real life, itu2019s just off Lincoln Highway, lending a bit of realism to the gangu2019s ride through downtown Coatesville.”,episode:”2″},{name:”Martin’s Taphouse”,town:”Aston Township”,coordinates:”39.89042265129427, -75.43449503510138″,photo:””,description:”Martin’s stands in as the exterior of the Tip Top Lounge in the series, which we see in this episode stacked with motorcycles parked outside the front door.”,episode:”2″},{name:”Dixon’s Lounge”,town:”Sharon Hill”,coordinates:”39.897139107273794, -75.27191565278125″,photo:”BHMNCU4FFJGOBPUKYCZBB2XEOA”,description:”While the exterior of the Tip Top Lounge is in Aston, the interior bears a striking resemblance to Delcou2019s own Dixonu2019s Lounge. Here, Robbie and Cliff are stood up by an, ahem, u201Cbusiness partneru201D before walking out on an order of crabfries.”,episode:”2″},{name:”Willowbrook Shopping Center”,town:”Boothwyn”,coordinates:”39.83646391291799, -75.44319408140227″,photo:”ZU5QXUIDONETHIPPADUJYMAKCY”,description:”Maeve (Emilia Jones) takes Sam (Ben Lewis Doherty) to a fictional u201CVal-U Corneru201D store here with the intent of dropping him off for police to find before the plan goes awry. The store is located near the real Blue Cherry Ice Cream and Bakery, which is visible in the background.”,episode:”2″},{name:”Phoenixville Area High School”,town:”Phoenixville”,coordinates:”40.11868357112564, -75.51793551723154″,photo:””,description:”During his search for his daughter, Emily (Silvia Dionicio), Tom (Mark Ruffalo) finds her in the dugout of a baseball field that, in real life, is at Phoenixville Area High School. Its distinctive backstop is visible from a bird’s-eye view in the series.”,episode:”2″},{name:”Ralph’s Italian Restaurant”,town:”Philadelphia”,coordinates:”39.94006065749021, -75.15774535245488″,photo:”GMDZYMAHRNFGPBTYLRABBDJYHM”,description:”Dark Hearts leaders Jayson (Sam Keeley) and Perry (Jamie McShane) walk through the kitchen here to meet with local drug kingpin Freddy Frias (Elvis Nolasco), but in the show, it doesnu2019t appear to be serving the Italian food weu2019re used to in real life.”,episode:”3″},{name:”Mount Hope Cemetery”,town:”Aston Township”,coordinates:”39.871593701306836, -75.4390865914003″,photo:”4PCNSW4SPBAW7L2WFSJ2STJ3IM”,description:”Itu2019s a very quick shot, but itu2019s there just under four minutes into the episode. In the background, you can see the Commodore Barry Bridge, and graves on a hill in the cemetery in the foreground.”,episode:”3″},{name:”Sixpenny Creek Quarry”,town:”Union Township”,coordinates:”40.23700358370588, -75.78650582204335″,photo:”PLM34YOMIRCPPDVCGTFXM5FGME”,description:”Robbie (Tom Pelphrey) and Cliff (RaxFAl Castillo) finally get their meeting with Eryn (Margarita Levieva), their Dark Hearts insider, but it doesnu2019t go according to plan.”,episode:”3″},{name:”Llanerch Diner”,town:”Upper Darby”,coordinates:”39.96894828437008, -75.29301814827437″,photo:”6QXQDIMGKVDR5J64W4PVS3WP3E”,description:”Taskforce members Aleah (Thuso Mbedu) and Lizzie (Alison Oliver) head to Upper Darby’s famed Llanerch Diner for a tip on the drug house robberies they’re investigating, and get a break in the case.”,episode:”3″},{name:”Rosedon Plaza”,town:”Lansdowne”,coordinates:”39.94225704587108, -75.26528827286353″,photo:”SCB2N67GLFACZO33OOA7CLXQMM”,description:”In the background of one shot during the chase for Ray (Peter Patrikios), you can see the old Doc’s Deli (Deli Green). That puts Ray in the corner of the Rosedon Plaza parking lot as Lizzie (Alison Oliver) makes the arrest.”,episode:”3″},{name:”Coatesville Police Department”,town:”Coatesville”,coordinates:”39.982144078230384, -75.82033869646108″,photo:”XTADWTS6UNEDHOJGNIMWPBBOLE”,description:”Whether the interior is the same station isnu2019t clear, but an exterior shot sets this spot up as the place where the Task team interrogates Ray (Peter Patrikios) and Shelley (Mickey Sumner). Out front, a police cruiser reads u201CDelaware County Sheriff,u201D which is a little far from home.”,episode:”3″},{name:”The Ridley House”,town:”Holmes”,coordinates:”39.89753600427107, -75.31137880453917″,photo:”F2JJYIIZWFA3FFTHDPSXFI5M5A”,description:”Following the chase and interrogation, Lizzie (Alison Oliver) and Grasso (Fabien Frankel) head to this local bar to unwind. Grasso indicates it is a Barnabyu2019s, which, in real life, was true at one point u2013 until the location became the Ridley House in 2019.”,episode:”3″},{name:”Pennsylvania Turnpike on-ramp”,town:”King of Prussia”,coordinates:”40.08960425823238, -75.39689126886788″,photo:”BURLUGM6TRDX3CE46XSFYGJK7M”,description:”Itu2019s a quick shot as Tom (Mark Ruffalo) drives around at the beginning of the episode, but you can just make out the LasikPlus building on Mall Boulevard in the background. That puts this Pennsylvania Turnpike entrance in King of Prussia.”,episode:”4″},{name:”I-76 Exit 320″,town:”Malvern”,coordinates:”40.073716457225665, -75.52365668680957″,photo:””,description:”Tom (Mark Ruffalo) appears to take this exit as he is driving to meet his fellow taskforce members.”,episode:”4″},{name:”Marcus Hook Community Center”,town:”Marcus Hook”,coordinates:”39.81198192114949, -75.41200706776057″,photo:”B76EM6PKTFEB7KFWEUWGOWYDL4″,description:”As County Chief Dorsey (Raphael Sbarge) exits the building, you can see a door tagged with u201CDelaware County Sheriffu2019s Office.u201D But the green awning above him is a dead giveaway u2014 thatu2019s the Marcus Hook Community Center.”,episode:”4″},{name:”Rockdale Industrial Center”,town:”Aston Township “,coordinates:”39.885281970146785, -75.44479191780039″,photo:””,description:”It’s disguised as a trucking depot in the series, but this is where Robbie (Tom Pelphrey) and Cliff (RaxFAl Castillo) travel with Sam (Ben Lewis Doherty) to arrange transportation for their escape into Canada before being confronted by a Good Samaritan. “,episode:”4″},{name:”Upland Diner”,town:”Chester”,coordinates:”39.85816357241053, -75.37189095611281″,photo:”PVJMMBSI2ZBGJNQO46VYY5P6GQ”,description:”Upland Dineru2019s parking lot serves as Robbieu2019s (Tom Pelphrey) holding area during this episodeu2019s drug deal. Unfortunately, we only get an exterior shot of the building, but the restaurantu2019s vintage-style sign is proudly on display. Great pancakes, for the record.”,episode:”4″},{name:”Ridley Creek State Park entrance”,town:”Newtown Square”,coordinates:”39.95853496065017, -75.43948479664033″,photo:”KOSWCMRRHRAB7MLGNLQIF535UM”,description:”Cliff (RaxFAl Castillo) can be seen turning onto North Sandy Flash Drive from Gradyville Road as he heads to the drug deal meeting spot. If you look closely, you can just barely make out a sign for Ridley Creek State Park.”,episode:”4″},{name:”Beaver Creek”,town:”Wilmington, Del.”,coordinates:”39.839261612846315, -75.57139152554225″,photo:””,description:”It’s tough to spot, but the dam that Cliff (RaxFAl Castillo) parks his car next to during this episode’s failed drug deal u2014 or, more accurately, the Dark Hearts’ setup u2014 appears to be in Beaver Creek on the Delaware-Pennsylvania border.”,episode:”4″},{name:”City Clock Apartments”,town:”Coatesville”,coordinates:”39.98382540387415, -75.8211284189516″,photo:”3BYXFXCYUFFRZBUSN5UAPYVYOA”,description:”Another brief shot, but the clock face on the tower of the City Clock Apartments is prominently featured. The building formerly was the National Bank of Coatesville, and has been on the National Register of Historic Places since 1977.”,episode:”4″},{name:”Coatesville-Downingtown Bypass”,town:”Downingtown”,coordinates:”40.01895444780408, -75.70181027552258″,photo:””,description:”FBI Boss Kathleen McGinty (Martha Plimpton) and the rest of the task force swerve across traffic here while looking for Tom (Mark Ruffalo). In the background, you can just make out the sign for Pacer Pool Services & Supplies.”,episode:”5″},{name:”Marsh Creek State Park”,town:”Downingtown”,coordinates:”40.06782560219195, -75.72000193749815″,photo:”NT5JGVMLZFDJTGHC6M7BZFI7Y4″,description:”After surviving his encounter with Robbie (Tom Pelphrey), Tom (Mark Ruffalo) emerges from the woods to see a beautiful summer scene of families enjoying the lake at Marsh Creek State Park.”,episode:”5″},{name:”I-95 Pennsylvania Welcome Center”,town:”Boothwyn”,coordinates:”39.82418322018552, -75.43745107822149″,photo:”5HPTTXFG3ZA2HGAW54OXM4D5ZY”,description:”FBI boss Kathleen McGinty (Martha Plimpton) stuffs her face with fast food at the center’s picnic tables as the task crew looks for their leader. As McGinty explains, she is u201Can emotional eater.u201D”,episode:”5″},{name:”Woy Bridge”,town:”Everett”,coordinates:”40.0150517796881, -78.304498566625″,photo:””,description:”In what is likely the farthest-flung filming location u2013 at least in relation to the rest of the local spots u2013 we get some shots of Everettu2019s Woy Bridge in Bedford County as the taskforce closes in on Robbie (Tom Pelphrey).”,episode:”5″},{name:”Wissahickon Valley Park”,town:”Philadelphia”,coordinates:”40.05627328492142, -75.21733258122025″,photo:”GIK3XIGHEBGOFNM4S2PBSJFG3M”,description:”Many of the series’ woodsy scenes appear to have been filmed in the Wissahickon, though few u2014 if any u2014 notable landmarks make an appearance. Crews were spotted filming around the park last year, and many Inquirer readers have written in to say the recognize certain parts of the creek and landscape in this episode.”,episode:”6″},{name:”Our Lady of Peace Parish”,town:”Milmont Park”,coordinates:”39.88193514095659, -75.33589782814482″,photo:”HGPPGXLRFZFUFE5WBNNXP3DXFM”,description:”Though disguised well as a juvenile detention facility in the show, this little Delco parish provides at least the exterior shots for where Tom (Mark Ruffalo) meets Sam (Ben Lewis Doherty) for the first time.”,episode:”6″},{name:”High Bridge”,town:”Coatesville”,coordinates:”39.98390784773821, -75.82749681114403″,photo:””,description:”This instantly recognizable Coatesville landmark serves as the location for where County Chief Dorsey (Raphael Sbarge) appears to seal Grasso’s (Fabien Frankel) fate with the Dark Hearts.”,episode:”7″},{name:”Delaware County Courthouse and Government Center”,town:”Media”,coordinates:”39.92029464476607, -75.39155431097433″,photo:”NWW6JA6A4FBAJHW7ZIXSIPZ2YA”,description:”Here, Tom (Mark Ruffalo) gives a touching family statement at a court hearing for his son, Ethan (Andrew Russel), in what is the emotional climax of the series. As The Inquirer reported last year, the production took over Courtroom 15 for filming.”,episode:”7″},{name:”Stroud Preserve”,town:”West Chester”,coordinates:”39.95296099101273, -75.64754780607977″,photo:”6ZJWJVNYQFAZJJPFWLZE4ZWXVY”,description:”The last we see of Maeve (Emilia Jones) in the series, she is driving past Stroud Preserve’s Creek Road parking lot with her cousins in tow. Where they’re heading is anybody’s guess, but we hope it’s somewhere with fewer Dark Hearts members.”,episode:”7″}];var W=63710088e-1,gi={centimeters:W*100,centimetres:W*100,degrees:360/(2*Math.PI),feet:W*3.28084,inches:W*39.37,kilometers:W/1e3,kilometres:W/1e3,meters:W,metres:W,miles:W/1609.344,millimeters:W*1e3,millimetres:W*1e3,nauticalmiles:W/1852,radians:1,yards:W*1.0936};function Dn(e,t,r={}){let n={type:”Feature”};return(r.id===0||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=t||{},n.geometry=e,n}function Kt(e,t,r={}){return Dn({type:”MultiPoint”,coordinates:e},t,r)}function Ze(e,t,r){if(e!==null)for(var n,i,o,s,a,d,f,g=0,l=0,v,x=e.type,F=x===”FeatureCollection”,P=x===”Feature”,V=F?e.features.length:1,O=0;O<V;O++){f=F?e.features[O].geometry:P?e.geometry:e,v=f?f.type==="GeometryCollection":!1,a=v?f.geometries.length:1;for(var K=0;K<a;K++){var C=0,$=0;if(s=v?f.geometries[K]:f,s!==null){d=s.coordinates;var I=s.type;switch(g=r&&(I==="Polygon"||I==="MultiPolygon")?1:0,I){case null:break;case"Point":if(t(d,l,O,C,$)===!1)return!1;l++,C++;break;case"LineString":case"MultiPoint":for(n=0;n<d.length;n++){if(t(d[n],l,O,C,$)===!1)return!1;l++,I==="MultiPoint"&&C++}I==="LineString"&&C++;break;case"Polygon":case"MultiLineString":for(n=0;n<d.length;n++){for(i=0;i<d[n].length-g;i++){if(t(d[n][i],l,O,C,$)===!1)return!1;l++}I==="MultiLineString"&&C++,I==="Polygon"&&$++}I==="Polygon"&&C++;break;case"MultiPolygon":for(n=0;n<d.length;n++){for($=0,i=0;i<d[n].length;i++){for(o=0;o<d[n][i].length-g;o++){if(t(d[n][i][o],l,O,C,$)===!1)return!1;l++}$++}C++}break;case"GeometryCollection":for(n=0;n{r[0]>n[0]&&(r[0]=n[0]),r[1]>n[1]&&(r[1]=n[1]),r[2]<n[0]&&(r[2]=n[0]),r[3]{pe(“https://interactives.inquirer.com/storage/dependencies/maplibre/5.3.0/maplibre-gl.js”,()=>{let e=new It;be=window.maplibregl,be.addProtocol(“pmtiles”,e.tile);let t=”https://interactives.inquirer.com/melish/1.2″,r=`${t}/us-latest.pmtiles`,n=new Le(r);e.add(n),n.getHeader().then(async()=>{let o=await(await fetch(`${t}/styles/neutral.json`)).json();ee=new be.Map({container:”map”,zoom:13,center:[-75.165222,39.952583],cooperativeGestures:!0,attributionControl:!1,padding,style:{…o,sources:{openmaptiles:{type:”vector”,url:`pmtiles://${r}`}}}}),ee.scrollZoom.disable(),ee.touchPitch.disable(),ee.addControl(new be.NavigationControl({showCompass:!1,showZoom:!0,visualizePitch:!1}),”bottom-right”),ee.on(“load”,()=>{En(),De!==”all”?ke=we.filter(s=>parseInt(s.episode)parseFloat(d)).reverse(),s.id=ze(s.name),s.photo&&(s.imageSrc=`https://interactives.inquirer.com/secondbank/arc/${s.photo}/650.webp`);let a=xe(“js-map-stub”);Te(a,s),a.addEventListener(“click”,()=>{Qt(a)}),a.addEventListener(“mouseover”,()=>{Qt(a)}),a.addEventListener(“mouseout”,()=>{tr()}),new be.Marker({element:a}).setLngLat(s.coordinates).addTo(ee)}document.querySelector(“.js-map”).classList.add(“is-loaded”),er=!0,Me!=””&&(ir(Me),nr(Me))})})})},Qt=e=>{tr(),e.classList.add(“is-highlight”)},tr=()=>{document.querySelectorAll(“.js-map-location”).forEach(e=>{e.classList.remove(“is-highlight”)})},En=()=>{De=document.querySelector(“.js-steps”).dataset.episodeForPage},rr=()=>{let e=window.innerWidth>960;padding={top:50,bottom:e?50:window.innerHeight/2,left:e?window.innerWidth/2+50:50,right:50}},$n=()=>{window.addEventListener(“resize”,()=>{rr()})},nr=e=>{if(Me=null,e==null){let t=we.filter(r=>r.episode==De);ee.fitBounds(_t(t),{animate:!0})}else if(e.step==”all”)ee.fitBounds(_t(ke),{animate:!0});else{let t=we.filter(r=>ze(r.name)==e.step);t.length>0&&ee.flyTo({center:t[0].coordinates,padding,zoom:13,animate:!0,duration:1e3})}},ir=e=>{document.querySelectorAll(“.js-map-location”).forEach(t=>{t.classList.remove(“is-current”)}),e&&e.step!==”all”&&document.querySelector(`.js-map-location[data-id=”${e.step}”]`).classList.add(“is-current”)},_t=e=>{let t=Kt(e.map(n=>n.coordinates));return Xt(t)},Ae={init:()=>{An(),rr(),$n()},update:e=>{er?(nr(e),ir(e)):Me=e}};var Ye=Sr(or());var zn=async()=>{let t=await(await fetch(“https://interactives.inquirer.com/pepper/2025-task-locations/data.json”)).json();t=t.nav,console.log(t);let r=(0,Ye.default)();t=t.filter(i=>r.isAfter((0,Ye.default)(`${i.date} 22:00`))),t=t.filter(i=>i.link);let n=document.querySelector(“.js-nav-links”);for(let i of t){i.text=`Episode ${i.episode}`;let o=xe(“js-nav-link-stub”);Te(o,i),n.appendChild(o)}},sr={init:()=>{zn()}};var Ee,Bn=(e,t)=>{Ee=Ee||window.PMNdataLayer,Ee?Ee.push({event:”misc_event”,eventAction:e,eventLabel:t}):window.location.hostname.includes(“localhost”)?console.log(“Analytics event:”,e,t,”(not actually being sent due to localhost)”):console.log(“Failed to push analytics event”,e,t)},ar={event:(e,t)=>{Bn(e,t)}};var lr=1,Ve=class{constructor(t){this.el=t,this.contentPosition=”default”,this.possibleSteps=new Array,this.currentStep=null,this.offset=window.innerHeight*.5,this.instanceOfSteps=lr,this.hasMap=!!t.dataset.map,lr++,this.setOffset(),this.setPossibleSteps(),this.updateContent(),this.bindings()}setPossibleSteps(){this.el.querySelectorAll(“.js-steps-step”).forEach(t=>{t.dataset.step&&this.possibleSteps.push(t.dataset.step)})}bindings(){window.addEventListener(“scroll”,()=>{this.updateContent()}),window.addEventListener(“resize”,()=>{this.updateContent(),this.setOffset()})}setOffset(){window.innerWidth>960?this.offset=window.innerHeight*.5:this.offset=window.innerHeight*.8}updateContent(){this.updateCurrentStep()}updateCurrentStep(){let t,r;if(this.el.querySelectorAll(“.js-steps-step”).forEach((i,o)=>{i.getBoundingClientRect().top{let a=”is-“+o,d=”is-“+s;this.possibleSteps.indexOf(o){document.querySelectorAll(“.js-steps”).forEach(e=>{new Ve(e)})}};var Fn=()=>{},cr={init:()=>{Fn()}};var de,Ke,Xe=!0,Hn=()=>{de=document.querySelectorAll(“.js-video-autoplay”)},On=()=>{window.addEventListener(“resize”,()=>{hr()}),window.addEventListener(“scroll”,()=>{hr()}),de.forEach(e=>{e.addEventListener(“volumechange”,t=>{e.muted!==Xe&&!pt()&&(Xe=e.muted,In())})})},hr=()=>{let e;de.forEach((t,r)=>{let n=t.getBoundingClientRect(),i=n.height/2;n.y-i&&(e=t)}),e!==Ke&&(Ke=e,de.forEach(t=>{t.pause()}),e?e.play():Ke=null)},In=()=>{de.forEach(e=>{e.muted=Xe})},fr={init:()=>{Hn(),de&&On()}};var dr={init:()=>{at.init?.(),yt.init?.(),Mt.init?.(),Tt.init?.(),Ct.init?.(),kt.init?.(),Ae.init?.(),sr.init?.(),ur.init?.(),cr.init?.(),fr.init?.(),ue.init?.()}};var Rn=()=>{},pr={init:()=>{Rn()}};var Un=document.querySelector(“.js-inno”),vr=()=>{dr.init(),pr.init()};Un?vr():new MutationObserver((t,r)=>{if(document.querySelector(“.js-inno”)){r.disconnect(),vr();return}}).observe(document,{attributes:!0,childList:!0,subtree:!0});})();
As I listened to the recent oral arguments before the U.S. Supreme Court challenging Colorado’s ban on conversion therapy for minors — a pseudoscientific practice that attempts to change or suppress a person’s sexual or gender identity — as a mental health professional, I was confronted with a difficult truth: The Supreme Court debate itself revealed major gaps in the general understanding of what ethical therapy is, and how it differs from malpractice.
While the decisive action taken in 2024 by the Shapiro administration and five state licensing boards to officially declare conversion therapy professional misconduct and harmful is a major victory affirming our ethical standards here in Pennsylvania, the questions raised by the justices underscore a critical and urgent need. Mental health professionals must clearly communicate to the public, especially to the youth in our commonwealth, what constitutes sound, ethical, and effective treatment.
To an outside observer, or even a justice who sits on the highest court in the land, psychotherapy might seem like a conversation with someone who is supportive and compassionate.
But the psychological science confirms that this impression is patently inaccurate. Evidence-based psychotherapy is built on the premise that validation, acceptance, and understanding are the keys to alleviating distress, strengthening relationships, and enabling healthier life choices.
Becoming a competent and ethical psychotherapist takes years of specialized training, study, and supervision.
Importance of validation
Just looking at one of these skills, validation, we can see how complex this is. Validation is the focused act of striving to understand a person’s feelings, thoughts, and behaviors, reflecting the ways their reactions make sense in the context of their lived experience.
Crucially, and something I stress to my own patients, validation is not agreement or approval. True validation allows for curiosity, paving the way for the self-acceptance that is essential for learning and growth. And, importantly, validation requires the therapist to put aside their own wishes, hopes, and beliefs, also not easy or natural.
The entire premise of conversion therapy stands in direct opposition to what comprises ethical practice by therapists.
The U.S. Supreme Court heard oral arguments this month from a lawsuit brought by Kaley Chiles, a licensed counselor, against Colorado’s law prohibiting conversion therapy for minors.
Conversion therapy asserts that one’s inherent sexuality, a quality that lacks any evidence of malleability, is pathological and must be altered. This lie is deeply shaming and stigmatizing.
Shame and stigma do not persevere without active promotion from those in power.
A therapist’s position is not that of a mere “conversation partner,” but a person in an official capacity with specialized training.
Any professional who promises a client they can alter their core sexual identity is exploiting that power and acting in the face of the overwhelming evidence that their own training is built upon.
To illustrate, consider a licensed dermatologist consulting with a patient whose natural skin tone is subject to deep societal prejudice. The patient wishes to permanently change their skin color to escape this stigma, and the dermatologist, perhaps due to a shared personal or religious belief, sincerely wishes they could grant this escape.
Despite this shared wish and personal conviction, if the dermatologist were to accept payment and declare, “I will prescribe a treatment that will permanently and fundamentally rewrite your DNA to give you an entirely different skin color,” that doctor would be committing profound malpractice and fraud.
Unethical and immoral
More than just unethical, it is immoral, because it validates and profits from the harmful, prejudiced notion that the patient’s natural, nonpathological trait is a curable defect. Their oath demands they communicate the truth: that such a fundamental alteration is impossible.
The therapist’s scenario is the direct professional equivalent.
A therapist can ethically help a client manage their feelings or behaviors related to their orientation; they cannot ethically promise to remove the orientation itself.
To promise this impossible, discredited service is professionally unethical and morally corrosive, as it actively reinforces the lie that a natural variation of human existence is a defect needing a “cure.”
The distinction is clear: Ethical therapy offers acceptance; malpractice promises an impossible cure.
The debate before the Supreme Court is not about a professional’s freedom of speech; it is about protecting the public — especially vulnerable minors — from emotional violence perpetrated under the guise of professional care.
Keren Sofer is a Philadelphia-based clinical psychologist.
So on Friday, they took the ball out of Tyrese Maxey’s hands and made Edgecombe the primary ballhandler in an exhibition game, even though dribbling was a supposed weakness for the rookie.
“I think we thought, ‘OK, maybe he could play on the ball some,’ and we were talking about, ‘Let’s do it at summer league,’” coach Nick Nurse said after a 126-110 victory over the Minnesota Timberwolves in the preseason finale. “But where we’re at, I think he’s way ahead of where we thought he might be, being able to do that.”
Edgecombe’s ability to bring the ball up the court created easy off-ball scoring opportunities for Maxey — ones he hadn’t seen since he played alongside James Harden two seasons ago. And it has people thinking that the Sixers may have found the perfect backcourt pairing for Maxey.
Edgecombe finished the game with 26 points, one behind Maxey’s game-high total. The third pick in June’s NBA draft also had six rebounds, three assists, and a game-high five steals in 34 minutes. Eleven of his points came in the fourth quarter on 4-for-6 shooting. His final eight points came on a personal 8-0 run to put the game out of reach.
He started the run with back-to-back rolls to the basket. Then the 20-year-old added a pair of foul shots. And after stealing the ball, Edgecombe scored on a running dunk to put the Sixers up 18 with 9 minutes, 8 seconds remaining. Having seen enough, Nurse subbed him out for good with 8:43 left.
VJ Edgecombe’s ball-handling ability enabled the Sixers to move Tyrese Maxey (left) off the ball Friday.
So what stood out the most to Edgecombe about his home debut?
The five steals? Playing point guard? Scoring 11 fourth-quarter points?
“Probably the steals,” he said. “I’d say just being in the lanes, getting as much deflections as I can, being in the right spot defensively. That’s something I pride myself on. I wouldn’t say stood out, but that’s probably the best part.”
Edgecombe showed he was an athletic wing with elite defensive skills last season as a freshman at Baylor.
He was a highlight waiting to happen during his lone college season. The 6-foot-4, 195-pounder was known for his scoring ability — especially in transition and at the rim. The Bahamian also possessed solid playmaking skills and defensive instincts.
Sixers guard VJ Edgecombe went on a personal 8-0 run in the fourth quarter to put away Friday’s exhibition finale against the Minnesota Timberwolves.
He averaged 15 points, 5.6 rebounds, and 3.2 assists last season. If there was a weakness, his struggles with shot creation stood out. The thought was that if Edgecombe developed a shot and worked on his ballhandling, he could be a solid NBA combo guard.
But Maxey was far from surprised by Edgecombe’s ability to handle the ball on Friday. He’s been “extremely” impressed with his backcourt mate’s comfort with the ball against NBA defenders.
“He makes good decisions,” Maxey said. “He doesn’t let people speed him up. I think he plays extremely mature for being a rookie. He’s good. He’s good at basketball.”
Barring any setback, Edgecombe will remain in the starting lineup when the Sixers open the season Wednesday against the Boston Celtics at TD Garden.
He’ll be a part of a young backcourt rotation this season that will include Quentin Grimes and Jared McCain, who’s sidelined after right thumb surgery. And Edgecombe has lofty goals, which include winning Rookie of the Year, making the All-Defensive and All-Rookie teams, and helping the Sixers contend for a title.
“I know I worked hard to be in this position,” he said. “If I wasn’t ready for it, I wouldn’t have been here. I feel as though I just have a lot of confidence. My teammates instill confidence in me also. So, I won’t say it’s easy, but it’s basketball at the end of the day. I’m trying not to overthink it.
“I love this game so much. … It just flows naturally, man. I’m just out there having fun.”
The Sixers hope VJ Edgecombe (77) and Tyrese Maxey will lead a young guard rotation.
Once again, the Eagles could not get their running game going yesterday against the Minnesota Vikings. Jalen Hurts and his wide receivers made sure that did not matter. Hurts threw for 326 yards, compiled a perfect passer rating of 158.3, and threw three long touchdown passes in a 28-22 victory.
DeVonta Smith caught nine passes for a career-high 183 yards and a touchdown. And we likely will get no complaints this week from A.J. Brown, who had 121 receiving yards and two scores. Saquon Barkley managed only 44 yards on 18 carries, but the passing game picked up the slack.
“Saquon is the best,” Hurts said. “I don’t want him to feel like he’s carrying that by himself. It is a group effort. Everyone is involved in that. Everyone has to look inward and say, ‘Well, how can we help get something going the way it needs to go?’ Offensively as a unit, as a team, it doesn’t matter how it looks. In hindsight, it’s about finding ways to win games. But we want to make sure all areas of our yard are green and in a good place.” Jeff McLane has his grades on the game.
Whatever the Eagles needed against the Vikings, Hurts gave it to them, Mike Sielski writes. And they needed a lot.
In a bit of concerning news for the offense, center Cam Jurgens left the game in the first quarter with a right knee injury.
Against a Vikings offense that seemed to keep shooting itself in the foot, Vic Fangio’s defense bent but did not break. It helped to get a huge play from linebacker Jalyx Hunt, who picked off Carson Wentz and returned the ball 42 yards for a touchdown. Moro Ojomo and Joshua Uche sacked Wentz in two more big plays for the Birds.
The Vikings had a unique way of trying to stop the Tush Push, which came to light during Fox’s broadcast.
Brandon Graham’s March retirement might only last seven months.
The Eagles’ corps of edge rushers took another hit Sunday when Azeez Ojulari went down with a hamstring injury in the first half and never returned. Perhaps help is on the way, though. Defensive end Brandon Graham, 37, is considering ending his retirement after seven months and rejoining the Eagles, league sources told The Inquirer. An ESPN report said Graham was “strongly considering” it.
Sixers rookie VJ Edgecombe poured in 26 points and even played on the ball some in the Sixers preseason finale.
The 76ers figured they were getting an athletic wing with elite defensive skills when they drafted VJ Edgecombe third overall in the NBA draft. Turns out, they might have picked up a more complete package.
The Sixers entrusted Edgecombe with handling the ball Friday in a preseason victory against Minnesota and the rookie looked good in that role. “He makes good decisions,” says Tyrese Maxey, who was freed up to score with Edgecombe on the ball.
Maybe Paul George will be in the mix for the Sixers soon, too. Coming back from knee surgery in July, George “looked good” in a full practice yesterday, coach Nick Nurse said.
Owen Tippett leads the Flyers with three goals this season.
Noah Cates scored the decisive goal for the Flyers on Saturday in a 2-1 overtime victory against the Minnesota Wild. Afterward, Cates raved about teammate Owen Tippett. “He can be a one-man show with his speed,” Cates said. Tippett showed his speed and more as he scored his third goal of the season. Goalie Dan Vladař also made a big impression, Jackie Spiegel writes in her takeaways from the game.
Meanwhile, 20-year-old star Matvei Michkov played only 12 minutes, 7 seconds against the Wild, sitting out the end of regulation and all of overtime. Coach Rick Tocchet explains why Michkov wound up on the bench.
Penn State tailback Kaytron Allen rushed for 145 yards and two touchdowns in the loss to Iowa.
Penn State’s comeback effort ran out of gas Saturday in a 25-24 loss to Iowa, dropping the Nittany Lions to 0-4 in the Big Ten. The Nittany Lions showed fight under interim coach Terry Smith, though.
“I think our guys played hard. I think our guys left it out there,” Smith said. “They gave everything they had. There was no one who didn’t give great effort. We just have to execute.”
Eagles quarterback Ron Jaworski with coach Dick Vermeil.
Oct. 20, 1985: Kenny Jackson scored on a 36-yard touchdown pass from Ron Jaworski in the fourth quarter to lift the Eagles past the Dallas Cowboys, 16-14, at Veterans Stadium.
Brandon Graham is weighing a possible return to the Eagles after a seven-month retirement. One member of the Eagles defense talked about how much he misses the veteran defensive end. Can you tell who said the above? Check your answer here.
We compiled today’s newsletter using reporting from Olivia Reiner, Jeff McLane, Jeff Neiburg, Gabriela Carroll, Mike Sielski, Keith Pompey, Jackie Spiegel, Jonathan Tannenwald, Sean McKeown, Greg Finberg, and Ryan Mack.
By submitting your written, visual, and/or audio contributions, you agree to The Inquirer’s Terms of Use, including the grant of rights in Section 10.
Thank you for reading, as always. I’ll see you in Tuesday’s newsletter. — Jim Swan
Government contractors are among the big employers grappling with President Donald Trump’s plan to charge employers $100,000 for new H-1B visas, which allow hundreds of thousands of workers from foreign countries to work in the United States every year.
Leading contractors such as Amazon Web Services at the federal level and Deloitte Consulting in Pennsylvania rely on H-1B visas to bring in foreign skilled professionals for their U.S. workforces.
Once a supporter of the 35-year-old program, Trump said in a September executive order that he now agrees with critics that “systemic abuse” of the visas has displaced U.S. workers, “discouraging Americans from pursuing careers in science and technology,” and driving down wages. He announced a fee of $100,000 for new H-1B visas, which would significantly boost costs for government contractors and other employers that continue to use the visas.
U.S. immigration officials issue up to 85,000 new H-1B visas a year. Generations of engineers and technical workers have moved to the United States to work for government agenciesusing these visas. Some remain as permanent residents and become citizens.
window.addEventListener(“message”,function(a){if(void 0!==a.data[“datawrapper-height”]){var e=document.querySelectorAll(“iframe”);for(var t in a.data[“datawrapper-height”])for(var r,i=0;r=e[i];i++)if(r.contentWindow===a.source){var d=a.data[“datawrapper-height”][t]+”px”;r.style.height=d}}});
About 50% of all U.S. H-1B visa holders arrive from India, and the percentage is higher in technical fields. More than 80% of Deloitte H-1B visa holders stationed in the Harrisburg area from 2022-2024 originated in India, according to federal visa data. These professionals earned a median of around $100,000 a year.
Recruiters promoted the visas extensively in 2000 to help U.S. companies update systems under Y2K programs, said Akanksha Kalra, an immigration attorney in Philadelphia who has represented many H-1B visa holders.Since then the program became so popular among employers and applicants that H-1B visas have been awarded through a lottery.
Here’s what you need to know about H-1B visas.
Who are the largest employers of H-1B workers in Pennsylvania?
Among Pennsylvania-based employers, Deloitte Consulting is by far the top H-1B contractor. More than 3,000 of the 9,930 H-1B visas the government granted in Pennsylvania last year were for Deloitte Consulting and its tax and accounting affiliates. The company ranked among the 10 largest H-1B visa users across the U.S. last year. Pennsylvania was a major Deloitte client, paying $260 million for its services to state health, labor, and transportation programs, among others.
window.addEventListener(“message”,function(a){if(void 0!==a.data[“datawrapper-height”]){var e=document.querySelectorAll(“iframe”);for(var t in a.data[“datawrapper-height”])for(var r,i=0;r=e[i];i++)if(r.contentWindow===a.source){var d=a.data[“datawrapper-height”][t]+”px”;r.style.height=d}}});
How long can people with H-1B visas work in the U.S.?
Employers can apply to have H-1B visas extended for a total of six years, boosting the total of H-1B workers in the country at any one time to hundreds of thousands. Spouses of H-1B visa professionals often apply for H-4 work visas.
Six states — California, Texas, New York, New Jersey, Virginia, and Pennsylvania — account for more than half the 283,000 new and returning H-1B visas approved by the federal government for fiscal year 2024, the most recent data available.
window.addEventListener(“message”,function(a){if(void 0!==a.data[“datawrapper-height”]){var e=document.querySelectorAll(“iframe”);for(var t in a.data[“datawrapper-height”])for(var r,i=0;r=e[i];i++)if(r.contentWindow===a.source){var d=a.data[“datawrapper-height”][t]+”px”;r.style.height=d}}});
The largest H-1B employers include Amazon’s Virginia operations, whose clients include the Pentagon and other U.S. security, surveillance, and technology agencies; other Big Tech employers such as Meta, Oracle, and Google; banks such as J.P. Morgan and Goldman Sachs; and manufacturers, such as automakers General Motors, Ford, and Tesla. Hospitals use the visas to bring in doctors, universities for professors.
How does Pennsylvania state government rely on H-1B workers?
Besides Deloitte, the visas are popular among small firms that specialize in IT contracting for Pennsylvania state government, according to a check of information technology firms contracted to Pennsylvania state departments under the no-bid Information Technology Supplemental Assistance (ITSA) program, which started in 2010 as a way to add short-term technical project assistance.
Payments to ITSA contractors rose from $24 million in 2010 to $188 million last year, spread among hundreds of mostly small and specialized firms, according to data The Inquirer obtained in a Right to Know request.
In each year, more than half of ITSA spending went to firms that were granted at least one H-1B visa. Together ITSA firms were awarded 171 H-1B visas last year, not counting Deloitte.
What do Pennsylvania officials say about Trump’s $100,000 plan?
A spokespersonfor Gov. Josh Shapiro’s administration said state officials are studying Trump’s proposal.
State agencies don’t themselves sponsor H-1B visa applicants, and the state “does not have information hired by suppliers through the federal H-1B visa program,” said Dan Egan, a spokesperson for the state Office of Administration.
However,OST Inc., the state contractor that oversees hundreds of information technology contractors to more than 30 Pennsylvania state agencies, requires them to report H-1B visa holders, as well as participants in other foreign guest worker programs such as the OPT visa. OST didn’t respond to inquiries.
Is a scarcity of Pennsylvania tech talent forcing employers to bring in staff from abroad?
Pennsylvania legislators who held hearings on the ITSA program in 2017 did not dispute that the state faced a shortage of tech talent in the Harrisburg area. Contractors said the state should verify visa holders’ education and work experience to avoid overpaying.
The Shapiro administration says it has created technology apprenticeship, internship, and fellowship programs that help Pennsylvanians without a college degreequalify for state tech jobs and help fill IT positions.
Several publicly traded companies formerly based in central Pennsylvania, including TE Connectivity, Enviri, and Rite Aid moved their headquarters from the Harrisburg area to the Philadelphia metropolitan area in recent years. Each cited the difficulty finding American tech workers and managers willing to live in Central Pennsylvania.
Why is Trump so interested in H-1B visas?
In his Sept. 19 executive order, Trump noted that the visas are supposed to go to people who could do “high-skilled” jobs that Americans aren’t doing — but, he said, technology employers “have abused the H-1B statute and its regulations to artificially suppress wages” to the disadvantage of U.S. workers.
That’s a switch for Trump, who last December defended H-1B. “I’ve always liked the visas. I have always been in favor of the visas. That’s why we have them,” Trump told the New York Post last December. “I have many H-1B visas on my properties. I’ve been a believer in H-1B. I have used it many times. It’s a great program.”
How are business and labor reacting to Trump’s H-1B plan?
Brian Dawson had just landed his dream job as Pennsylvania’s acting state librarian in 2015 when he came down with a cold.
He tried to power through the sickness. But after a couple of weeks, he still couldn’t seem to kick it.
Doctors at an outpatient clinic diagnosed Dawson with bronchitis and pneumonia, prescribed him antibiotics, and sent him home.
A couple of days later, he developed a sharp pain in his left eye, which doctors attributed to sinus pressure.
A few days after that, Dawson woke up in the middle of the night and told his wife he needed to go to the emergency room.
He was admitted with severe abdominal pain, blurry vision, and trouble walking. In the span of five hours, Dawson would become blind in his left eye and paralyzed from the chest down.
A doctor would tell him he had a rare autoimmune disease called neuromyelitis optica (NMO), and give him five to seven years to live.
“I was in a really good trajectory in life, and then I got sick and had to pick up the pieces,” said Dawson, who lives in Harrisburg.
Dawsonsaw his own struggles reflected in a recent survey of1,214 rare disease patients in Pennsylvania that was spearheaded by the state’s Rare Disease Advisory Council, an advisory body to the General Assembly.
The results, published last month in the medical journal Public Health Reports, painted a “concerning” picture of their lived experiences, said Dawson, the council’s secretary.
For example, nearly half of the respondents waited more than two years for a diagnosis. Almost a third waited more than five years, and 37% received more than three incorrect diagnoses before their final diagnosis.
Many respondents reported high annual spending on costs related to their disease, reduced work and school hours, and difficulty accessing medication or services after diagnosis.
“There was a worse experience overall if there was a longer diagnosis [time],” said Jonathan Sussman, the lead author on the paper, who is working on his medical and doctoral degreesat the University of Pennsylvania’s Perelman School of Medicine.
Misdiagnosed
When Dawson’s symptoms progressed, doctors admitted him to the intensive care unit and started him on steroids.
His vision returned a couple of days later, but he was still paralyzed.
Imaging revealed that the majority of his thoracic spine — the middle section of the spine — was scarred, and his optic nerve was inflamed.
Two weeks into his stay, a neurology fellow walked into his room, “all smiles,” Dawson recalled.
The doctor said proudly they had figured out what he had, then leaned back on a red container on the wall, crossed his arms, and told Dawson that he had NMO.
That meant his immune system was attacking his optic nerve and spinal cord, the doctorexplained.
He said Dawson would probably be completely blind in about five years.
“A couple years after that, you’ll get a lesion high up on your spinal column or in your brain stem, you’ll be on a ventilator, and then pneumonia will probably kill you,” Dawson recalled him saying.
The doctor concluded by telling him how many years he likely had left to live, and then walked out of the room.
“The way I was told, it was horrendous,” said Dawson, who was then 42.
Afterward, the hospital discharged him to a rehabilitation facility where he relearned how to walk for about two months.
The next two years after that were a cycle of going on and off steroids with each relapse. He had recurring eye pain and blurriness, and pain in his legs that felt as though someone had poured searing hot coals inside them.
“You grieve for the life that you had, grieve for the things you used to be able to do,” Dawson said.
Dawson’s doctor put him on treatments like rituximab, an infusion meant to knock down his immune system, and gabapentin for nerve pain.
Dawson’s doctor put him on treatments like rituximab, an infusion meant to knock down his immune system, and gabapentin for nerve pain.
But nothing seemed to work.
In one argument with his neurologist, he told her, “we’re doing something wrong.”
In response, she said, “I don’t know what to do with you anymore,” he recalled.
After that, she referred him to a neurologist at Johns Hopkins, who determined from new blood work that he didn’t have NMO.
Almost three years after Dawson was misdiagnosed, the doctor gave him his correct diagnosis: MOGAD, or myelin oligodendrocyte glycoprotein antibody-associated disease. It was a rare autoimmune disease that was likely kicked off by the cold he had back in 2015.
MOGAD had the same constellation of symptoms as NMO, but required different treatment. It also wasn’t thought to affect a person’s life expectancy.
“This disease is not going to kill you. You’re going to grow old,” Dawson recalled the doctor saying.
Advocacy
Brian Dawson is a patient ambassador for the Sumaira Foundation and secretary of the Pennsylvania Rare Disease Advisory Council.
The recently published survey was Dawson’s way of collecting data to substantiate trends he had heard of anecdotally.
For example, 37% of survey respondents said they didn’t receive enough information at the time they were given a diagnosis, and 20.5% said they didn’t understand the information provided by their healthcare providers.
As a patient ambassador for the Sumaira Foundation, a Massachusetts-based patient advocacy group for rare neuroinflammatory disorders, Dawson tries to help newly diagnosed patients navigate their own diagnoses, knowing that health literacy can be an added challenge.
Another striking statistic to him was that half of the respondents spent more than $5,000 every year on their care, with others spending well over $10,000.
A quarter of respondents were also unable to access medications because of co-pay costs or a lack of coverage.
“Ninety-five percent of rare diseases don’t have an FDA-approved treatment. So a lot of times people are being treated off-label,” Dawson said.
That means patients face barriers like prior authorizations and “flat out denials,” he added.
Dawson himself just received a second denial from his insurance company for coverage of a medication he has been on for years, since it’s technically off-label for his condition.
He hopes the results of the survey can inform policy to reduce barriers faced by rare disease patients.
“There are people where it’s life or death for them dealing with some of the prior authorization stuff,” he said.
Recovering
When Dawson thought he only had five to seven years left to live, he “always heard the clock ticking,” he said.
“Sometimes you could get distracted and focus on that, but if you’re focusing on that ticking clock, you’re missing everything else,” he added.
He had hoped he could make his job as the acting state librarian into a permanent position, but with his health challenges, he had to let that dream go.
Dawson went back to his previous role as the director of library development under the next state librarian.
Dawson had hoped he could make his job as the acting state librarian into a permanent position.
For the next few years, he tried to focus on making good memories for his family and minimizing the disease’s impact on them, but the effects inevitably spilled over.
His oldest son quit a good job to move to Harrisburg to spend time with Dawson, thinking he only had a handful of years left.
With Dawson’s new diagnosis, “our life had changed all over again,” he said.
Now that he’s on the correct medication for his condition, Dawson is no longer experiencing the constant cycle of relapses.
However, he still battles fatigue and brain fog from his condition, and has to be cautious about infections, since his immune system might react unpredictably.
Brian Dawson, now 52, lives in Harrisburg.
Even with his longer life expectancy, there’s always a chance he could relapse and become blind or paralyzed again.
“I don’t hear the clock, but I know that reality is looming out there,” Dawson said.
The University of Pennsylvania Health System, the Philadelphia region’s biggest provider of cancer care and a national leader in developing new treatments, is spending more than $500 million on two new cancer facilities in Philadelphia and central New Jersey to keep growing.
“What we’ve seen pretty consistently is that demand is there to meet any capacity increases,” Julia Puchtler, the health system’s chief financial officer, said in an interview about fiscal 2025 financial results.
Penn is not alone in its push to expand cancer services. Jefferson’s Sidney Kimmel Cancer Center, Temple’s Fox Chase Cancer Center, and the MD Anderson Cancer Center at Cooper are pushing into the suburbs to reach more patients.
The same thing is happening nationally as financially pressured health systems are looking for ways to increase revenue in a growing and lucrative market for cancer care.
Penn stands out locally for the scale of its investment in a strategy to deliver cancer care seamlessly across its seven hospitals and a growing network of outpatient clinics, with the expectation that patients will keep coming back for their ongoing health needs.
Penn sees an opportunity to expand its market share even more, as cancer diagnoses rise. The U.S. is expected to see a nearly 40% increase in cancer diagnoses between 2025 and 2050, according to the Philadelphia-based American Association of Cancer Research.
Experts attribute the rise to a wide variety of factors, from better early detection, to longer life spans, and to environmental exposures that are poorly understood.
Much of Penn’s investment is in outpatient facilities, including a $270 million center being built in Montgomeryville that will have radiation oncology and an infusion center. “More and more patients want to receive care closer to home,” according to Lisa Martin, a senior vice president at Moody’s Rating. “All of that is really what’s behind all of this investment.”
Cancer treatment overall is profitable. At Penn, cancer services account for up to 60% of the system’s operating margin by one simple measure that subtracts direct costs from direct revenue and excludes back-office expenses and other centralized costs.
Puchtler attributed the profitability of cancer care to the prevalence of drugs, such as chemotherapy, that Penn can buy at a discount, while getting the full price from insurers, and the higher percentage of younger cancer patients with better-paying private insurance than is typical for many healthcare services.
The expansion efforts are expensive in an industry where the consumers both benefit from advances and pay ever-rising healthcare costs. Proton therapy, in particular, costs more, but has not yet been proven to have better outcomes across a wide range of cancers.
The intensifying competitive landscape
Penn treats about one-third of adults with cancer in its market area, which stretches from central New Jersey to the Susquehanna, according to Robert Vonderheide, who is director of Penn’s Abramson Cancer Center and leads all of Penn’s efforts in oncology treatment and research.
Penn counted 47,053 new cancer patients in the 12 months that ended June 30, up 40% from five years ago, according to Penn. The system has 14 locations where patients can receive chemotherapy and even more radiation oncology sites.
Competitors are also trying to expand their reach, and Temple’s Fox Chase Cancer Center is succeeding.
window.addEventListener(“message”,function(a){if(void 0!==a.data[“datawrapper-height”]){var e=document.querySelectorAll(“iframe”);for(var t in a.data[“datawrapper-height”])for(var r,i=0;r=e[i];i++)if(r.contentWindow===a.source){var d=a.data[“datawrapper-height”][t]+”px”;r.style.height=d}}});
Fox Chase had 21,442 new patients in fiscal 2025, up 148% from 2020, the nonprofit said. Fox Chase has added suburban offices in Voorhees and Buckingham, Bucks County, and is expanding its infusion capacity at its main campus on Cottman Avenue. Fox Chase has a significantly smaller footprint than Penn, with six locations for infusions and four for radiation.
The MD Anderson Cancer Center at Cooper said it had 4,326 new patients last year, up 27% over the last five years. Cooper has taken the MD Anderson Cancer Center brand to the former Cape Regional Medical Center, which it acquired last year and which used to be part of the Penn Cancer Network. Cooper also offers cancer services at its new Moorestown location.
Jefferson Health’s Sidney Kimmel Cancer Center did not respond to requests for patient data, but has in recent years opened cancer center locations at its Torresdale and Bucks County Hospitals. Jefferson’s cancer center also attained the highest designation from the National Cancer Institute last year — the Philadelphia region’s third comprehensive cancer center, matching Penn and Fox Chase.
Lancaster County resident Susan Reese, 56, said she experienced smooth cooperation between her doctor at Penn’s Lancaster General Hospital and the team at HUP during her treatment for non-Hodgkin lymphoma.
“I never had any question in my mind that one doctor didn’t know what the other doctor was doing,” said Reese, who received CAR-T therapy at HUP in September 2022. Penn has since started offering CAR-T at Lancaster General.
After she relapsed in early 2023, she came back to HUP for a stem cell transplant. She could have gone to Penn State Health’s Hershey Medical Center for that. It’s significantly closer to her home in Willow Street, but she wanted to stay within the Penn system.
Reese’s experience of integration of services at HUP and Lancaster General is what Penn is aiming for in a territory that stretches from central New Jersey to central Pennsylvania.
Oncologist Robert Vonderheide, director of Penn Medicine’s Abramson Cancer Center, oversees all Penn’s cancer services and research.
Electronic medical records help with the integration needed to ensure the thousands of cancer patients Penn physicians treat annually get the most advanced care possible, according to Vonderheide, whose research focuses on cellular immunotherapies.
“We treat patients’ cancers now in a very precise way; the precise mutation, the precise type of chemotherapy, the precise dose” are the focus for doctors, Vonderheide said. “This is no longer appropriate for the telephone game. This has to be data-driven.”
Reese’s decision to stay within Penn is part of a broader trend of patients tending to receive all their care within one health system, according to Rick Gundling, a healthcare expert at the Healthcare Financial Management Association in Washington, D.C.
That’s particularly important in oncology, which typically involves multiple specialties, such as medical oncology, radiation oncology, and surgical oncology, he said.
“Seamless coordination across all those disciplines really makes it a better patient experience and clinical experience because it reduces delay, improves access,” Gundling said.
Taking advanced treatments from HUP to the network
Part of Penn’s strategy is to begin offering advanced services at locations beyond HUP. That’s where Penn pioneered CAR-T cell therapy, which harnesses the immune system to attack cancer, and for years that was the only place Penn offered it.
HUP still performed the bulk of the CAR-T treatments for blood cancers, 123 inpatient cases and 14 outpatient cases last year, but now CAR-T is also available at Lancaster General and at Penn’s Pennsylvania Hospital in Center City.
Fox Chase was the next biggest center in the region for the relatively new treatment that Penn scientist Carl June and his research teams helped develop. For the fiscal year that ended June 30, 2025, Fox Chase had 21 inpatient cases and 67 outpatient cases, the center said.
In the Penn system, certain kinds of bone marrow transplants also used to be available only at HUP. “Now we do them at HUP and Pennsylvania Hospital,” Vonderheide said.
Even the most complicated pancreatic surgeries are going to be done at Princeton, in conjunction with experts at HUP, Vonderheide said. Penn held a ceremonial groundbreaking Monday for the hospital’s $295 million cancer center.
Remaining only at HUP are bone marrow transplants that use another person’s cells to treat blood cancers, Vonderheide said. HUP performed 118 of those so-called allogeneic bone marrow transplants on the top floor of its $1.6 billion patient pavilion, now known as the Clifton Center.
Pennsylvania’s next-biggest provider of the treatment was Hershey Medical Center, near Harrisburg, with 71, according to state data.
window.addEventListener(“message”,function(a){if(void 0!==a.data[“datawrapper-height”]){var e=document.querySelectorAll(“iframe”);for(var t in a.data[“datawrapper-height”])for(var r,i=0;r=e[i];i++)if(r.contentWindow===a.source){var d=a.data[“datawrapper-height”][t]+”px”;r.style.height=d}}});
Penn started offering proton therapy at HUP in 2010, and expanded its availability in the last three years to Lancaster General and Voorhees, through a joint venture with Virtua Health. Those two centers only have one proton machine each, compared to five at HUP.
It’s a type of radiation that is designed to precisely target tumors and do less damage to surrounding tissues. That makes the treatment, which costs more, particularly helpful for children, and it is proving beneficial for treating certain neck and throat cancers.The use of proton therapy for the more common prostate cancer has been more controversial.
Penn’s fourth proton center, with two machines, is under construction and is expected to open at Presbyterian in late 2027. When that $224 million center opens, Penn will have more proton treatment rooms than the entire West Coast, said Jim Metz, chair of radiation oncology at Penn.
Currently about 10% of Penn’s roughly 10,000 annual radiation oncology patients are treated with protons, though it’s a higher percentage at locations with proton machines, Penn said.
Penn officials have noted that some cancer patients come to Penn for proton therapy. Even when it’s not appropriate for them, they tend to stay within Penn. “We have seen, when we build protons, our market share increases, ” Metz said.
Editor’s note: This article has been updated with more recent Fox Chase data.