The history that Princess Shireen of House Baratheon is reading throughout last night’s episode of Game of Thrones is called The Dance of Dragons. It’s an ironic name, in that it uses a word commonly associated with beauty, elegance, and form to describe a brutal civil war that ended, the GOT Wiki explains, with one Targaryen feeding his sister to a dragon while her son was made to watch. (In this, it’s a lot like the title of the show itself, which casts the bloody, globe-spanning conflict we’ve been watching for five seasons now as a pastime, a child’s diversion.)
But a dance is also something performed for an audience, which makes it an apt title for the episode. As Stannis, his wife, and his army watched Princess Shireen burn to death on a sacrificial stake, director David Nutter layered in the roaring, bloodlust applause of the Meereneese fighting pit. Performance has always been a major theme in the show: Good rulers use spectacle to cement their positions, and maintaining the upper hand usually depends on keeping your mask on straight. In the outside world, too, we viewers are constantly asked to consider what role we play as an audience: Are we witnesses or voyeurs? Participants or perverts?
Shireen’s death has been foretold for a long time now, but the foreknowledge didn’t dull the pain or the horror of the actual scene, which packed an emotional wallop almost as hard as the Red Wedding’s (which Nutter also directed). And, like the Red Wedding, we were made to pay witness to the atrocity.
The scene was played, as my friend put it, for maximum hurts. (Her husband made her fast-forward through it, and I imagine similar tussles played out in a lot of living rooms.) Immediately prior, Stannis comes to Shireen in her tent and they talk about the book she’s reading. It’s a very intimately staged scene, cutting between close-ups of father and daughter’s faces. Stannis asks her which of the Targaryen siblings she would have sided with; Shireen says she wouldn’t have chosen either, because it’s choosing sides that makes people horrible. But despite her (wise? Naïve?) wish to escape the game all together, Shireen has been touched by the some of the same sense of destiny that has possessed her father. She tells him that she wants to help him — because she is Princess Shireen of House Baratheon, and his daughter. That scene between the two of them in episode four has probably stuck with me more than any other moment this season, and now, knowing that the moment was both her exaltation and her downfall, it’s even harder to forget.
As Shireen is walked through the camp, she clutches the stag Davos carved for her — the symbol of her house and her lineage, but also a thing kings hunt. Has anything on the show been more chilling than Melisandre assuring the princess that “it will all be over soon”? It is, of course, and it isn’t. Shireen is dragged to the pyre, and in her final moments, stops calling for her father and turns to Selyse. Something breaks inside the queen, but it’s too late; she runs to her daughter but is held back by her husband’s soldiers. We see her mother’s face, and then, for a terrible moment, her father’s, all haggard and lost. Shireen’s actual death may have occurred offscreen, but her screams were insistent, rattling in our ears and guts as they built to an animal-like wail.
I’ve been turning this scene over and over in my mind, though I think I come down on the side of it working for me, despite — or perhaps because of — its horribleness. If Shireen was going to die at the hands of her own father, if he was going to make that terrible Greek choice, it seemed appropriate to make those of us in the audience feel it, too, on a visceral level. (Horror comes from the Latin horrere: to tremble, to shudder.) It’s still a very open question whether her death will accomplish anything for Stannis’s military campaign — and that open question is part of the horror — but it feels like it’s explored some new emotional territory here, in ways that the Sansa rape didn’t. Stannis has driven a stake through his own heart, and if he wins the Iron Throne after all, the memory of this pyre will make the victory a Pyrrhic one. (And here I should pause and say that none of this would have worked if Stephen Dillane and Kerry Ingram hadn’t been so good, for so long.)
When Stannis speaks with Shireen, he tells her that sometimes a person has to choose. And in this episode, each of the major subplots featured a character choosing which path of violence they will walk.
In Dorne, Prince Doran forces Ellaria Sand to drop her vendetta against the Lannisters. Over the course of three short scenes, Ellaria goes from bitterly pouring out her wine when asked to raise a glass to King Tommen, to crying as she knelt to kiss Doran’s ring, to approaching Jaime in something like friendship. (It’s an extreme swing, but Indira Varma’s great performance smooths out some of the rougher writing edges.) Ellaria tells Jaime she knows the truth about him and Cersei, and points out that 100 years ago, nobody would have blinked an eye at their relationship. The rules about whom we are allowed to love are always shifting, she notes, just as enemies pass in and out of fashion. As she leaves him, she admits that his daughter had no part in what happened to Oberyn, and that it’s possible Jaime himself is innocent there, as well.
It’s a radical thing in Game of Thrones to suggest that vengeance is a thing you might choose to release. Most characters aren’t ready to take that step unless marriages or vast amounts of money are involved (and sometimes not even then). In Braavos, Arya chooses the path Ellaria seems to forego. She ditches her assignment to poison the Thin Man when she spies Meryn Trant, who’s heading up the muscle in Mace Tyrell’s mission to the Iron Bank. Arya’s commitment to her training has always seemed like something of a displaced passion, a way of rechanneling her anger and helplessness toward something productive as opposed to a genuine devotion to the Many-Faced God. And upon seeing Meryn Trant, her desire for retribution outs itself. Ser Meryn, as you may recall if your memory is better than mine, is one of the names on Arya’s Murder Rosary, since she believes he killed Syrio Forel. She follows him to a brothel, still disguised as Lanna the Oyster Girl, and watches as he swipes left on a bunch of beautiful women because they’re “too old,” leading the proprietress to bring out a young servant girl before agreeing to his demand for a “fresh one” the following night. Meryn spots Arya but doesn’t seem to recognize her, as braids are very effective camouflage.
Upon returning to the House of Black and White, she lies to Not-Jaqen that the Thin Man wasn’t hungry, and he seems to accept the lie, though the look on his face after their exchange suggests otherwise. Considering that Not-Jaqen seemed to know Arya would run into the Thin Man on her first outing as Lanna, I’m assuming that he also knows her attention has shifted. Is it possible that this is all leading to a crazy reveal that Not-Jaqen is actually Syrio Forel? We never saw Syrio die, after all, and he was Braavosi. If so, that would make the somewhat out-of-left-field reappearance of Meryn Trant in Arya’s story line make a lot more sense. Meryn’s crime happened so long ago, it’s not all that emotionally satisfying to contemplate Arya’s revenge now, all the way out in season five, but a beloved teacher and trusted adult from her innocent, pre-dead Ned days could be very moving.
The final third of the episode, a long scene at the Great Games of Meereen, ties together these themes of performance, violence, and choice. It opens with Daenerys, Daario, Hizdahr, and Tyrion sitting in the best box seats in a massive arena full of chanting fans. These elites are discussing whether killing and cruelty are necessary conditions for greatness, and though they’re sitting at a high remove from any actual violence (for the time being), the fact that we segue here directly from the Shireen scene points out these debates are never academic, as Tyrion also reminds us when he says, “There’s always been more than enough death in the world for my taste. I can do without it in my leisure time.” Daenerys bristles at Hizdahr’s defense of the fighting pits as a tradition of the great city of Meereen, and even more so at his retort that her attitude toward her people’s lives is an inherently paternalistic one — she believes she knows the “correct” way for her subjects to die better than they themselves do. (I thought, here, of the long exchanges between Jon Snow and Mance Rayder, when Mance argued that the Free Folk were better off dying free than living safe, without having undertaken any sort of opinion poll.)
Dany is caught in the queenly role she’s constructed for herself, forced to play her part in the games she despises: The queen’s clap, after all, commences the fighting. But other than that, the queen’s role in this spectacle is that of an illustrious bystander. She cringes, but watches nonetheless. When Jorah Mormont reveals himself in the pit and seems on the verge of a fatal defeat, Tyrion tells her that she can stop it, but Hizdahr, the keeper of the rules, protests that she cannot — and she remains frozen, despite the mounting pain of seeing Jorah suffer.
Jorah beats the other men in the ring, and as he looks up at Daenerys, his expression suddenly turns cruel and he throws his lance at her — striking down a Son of the Harpy who was standing behind her. The arena erupts into chaos, as the Sons of the Harpy start chanting something in a foreign language that I can only imagine translates to, When you’re a Harpy, you harp all the way! Hizdahr is killed. The men spring into action. Tyrion kills a Harpy about to attack Missandei. Jorah helps Dany down (touching her hand, as eagle-eyed commenter adara notes, despite knowing he has a contractable case of greyscale), and though they try to escape, Dany’s small band ends up trapped in the middle of the fighting pit — until a loud screech silences the throng and Drogon alights in the ring.
Yes, the arrival of the dragon is pretty wicked sweet. But what’s interesting to me is the way Drogon’s arrival unleashes something in Daenerys — something thrilling and a little uncanny. Up until this point in the scene, Daenerys the Queen is a thing to be protected and moved about, like one of Stannis’s martial chess pieces. Unlike every other competitor in the game of thrones, who would never be taken seriously as monarch material unless they could swing a sword, Daenerys doesn’t get physical. She’s the still white spot in the middle of the blur. But then Drogon arrives, and she steps into the action: She marches forward to pull spears out of his side and stares him down when he rips a full-throated roar in her face. Then she climbs on him and takes flight. The look on her face doesn’t suggest that she’s doing it to demonstrate her power, or to establish dominance and thus quell the riot. She just … flies away. Away from her supporters, away from her enemies, away from her people — some of whom are choosing the way they will die, and many who are not. The path she chooses is the path of not choosing, and it’s a cruel fantasy ride for a queen to take. What sort of spectacle will await her when she returns?
See you all next week for the season-five finale. I’ll be sure to have some fresh oysters for your cockstand.
Some final thoughts and questions:
Hizdahr shows up late to the Great Games, and when Dany asks where he’s been he says, “Just making sure everything is in order.” Does that mean he helped orchestrate the Harpy attack, despite becoming a victim to it?
Daenerys’s dragon collar: gorgeous.
Another episode, another pointed appearance of grim, angry Olly. Does an assassination attempt lie ahead at Castle Black?
The exchanges between Tycho Nestoris and Mace Tyrell in Braavos were really great; I loved watching Tycho witheringly deflect each of Mace’s attempts at chumminess. (Though I love watching Mark Gatiss in everything.)
I still don’t get what’s going on with the Sand Snakes.
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(3),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(136),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,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),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(408),_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,"408":408,"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","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.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();
// ]]