All the great Batman stories pitch the villain (more often, villains) as largely sympathetic humans driven to criminal insanity by some combination of the default cruelty, economic desperation, and social injustice that plagues American life. Think Alan Moore’s The Killing Joke, where the Joker is given the backstory of a blue-collar factory worker turned failed stand-up comedian who turns to crime to support his pregnant wife and winds up falling into the fabled primordial chemical vat as a result. As Oz and Sofia begin their bid for dual crime lords of Gotham in earnest, The Penguin’s third episodemakes the best case for the show so far by framing the proceedings in Victor’s tragic henchman origin story. The son of first-generation migrants, Victor Aguilar lost his entire family in the citywide flood from the Riddler’s attack.
“You act like wanting more is a bad thing, but don’t you want a better life than this?” This was the final sentiment Victor left with his dad before he stormed out of their apartment to hang out with his friends. Now, firmly under the Penguin’s wing, he’s seeing firsthand what his father already knew but never had the opportunity to explain: In Gotham — the dark-comic apotheosis of all American cities — the road from have not to have requires you get your hands real dirty.
Victor isn’t too keen on meeting up with, let alone driving around, Sofia “The Hangman” Falcone when he and Oz take a breather at Oz’s pad. But Oz reels him in with a bygones-be-bygones-type dismissal of the whole graveyard incident from the previous episode, plus a $1,000 stack of bills for his trouble. When Sofia arrives — exhibiting her destabilizing mix of cool and twitchy — Victor gets an even clearer view of his boss in relation to the people he’s working for and trying to overthrow. Does Oz Cobb really have what it takes to beat a shrewd psycho killer like Sofia?
Victor hangs back at Oz’s place while Oz and Sofia go down to the docks to have a look at Alberto’s big mystery shipment. Turns out it was more Sofia’s shipment than Alberto’s. The shipment is from Arkham State Hospital, which means it was more her game from the get-go. Upon first glance at this warehouse mushroom-growing operation, Oz points out that you can get shrooms from any dorm room in Gotham. Well, these shrooms are less psychedelic than they are party-drug euphoric. It’s the red sap that the spores produce, not the mushroom itself. They call it Bliss.
Sofia ignores Oz when he points out she must’ve been put on this stuff at Arkham. Bliss wasn’t much of a “party” for her. But they have a small test batch ready to go, and it’s Oz’s time to shine: find Sofia a distributor and they’ll paint the town red. Consider my concerns from the last episode that Sofia bought Oz’s setup too easily, mostly assuaged, thanks to Cristin Milioti’s pitch-perfect performance — showing in the eyes and the deadpan delivery of the odd morbid quip that she doesn’t trust Oz quite yet. The path he’s laid out for them is still a little too convenient to be believed. This Bliss trial run is actually a trial run of his true loyalties.
Back at Oz’s place, Victor is getting reacquainted with his old flame, Graciela, last seen the night of the Riddler attack. She offers Victor a new way out of his budding life in organized crime. She’s leaving the city on a bus tomorrow night, and Victor seems all but sold on the idea — held back by a Stockholm syndrome mix of fear and loyalty to Oz.
The next morning, Oz takes Sofia to Chinatown to meet with Link Tsai, his Triad deputy homie. The Falcones pushed the Triads out of the drug trade, so Sofia isn’t too keen on this get-together, but Oz argues they need some additional institutional support from someone who won’t rat them out. They entice Link with a vile of Bliss, but he hesitates at the thought of participating in a coup right in the middle of a gang war. “What we got goin’ is more of a corporate restructure,” Oz argues. Plus, he and Sofia have support from the inside in Johnny Viti. That last part’s a lie, of course, but Link seems to buy it when Sofia vouches for Viti’s support. Only catch is, Viti is going to have to call Link’s boss, Mr. Zhao, and confirm he’s in on the “restructure.” Time to play the blackmail-photo card.
Meanwhile, Victor is out in the car getting a taste of how the law really works in Gotham and proving himself adept at bending it to his will in the process. A cop, suspicious of a young kid of color sitting in the driver’s seat of this tacky, expensive plum monstrosity, pulls him out to talk. Victor sees the opportunity to bribe the cop with the $1,000 stack Oz gave him the previous night. Just when you think this kid’s going to get out, they pull him back in (sorry, couldn’t be helped).
In the next scene, Oz adds to the mounting pressure on Vic to keep rollin’ with the Penguin. While staking out a not-so-impromptu meeting with Luca’s wife, Tina, at a restaurant, Oz demonstrates the same back-and-forth emotional gaslighting that his mom clearly raised him on, without even really being conscious of it. He tells Victor to speak up for himself more, “take up space,” and raises a toast to Victor’s dad at the end of a conversation about his cooking. Victor seems to know he’s being manipulated on some level, but he also believes the camaraderie is genuine. Oz is a dangerous guy, but a dangerous guy who’s been made to feel small his whole life nonetheless — his call to carry yourself with pride through the halls of high society is empowering.
Oz shows his ass a bit when he and Sofia crash Johnny Viti and Tina’s afternoon hotel meet-up. Viti’s insults set him off real quick. “People keep the Penguin around as entertainment because everybody knows that you’re a goddamn joke,” Viti says. Oz is on top of him in an instant, shoving a phone in his mouth to the point of almost breaking his jaw. He demands Viti make the call and storms out of the room. Sofia doesn’t seem impressed.
That night, Oz introduces Bliss to a test group of clubgoers via Eve and her girls. Sofia observes the intimate vibes between Eve and Oz, which seems to be enough to bring Oz’s alibi into question from the night of Alberto’s murder. She’s also suspicious of how comfortably Oz seems to be stepping into an authoritative role in their scheme.
“I am not some ignorant kid that you can play with anymore,” Sofia reminds him. “Zhao is here to see me, not my former driver. Remember that.” But reminding Oz of his lowly origins in her family’s organization doesn’t seem to shake him from coming on strong with big promises at the meeting with Zhao. They’ve already raised the price on Bliss twice, and it hasn’t affected sales, he argues emphatically. “Big, BIG projections,” he’s practically saying, doing his best Trump in the heat of the deal. But Sofia takes control of the conversation and makes a case for moving this new drug from a place of harrowing but veiled personal experience: “Look at them,” she says. “Their city has been decimated. Our former mayor was assassinated. A madman flooded our streets. People lost their homes, their families. The world as they knew it is gone.”
Bliss goes around the club in a run-of-the-mill club-drug montage, slowly morphing into what you might consider a refraction of a Scarecrow fear-induced hallucination (the whole red-goo party drug disseminating from Arkham Asylum has a Scarecrow vibe to it in general, now that I’m thinking about it). The beats of the club trigger Victor’s memory of the Riddler’s attack — flashes of explosions and bodies endlessly rushing through the water.
Sofia drives a hard-line bargain now that Zhao knows what they have — either make the deal or don’t. She doesn’t really care who their “sales reps” are. And it has Oz stressed as hell when he walks in on Victor trying to ditch him for his girlfriend at the bus station. Victor tries to do everything Oz wants him to do, he pleads, but he still feels the pull of the emotional fracture that leads every Gotham villain further down the path of criminal madness. Oz takes this mighty personally. He pulls his gun on Victor like: You feel like I have a gun to you when I’ve given you so much opportunity? Well, yeah, dude, it’s hard not to feel like you have a gun to my head when you, um, have an actual gun to my head. Anyway, Oz gives Victor one of those double-sided “go in peace” type speeches: If Victor wants a nothing life, good news, he’s already got one.
Victor bolts in the Plum Penguin Special, leaving Oz to face an increasingly suspicious Sofia all alone. The deal is done, and the triads are in, but Sofia isn’t very excited about it. She’s accurately sized him up and knows he can’t be trusted. So Oz makes another play for emotional sympathies. Fine, Oz confesses, he fucked her over back when he was her driver — played a role in getting her locked up in Arkham. But he never imagined Carmine would let that happen to his own flesh and blood.
Sofia isn’t having it and cuts him down to size once more. He ratted on her, and “for what? So you could become a capo? You’re not even a made man.” It was worth it, Oz finally admits. And for a guy like him — a poor kid from Gotham with no other recourse but to fight your way off the streets — he made out like a fucking bandit. He doesn’t regret what he has, but he’s never going to live down what happened to Sofia. “You meant something to me,” he says, and there’s a hint of honesty to it. Sofia seems to recognize that honesty, but she also seems to know that “meaning something” to Oz Cobb doesn’t mean he won’t still slit your throat for the contents of your pocketbook.
All in time for Nadia Maroni to show up and put a gun to his head. The Maronis have been watching him, which means they know he’s left them in the lurch, playing both sides of the gang war for fools. This will likely seal the deal for Sofia as well. Her main competitor is showing up, demanding answers from her new partner? It’s the most sus thing she’s had to take from this guy yet. Meanwhile, Victor is watching Graciela get on the bus out of town without him, unable to move under the weight of the path that’s already gripped him. The only way out of oblivion is by going all the way: no choice but to take up the most space and reap the big reward, no matter the cost.
Victor Aguilar turns around and drives back to the club to find Oz and Sofia on their knees at gunpoint, sealing his fate as the Penguin’s driver “Vic” in a split second. He rams into Nadia’s gunman and makes off with Oz. He’s figured out what his father tried to tell him the hard way: Sometimes, a mere glance at a devil’s bargain is enough to strike a signature and a seal.
I’ve always dug the contention the Batman comics make between the more traditional organized crime families like the Falcones and Maronis and the masked-and-maimed psycho-villains of Gotham City like Two-Face and Scarecrow as a kind of horrific comic-book reflection of crime mutating across generations as the American superstructure degenerates. In the final moments of its third episode, The Penguin finds its signature rhythms and makes a clearer invitation to join its wavelength — sufficiently meeting the awkward demand of an “IP-based HBO crime show” while telling its own type of broad, exaggerated but meaningful American criminal origin story. Gotham is America, America is the world, and if Oz is to be believed, the world could be yours.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(135),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"4":4,"12":12,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(406),Fingerprint2=require(408),DS=require(407),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(406),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"406":406,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]