<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>222758</bug_id>
          
          <creation_ts>2021-03-04 12:22:35 -0800</creation_ts>
          <short_desc>WebKit must treat &apos;webgl&apos; and &apos;webgl2&apos; as distinct context types</short_desc>
          <delta_ts>2021-05-17 14:26:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=28786</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>222812</blocked>
    
    <blocked>225887</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jdarpinian</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1735976</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-03-04 12:22:35 -0800</bug_when>
    <thetext>The wording isn&apos;t completely obvious in the specification:
https://html.spec.whatwg.org/multipage/canvas.html#dom-canvas-getcontext

but the &apos;webgl&apos; and &apos;webgl2&apos; context types must be treated as distinct from each other.

If &apos;webgl&apos; has been fetched for a canvas, then attempting to fetch &apos;webgl2&apos; must return null.

If &apos;webgl2&apos; has been fetched for a canvas, then attempting to fetch &apos;webgl&apos; must return null.

This is the behavior in Firefox and Chrome. This Emscripten bug covers it:
https://github.com/emscripten-core/emscripten/pull/13497

Will add a WebGL conformance test for this at the same time as fixing it in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1738211</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-03-10 13:48:02 -0800</bug_when>
    <thetext>Haven&apos;t started this yet - unassigning until I can, in case someone else can pick it up. Should be a small fix, but important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1738576</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-11 12:23:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/75327781&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756747</commentid>
    <comment_count>3</comment_count>
      <attachid>427717</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-05-04 17:54:09 -0700</bug_when>
    <thetext>Created attachment 427717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756753</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-04 18:23:24 -0700</bug_when>
    <thetext>Committed r276999 (237319@main): &lt;https://commits.webkit.org/237319@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427717.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756788</commentid>
    <comment_count>5</comment_count>
      <attachid>427717</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-04 19:57:00 -0700</bug_when>
    <thetext>Comment on attachment 427717
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=427717&amp;action=review

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:266
&gt; +            if (version == WebGLVersion::WebGL1 &amp;&amp; !m_context-&gt;isWebGL1())
&gt; +                return Optional&lt;RenderingContext&gt; { WTF::nullopt };
&gt; +            if (version != WebGLVersion::WebGL1 &amp;&amp; m_context-&gt;isWebGL1())
&gt; +                return Optional&lt;RenderingContext&gt; { WTF::nullopt };

I would suggest writing this instead:

    if ((version == WebGLVersion::WebGL1) != m_context-&gt;isWebGL1())
        return Optional&lt;RenderingContext&gt; { };

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:498
&gt; +        if (type == WebGLVersion::WebGL1 &amp;&amp; !m_context-&gt;isWebGL1())
&gt; +            return nullptr;
&gt; +
&gt; +        if (type != WebGLVersion::WebGL1 &amp;&amp; m_context-&gt;isWebGL1())
&gt; +            return nullptr;

Same here:

    if ((type == WebGLVersion::WebGL1) != m_context-&gt;isWebGL1())
        return nullptr;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758648</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-05-10 14:35:17 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 427717 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427717&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLCanvasElement.cpp:266
&gt; &gt; +            if (version == WebGLVersion::WebGL1 &amp;&amp; !m_context-&gt;isWebGL1())
&gt; &gt; +                return Optional&lt;RenderingContext&gt; { WTF::nullopt };
&gt; &gt; +            if (version != WebGLVersion::WebGL1 &amp;&amp; m_context-&gt;isWebGL1())
&gt; &gt; +                return Optional&lt;RenderingContext&gt; { WTF::nullopt };
&gt; 
&gt; I would suggest writing this instead:
&gt; 
&gt;     if ((version == WebGLVersion::WebGL1) != m_context-&gt;isWebGL1())
&gt;         return Optional&lt;RenderingContext&gt; { };
&gt; 
&gt; &gt; Source/WebCore/html/HTMLCanvasElement.cpp:498
&gt; &gt; +        if (type == WebGLVersion::WebGL1 &amp;&amp; !m_context-&gt;isWebGL1())
&gt; &gt; +            return nullptr;
&gt; &gt; +
&gt; &gt; +        if (type != WebGLVersion::WebGL1 &amp;&amp; m_context-&gt;isWebGL1())
&gt; &gt; +            return nullptr;
&gt; 
&gt; Same here:
&gt; 
&gt;     if ((type == WebGLVersion::WebGL1) != m_context-&gt;isWebGL1())
&gt;         return nullptr;

Thanks for the suggestions. I considered these as well as using the xor operator but thought the code would be more readable as written. Happy to update it if you feel strongly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758659</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-10 14:52:50 -0700</bug_when>
    <thetext>(In reply to Kenneth Russell from comment #6)
&gt; Thanks for the suggestions. I considered these as well as using the xor
&gt; operator but thought the code would be more readable as written. Happy to
&gt; update it if you feel strongly.

I think using xor is super-unreadable, oblique tricky-programmer Boolean logic.

But using != seems *more* direct to me than the multiple if statements and likely *more* readable. Could use names if you feel that makes a big difference:

    bool versionIsWebGL1 = version == WebGLVersion::WebGL1;
    if (versionIsWebGL1 != m_context-&gt;isWebGL1())
        return Optional&lt;RenderingContext&gt; { };

Or the boolean name could be requestingWebGL1.

The point of the code, is &quot;if we have the wrong type&quot;, which is best coded as &quot;type != the needed type&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427717</attachid>
            <date>2021-05-04 17:54:09 -0700</date>
            <delta_ts>2021-05-04 18:23:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222758-20210504175408.patch</filename>
            <type>text/plain</type>
            <size>10315</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2OTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTEwMDA3NzU5ODRiYmMy
NTQzZTFhMmMzM2I1ZWRmMmQyOWVlZjUwYS4uNGQ1NjE1NGQxOGIwMDE3NjJmZWE2MTNmZGExNGVk
YmQ5YWZhMDQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTA0ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYktpdCBtdXN0IHRy
ZWF0ICd3ZWJnbCcgYW5kICd3ZWJnbDInIGFzIGRpc3RpbmN0IGNvbnRleHQgdHlwZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjc1OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBib3RoIHRo
ZSByZWd1bGFyIGdldENvbnRleHQgYW5kIENTUyBjb250ZXh0IGNvZGUgcGF0aHMgd2l0aAorICAg
ICAgICBjaGVja3MgZGlzdGluZ3Vpc2hpbmcgV2ViR0wgMS4wIGFuZCAyLjAgY29udGV4dHMuCisK
KyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBXZWJHTCAyLjAgY29uZm9ybWFuY2UgdGVzdHMu
CisKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0V2ViR0wpOgorCiAyMDIxLTA1LTAzICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjQ2F0YWx5c3RdICJFbnRl
ciBGdWxsIFNjcmVlbiIgYnV0dG9uIGluIG1lZGlhIGNvbnRyb2xzIGRpc2FwcGVhcnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggNWUyOTMwYmRmYTBlNjE2
NTAxN2E3YjYxZjBiZGM2MDY0MGMxYTk5MS4uMDg3ODRiZjVjZjhlOWZjNWIzMGEyYWYxYTNhOWE2
NTZlZmQyYjQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
QEAgLTI1OSw2ICsyNTksMTEgQEAgRXhjZXB0aW9uT3I8T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4
dD4+IEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KEpTQzo6SlNHbG8KICAgICAgICAgaWYg
KG1fY29udGV4dC0+aXNXZWJHTCgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzV2ViR0xUeXBlKGNv
bnRleHRJZCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRl
eHQ+IHsgV1RGOjpudWxsb3B0IH07CisgICAgICAgICAgICBhdXRvIHZlcnNpb24gPSB0b1dlYkdM
VmVyc2lvbihjb250ZXh0SWQpOworICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gV2ViR0xWZXJz
aW9uOjpXZWJHTDEgJiYgIW1fY29udGV4dC0+aXNXZWJHTDEoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKKyAgICAg
ICAgICAgIGlmICh2ZXJzaW9uICE9IFdlYkdMVmVyc2lvbjo6V2ViR0wxICYmIG1fY29udGV4dC0+
aXNXZWJHTDEoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29u
dGV4dD4geyBXVEY6Om51bGxvcHQgfTsKICAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ+KCptX2NvbnRleHQpKQogICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxS
ZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9OwogI2lmIEVOQUJMRShX
RUJHTDIpCkBAIC00ODEsOCArNDg2LDE3IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIEhU
TUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0V2ViR0woV2ViR0xWZXJzaW9uIHR5cGUsCiAgICAg
aWYgKCFzaG91bGRFbmFibGVXZWJHTChkb2N1bWVudCgpLnNldHRpbmdzKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXNXZWJH
TCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAobV9jb250ZXh0KSB7CisgICAg
ICAgIGlmICghbV9jb250ZXh0LT5pc1dlYkdMKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICAvLyBUaGUgcGhyYXNpbmcgb2YgdGhlc2UgY2hlY2tzIGF2b2lkcyBjb21w
aWxlLXRpbWUgZ3VhcmRzIGZvciBXZWJHTDIgc3VwcG9ydC4KKyAgICAgICAgaWYgKHR5cGUgPT0g
V2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIW1fY29udGV4dC0+aXNXZWJHTDEoKSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmICh0eXBlICE9IFdlYkdMVmVyc2lvbjo6
V2ViR0wxICYmIG1fY29udGV4dC0+aXNXZWJHTDEoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KIAogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm4gY3JlYXRl
Q29udGV4dFdlYkdMKHR5cGUsIFdURk1vdmUoYXR0cnMpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlYjcxMjUxY2IxNDY4
ZDlkMjUwZmExNGM1OGUxYTc4YWE1MGJhZjFlLi4xMzQyMTQ3YjE4OTY0Nzk0ZTRkZmQ4MTk1NzQ2
ZGZlYTY2ZjgwMDRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMDUtMDQgIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViS2l0IG11c3QgdHJlYXQg
J3dlYmdsJyBhbmQgJ3dlYmdsMicgYXMgZGlzdGluY3QgY29udGV4dCB0eXBlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyNzU4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV2aXNlZCB0aGUgdHdvIGNv
cGllcyBvZiB0aGUgV2ViR0wgMi4wIGNvbnRleHQtdHlwZS10ZXN0IHdpdGgKKyAgICAgICAgc3Ry
ZW5ndGhlbmVkIGNoZWNrcyB0YWtlbiBmcm9tIHVwc3RyZWFtIEtocm9ub3NHcm91cC9XZWJHTC4K
KworICAgICAgICAqIHdlYmdsLzIuMC4wL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZv
cm1hbmNlMi9jb250ZXh0L2NvbnRleHQtdHlwZS10ZXN0LTIuaHRtbDoKKyAgICAgICAgKiB3ZWJn
bC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZTIvY29udGV4dC9jb250ZXh0
LXR5cGUtdGVzdC0yLmh0bWw6CisKIDIwMjEtMDUtMDMgIFJvYmVydCBKZW5uZXIgIDxqZW5uZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFsgbWFjT1MvaU9TIERlYnVnIF0gaHR0cC93cHQvY3J5cHRv
L3Vud3JhcC1yc2Eta2V5LWNyYXNoLmFueS5odG1sIChsYXlvdXQtdGVzdCkgaXMgYSBmbGFreSBj
cmFzaApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvMi4wLjAvcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UyL2NvbnRleHQvY29udGV4dC10eXBlLXRlc3QtMi5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ2wvMi4wLjAvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29u
Zm9ybWFuY2UyL2NvbnRleHQvY29udGV4dC10eXBlLXRlc3QtMi5odG1sCmluZGV4IDI3ZjhlZjIx
YmQ2ODhiNGQzZTQ3YzI1ZjkwNzJmZDMxZDJmNmQzNTEuLmQzOWQ5ZjE0MjVhMjdmZjRlYmE1YTdl
M2IwYmJkNGZmOGJlNDAzN2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdsLzIuMC4wL3Jl
c291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlMi9jb250ZXh0L2NvbnRleHQtdHlw
ZS10ZXN0LTIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC8yLjAuMC9yZXNvdXJjZXMvd2Vi
Z2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZTIvY29udGV4dC9jb250ZXh0LXR5cGUtdGVzdC0yLmh0
bWwKQEAgLTM3LDggKzM3LDggQEAKIDxib2R5PgogPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgogPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Ci08Y2FudmFzIGlkPSJjYW52YXMiIHN0eWxlPSJ3
aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyI+IDwvY2FudmFzPgotPGNhbnZhcyBpZD0iY2FudmFz
MmQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCI+IDwvY2FudmFzPgorPGNhbnZhcyBpZD0iY2FudmFz
MSIgc3R5bGU9IndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7Ij4gPC9jYW52YXM+Cis8Y2FudmFz
IGlkPSJjYW52YXMyIiBzdHlsZT0id2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsiPiA8L2NhbnZh
cz4KIDxzY3JpcHQ+CiAidXNlIHN0cmljdCI7CiBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVuc3Vy
ZXMgV2ViR0wyIGltcGxlbWVudGF0aW9ucyBpbnRlcmFjdCBjb3JyZWN0bHkgd2l0aCB0aGUgY2Fu
dmFzIHRhZy4iKTsKQEAgLTQ2LDI0ICs0Niw1MyBAQCBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVu
c3VyZXMgV2ViR0wyIGltcGxlbWVudGF0aW9ucyBpbnRlcmFjdCBjb3JyZWN0bHkgd2l0aCB0aAog
ZGVidWcoIiIpOwogZGVidWcoIkNhbnZhcy5nZXRDb250ZXh0Iik7CiAKLWFzc2VydE1zZyh3aW5k
b3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0LAotICAgICAgICAgICJXZWJHTDJSZW5kZXJpbmdDb250
ZXh0IHNob3VsZCBiZSBhIG1lbWJlciBvZiB3aW5kb3ciKTsKLWFzc2VydE1zZygnV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dCcgaW4gd2luZG93LAotICAgICAgICAgICJXZWJHTDJSZW5kZXJpbmdDb250
ZXh0IHNob3VsZCBiZSAnaW4nIHdpbmRvdyIpOworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgYXNz
ZXJ0TXNnKHdpbmRvdy5XZWJHTDJSZW5kZXJpbmdDb250ZXh0LAorICAgICAgICAgICAgIldlYkdM
MlJlbmRlcmluZ0NvbnRleHQgc2hvdWxkIGJlIGEgbWVtYmVyIG9mIHdpbmRvdyIpOworICBhc3Nl
cnRNc2coJ1dlYkdMMlJlbmRlcmluZ0NvbnRleHQnIGluIHdpbmRvdywKKyAgICAgICAgICAgICJX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0IHNob3VsZCBiZSAnaW4nIHdpbmRvdyIpOwogCi12YXIgd3R1
ID0gV2ViR0xUZXN0VXRpbHM7Ci12YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNhbnZhcyIpOwotdmFyIGdsID0gd3R1LmNyZWF0ZTNEQ29udGV4dChjYW52YXMsIG51bGwsIDIp
OwotaWYgKCFnbCkgewotICB0ZXN0RmFpbGVkKCJjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7Ci19
IGVsc2UgewotICB0ZXN0UGFzc2VkKCJjb250ZXh0IGV4aXN0cyIpOworICBjb25zdCB3dHUgPSBX
ZWJHTFRlc3RVdGlsczsKKyAgbGV0IGNhbnZhczIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzMiIpOworICBsZXQgZ2wyID0gd3R1LmNyZWF0ZTNEQ29udGV4dChjYW52YXMyLCBudWxs
LCAyKTsKKyAgaWYgKCFnbDIpIHsKKyAgICB0ZXN0RmFpbGVkKCJDb3VsZCBub3QgZmV0Y2ggV2Vi
R0wgMi4wIGNvbnRleHQiKTsKKyAgICByZXR1cm47CisgIH0KKyAgdGVzdFBhc3NlZCgiRmV0Y2hl
ZCBXZWJHTDIgY29udGV4dCBzdWNjZXNzZnVsbHkiKTsKIAotICBkZWJ1ZygiQ2hlY2tpbmcgY29u
dGV4dCB0eXBlIik7Ci0gIGFzc2VydE1zZyhnbCBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQsCisgIGRlYnVnKCJDaGVja2luZyBXZWJHTDIgY29udGV4dCB0eXBlIik7CisgIGFzc2Vy
dE1zZyhnbDIgaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAg
ImNvbnRleHQgdHlwZSBzaG91bGQgYmUgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCIpOworCisgIC8v
IFdlYkdMMSBjb250ZXh0cyBkbyBub3QgcmVzcG9uZCB0byB0aGUgV2ViR0wyIGNvbnRleHQgdHlw
ZSwgYW5kIHZpY2UgdmVyc2EuCisgIGxldCBjYW52YXMxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhczEiKTsKKyAgbGV0IGdsMSA9IHd0dS5jcmVhdGUzRENvbnRleHQoY2FudmFzMSwg
bnVsbCwgMSk7CisgIGlmICghZ2wxKSB7CisgICAgdGVzdEZhaWxlZCgiQ291bGQgbm90IGZldGNo
IFdlYkdMIDEuMCBjb250ZXh0Iik7CisgICAgcmV0dXJuOworICB9CisKKyAgZGVidWcoIkNoZWNr
aW5nIFdlYkdMMSBjb250ZXh0IHR5cGUiKTsKKyAgYXNzZXJ0TXNnKGdsMSBpbnN0YW5jZW9mIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCwKKyAgICAgICAgICAgICJjb250ZXh0IHR5cGUgc2hvdWxkIGJl
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCIpOworCisgIGxldCBtc2cxID0gIkEgY2FudmFzIHdoaWNo
IGhhcyBjcmVhdGVkIGEgV2ViR0wgMS4wIGNvbnRleHQgc2hvdWxkIG5vdCByZXR1cm4gaXQgZm9y
IGEgJ3dlYmdsMicgY29udGV4dCByZXF1ZXN0IjsKKyAgaWYgKGNhbnZhczEuZ2V0Q29udGV4dCgi
d2ViZ2wyIikpCisgICAgdGVzdEZhaWxlZChtc2cxKTsKKyAgZWxzZQorICAgIHRlc3RQYXNzZWQo
bXNnMSk7CisKKyAgbGV0IG1zZzIgPSAiQSBjYW52YXMgd2hpY2ggaGFzIGNyZWF0ZWQgYSBXZWJH
TCAyLjAgY29udGV4dCBzaG91bGQgbm90IHJldHVybiBpdCBmb3IgYSAnd2ViZ2wnIGNvbnRleHQg
cmVxdWVzdCI7CisgIGlmIChjYW52YXMyLmdldENvbnRleHQoIndlYmdsIikpCisgICAgdGVzdEZh
aWxlZChtc2cyKTsKKyAgZWxzZQorICAgIHRlc3RQYXNzZWQobXNnMik7CiB9CisKK3J1blRlc3Qo
KTsKIGRlYnVnKCIiKTsKKwogdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29u
Zm9ybWFuY2UyL2NvbnRleHQvY29udGV4dC10eXBlLXRlc3QtMi5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UyL2NvbnRleHQvY29u
dGV4dC10eXBlLXRlc3QtMi5odG1sCmluZGV4IDkzODIyZjJhNmZiZTY3OTU2OWJmOGViNWFjNjFl
NWE5NmRjYjM3MmQuLjQyY2EwZjM3NDI4MGQyYzI4ZWZhYTg0NDdmMjc4YWVkNDkyMGJkNTEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2Nv
bmZvcm1hbmNlMi9jb250ZXh0L2NvbnRleHQtdHlwZS10ZXN0LTIuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZTIvY29udGV4
dC9jb250ZXh0LXR5cGUtdGVzdC0yLmh0bWwKQEAgLTE2LDggKzE2LDggQEAgZm91bmQgaW4gdGhl
IExJQ0VOU0UudHh0IGZpbGUuCiA8Ym9keT4KIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4K
IDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotPGNhbnZhcyBpZD0iY2FudmFzIiBzdHlsZT0id2lk
dGg6IDUwcHg7IGhlaWdodDogNTBweDsiPiA8L2NhbnZhcz4KLTxjYW52YXMgaWQ9ImNhbnZhczJk
IiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiPiA8L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImNhbnZhczEi
IHN0eWxlPSJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyI+IDwvY2FudmFzPgorPGNhbnZhcyBp
ZD0iY2FudmFzMiIgc3R5bGU9IndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7Ij4gPC9jYW52YXM+
CiA8c2NyaXB0PgogInVzZSBzdHJpY3QiOwogZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBlbnN1cmVz
IFdlYkdMMiBpbXBsZW1lbnRhdGlvbnMgaW50ZXJhY3QgY29ycmVjdGx5IHdpdGggdGhlIGNhbnZh
cyB0YWcuIik7CkBAIC0yNSwyNCArMjUsNTMgQEAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBlbnN1
cmVzIFdlYkdMMiBpbXBsZW1lbnRhdGlvbnMgaW50ZXJhY3QgY29ycmVjdGx5IHdpdGggdGgKIGRl
YnVnKCIiKTsKIGRlYnVnKCJDYW52YXMuZ2V0Q29udGV4dCIpOwogCi1hc3NlcnRNc2cod2luZG93
LldlYkdMUmVuZGVyaW5nQ29udGV4dCwKLSAgICAgICAgICAiV2ViR0wyUmVuZGVyaW5nQ29udGV4
dCBzaG91bGQgYmUgYSBtZW1iZXIgb2Ygd2luZG93Iik7Ci1hc3NlcnRNc2coJ1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQnIGluIHdpbmRvdywKLSAgICAgICAgICAiV2ViR0wyUmVuZGVyaW5nQ29udGV4
dCBzaG91bGQgYmUgJ2luJyB3aW5kb3ciKTsKLQotdmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwot
dmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKLXZhciBnbCA9
IHd0dS5jcmVhdGUzRENvbnRleHQoY2FudmFzLCBudWxsLCAyKTsKLWlmICghZ2wpIHsKLSAgdGVz
dEZhaWxlZCgiY29udGV4dCBkb2VzIG5vdCBleGlzdCIpOwotfSBlbHNlIHsKLSAgdGVzdFBhc3Nl
ZCgiY29udGV4dCBleGlzdHMiKTsKLQotICBkZWJ1ZygiQ2hlY2tpbmcgY29udGV4dCB0eXBlIik7
Ci0gIGFzc2VydE1zZyhnbCBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQsCitmdW5j
dGlvbiBydW5UZXN0KCkgeworICBhc3NlcnRNc2cod2luZG93LldlYkdMMlJlbmRlcmluZ0NvbnRl
eHQsCisgICAgICAgICAgICAiV2ViR0wyUmVuZGVyaW5nQ29udGV4dCBzaG91bGQgYmUgYSBtZW1i
ZXIgb2Ygd2luZG93Iik7CisgIGFzc2VydE1zZygnV2ViR0wyUmVuZGVyaW5nQ29udGV4dCcgaW4g
d2luZG93LAorICAgICAgICAgICAgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQgc2hvdWxkIGJlICdp
bicgd2luZG93Iik7CisKKyAgY29uc3Qgd3R1ID0gV2ViR0xUZXN0VXRpbHM7CisgIGxldCBjYW52
YXMyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhczIiKTsKKyAgbGV0IGdsMiA9IHd0
dS5jcmVhdGUzRENvbnRleHQoY2FudmFzMiwgbnVsbCwgMik7CisgIGlmICghZ2wyKSB7CisgICAg
dGVzdEZhaWxlZCgiQ291bGQgbm90IGZldGNoIFdlYkdMIDIuMCBjb250ZXh0Iik7CisgICAgcmV0
dXJuOworICB9CisgIHRlc3RQYXNzZWQoIkZldGNoZWQgV2ViR0wyIGNvbnRleHQgc3VjY2Vzc2Z1
bGx5Iik7CisKKyAgZGVidWcoIkNoZWNraW5nIFdlYkdMMiBjb250ZXh0IHR5cGUiKTsKKyAgYXNz
ZXJ0TXNnKGdsMiBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAg
ICAiY29udGV4dCB0eXBlIHNob3VsZCBiZSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Iik7CisKKyAg
Ly8gV2ViR0wxIGNvbnRleHRzIGRvIG5vdCByZXNwb25kIHRvIHRoZSBXZWJHTDIgY29udGV4dCB0
eXBlLCBhbmQgdmljZSB2ZXJzYS4KKyAgbGV0IGNhbnZhczEgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzMSIpOworICBsZXQgZ2wxID0gd3R1LmNyZWF0ZTNEQ29udGV4dChjYW52YXMx
LCBudWxsLCAxKTsKKyAgaWYgKCFnbDEpIHsKKyAgICB0ZXN0RmFpbGVkKCJDb3VsZCBub3QgZmV0
Y2ggV2ViR0wgMS4wIGNvbnRleHQiKTsKKyAgICByZXR1cm47CisgIH0KKworICBkZWJ1ZygiQ2hl
Y2tpbmcgV2ViR0wxIGNvbnRleHQgdHlwZSIpOworICBhc3NlcnRNc2coZ2wxIGluc3RhbmNlb2Yg
V2ViR0xSZW5kZXJpbmdDb250ZXh0LAorICAgICAgICAgICAgImNvbnRleHQgdHlwZSBzaG91bGQg
YmUgV2ViR0xSZW5kZXJpbmdDb250ZXh0Iik7CisKKyAgbGV0IG1zZzEgPSAiQSBjYW52YXMgd2hp
Y2ggaGFzIGNyZWF0ZWQgYSBXZWJHTCAxLjAgY29udGV4dCBzaG91bGQgbm90IHJldHVybiBpdCBm
b3IgYSAnd2ViZ2wyJyBjb250ZXh0IHJlcXVlc3QiOworICBpZiAoY2FudmFzMS5nZXRDb250ZXh0
KCJ3ZWJnbDIiKSkKKyAgICB0ZXN0RmFpbGVkKG1zZzEpOworICBlbHNlCisgICAgdGVzdFBhc3Nl
ZChtc2cxKTsKKworICBsZXQgbXNnMiA9ICJBIGNhbnZhcyB3aGljaCBoYXMgY3JlYXRlZCBhIFdl
YkdMIDIuMCBjb250ZXh0IHNob3VsZCBub3QgcmV0dXJuIGl0IGZvciBhICd3ZWJnbCcgY29udGV4
dCByZXF1ZXN0IjsKKyAgaWYgKGNhbnZhczIuZ2V0Q29udGV4dCgid2ViZ2wiKSkKKyAgICB0ZXN0
RmFpbGVkKG1zZzIpOworICBlbHNlCisgICAgdGVzdFBhc3NlZChtc2cyKTsKIH0KKworcnVuVGVz
dCgpOwogZGVidWcoIiIpOworCiB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>