<div dir="ltr"><div class="markdown-here-wrapper" style><p style="margin:1.2em 0px!important">On Thu, Jun 19, 2014 at 8:48 PM, Brendan Eich <<a href="mailto:brendan@mozilla.org" target="_blank">brendan@mozilla.org</a>> wrote:</p>

<p style="margin:1.2em 0px!important"></p><div class="markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="">Domenic Denicola wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
The transitional era will be a particularly vulnerable time for TC39's module design, however: as long as people are using transpilers, there's an opportunity for a particularly well-crafted, documented, and supported transpiler to give alternate semantics grounded in the community's preferred model, and win over enough of an audience to bleed the life out of TC39's modules.<br>

</blockquote>
<br></div>
You're doing a disservice to everyone here by implying that such a transpiler could trump native modules as implemented per the normative ES6 spec in Chakra, JSC, SpiderMonkey, and V8.<br>
<br>
Idle speculations are not even worth betting on, but filling es-discuss with tendentious idle speculations is worse. Cut it out.</blockquote><p></p></div><p style="margin:1.2em 0px!important"></p>
<p style="margin:1.2em 0px!important">Domenic may have erred by conflating many different constituencies into a monolithic, definite version of “the community”, but I don’t think his characterization of a “transitional era” or the risks therein are tendentious. Some people on es-discuss (including, at times, Domenic) seem to assume that Node.js developers will embrace ES6 part and parcel, when the feedback I receive on a daily basis is very different. (As I’m primarily a Node developer, I can’t speak to the concerns of other groups within the broader JS community, but I do think the feedback coming from e.g. James Burke is valuable here.)</p>

<p style="margin:1.2em 0px!important">I bring up these concerns not because I agree with them, but because I feel awkward about the disconnect between the message I see coming out of TC39 and the response from my friends and peers. I’m also concerned about schisms happening within the Node community, especially if the team developing the platform and the broader developer community find themselves at odds when it comes to module systems. That said, there are two overarching themes that tend to come up in discussions among Node developers when the ES6 module system is discussed:</p>

<h3 id="1-node-s-module-system-is-frozen-" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.3em">1. Node’s module system is frozen.</h3>
<p style="margin:1.2em 0px!important">There has long been an ideology within Node that there will be a point at which it is “finished”, and at that point the platform / kernel will have a frozen API and all of the innovation around Node will happen in the module ecosystem. The forcing function for this is Node’s <a href="http://nodejs.org/api/documentation.html#documentation_stability_index">stability index</a>, which is a ratchet much like the ES7 design process, where once a piece of the platform attains a higher level of stability, it can’t move to a lower one.</p>

<p style="margin:1.2em 0px!important">The module system is one of the few pieces of Node that has the highest, locked level of stability. This is in part because it’s the piece that connects Node to npm and the module ecosystem. It has also long been the locus of <a href="https://github.com/joyent/node/issues/6960">long and difficult debates</a>, and getting the module system to the locked state was a key move in fostering the active growth of the Node ecosystem, even though (as that thread shows) it clearly still has unresolved issues.</p>

<p style="margin:1.2em 0px!important">I can see a future in which ES6 modules are a part of V8 and therefore included in Node, and also where somebody builds a module loader that maps ES6 modules onto the Node module loader. Projects like <a href="http://jspm.io/"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;display:inline;background-color:rgb(248,248,248)">jspm</code></a> are interesting in this regard, but this is all being done in the context of a “finished” module system, so there’s a deep skepticism (sometimes bordering on dismissiveness) on the part of Node’s core development team that moving Node to using ES6 modules by default is a thing that could even happen.</p>

<h3 id="2-node-s-modules-are-good-enough-for-all-use-cases-" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.3em">2. Node’s modules are good enough for all use cases.</h3>
<p style="margin:1.2em 0px!important">This is obviously a subjective statement that’s burdened with a large load of implicit assumptions, but it’s one I see a lot, especially from the community built up around browserify. Node’s core APIs tend to use multi-export because they’re themed grab bags (fs, util, os, etc), but the community has converged on single-export / single-purpose modules as the dominant convention for library development. Because CommonJS modules are just a protocol built atop plain JS objects, Node’s module system is easily flexible enough to support both styles of export, and both are entrenched. Any new proposal that ditches or deprecates either of these styles is therefore nearly guaranteed to cause dismay, which is (I believe) what happened when the notes from the module side discussion from the last face to face started circulating.</p>

<p style="margin:1.2em 0px!important">It also shows how high the bar is set when it comes to the Node community switching module systems. There’s little question in my mind that browser-first developers who aren’t heavily invested in AMD will move en masse to whatever ends up being in ES6 (and I believe that this comprises a majority of working JavaScript developers). I do believe that unless the path from Node to ES6 modules is painless, and unless the Node community sees clear value in making the switch, they’re just not going to bother.</p>

<p style="margin:1.2em 0px!important">Maybe this is fine! Transpilers exist, and browserify isn’t going anywhere. But I see people here evangelizing the new system, and occasionally acting as if they believe that <em>everybody</em> is going to switch to ES6 modules, and that seems very far from being a foregone conclusion to me. The status quo before the last face to face was a very delicate compromise that more or less successfully balanced all the competing requirements from JavaScript’s various constituencies. Therefore, when a new document shows up that proposes knocking out one of the load-bearing members of that compromise, nobody should be surprised when people get upset. (For what it’s worth, I think Dave Herman’s latest proposal is great, especially because it only changes syntax, not semantics.)</p>

<p style="margin:1.2em 0px!important">Domenic has been a big proponent of ES6 within the Node world, and has tended to err on the side of promoting the view that Node core and the Node developer community <em>must</em> adopt ES6 at the risk of getting left behind. I don’t feel like he has a particular axe to grind here, he’s just more attuned to what’s going on in Node than most of the people on this list, and is raising what seems like a pretty tempered version of a widely-held concern. Again, I know the Node world is pretty small in the grand scheme of things, and I don’t want to misrepresent the breadth of the objections, but I do think that the risk of fragmentation is significant, and I would like us to find a way to mitigate that risk if we can.</p>

<p style="margin:1.2em 0px!important">F</p>
<div title="MDH:PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24g
VGh1LCBKdW4gMTksIDIwMTQgYXQgODo0OCBQTSwgQnJlbmRhbiBFaWNoIDxzcGFuIGRpcj0ibHRy
Ij4mbHQ7PGEgaHJlZj0ibWFpbHRvOmJyZW5kYW5AbW96aWxsYS5vcmciIHRhcmdldD0iX2JsYW5r
Ij5icmVuZGFuQG1vemlsbGEub3JnPC9hPiZndDs8L3NwYW4+IHdyb3RlOjxicj48YmxvY2txdW90
ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMHB4IDAuOGV4OyBi
b3JkZXItbGVmdC13aWR0aDogMXB4OyBib3JkZXItbGVmdC1jb2xvcjogcmdiKDIwNCwgMjA0LCAy
MDQpOyBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7IHBhZGRpbmctbGVmdDogMWV4OyI+PGRpdiBj
bGFzcz0iIj5Eb21lbmljIERlbmljb2xhIHdyb3RlOjxicj4KPGJsb2NrcXVvdGUgY2xhc3M9Imdt
YWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDBweCAwLjhleDsgYm9yZGVyLWxlZnQt
d2lkdGg6IDFweDsgYm9yZGVyLWxlZnQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgYm9yZGVy
LWxlZnQtc3R5bGU6IHNvbGlkOyBwYWRkaW5nLWxlZnQ6IDFleDsiPgpUaGUgdHJhbnNpdGlvbmFs
IGVyYSB3aWxsIGJlIGEgcGFydGljdWxhcmx5IHZ1bG5lcmFibGUgdGltZSBmb3IgVEMzOSdzIG1v
ZHVsZSBkZXNpZ24sIGhvd2V2ZXI6IGFzIGxvbmcgYXMgcGVvcGxlIGFyZSB1c2luZyB0cmFuc3Bp
bGVycywgdGhlcmUncyBhbiBvcHBvcnR1bml0eSBmb3IgYSBwYXJ0aWN1bGFybHkgd2VsbC1jcmFm
dGVkLCBkb2N1bWVudGVkLCBhbmQgc3VwcG9ydGVkIHRyYW5zcGlsZXIgdG8gZ2l2ZSBhbHRlcm5h
dGUgc2VtYW50aWNzIGdyb3VuZGVkIGluIHRoZSBjb21tdW5pdHkncyBwcmVmZXJyZWQgbW9kZWws
IGFuZCB3aW4gb3ZlciBlbm91Z2ggb2YgYW4gYXVkaWVuY2UgdG8gYmxlZWQgdGhlIGxpZmUgb3V0
IG9mIFRDMzkncyBtb2R1bGVzLjxicj4KPC9ibG9ja3F1b3RlPgo8YnI+PC9kaXY+CllvdSdyZSBk
b2luZyBhIGRpc3NlcnZpY2UgdG8gZXZlcnlvbmUgaGVyZSBieSBpbXBseWluZyB0aGF0IHN1Y2gg
YSB0cmFuc3BpbGVyIGNvdWxkIHRydW1wIG5hdGl2ZSBtb2R1bGVzIGFzIGltcGxlbWVudGVkIHBl
ciB0aGUgbm9ybWF0aXZlIEVTNiBzcGVjIGluIENoYWtyYSwgSlNDLCBTcGlkZXJNb25rZXksIGFu
ZCBWOC48YnI+Cjxicj4KSWRsZSBzcGVjdWxhdGlvbnMgYXJlIG5vdCBldmVuIHdvcnRoIGJldHRp
bmcgb24sIGJ1dCBmaWxsaW5nIGVzLWRpc2N1c3Mgd2l0aCB0ZW5kZW50aW91cyBpZGxlIHNwZWN1
bGF0aW9ucyBpcyB3b3JzZS4gQ3V0IGl0IG91dC48L2Jsb2NrcXVvdGU+PGRpdj48YnI+PC9kaXY+
PGRpdj5Eb21lbmljIG1heSBoYXZlIGVycmVkIGJ5IGNvbmZsYXRpbmcgbWFueSBkaWZmZXJlbnQg
Y29uc3RpdHVlbmNpZXMgaW50byBhIG1vbm9saXRoaWMsIGRlZmluaXRlIHZlcnNpb24gb2YgInRo
ZSBjb21tdW5pdHkiLCBidXQgSSBkb24ndCB0aGluayBoaXMgY2hhcmFjdGVyaXphdGlvbiBvZiBh
ICJ0cmFuc2l0aW9uYWwgZXJhIiBvciB0aGUgcmlza3MgdGhlcmVpbiBhcmUgdGVuZGVudGlvdXMu
IFNvbWUgcGVvcGxlIG9uIGVzLWRpc2N1c3MgKGluY2x1ZGluZywgYXQgdGltZXMsIERvbWVuaWMp
IHNlZW0gdG8gYXNzdW1lIHRoYXQgTm9kZS5qcyBkZXZlbG9wZXJzIHdpbGwgZW1icmFjZSBFUzYg
cGFydCBhbmQgcGFyY2VsLCB3aGVuIHRoZSBmZWVkYmFjayBJIHJlY2VpdmUgb24gYSBkYWlseSBi
YXNpcyBpcyB2ZXJ5IGRpZmZlcmVudC4gKEFzIEknbSBwcmltYXJpbHkgYSBOb2RlIGRldmVsb3Bl
ciwgSSBjYW4ndCBzcGVhayB0byB0aGUgY29uY2VybnMgb2Ygb3RoZXIgZ3JvdXBzIHdpdGhpbiB0
aGUgYnJvYWRlciBKUyBjb21tdW5pdHksIGJ1dCBJIGRvIHRoaW5rIHRoZSBmZWVkYmFjayBjb21p
bmcgZnJvbSBlLmcuIEphbWVzIEJ1cmtlIGlzIHZhbHVhYmxlIGhlcmUuKTwvZGl2PjxkaXY+PGJy
PjwvZGl2PjxkaXY+SSBicmluZyB1cCB0aGVzZSBjb25jZXJucyBub3QgYmVjYXVzZSBJIGFncmVl
IHdpdGggdGhlbSwgYnV0IGJlY2F1c2UgSSBmZWVsIGF3a3dhcmQgYWJvdXQgdGhlIGRpc2Nvbm5l
Y3QgYmV0d2VlbiB0aGUgbWVzc2FnZSBJIHNlZSBjb21pbmcgb3V0IG9mIFRDMzkgYW5kIHRoZSBy
ZXNwb25zZSBmcm9tIG15IGZyaWVuZHMgYW5kIHBlZXJzLiBJJ20gYWxzbyBjb25jZXJuZWQgYWJv
dXQgc2NoaXNtcyBoYXBwZW5pbmcgd2l0aGluIHRoZSBOb2RlIGNvbW11bml0eSwgZXNwZWNpYWxs
eSBpZiB0aGUgdGVhbSBkZXZlbG9waW5nIHRoZSBwbGF0Zm9ybSBhbmQgdGhlIGJyb2FkZXIgZGV2
ZWxvcGVyIGNvbW11bml0eSBmaW5kIHRoZW1zZWx2ZXMgYXQgb2RkcyB3aGVuIGl0IGNvbWVzIHRv
IG1vZHVsZSBzeXN0ZW1zLiBUaGF0IHNhaWQsIHRoZXJlIGFyZSB0d28gb3ZlcmFyY2hpbmcgdGhl
bWVzIHRoYXQgdGVuZCB0byBjb21lIHVwIGluIGRpc2N1c3Npb25zIGFtb25nIE5vZGUgZGV2ZWxv
cGVycyB3aGVuIHRoZSBFUzYgbW9kdWxlIHN5c3RlbSBpcyBkaXNjdXNzZWQ6PC9kaXY+PGRpdj48
YnI+PC9kaXY+PGRpdj4jIyMgMS4gTm9kZSdzIG1vZHVsZSBzeXN0ZW0gaXMgZnJvemVuLjwvZGl2
PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlcmUgaGFzIGxvbmcgYmVlbiBhbiBpZGVvbG9neSB3aXRo
aW4gTm9kZSB0aGF0IHRoZXJlIHdpbGwgYmUgYSBwb2ludCBhdCB3aGljaCBpdCBpcyAiZmluaXNo
ZWQiLCBhbmQgYXQgdGhhdCBwb2ludCB0aGUgcGxhdGZvcm0gLyBrZXJuZWwgd2lsbCBoYXZlIGEg
ZnJvemVuIEFQSSBhbmQgYWxsIG9mIHRoZSBpbm5vdmF0aW9uIGFyb3VuZCBOb2RlIHdpbGwgaGFw
cGVuIGluIHRoZSBtb2R1bGUgZWNvc3lzdGVtLiBUaGUgZm9yY2luZyBmdW5jdGlvbiBmb3IgdGhp
cyBpcyBOb2RlJ3MgW3N0YWJpbGl0eSBpbmRleF0oaHR0cDovL25vZGVqcy5vcmcvYXBpL2RvY3Vt
ZW50YXRpb24uaHRtbCNkb2N1bWVudGF0aW9uX3N0YWJpbGl0eV9pbmRleCksIHdoaWNoIGlzIGEg
cmF0Y2hldCBtdWNoIGxpa2UgdGhlIEVTNyBkZXNpZ24gcHJvY2Vzcywgd2hlcmUgb25jZSBhIHBp
ZWNlIG9mIHRoZSBwbGF0Zm9ybSBhdHRhaW5zIGEgaGlnaGVyIGxldmVsIG9mIHN0YWJpbGl0eSwg
aXQgY2FuJ3QgbW92ZSB0byBhIGxvd2VyIG9uZS48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRo
ZSBtb2R1bGUgc3lzdGVtIGlzIG9uZSBvZiB0aGUgZmV3IHBpZWNlcyBvZiBOb2RlIHRoYXQgaGFz
IHRoZSBoaWdoZXN0LCBsb2NrZWQgbGV2ZWwgb2Ygc3RhYmlsaXR5LiBUaGlzIGlzIGluIHBhcnQg
YmVjYXVzZSBpdCdzIHRoZSBwaWVjZSB0aGF0IGNvbm5lY3RzIE5vZGUgdG8gbnBtIGFuZCB0aGUg
bW9kdWxlIGVjb3N5c3RlbS4gSXQgaGFzIGFsc28gbG9uZyBiZWVuIHRoZSBsb2N1cyBvZiBbbG9u
ZyBhbmQgZGlmZmljdWx0IGRlYmF0ZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9p
c3N1ZXMvNjk2MCksIGFuZCBnZXR0aW5nIHRoZSBtb2R1bGUgc3lzdGVtIHRvIHRoZSBsb2NrZWQg
c3RhdGUgd2FzIGEga2V5IG1vdmUgaW4gZm9zdGVyaW5nIHRoZSBhY3RpdmUgZ3Jvd3RoIG9mIHRo
ZSBOb2RlIGVjb3N5c3RlbSwgZXZlbiB0aG91Z2ggKGFzIHRoYXQgdGhyZWFkIHNob3dzKSBpdCBj
bGVhcmx5IHN0aWxsIGhhcyB1bnJlc29sdmVkIGlzc3Vlcy48L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PkkgY2FuIHNlZSBhIGZ1dHVyZSBpbiB3aGljaCBFUzYgbW9kdWxlcyBhcmUgYSBwYXJ0IG9m
IFY4IGFuZCB0aGVyZWZvcmUgaW5jbHVkZWQgaW4gTm9kZSwgYW5kIGFsc28gd2hlcmUgc29tZWJv
ZHkgYnVpbGRzIGEgbW9kdWxlIGxvYWRlciB0aGF0IG1hcHMgRVM2IG1vZHVsZXMgb250byB0aGUg
Tm9kZSBtb2R1bGUgbG9hZGVyLiBQcm9qZWN0cyBsaWtlIFtganNwbWBdKGh0dHA6Ly9qc3BtLmlv
LykgYXJlIGludGVyZXN0aW5nIGluIHRoaXMgcmVnYXJkLCBidXQgdGhpcyBpcyBhbGwgYmVpbmcg
ZG9uZSBpbiB0aGUgY29udGV4dCBvZiBhICJmaW5pc2hlZCIgbW9kdWxlIHN5c3RlbSwgc28gdGhl
cmUncyBhIGRlZXAgc2tlcHRpY2lzbSAoc29tZXRpbWVzIGJvcmRlcmluZyBvbiBkaXNtaXNzaXZl
bmVzcykgb24gdGhlIHBhcnQgb2YgTm9kZSdzIGNvcmUgZGV2ZWxvcG1lbnQgdGVhbSB0aGF0IG1v
dmluZyBOb2RlIHRvIHVzaW5nIEVTNiBtb2R1bGVzIGJ5IGRlZmF1bHQgaXMgYSB0aGluZyB0aGF0
IGNvdWxkIGV2ZW4gaGFwcGVuLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+IyMjIDIuIE5vZGUn
cyBtb2R1bGVzIGFyZSBnb29kIGVub3VnaCBmb3IgYWxsIHVzZSBjYXNlcy48L2Rpdj48ZGl2Pjxi
cj48L2Rpdj48ZGl2PlRoaXMgaXMgb2J2aW91c2x5IGEgc3ViamVjdGl2ZSBzdGF0ZW1lbnQgdGhh
dCdzIGJ1cmRlbmVkIHdpdGggYSBsYXJnZSBsb2FkIG9mIGltcGxpY2l0IGFzc3VtcHRpb25zLCBi
dXQgaXQncyBvbmUgSSBzZWUgYSBsb3QsIGVzcGVjaWFsbHkgZnJvbSB0aGUgY29tbXVuaXR5IGJ1
aWx0IHVwIGFyb3VuZCBicm93c2VyaWZ5LiBOb2RlJ3MgY29yZSBBUElzIHRlbmQgdG8gdXNlIG11
bHRpLWV4cG9ydCBiZWNhdXNlIHRoZXkncmUgdGhlbWVkIGdyYWIgYmFncyAoZnMsIHV0aWwsIG9z
LCBldGMpLCBidXQgdGhlIGNvbW11bml0eSBoYXMgY29udmVyZ2VkIG9uIHNpbmdsZS1leHBvcnQg
LyBzaW5nbGUtcHVycG9zZSBtb2R1bGVzIGFzIHRoZSBkb21pbmFudCBjb252ZW50aW9uIGZvciBs
aWJyYXJ5IGRldmVsb3BtZW50LiBCZWNhdXNlIENvbW1vbkpTIG1vZHVsZXMgYXJlIGp1c3QgYSBw
cm90b2NvbCBidWlsdCBhdG9wIHBsYWluIEpTIG9iamVjdHMsIE5vZGUncyBtb2R1bGUgc3lzdGVt
IGlzIGVhc2lseSBmbGV4aWJsZSBlbm91Z2ggdG8gc3VwcG9ydCBib3RoIHN0eWxlcyBvZiBleHBv
cnQsIGFuZCBib3RoIGFyZSBlbnRyZW5jaGVkLiBBbnkgbmV3IHByb3Bvc2FsIHRoYXQgZGl0Y2hl
cyBvciBkZXByZWNhdGVzIGVpdGhlciBvZiB0aGVzZSBzdHlsZXMgaXMgdGhlcmVmb3JlIG5lYXJs
eSBndWFyYW50ZWVkIHRvIGNhdXNlIGRpc21heSwgd2hpY2ggaXMgKEkgYmVsaWV2ZSkgd2hhdCBo
YXBwZW5lZCB3aGVuIHRoZSBub3RlcyBmcm9tIHRoZSBtb2R1bGUgc2lkZSBkaXNjdXNzaW9uIGZy
b20gdGhlIGxhc3QgZmFjZSB0byBmYWNlIHN0YXJ0ZWQgY2lyY3VsYXRpbmcuPC9kaXY+PGRpdj48
YnI+PC9kaXY+PGRpdj5JdCBhbHNvIHNob3dzIGhvdyBoaWdoIHRoZSBiYXIgaXMgc2V0IHdoZW4g
aXQgY29tZXMgdG8gdGhlIE5vZGUgY29tbXVuaXR5IHN3aXRjaGluZyBtb2R1bGUgc3lzdGVtcy4g
VGhlcmUncyBsaXR0bGUgcXVlc3Rpb24gaW4gbXkgbWluZCB0aGF0IGJyb3dzZXItZmlyc3QgZGV2
ZWxvcGVycyB3aG8gYXJlbid0IGhlYXZpbHkgaW52ZXN0ZWQgaW4gQU1EIHdpbGwgbW92ZSBlbiBt
YXNzZSB0byB3aGF0ZXZlciBlbmRzIHVwIGJlaW5nIGluIEVTNiAoYW5kIEkgYmVsaWV2ZSB0aGF0
IHRoaXMgY29tcHJpc2VzIGEgbWFqb3JpdHkgb2Ygd29ya2luZyBKYXZhU2NyaXB0IGRldmVsb3Bl
cnMpLiBJIGRvIGJlbGlldmUgdGhhdCB1bmxlc3MgdGhlIHBhdGggZnJvbSBOb2RlIHRvIEVTNiBt
b2R1bGVzIGlzIHBhaW5sZXNzLCBhbmQgdW5sZXNzIHRoZSBOb2RlIGNvbW11bml0eSBzZWVzIGNs
ZWFyIHZhbHVlIGluIG1ha2luZyB0aGUgc3dpdGNoLCB0aGV5J3JlIGp1c3Qgbm90IGdvaW5nIHRv
IGJvdGhlci48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pk1heWJlIHRoaXMgaXMgZmluZSEgVHJh
bnNwaWxlcnMgZXhpc3QsIGFuZCBicm93c2VyaWZ5IGlzbid0IGdvaW5nIGFueXdoZXJlLiBCdXQg
SSBzZWUgcGVvcGxlIGhlcmUgZXZhbmdlbGl6aW5nIHRoZSBuZXcgc3lzdGVtLCBhbmQgb2NjYXNp
b25hbGx5IGFjdGluZyBhcyBpZiB0aGV5IGJlbGlldmUgdGhhdCAqZXZlcnlib2R5KiBpcyBnb2lu
ZyB0byBzd2l0Y2ggdG8gRVM2IG1vZHVsZXMsIGFuZCB0aGF0IHNlZW1zIHZlcnkgZmFyIGZyb20g
YmVpbmcgYSBmb3JlZ29uZSBjb25jbHVzaW9uIHRvIG1lLiBUaGUgc3RhdHVzIHF1byBiZWZvcmUg
dGhlIGxhc3QgZmFjZSB0byBmYWNlIHdhcyBhIHZlcnkgZGVsaWNhdGUgY29tcHJvbWlzZSB0aGF0
IG1vcmUgb3IgbGVzcyBzdWNjZXNzZnVsbHkgYmFsYW5jZWQgYWxsIHRoZSBjb21wZXRpbmcgcmVx
dWlyZW1lbnRzIGZyb20gSmF2YVNjcmlwdCdzIHZhcmlvdXMgY29uc3RpdHVlbmNpZXMuIFRoZXJl
Zm9yZSwgd2hlbiBhIG5ldyBkb2N1bWVudCBzaG93cyB1cCB0aGF0IHByb3Bvc2VzIGtub2NraW5n
IG91dCBvbmUgb2YgdGhlIGxvYWQtYmVhcmluZyBtZW1iZXJzIG9mIHRoYXQgY29tcHJvbWlzZSwg
bm9ib2R5IHNob3VsZCBiZSBzdXJwcmlzZWQgd2hlbiBwZW9wbGUgZ2V0IHVwc2V0LiAoRm9yIHdo
YXQgaXQncyB3b3J0aCwgSSB0aGluayBEYXZlIEhlcm1hbidzIGxhdGVzdCBwcm9wb3NhbCBpcyBn
cmVhdCwgZXNwZWNpYWxseSBiZWNhdXNlIGl0IG9ubHkgY2hhbmdlcyBzeW50YXgsIG5vdCBzZW1h
bnRpY3MuKTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+RG9tZW5pYyBoYXMgYmVlbiBhIGJpZyBw
cm9wb25lbnQgb2YgRVM2IHdpdGhpbiB0aGUgTm9kZSB3b3JsZCwgYW5kIGhhcyB0ZW5kZWQgdG8g
ZXJyIG9uIHRoZSBzaWRlIG9mIHByb21vdGluZyB0aGUgdmlldyB0aGF0IE5vZGUgY29yZSBhbmQg
dGhlIE5vZGUgZGV2ZWxvcGVyIGNvbW11bml0eSAqbXVzdCogYWRvcHQgRVM2IGF0IHRoZSByaXNr
IG9mIGdldHRpbmcgbGVmdCBiZWhpbmQuIEkgZG9uJ3QgZmVlbCBsaWtlIGhlIGhhcyBhIHBhcnRp
Y3VsYXIgYXhlIHRvIGdyaW5kIGhlcmUsIGhlJ3MganVzdCBtb3JlIGF0dHVuZWQgdG8gd2hhdCdz
IGdvaW5nIG9uIGluIE5vZGUgdGhhbiBtb3N0IG9mIHRoZSBwZW9wbGUgb24gdGhpcyBsaXN0LCBh
bmQgaXMgcmFpc2luZyB3aGF0IHNlZW1zIGxpa2UgYSBwcmV0dHkgdGVtcGVyZWQgdmVyc2lvbiBv
ZiBhIHdpZGVseS1oZWxkIGNvbmNlcm4uIEFnYWluLCBJIGtub3cgdGhlIE5vZGUgd29ybGQgaXMg
cHJldHR5IHNtYWxsIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLCBhbmQgSSBkb24ndCB3
YW50IHRvIG1pc3JlcHJlc2VudCB0aGUgYnJlYWR0aCBvZiB0aGUgb2JqZWN0aW9ucywgYnV0IEkg
ZG8gdGhpbmsgdGhhdCB0aGUgcmlzayBvZiBmcmFnbWVudGF0aW9uIGlzIHNpZ25pZmljYW50LCBh
bmQgSSB3b3VsZCBsaWtlIHVzIHRvIGZpbmQgYSB3YXkgdG8gbWl0aWdhdGUgdGhhdCByaXNrIGlm
IHdlIGNhbi48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkY8L2Rpdj48L2Rpdj48L2Rpdj4=" style="height:0;font-size:0em;padding:0;margin:0">​</div></div></div>