<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">I have to agree with Tino Heth, our aim is to add something basic at first. Although we’d better make sure that we will be able to add other wanted features in the future.</p>
<p style="margin:0px 0px 1.2em!important">How about this plan?</p>
<ol style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">Generic protocols without associated types</li>
<li style="margin:0.5em 0px">Basic conflict resolution using “dot” syntax</li>
<li style="margin:0.5em 0px">Generic protocols with associated types (depends on (2))</li>
<li style="margin:0.5em 0px">Specialization of non-generic protocols with associated types (+work on existential notation)</li>
</ol>
<p style="margin:0px 0px 1.2em!important">Some inline reply follows.</p>
<p style="margin:0px 0px 1.2em!important"></p><div class="markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div class="gmail-m_6932992864106346999gmail-m_7779821207004609716bloop_markdown">

<p>While trying to find the talk about overlapping protocol members from different protocols I spotted your proposal: <a href="https://github.com/Anton3/swift-evolution/blob/generic-protocols/proposals/NNNN-generic-protocols.md" target="_blank">https://github.com/Anton3/swif<wbr>t-evolution/blob/generic-proto<wbr>cols/proposals/NNNN-generic-<wbr>protocols.md</a></p></div></div></blockquote><p></p></div><p style="margin:0px 0px 1.2em!important"></p>
<p style="margin:0px 0px 1.2em!important">This is quite an old listing. Thanks for reminding!</p>
<p style="margin:0px 0px 1.2em!important"></p><div class="markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div class="gmail-m_6932992864106346999gmail-m_7779821207004609716bloop_markdown">

<p>Here is the evolution-thread: <a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160919/027122.html" target="_blank">https://lists.swift.org/piperm<wbr>ail/swift-evolution/Week-of-<wbr>Mon–20160919/027122.html</a></p>

<p>The suggestion there was to prefix everything with the corresponding protocol when there is a collision.</p>

<pre><code class="gmail-m_6932992864106346999gmail-m_7779821207004609716swift">struct Test : Foo&lt;Int&gt;, Foo&lt;String&gt; {
    init(_ value: Foo&lt;Int&gt;.Value) { … }    // or better: init(_ value: Int)
    init(_ value: Foo&lt;String&gt;.Value) { … } // init(_ value: String)
     
    // assume both had the function `foo()`
    func Foo&lt;Int&gt;.foo() { … }
    func Foo&lt;String&gt;.foo() { … }
}</code></pre></div></div></blockquote><p></p></div><p style="margin:0px 0px 1.2em!important"></p>
<p style="margin:0px 0px 1.2em!important">That’s a working solution. It doesn’t scale very much, if we try to apply it to protocol inheritance (conformance) hierarchies, but we shouldn’t care for now.</p>
<p style="margin:0px 0px 1.2em!important"></p><div class="markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div class="gmail-m_6932992864106346999gmail-m_7779821207004609716bloop_markdown"><pre>Is there really a need for true generic protocols? I’m still fascinated by the idea how a generic and constrained <code>typealias</code><span style="font-family:arial,sans-serif"> could create this new ‘pseudo’ generic protocol.</span></pre></div></div></blockquote><p></p></div><p style="margin:0px 0px 1.2em!important"></p>
<p style="margin:0px 0px 1.2em!important">I agree that ideally, existing protocols should be intact. If so, then we should consider “the original protocol with associated types” and “explicitly specialized protocol” as two different protocols:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="hljs language-swift" 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);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)"><span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">protocol</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Constructible</span> </span>{
    associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span>
    <span class="hljs-func"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">foo</span><span class="hljs-params">()</span>
}

<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">struct</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">MyStruct</span> : <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">Constructible</span> </span>{
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">typealias</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span> = <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>
    <span class="hljs-func"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">foo</span><span class="hljs-params">()</span> </span>{ }
}

<span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">extension</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyStruct</span> : <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Constructible</span>&lt;<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">String</span>&gt; </span>{  <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// or Constructible&lt;Value: String&gt;, or whatever</span>
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">typealias</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Constructible</span>&lt;<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">String</span>&gt;.<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span> = <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">String</span>
    <span class="hljs-func"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">Constructible</span><span class="hljs-generics">&lt;String&gt;</span>.<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">foo</span><span class="hljs-params">()</span> </span>{ }
}

<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">MyStruct</span>.<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span>  <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// Int</span>
<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">MyStruct</span>.<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Constructible</span>&lt;<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">String</span>&gt;.<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span>  <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// String</span>

<span class="hljs-func"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">bar</span><span class="hljs-generics">&lt;T: Constructible&gt;</span><span class="hljs-params">(t: T)</span>  // <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">can</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">call</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">with</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">MyStruct</span>
<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">bar</span><span class="hljs-generics">&lt;T: Constructible&lt;Int&gt;</span>&gt;<span class="hljs-params">(t: T)</span>  // <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">can</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">NOT</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">call</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">with</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">MyStruct</span>
<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">bar</span><span class="hljs-generics">&lt;T: Constructible&lt;String&gt;</span>&gt;<span class="hljs-params">(t: T)</span>  // <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">can</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">call</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">with</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">MyStruct</span></span>
</code></pre>
<div title="MDH:PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2Pkkg
aGF2ZSB0byBhZ3JlZSB3aXRoIFRpbm8gSGV0aCwgb3VyIGFpbSBpcyB0byBhZGQgc29tZXRoaW5n
IGJhc2ljIGF0IGZpcnN0LiBBbHRob3VnaCB3ZSdkIGJldHRlciBtYWtlIHN1cmUgdGhhdCB3ZSB3
aWxsIGJlIGFibGUgdG8gYWRkIG90aGVyIHdhbnRlZCBmZWF0dXJlcyBpbiB0aGUgZnV0dXJlLjxi
cj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkhvdyBhYm91dCB0aGlzIHBsYW4/PC9kaXY+PGRp
dj48YnI+PC9kaXY+PGRpdj4xLiBHZW5lcmljIHByb3RvY29scyB3aXRob3V0IGFzc29jaWF0ZWQg
dHlwZXM8L2Rpdj48ZGl2PjIuIEJhc2ljIGNvbmZsaWN0IHJlc29sdXRpb24gdXNpbmcgImRvdCIg
c3ludGF4PC9kaXY+PGRpdj4zLiBHZW5lcmljIHByb3RvY29scyB3aXRoIGFzc29jaWF0ZWQgdHlw
ZXMgKGRlcGVuZHMgb24gKDIpKTwvZGl2PjxkaXY+NC4gU3BlY2lhbGl6YXRpb24gb2Ygbm9uLWdl
bmVyaWMgcHJvdG9jb2xzIHdpdGggYXNzb2NpYXRlZCB0eXBlcyAoK3dvcmsgb24gZXhpc3RlbnRp
YWwgbm90YXRpb24pPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5Tb21lIGlubGluZSByZXBseSBm
b2xsb3dzLjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48YmxvY2txdW90ZSBj
bGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMHB4IDAuOGV4OyBib3Jk
ZXItbGVmdDogMXB4IHNvbGlkIHJnYigyMDQsIDIwNCwgMjA0KTsgcGFkZGluZy1sZWZ0OiAxZXg7
Ij48ZGl2IHN0eWxlPSJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ij48ZGl2IGNsYXNzPSJnbWFpbC1t
XzY5MzI5OTI4NjQxMDYzNDY5OTlnbWFpbC1tXzc3Nzk4MjEyMDcwMDQ2MDk3MTZibG9vcF9tYXJr
ZG93biI+Cgo8cD5XaGlsZSB0cnlpbmcgdG8gZmluZCB0aGUgdGFsayBhYm91dCBvdmVybGFwcGlu
ZyBwcm90b2NvbCBtZW1iZXJzIGZyb20gZGlmZmVyZW50IHByb3RvY29scyBJIHNwb3R0ZWQgeW91
ciBwcm9wb3NhbDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0FudG9uMy9zd2lmdC1ldm9s
dXRpb24vYmxvYi9nZW5lcmljLXByb3RvY29scy9wcm9wb3NhbHMvTk5OTi1nZW5lcmljLXByb3Rv
Y29scy5tZCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9BbnRvbjMvc3dpZjx3
YnI+dC1ldm9sdXRpb24vYmxvYi9nZW5lcmljLXByb3RvPHdicj5jb2xzL3Byb3Bvc2Fscy9OTk5O
LWdlbmVyaWMtPHdicj5wcm90b2NvbHMubWQ8L2E+PC9wPjwvZGl2PjwvZGl2PjwvYmxvY2txdW90
ZT48ZGl2PlRoaXMgaXMgcXVpdGUgYW4gb2xkIGxpc3RpbmcuIFRoYW5rcyBmb3IgcmVtaW5kaW5n
ITwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjogMHB4
IDBweCAwcHggMC44ZXg7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiKDIwNCwgMjA0LCAyMDQp
OyBwYWRkaW5nLWxlZnQ6IDFleDsiPjxkaXYgc3R5bGU9IndvcmQtd3JhcDogYnJlYWstd29yZDsi
PjxkaXYgY2xhc3M9ImdtYWlsLW1fNjkzMjk5Mjg2NDEwNjM0Njk5OWdtYWlsLW1fNzc3OTgyMTIw
NzAwNDYwOTcxNmJsb29wX21hcmtkb3duIj4KCjxwPkhlcmUgaXMgdGhlIGV2b2x1dGlvbi10aHJl
YWQ6IDxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuc3dpZnQub3JnL3BpcGVybWFpbC9zd2lmdC1ldm9s
dXRpb24vV2Vlay1vZi1Nb24tMjAxNjA5MTkvMDI3MTIyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5o
dHRwczovL2xpc3RzLnN3aWZ0Lm9yZy9waXBlcm08d2JyPmFpbC9zd2lmdC1ldm9sdXRpb24vV2Vl
ay1vZi08d2JyPk1vbuKAkzIwMTYwOTE5LzAyNzEyMi5odG1sPC9hPjwvcD4KCjxwPlRoZSBzdWdn
ZXN0aW9uIHRoZXJlIHdhcyB0byBwcmVmaXggZXZlcnl0aGluZyB3aXRoIHRoZSBjb3JyZXNwb25k
aW5nIHByb3RvY29sIHdoZW4gdGhlcmUgaXMgYSBjb2xsaXNpb24uPC9wPgoKPHByZT48Y29kZSBj
bGFzcz0iZ21haWwtbV82OTMyOTkyODY0MTA2MzQ2OTk5Z21haWwtbV83Nzc5ODIxMjA3MDA0NjA5
NzE2c3dpZnQiPnN0cnVjdCBUZXN0IDogRm9vJmx0O0ludCZndDssIEZvbyZsdDtTdHJpbmcmZ3Q7
IHsKICAgIGluaXQoXyB2YWx1ZTogRm9vJmx0O0ludCZndDsuVmFsdWUpIHsg4oCmIH0gICAgLy8g
b3IgYmV0dGVyOiBpbml0KF8gdmFsdWU6IEludCkKICAgIGluaXQoXyB2YWx1ZTogRm9vJmx0O1N0
cmluZyZndDsuVmFsdWUpIHsg4oCmIH0gLy8gaW5pdChfIHZhbHVlOiBTdHJpbmcpCiAgICAgCiAg
ICAvLyBhc3N1bWUgYm90aCBoYWQgdGhlIGZ1bmN0aW9uIGBmb28oKWAKICAgIGZ1bmMgRm9vJmx0
O0ludCZndDsuZm9vKCkgeyDigKYgfQogICAgZnVuYyBGb28mbHQ7U3RyaW5nJmd0Oy5mb28oKSB7
IOKApiB9Cn08L2NvZGU+PC9wcmU+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+VGhhdCdz
IGEgd29ya2luZyBzb2x1dGlvbi4gSXQgZG9lc24ndCBzY2FsZSB2ZXJ5IG11Y2gsIGlmIHdlIHRy
eSB0byBhcHBseSBpdCB0byBwcm90b2NvbCBpbmhlcml0YW5jZSAoY29uZm9ybWFuY2UpIGhpZXJh
cmNoaWVzLCBidXQgd2Ugc2hvdWxkbid0IGNhcmUgZm9yIG5vdy48L2Rpdj48YmxvY2txdW90ZSBj
bGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMHB4IDAuOGV4OyBib3Jk
ZXItbGVmdDogMXB4IHNvbGlkIHJnYigyMDQsIDIwNCwgMjA0KTsgcGFkZGluZy1sZWZ0OiAxZXg7
Ij48ZGl2IHN0eWxlPSJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ij48ZGl2IGNsYXNzPSJnbWFpbC1t
XzY5MzI5OTI4NjQxMDYzNDY5OTlnbWFpbC1tXzc3Nzk4MjEyMDcwMDQ2MDk3MTZibG9vcF9tYXJr
ZG93biI+PHByZT5JcyB0aGVyZSByZWFsbHkgYSBuZWVkIGZvciB0cnVlIGdlbmVyaWMgcHJvdG9j
b2xzPyBJ4oCZbSBzdGlsbCBmYXNjaW5hdGVkIGJ5IHRoZSBpZGVhIGhvdyBhIGdlbmVyaWMgYW5k
IGNvbnN0cmFpbmVkIDxjb2RlPnR5cGVhbGlhczwvY29kZT48c3BhbiBzdHlsZT0iZm9udC1mYW1p
bHk6IGFyaWFsLCBzYW5zLXNlcmlmOyI+IGNvdWxkIGNyZWF0ZSB0aGlzIG5ldyDigJhwc2V1ZG/i
gJkgZ2VuZXJpYyBwcm90b2NvbC48L3NwYW4+PC9wcmU+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3Rl
PjxkaXY+SSBhZ3JlZSB0aGF0IGlkZWFsbHksIGV4aXN0aW5nIHByb3RvY29scyBzaG91bGQgYmUg
aW50YWN0LiBJZiBzbywgdGhlbiB3ZSBzaG91bGQgY29uc2lkZXIgInRoZSBvcmlnaW5hbCBwcm90
b2NvbCB3aXRoIGFzc29jaWF0ZWQgdHlwZXMiIGFuZCAiZXhwbGljaXRseSBzcGVjaWFsaXplZCBw
cm90b2NvbCIgYXMgdHdvIGRpZmZlcmVudCBwcm90b2NvbHM6PC9kaXY+PGRpdj48YnI+PC9kaXY+
PGRpdj5gYGBzd2lmdDwvZGl2PjxkaXY+cHJvdG9jb2wgQ29uc3RydWN0aWJsZSB7PC9kaXY+PGRp
dj4mbmJzcDsgJm5ic3A7IGFzc29jaWF0ZWR0eXBlIFZhbHVlPC9kaXY+PGRpdj4mbmJzcDsgJm5i
c3A7IGZ1bmMgZm9vKCk8L2Rpdj48ZGl2Pn08L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PnN0cnVj
dCBNeVN0cnVjdCA6IENvbnN0cnVjdGlibGUgezwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyB0eXBl
YWxpYXMgVmFsdWUgPSBJbnQ8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgZnVuYyBmb28oKSB7IH08
L2Rpdj48ZGl2Pn08L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PmV4dGVuc2lvbiBNeVN0cnVjdCA6
IENvbnN0cnVjdGlibGUmbHQ7U3RyaW5nJmd0OyB7ICZuYnNwOy8vIG9yIENvbnN0cnVjdGlibGUm
bHQ7VmFsdWU6IFN0cmluZyZndDssIG9yIHdoYXRldmVyPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7
IHR5cGVhbGlhcyBDb25zdHJ1Y3RpYmxlJmx0O1N0cmluZyZndDsuVmFsdWUgPSBTdHJpbmc8L2Rp
dj48ZGl2PiZuYnNwOyAmbmJzcDsgZnVuYyBDb25zdHJ1Y3RpYmxlJmx0O1N0cmluZyZndDsuZm9v
KCkgeyB9PC9kaXY+PGRpdj59PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5NeVN0cnVjdC5WYWx1
ZSAmbmJzcDsvLyBJbnQ8L2Rpdj48ZGl2Pk15U3RydWN0LkNvbnN0cnVjdGlibGUmbHQ7U3RyaW5n
Jmd0Oy5WYWx1ZSAmbmJzcDsvLyBTdHJpbmc8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PmZ1bmMg
YmFyJmx0O1Q6IENvbnN0cnVjdGlibGUmZ3Q7KHQ6IFQpICZuYnNwOy8vIGNhbiBjYWxsIHdpdGgg
TXlTdHJ1Y3Q8L2Rpdj48ZGl2PmZ1bmMgYmFyJmx0O1Q6IENvbnN0cnVjdGlibGUmbHQ7SW50Jmd0
OyZndDsodDogVCkgJm5ic3A7Ly8gY2FuIE5PVCBjYWxsIHdpdGggTXlTdHJ1Y3Q8YnI+PC9kaXY+
ZnVuYyBiYXImbHQ7VDogQ29uc3RydWN0aWJsZSZsdDtTdHJpbmcmZ3Q7Jmd0Oyh0OiBUKSAmbmJz
cDsvLyBjYW4gY2FsbCB3aXRoIE15U3RydWN0PGRpdj5gYGA8L2Rpdj48L2Rpdj48L2Rpdj4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>