<?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>31172</bug_id>
          
          <creation_ts>2009-11-05 10:35:11 -0800</creation_ts>
          <short_desc>Implement getAttachedShaders</short_desc>
          <delta_ts>2010-06-29 19:28:45 -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>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>160869</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-11-05 10:35:11 -0800</bug_when>
    <thetext>This array is returned from getAttachedShaders and from getProgramParameter when passing ATTACHED_SHADERS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235420</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-08 12:11:45 -0700</bug_when>
    <thetext>Per recent WebGL spec updates, the WebGLObjectArray type has been removed in favor of returning an array of WebGLShader objects from getAttachedShaders.

getProgramParameter(ATTACHED_SHADERS) returns a long indicating the number of attached shaders, not the shaders themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244045</commentid>
    <comment_count>2</comment_count>
      <attachid>59977</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-28 19:22:54 -0700</bug_when>
    <thetext>Created attachment 59977
patch

Please review this first.  Patch commit has to wait until chrome command buffer port implements this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244404</commentid>
    <comment_count>3</comment_count>
      <attachid>59977</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-29 11:37:44 -0700</bug_when>
    <thetext>Comment on attachment 59977
patch

This mostly looks good but there are a few issues.


WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:167
 +          return throwSyntaxError(exec);
This is too stringent. It&apos;s legal to supply extra arguments to a JavaScript function.

WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:170
 +      WebGLProgram* program = toWebGLProgram(exec-&gt;argument(0));
Double-check to see what happens when either null or a value which isn&apos;t a WebGLProgram is passed. Make sure this doesn&apos;t crash. Should probably raise a TypeError in some of these cases.


WebCore/html/canvas/WebGLRenderingContext.h:134
 +          Vector&lt;WebGLShader*&gt; getAttachedShaders(WebGLProgram*, ExceptionCode&amp;);
After more thought I think the signature should be

bool getAttachedShaders(WebGLProgram*, Vector&lt;WebGLShader*&gt;&amp;, ExceptionCode&amp;);

so that additional errors can be signalled.


WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:224
 +          V8Proxy::setDOMException(SYNTAX_ERR);
This is also too stringent. Should be &quot;if (args.Length() &lt; 1)&quot;.


WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:173
 +      Vector&lt;WebGLShader*&gt; shaders = context-&gt;getAttachedShaders(program, ec);
If getAttachedShaders returns false, like it will if the context was lost, this binding should return null.


WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:231
 +      Vector&lt;WebGLShader*&gt; shaders = context-&gt;getAttachedShaders(program, ec);
Per above, this binding should return null if getAttachedShaders returns false.


WebCore/html/canvas/WebGLRenderingContext.cpp:1076
 +          ASSERT(count == numShaders);
It would be safer to change the signature of this function to return a boolean and return false in this case. This might happen for example if the context was spontaneously lost.


WebCore/html/canvas/WebGLRenderingContext.cpp:1079
 +              ASSERT(!shader);
I think this should return false for this case as well. I could imagine this could occur if the context were spontaneously lost.


WebCore/html/canvas/WebGLRenderingContext.cpp:1082
 +          delete []shaders;
Strange formatting. &quot;delete[] shaders;&quot;.


WebCore/html/canvas/WebGLRenderingContext.cpp:1073
 +          unsigned int* shaders = new unsigned int(numShaders);
new unsigned int[numShaders];</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244488</commentid>
    <comment_count>4</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-29 14:31:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 59977 [details])
&gt; This mostly looks good but there are a few issues.
&gt; 
&gt; 
&gt; WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:167
&gt;  +          return throwSyntaxError(exec);
&gt; This is too stringent. It&apos;s legal to supply extra arguments to a JavaScript function.

Done.

&gt; 
&gt; WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:170
&gt;  +      WebGLProgram* program = toWebGLProgram(exec-&gt;argument(0));
&gt; Double-check to see what happens when either null or a value which isn&apos;t a WebGLProgram is passed. Make sure this doesn&apos;t crash. Should probably raise a TypeError in some of these cases.
toWebGLProgram will return null if the value isn&apos;t a WebGLProgram.  Tested, no crash.

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.h:134
&gt;  +          Vector&lt;WebGLShader*&gt; getAttachedShaders(WebGLProgram*, ExceptionCode&amp;);
&gt; After more thought I think the signature should be
&gt; 
&gt; bool getAttachedShaders(WebGLProgram*, Vector&lt;WebGLShader*&gt;&amp;, ExceptionCode&amp;);
&gt; 
&gt; so that additional errors can be signalled.
Done.

&gt; 
&gt; 
&gt; WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:224
&gt;  +          V8Proxy::setDOMException(SYNTAX_ERR);
&gt; This is also too stringent. Should be &quot;if (args.Length() &lt; 1)&quot;.
Done.

&gt; 
&gt; 
&gt; WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp:173
&gt;  +      Vector&lt;WebGLShader*&gt; shaders = context-&gt;getAttachedShaders(program, ec);
&gt; If getAttachedShaders returns false, like it will if the context was lost, this binding should return null.
Done.

&gt; 
&gt; 
&gt; WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:231
&gt;  +      Vector&lt;WebGLShader*&gt; shaders = context-&gt;getAttachedShaders(program, ec);
&gt; Per above, this binding should return null if getAttachedShaders returns false.
Done.

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:1076
&gt;  +          ASSERT(count == numShaders);
&gt; It would be safer to change the signature of this function to return a boolean and return false in this case. This might happen for example if the context was spontaneously lost.
Done.

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:1079
&gt;  +              ASSERT(!shader);
&gt; I think this should return false for this case as well. I could imagine this could occur if the context were spontaneously lost.
Done.

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:1082
&gt;  +          delete []shaders;
&gt; Strange formatting. &quot;delete[] shaders;&quot;.
Use OwnArrayPtr, so no delete[].

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:1073
&gt;  +          unsigned int* shaders = new unsigned int(numShaders);
&gt; new unsigned int[numShaders];
Done with OwnArrayPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244489</commentid>
    <comment_count>5</comment_count>
      <attachid>60055</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-29 14:31:46 -0700</bug_when>
    <thetext>Created attachment 60055
revised patch: responding to kbr&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244518</commentid>
    <comment_count>6</comment_count>
      <attachid>60055</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-29 15:13:49 -0700</bug_when>
    <thetext>Comment on attachment 60055
revised patch: responding to kbr&apos;s review

Looks good. Note that http://codereview.chromium.org/2805047 needs to land in Chromium before this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244521</commentid>
    <comment_count>7</comment_count>
      <attachid>60055</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-29 15:19:13 -0700</bug_when>
    <thetext>Comment on attachment 60055
revised patch: responding to kbr&apos;s review

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244606</commentid>
    <comment_count>8</comment_count>
      <attachid>60055</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-29 19:28:40 -0700</bug_when>
    <thetext>Comment on attachment 60055
revised patch: responding to kbr&apos;s review

Clearing flags on attachment: 60055

Committed r62158: &lt;http://trac.webkit.org/changeset/62158&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244607</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-29 19:28:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59977</attachid>
            <date>2010-06-28 19:22:54 -0700</date>
            <delta_ts>2010-06-29 14:31:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>shaders.patch</filename>
            <type>text/plain</type>
            <size>16710</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjA3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMDYtMjggIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgZ2V0QXR0YWNoZWRTaGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTE3MgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwOiBKUyBiaW5kaW5nIGZvciBnZXRBdHRhY2hlZFNoYWRlcnMo
KS4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hl
ZFNoYWRlcnMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHA6IFY4IGJpbmRpbmcgZm9yIGdldEF0dGFjaGVkU2hhZGVycygpLgor
ICAgICAgICAoV2ViQ29yZTo6VjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hh
ZGVyc0NhbGxiYWNrKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRh
Y2hlZFNoYWRlcnMpOiBJbXBsZW1lbnRhdGlvbiBvZiBnZXRBdHRhY2hlZFNoYWRlcnMoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZmluZFNoYWRlcik6IEhlbHBl
ciBmdW5jdGlvbiB0byBmaW5kIGEgc2hhZGVyIG9iamVjdCBmcm9tIGl0cyBuYW1lLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWNsYXJhdGlvbiBvZiBn
ZXRBdHRhY2hlZFNoYWRlcnMoKS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaWRsOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogSW1wbGVtZW50YXRpb24gb2YgZ2V0QXR0YWNoZWRTaGFk
ZXJzKCkuCisKIDIwMTAtMDYtMjggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lv
biA2MjAxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDI2IEBAIGVudW0gV2hpY2hQ
cm9ncmFtQ2FsbCB7CiAgICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCiB9OwogCitKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMSkKKyAgICAgICAg
cmV0dXJuIHRocm93U3ludGF4RXJyb3IoZXhlYyk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSB0
b1dlYkdMUHJvZ3JhbShleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBWZWN0b3I8V2ViR0xT
aGFkZXIqPiBzaGFkZXJzID0gY29udGV4dC0+Z2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGxpc3Q7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNoYWRlcnMuc2l6ZSgpOyAr
K2lpKQorICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBzaGFk
ZXJzW2lpXSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBsaXN0KTsKK30KKwog
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMs
IGtCdWZmZXIpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjIwMTYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYsMjkgQEAgZW51bSBXaGljaFBy
b2dyYW1DYWxsIHsKICAgICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0KIH07CiAKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFk
ZXJzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5XZWJHTFJlbmRlcmluZ0NvbnRleHQuZ2V0QXR0YWNoZWRTaGFkZXJzKCkiKTsKKworICAg
IGlmIChhcmdzLkxlbmd0aCgpICE9IDEpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQgPSBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gVjhXZWJHTFByb2dyYW06
Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gVjhXZWJHTFByb2dyYW06OnRvTmF0aXZlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpIDogMDsKKyAgICBWZWN0b3I8V2ViR0xTaGFk
ZXIqPiBzaGFkZXJzID0gY29udGV4dC0+Z2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKKyAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisgICAgdjg6OkxvY2FsPHY4OjpB
cnJheT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhzaGFkZXJzLnNpemUoKSk7CisgICAgZm9yIChz
aXplX3QgaWkgPSAwOyBpaSA8IHNoYWRlcnMuc2l6ZSgpOyArK2lpKQorICAgICAgICBhcnJheS0+
U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaWkpLCB0b1Y4KHNoYWRlcnNbaWldKSk7CisgICAgcmV0dXJu
IGFycmF5OworfQorCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEJ1ZmZlclBhcmFtZXRlckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xSZW5kZXJpbmdDb250ZXh0LmdldEJ1ZmZlclBh
cmFtZXRlcigpIik7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCShyZXZpc2lvbiA2MjAxNikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2MCw2ICsxMDYwLDMw
IEBAIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmkKICAgICByZXR1cm4g
V2ViR0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7
CiB9CiAKK1ZlY3RvcjxXZWJHTFNoYWRlcio+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0
YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBWZWN0b3I8V2ViR0xTaGFkZXIqPiBzaGFkZXJP
YmplY3RzOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICAgICAg
cmV0dXJuIHNoYWRlck9iamVjdHM7CisgICAgaW50IG51bVNoYWRlcnMgPSAwOworICAgIG1fY29u
dGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9T
SEFERVJTLCAmbnVtU2hhZGVycyk7CisgICAgaWYgKG51bVNoYWRlcnMpIHsKKyAgICAgICAgc2hh
ZGVyT2JqZWN0cy5yZXNpemUobnVtU2hhZGVycyk7CisgICAgICAgIHVuc2lnbmVkIGludCogc2hh
ZGVycyA9IG5ldyB1bnNpZ25lZCBpbnQobnVtU2hhZGVycyk7CisgICAgICAgIGludCBjb3VudDsK
KyAgICAgICAgbV9jb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbnVtU2hhZGVy
cywgJmNvdW50LCBzaGFkZXJzKTsKKyAgICAgICAgQVNTRVJUKGNvdW50ID09IG51bVNoYWRlcnMp
OworICAgICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgbnVtU2hhZGVyczsgKytpaSkgeworICAg
ICAgICAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IGZpbmRTaGFkZXIoc2hhZGVyc1tpaV0pOwor
ICAgICAgICAgICAgQVNTRVJUKCFzaGFkZXIpOworICAgICAgICAgICAgc2hhZGVyT2JqZWN0c1tp
aV0gPSBzaGFkZXI7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIFtdc2hhZGVyczsKKyAgICB9
CisgICAgcmV0dXJuIHNoYWRlck9iamVjdHM7Cit9CisKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKQogewogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dy
YW0sIG5hbWUpOwpAQCAtMzE4MCw2ICszMjA0LDE4IEBAIFdlYkdMQnVmZmVyKiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZpbmQKICAgICByZXR1cm4gMDsKIH0KIAorV2ViR0xTaGFkZXIqIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZmluZFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IG9iaikKK3sKKyAg
ICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgSGFzaFNldDxSZWZQdHI8Q2FudmFz
T2JqZWN0PiA+OjppdGVyYXRvciBwZW5kID0gbV9jYW52YXNPYmplY3RzLmVuZCgpOworICAgIGZv
ciAoSGFzaFNldDxSZWZQdHI8Q2FudmFzT2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1fY2FudmFz
T2JqZWN0cy5iZWdpbigpOyBpdCAhPSBwZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+
aXNTaGFkZXIoKSAmJiAoKml0KS0+b2JqZWN0KCkgPT0gb2JqKQorICAgICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xTaGFkZXIqPigoKml0KS5nZXQoKSk7CisgICAgfQorICAg
IHJldHVybiAwOworfQorCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRC
b29sZWFuUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7CiAgICAgdW5zaWduZWQgY2hh
ciB2YWx1ZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAkocmV2aXNpb24gNjIwMTYpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDggQEAgY2xhc3MgV2Vi
S2l0Q1NTTWF0cml4OwogICAgICAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0
aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICAgICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZVVuaWZv
cm0oV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwog
CisgICAgICAgIFZlY3RvcjxXZWJHTFNoYWRlcio+IGdldEF0dGFjaGVkU2hhZGVycyhXZWJHTFBy
b2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CisKICAgICAgICAgaW50ICBnZXRBdHRyaWJMb2NhdGlv
bihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgICAgIFdlYkdMR2V0
SW5mbyBnZXRCdWZmZXJQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTMxOCw2ICszMjAsNyBAQCBjbGFzcyBXZWJL
aXRDU1NNYXRyaXg7CiAgICAgICAgIFdlYkdMVGV4dHVyZSogZmluZFRleHR1cmUoUGxhdGZvcm0z
RE9iamVjdCk7CiAgICAgICAgIFdlYkdMUmVuZGVyYnVmZmVyKiBmaW5kUmVuZGVyYnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QpOwogICAgICAgICBXZWJHTEJ1ZmZlciogZmluZEJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0KTsKKyAgICAgICAgV2ViR0xTaGFkZXIqIGZpbmRTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCk7CiAKICAgICAgICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKICAgICAgICAgdm9p
ZCBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoYm9vbCBjaGFuZ2VkKQpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAkocmV2aXNpb24gNjIwMTYp
CisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTUzNiw3ICs1MzYsOSBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIFdlYkdM
QWN0aXZlSW5mbyBnZXRBY3RpdmVVbmlmb3JtKGluIFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBpbiB1
bnNpZ25lZCBsb25nIGluZGV4KQogICAgICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwog
Ci0gICAgICAgIC8vIFdlYkdMU2hhZGVyQXJyYXkgZ2xHZXRBdHRhY2hlZFNoYWRlcnMoR0x1aW50
IHByb2dyYW0pOworICAgICAgICAvLyBBcnJheSBnZXRBdHRhY2hlZFNoYWRlcnMoR0x1aW50IHBy
b2dyYW0pIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBnZXRB
dHRhY2hlZFNoYWRlcnMoR0x1aW50IHByb2dyYW0pCisgICAgICAgICAgICByYWlzZXMgKERPTUV4
Y2VwdGlvbik7CiAKICAgICAgICAgaW50ICAgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKGluIFdl
YkdMUHJvZ3JhbSBwcm9ncmFtLCBpbiBET01TdHJpbmcgbmFtZSk7CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDYyMDE2
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NzMsNiArNTczLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIGdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEFjdGl2ZUluZm8mKTsKICAgICAgICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOwog
CisgICAgICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
aW50IG1heENvdW50LCBpbnQqIGNvdW50LCB1bnNpZ25lZCBpbnQqIHNoYWRlcnMpOworCiAgICAg
ICAgIGludCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKIAogICAgICAgICB2b2lkIGdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUsIHVu
c2lnbmVkIGNoYXIqIHZhbHVlKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2MjAxNikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC03MzYsNiArNzM2LDE2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEFjdGl2ZVVuaWZvcm0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgaW50IG1h
eENvdW50LCBpbnQqIGNvdW50LCB1bnNpZ25lZCBpbnQqIHNoYWRlcnMpCit7CisgICAgaWYgKCFw
cm9ncmFtIHx8ICFwcm9ncmFtLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhzdGF0aWNfY2Fz
dDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsK
K30KKwogaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpZiAoIXByb2dyYW0pCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMDc2KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA2LTI4ICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50IGdldEF0dGFjaGVkU2hhZGVycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzExNzIKKworICAgICAgICAqIHB1
YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oOiBEZWNsYXJhdGlvbiBvZiBnZXRBdHRhY2hlZFNo
YWRlcnMoKS4KKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOiBJbXBsZW1lbnRh
dGlvbiBvZiBnZXRBdHRhY2hlZFNoYWRlcnMoKS4KKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbC5jcHA6IERpdHRvLgorICAgICAgICAqIHNyYy9XZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsLmg6IERlY2xhcmF0aW9uIG9mIGdldEF0dGFjaGVkU2hhZGVy
cygpLgorCiAyMDEwLTA2LTIzICBKb2huIEdyZWdnICA8am9obm55Z0Bnb29nbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjIwMTYpCisrKyBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2OSw2ICsxNjksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZUF0
dHJpYihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mKSA9
IDA7CiAgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBwcm9ncmFtLCB1
bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJikgPSAwOwogCisgICAgdmlydHVhbCB2b2lk
IGdldEF0dGFjaGVkU2hhZGVycyhXZWJHTElkIHByb2dyYW0sIGludCBtYXhDb3VudCwgaW50KiBj
b3VudCwgdW5zaWduZWQgaW50KiBzaGFkZXJzKSA9IDA7CisKICAgICB2aXJ0dWFsIGludCAgZ2V0
QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1lKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSwgdW5zaWdu
ZWQgY2hhciogdmFsdWUpID0gMDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0QuY3BwCShyZXZpc2lvbiA2MjAxNikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDggQEAgcHVi
bGljOgogICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5z
aWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOwogICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9y
bShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8m
KTsKIAorICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
aW50IG1heENvdW50LCBpbnQqIGNvdW50LCB1bnNpZ25lZCBpbnQqIHNoYWRlcnMpOworCiAgICAg
aW50ICBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUp
OwogCiAgICAgdm9pZCBnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNpZ25lZCBj
aGFyKiB2YWx1ZSk7CkBAIC01NTYsNiArNTU4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6bmFtZSh0MSAKICAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAg
ICAgICAgICAgXAogfQogCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNF9YMShuYW1lLCB0MSwg
dDIsIHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQx
IGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKEVYVFJB
Q1QoYTEpLCBhMiwgYTMsIGE0KTsgICAgIFwKK30KKwogI2RlZmluZSBERUxFR0FURV9UT19JTVBM
XzRfWDQobmFtZSwgdDEsIHQyLCB0MywgdDQpICAgIFwKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKIHsgXApAQCAtNzM0
LDYgKzc0Miw4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QWN0aXYKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorREVMRUdBVEVfVE9fSU1QTF80X1gxKGdldEF0dGFjaGVkU2hh
ZGVycywgV2ViR0xQcm9ncmFtKiwgaW50LCBpbnQqLCB1bnNpZ25lZCBpbnQqKQorCiBpbnQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJuIG1faW1wbC0+Z2V0QXR0
cmliTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKQEAgLTEx
MzksNiArMTE0OSw4IEBAIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZ2VuZXJhdGVNaXBtYXAsIHUK
IERFTEVHQVRFX1RPX0lOVEVSTkFMXzNSKGdldEFjdGl2ZUF0dHJpYiwgV2ViR0xQcm9ncmFtKiwg
dW5zaWduZWQgbG9uZywgQWN0aXZlSW5mbyYsIGJvb2wpCiBERUxFR0FURV9UT19JTlRFUk5BTF8z
UihnZXRBY3RpdmVVbmlmb3JtLCBXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBsb25nLCBBY3RpdmVJ
bmZvJiwgYm9vbCkKIAorREVMRUdBVEVfVE9fSU5URVJOQUxfNChnZXRBdHRhY2hlZFNoYWRlcnMs
IFdlYkdMUHJvZ3JhbSosIGludCwgaW50KiwgdW5zaWduZWQgaW50KikKKwogREVMRUdBVEVfVE9f
SU5URVJOQUxfMlIoZ2V0QXR0cmliTG9jYXRpb24sIFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmlu
ZyYsIGludCkKIAogREVMRUdBVEVfVE9fSU5URVJOQUxfMihnZXRCb29sZWFudiwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgY2hhciopCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHJldmlzaW9uIDYyMDE2
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1OSw2ICsxMDU5LDggQEAgYm9vbCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZQogICAgIHJldHVybiB0cnVlOwogfQogCitERUxFR0FU
RV9UT19HTF80KGdldEF0dGFjaGVkU2hhZGVycywgR2V0QXR0YWNoZWRTaGFkZXJzLCBXZWJHTElk
LCBpbnQsIGludCosIHVuc2lnbmVkIGludCopCisKIERFTEVHQVRFX1RPX0dMXzJSKGdldEF0dHJp
YkxvY2F0aW9uLCBHZXRBdHRyaWJMb2NhdGlvbiwgV2ViR0xJZCwgY29uc3QgY2hhciosIGludCkK
IAogREVMRUdBVEVfVE9fR0xfMihnZXRCb29sZWFudiwgR2V0Qm9vbGVhbnYsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGNoYXIqKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgJKHJldmlzaW9uIDYyMDE2KQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGdldEFjdGl2ZUF0dHJpYihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFj
dGl2ZUluZm8mKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShXZWJHTElkIHBy
b2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mKTsKIAorICAgIHZpcnR1YWwg
dm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xJZCBwcm9ncmFtLCBpbnQgbWF4Q291bnQsIGlu
dCogY291bnQsIHVuc2lnbmVkIGludCogc2hhZGVycyk7CisKICAgICB2aXJ0dWFsIGludCAgZ2V0
QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1lKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNpZ25lZCBj
aGFyKiB2YWx1ZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjA3NikKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTI4ICBaaGVu
eWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGdldEF0dGFjaGVkU2hhZGVycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzExNzIKKworICAgICAgICAq
IGZhc3QvY2FudmFzL3dlYmdsL2dsLW9iamVjdC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0OiBBZGQg
YSB0ZXN0IGNhc2UgZm9yIGdldEF0dGFjaGVkU2hhZGVycygpLgorICAgICAgICAqIGZhc3QvY2Fu
dmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9nbC1vYmplY3QtZ2V0LWNhbGxzLmpzOiBEaXR0by4KKwog
MjAxMC0wNi0yOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvZ2wtb2JqZWN0LWdldC1jYWxscy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtb2JqZWN0LWdldC1jYWxscy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDYyMDE2KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtb2Jq
ZWN0LWdldC1jYWxscy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTcsNiArNyw4IEBA
IFBBU1MgZ2wuZ2V0U2hhZGVySW5mb0xvZyhlcnJvclZlcnQpIGlzIHAKIFBBU1MgZ2wuZ2V0U2hh
ZGVySW5mb0xvZyhlcnJvckZyYWcpIGlzIHBhcnNlRXJyb3IKIFBBU1MgZ2wuZ2V0U2hhZGVyU291
cmNlKGVycm9yVmVydCkgaXMgZXJyb3JWZXJ0U3RyaW5nCiBQQVNTIGdsLmdldFNoYWRlclNvdXJj
ZShlcnJvckZyYWcpIGlzIGVycm9yRnJhZ1N0cmluZworUEFTUyBzaGFkZXJzLmxlbmd0aCBpcyAy
CitQQVNTIHNoYWRlcnNbMF0gPT0gc3RhbmRhcmRWZXJ0ICYmIHNoYWRlcnNbMV0gPT0gc3RhbmRh
cmRGcmFnIHx8IHNoYWRlcnNbMV0gPT0gc3RhbmRhcmRWZXJ0ICYmIHNoYWRlcnNbMF0gPT0gc3Rh
bmRhcmRGcmFnIGlzIHRydWUKIFBBU1MgZ2wuZ2V0QnVmZmVyUGFyYW1ldGVyKGdsLkFSUkFZX0JV
RkZFUiwgZ2wuQlVGRkVSX1NJWkUpIGlzIDE2CiBQQVNTIGdsLmdldEJ1ZmZlclBhcmFtZXRlcihn
bC5BUlJBWV9CVUZGRVIsIGdsLkJVRkZFUl9VU0FHRSkgaXMgZ2wuRFlOQU1JQ19EUkFXCiBQQVNT
IGdsLmdldEVycm9yKCkgaXMgMApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
c2NyaXB0LXRlc3RzL2dsLW9iamVjdC1nZXQtY2FsbHMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2dsLW9iamVjdC1nZXQtY2FsbHMu
anMJKHJldmlzaW9uIDYyMDE2KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2Ny
aXB0LXRlc3RzL2dsLW9iamVjdC1nZXQtY2FsbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDkgQEAgc2hvdWxkQmUoJ2dsLmdldFNoYWRlckluZm9Mb2coZXJyb3JWZXJ0KQogc2hvdWxk
QmUoJ2dsLmdldFNoYWRlckluZm9Mb2coZXJyb3JGcmFnKScsICdwYXJzZUVycm9yJyk7CiBzaG91
bGRCZSgnZ2wuZ2V0U2hhZGVyU291cmNlKGVycm9yVmVydCknLCAnZXJyb3JWZXJ0U3RyaW5nJyk7
CiBzaG91bGRCZSgnZ2wuZ2V0U2hhZGVyU291cmNlKGVycm9yRnJhZyknLCAnZXJyb3JGcmFnU3Ry
aW5nJyk7Cit2YXIgc2hhZGVycyA9IGdsLmdldEF0dGFjaGVkU2hhZGVycyhzdGFuZGFyZFByb2dy
YW0pOworc2hvdWxkQmUoJ3NoYWRlcnMubGVuZ3RoJywgJzInKTsKK3Nob3VsZEJlVHJ1ZSgnc2hh
ZGVyc1swXSA9PSBzdGFuZGFyZFZlcnQgJiYgc2hhZGVyc1sxXSA9PSBzdGFuZGFyZEZyYWcgfHwg
c2hhZGVyc1sxXSA9PSBzdGFuZGFyZFZlcnQgJiYgc2hhZGVyc1swXSA9PSBzdGFuZGFyZEZyYWcn
KTsKIAogLy8gVGVzdCBnZXRCdWZmZXJQYXJhbWV0ZXIKIHZhciBidWZmZXIgPSBnbC5jcmVhdGVC
dWZmZXIoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60055</attachid>
            <date>2010-06-29 14:31:46 -0700</date>
            <delta_ts>2010-06-29 19:28:40 -0700</delta_ts>
            <desc>revised patch: responding to kbr&apos;s review</desc>
            <filename>shaders.patch</filename>
            <type>text/plain</type>
            <size>17569</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjA3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMDYtMjggIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgZ2V0QXR0YWNoZWRTaGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTE3MgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwOiBKUyBiaW5kaW5nIGZvciBnZXRBdHRhY2hlZFNoYWRlcnMo
KS4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hl
ZFNoYWRlcnMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHA6IFY4IGJpbmRpbmcgZm9yIGdldEF0dGFjaGVkU2hhZGVycygpLgor
ICAgICAgICAoV2ViQ29yZTo6VjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hh
ZGVyc0NhbGxiYWNrKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRh
Y2hlZFNoYWRlcnMpOiBJbXBsZW1lbnRhdGlvbiBvZiBnZXRBdHRhY2hlZFNoYWRlcnMoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZmluZFNoYWRlcik6IEhlbHBl
ciBmdW5jdGlvbiB0byBmaW5kIGEgc2hhZGVyIG9iamVjdCBmcm9tIGl0cyBuYW1lLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWNsYXJhdGlvbiBvZiBn
ZXRBdHRhY2hlZFNoYWRlcnMoKS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaWRsOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogSW1wbGVtZW50YXRpb24gb2YgZ2V0QXR0YWNoZWRTaGFk
ZXJzKCkuCisKIDIwMTAtMDYtMjggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lv
biA2MjAxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDI5IEBAIGVudW0gV2hpY2hQ
cm9ncmFtQ2FsbCB7CiAgICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCiB9OwogCitKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICBy
ZXR1cm4gdGhyb3dTeW50YXhFcnJvcihleGVjKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJl
bmRlcmluZ0NvbnRleHQqPihpbXBsKCkpOworICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IHRv
V2ViR0xQcm9ncmFtKGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFZlY3RvcjxXZWJHTFNo
YWRlcio+IHNoYWRlcnM7CisgICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC0+Z2V0QXR0YWNoZWRT
aGFkZXJzKHByb2dyYW0sIHNoYWRlcnMsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgfQorICAgIGlmICghc3VjY2VlZCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlp
IDwgc2hhZGVycy5zaXplKCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0KCksIHNoYWRlcnNbaWldKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5
KGV4ZWMsIGxpc3QpOworfQorCiBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRC
dWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBnZXRPYmplY3RQ
YXJhbWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwCShyZXZpc2lvbiA2MjAxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDYgKzIx
NiwzMiBAQCBlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgewogICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBr
VW5pZm9ybQogfTsKIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQoreworICAgIElOQ19TVEFUUygiRE9NLldlYkdMUmVuZGVyaW5nQ29udGV4dC5nZXRBdHRhY2hl
ZFNoYWRlcnMoKSIpOworCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKSB7CisgICAgICAgIFY4
UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gVjhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSA9IFY4V2ViR0xQcm9ncmFtOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4V2ViR0xQcm9ncmFt
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDA7Cisg
ICAgVmVjdG9yPFdlYkdMU2hhZGVyKj4gc2hhZGVyczsKKyAgICBib29sIHN1Y2NlZWQgPSBjb250
ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgc2hhZGVycywgZWMpOworICAgIGlmIChl
YykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKyAgICBpZiAoIXN1Y2NlZWQpCisgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2
ODo6QXJyYXk6Ok5ldyhzaGFkZXJzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBp
aSA8IHNoYWRlcnMuc2l6ZSgpOyArK2lpKQorICAgICAgICBhcnJheS0+U2V0KHY4OjpJbnRlZ2Vy
OjpOZXcoaWkpLCB0b1Y4KHNoYWRlcnNbaWldKSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBh
cmFtZXRlckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uV2ViR0xSZW5kZXJpbmdDb250ZXh0LmdldEJ1ZmZlclBhcmFtZXRlcigpIik7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShy
ZXZpc2lvbiA2MjAxNikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIldlYkdM
VW5pZm9ybUxvY2F0aW9uLmgiCiAKICNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CisjaW5jbHVk
ZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTA2MCw2
ICsxMDYxLDMzIEBAIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmkKICAg
ICByZXR1cm4gV2ViR0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGlu
Zm8uc2l6ZSk7CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNo
YWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBWZWN0b3I8V2ViR0xTaGFkZXIqPiYgc2hhZGVy
T2JqZWN0cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBzaGFkZXJPYmplY3RzLmNsZWFyKCk7CisgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHBy
b2dyYW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50IG51bVNoYWRlcnMgPSAwOwor
ICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpB
VFRBQ0hFRF9TSEFERVJTLCAmbnVtU2hhZGVycyk7CisgICAgaWYgKG51bVNoYWRlcnMpIHsKKyAg
ICAgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgaW50PiBzaGFkZXJzKG5ldyB1bnNpZ25lZCBpbnRb
bnVtU2hhZGVyc10pOworICAgICAgICBpbnQgY291bnQ7CisgICAgICAgIG1fY29udGV4dC0+Z2V0
QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG51bVNoYWRlcnMsICZjb3VudCwgc2hhZGVycy5nZXQo
KSk7CisgICAgICAgIGlmIChjb3VudCAhPSBudW1TaGFkZXJzKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBzaGFkZXJPYmplY3RzLnJlc2l6ZShudW1TaGFkZXJzKTsKKyAgICAg
ICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IG51bVNoYWRlcnM7ICsraWkpIHsKKyAgICAgICAgICAg
IFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBmaW5kU2hhZGVyKHNoYWRlcnNbaWldKTsKKyAgICAgICAg
ICAgIGlmICghc2hhZGVyKSB7CisgICAgICAgICAgICAgICAgc2hhZGVyT2JqZWN0cy5jbGVhcigp
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHNoYWRlck9iamVjdHNbaWldID0gc2hhZGVyOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJMb2Nh
dGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKQEAgLTMx
ODAsNiArMzIwOCwxOCBAQCBXZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmaW5k
CiAgICAgcmV0dXJuIDA7CiB9CiAKK1dlYkdMU2hhZGVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZpbmRTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAg
ICAgIHJldHVybiAwOworICAgIEhhc2hTZXQ8UmVmUHRyPENhbnZhc09iamVjdD4gPjo6aXRlcmF0
b3IgcGVuZCA9IG1fY2FudmFzT2JqZWN0cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRy
PENhbnZhc09iamVjdD4gPjo6aXRlcmF0b3IgaXQgPSBtX2NhbnZhc09iamVjdHMuYmVnaW4oKTsg
aXQgIT0gcGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPmlzU2hhZGVyKCkgJiYgKCpp
dCktPm9iamVjdCgpID09IG9iaikKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFdlYkdMU2hhZGVyKj4oKCppdCkuZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwog
V2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9vbGVhblBhcmFtZXRlcih1
bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIHVuc2lnbmVkIGNoYXIgdmFsdWU7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDYy
MDE2KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAg
ICAgICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZUF0dHJpYihXZWJHTFBy
b2dyYW0qLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIFBh
c3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSos
IHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgICAgICBib29sIGdl
dEF0dGFjaGVkU2hhZGVycyhXZWJHTFByb2dyYW0qLCBWZWN0b3I8V2ViR0xTaGFkZXIqPiYsIEV4
Y2VwdGlvbkNvZGUmKTsKKwogICAgICAgICBpbnQgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJv
Z3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICAgICAgV2ViR0xHZXRJbmZvIGdldEJ1
ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwg
RXhjZXB0aW9uQ29kZSYpOwpAQCAtMzE4LDYgKzMyMCw3IEBAIGNsYXNzIFdlYktpdENTU01hdHJp
eDsKICAgICAgICAgV2ViR0xUZXh0dXJlKiBmaW5kVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KTsK
ICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXIqIGZpbmRSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9i
amVjdCk7CiAgICAgICAgIFdlYkdMQnVmZmVyKiBmaW5kQnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qp
OworICAgICAgICBXZWJHTFNoYWRlciogZmluZFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KTsKIAog
ICAgICAgICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwogICAgICAgICB2b2lkIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChib29sIGNoYW5nZWQpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCShyZXZpc2lvbiA2MjAxNikKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtNTM2LDcgKzUzNiw5IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgV2ViR0xBY3RpdmVJbmZv
IGdldEFjdGl2ZVVuaWZvcm0oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIHVuc2lnbmVkIGxv
bmcgaW5kZXgpCiAgICAgICAgICAgICByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAKLSAgICAgICAg
Ly8gV2ViR0xTaGFkZXJBcnJheSBnbEdldEF0dGFjaGVkU2hhZGVycyhHTHVpbnQgcHJvZ3JhbSk7
CisgICAgICAgIC8vIEFycmF5IGdldEF0dGFjaGVkU2hhZGVycyhHTHVpbnQgcHJvZ3JhbSkgcmFp
c2VzIChET01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIGdldEF0dGFjaGVkU2hh
ZGVycyhHTHVpbnQgcHJvZ3JhbSkKKyAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsK
IAogICAgICAgICBpbnQgICAgICAgICAgZ2V0QXR0cmliTG9jYXRpb24oaW4gV2ViR0xQcm9ncmFt
IHByb2dyYW0sIGluIERPTVN0cmluZyBuYW1lKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjIwMTYpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3Myw2ICs1NzMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgZ2V0
QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwg
QWN0aXZlSW5mbyYpOwogICAgICAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7CiAKKyAgICAgICAg
dm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBpbnQgbWF4Q291
bnQsIGludCogY291bnQsIHVuc2lnbmVkIGludCogc2hhZGVycyk7CisKICAgICAgICAgaW50ICBn
ZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAg
ICAgICAgIHZvaWQgZ2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSwgdW5zaWduZWQgY2hh
ciogdmFsdWUpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHJldmlzaW9uIDYyMDE2KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTczNiw2ICs3MzYsMTYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZl
VW5pZm9ybQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBpbnQgbWF4Q291bnQsIGlu
dCogY291bnQsIHVuc2lnbmVkIGludCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dyYW0gfHwg
IXByb2dyYW0tPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURf
VkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKKyAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHN0YXRpY19jYXN0PEdMdWludD4o
cHJvZ3JhbS0+b2JqZWN0KCkpLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQorCiBpbnQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmICghcHJvZ3JhbSkKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjIwNzYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMjggIFpoZW55YW8gTW8gIDx6bW9A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgZ2V0QXR0YWNoZWRTaGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTE3MgorCisgICAgICAgICogcHVibGljL1dlYkdy
YXBoaWNzQ29udGV4dDNELmg6IERlY2xhcmF0aW9uIG9mIGdldEF0dGFjaGVkU2hhZGVycygpLgor
ICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6IEltcGxlbWVudGF0aW9uIG9mIGdl
dEF0dGFjaGVkU2hhZGVycygpLgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmNwcDogRGl0dG8uCisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuaDogRGVjbGFyYXRpb24gb2YgZ2V0QXR0YWNoZWRTaGFkZXJzKCkuCisKIDIw
MTAtMDYtMjMgIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgS2VudCBUYW11cmEuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdy
YXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2MjAxNikKKysrIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDYg
KzE2OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFdlYkdM
SWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXR0YWNo
ZWRTaGFkZXJzKFdlYkdMSWQgcHJvZ3JhbSwgaW50IG1heENvdW50LCBpbnQqIGNvdW50LCB1bnNp
Z25lZCBpbnQqIHNoYWRlcnMpID0gMDsKKwogICAgIHZpcnR1YWwgaW50ICBnZXRBdHRyaWJMb2Nh
dGlvbihXZWJHTElkIHByb2dyYW0sIGNvbnN0IGNoYXIqIG5hbWUpID0gMDsKIAogICAgIHZpcnR1
YWwgdm9pZCBnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNpZ25lZCBjaGFyKiB2
YWx1ZSkgPSAwOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5j
cHAJKHJldmlzaW9uIDYyMDE2KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRl
eHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsOCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25n
IGluZGV4LCBBY3RpdmVJbmZvJik7CiAgICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOwogCisgICAg
dm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBpbnQgbWF4Q291
bnQsIGludCogY291bnQsIHVuc2lnbmVkIGludCogc2hhZGVycyk7CisKICAgICBpbnQgIGdldEF0
dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICB2
b2lkIGdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUsIHVuc2lnbmVkIGNoYXIqIHZhbHVl
KTsKQEAgLTU1Niw2ICs1NTgsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpu
YW1lKHQxIAogICAgIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCk7ICAgICAgICAgICAgICBc
CiB9CiAKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF80X1gxKG5hbWUsIHQxLCB0MiwgdDMsIHQ0
KSAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEy
LCB0MyBhMywgdDQgYTQpICBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoRVhUUkFDVChhMSksIGEy
LCBhMywgYTQpOyAgICAgXAorfQorCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNF9YNChuYW1l
LCB0MSwgdDIsIHQzLCB0NCkgICAgXAogdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpu
YW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAogeyBcCkBAIC03MzQsNiArNzQyLDgg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdgogICAgIHJldHVybiB0
cnVlOwogfQogCitERUxFR0FURV9UT19JTVBMXzRfWDEoZ2V0QXR0YWNoZWRTaGFkZXJzLCBXZWJH
TFByb2dyYW0qLCBpbnQsIGludCosIHVuc2lnbmVkIGludCopCisKIGludCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICByZXR1cm4gbV9pbXBsLT5nZXRBdHRyaWJMb2NhdGlv
bihFWFRSQUNUKHByb2dyYW0pLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTEzOSw2ICsxMTQ5
LDggQEAgREVMRUdBVEVfVE9fSU5URVJOQUxfMShnZW5lcmF0ZU1pcG1hcCwgdQogREVMRUdBVEVf
VE9fSU5URVJOQUxfM1IoZ2V0QWN0aXZlQXR0cmliLCBXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBs
b25nLCBBY3RpdmVJbmZvJiwgYm9vbCkKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzNSKGdldEFjdGl2
ZVVuaWZvcm0sIFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcsIEFjdGl2ZUluZm8mLCBib29s
KQogCitERUxFR0FURV9UT19JTlRFUk5BTF80KGdldEF0dGFjaGVkU2hhZGVycywgV2ViR0xQcm9n
cmFtKiwgaW50LCBpbnQqLCB1bnNpZ25lZCBpbnQqKQorCiBERUxFR0FURV9UT19JTlRFUk5BTF8y
UihnZXRBdHRyaWJMb2NhdGlvbiwgV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgaW50KQog
CiBERUxFR0FURV9UT19JTlRFUk5BTF8yKGdldEJvb2xlYW52LCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBjaGFyKikKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gNjIwMTYpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDU5LDYgKzEwNTksOCBAQCBib29sIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OmdlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0RFTEVHQVRFX1RPX0dMXzQo
Z2V0QXR0YWNoZWRTaGFkZXJzLCBHZXRBdHRhY2hlZFNoYWRlcnMsIFdlYkdMSWQsIGludCwgaW50
KiwgdW5zaWduZWQgaW50KikKKwogREVMRUdBVEVfVE9fR0xfMlIoZ2V0QXR0cmliTG9jYXRpb24s
IEdldEF0dHJpYkxvY2F0aW9uLCBXZWJHTElkLCBjb25zdCBjaGFyKiwgaW50KQogCiBERUxFR0FU
RV9UT19HTF8yKGdldEJvb2xlYW52LCBHZXRCb29sZWFudiwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgY2hhciopCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkocmV2aXNpb24gNjIwMTYpCisrKyBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMxLDYgKzEzMSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZl
QXR0cmliKFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYp
OwogICAgIHZpcnR1YWwgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMSWQgcHJvZ3JhbSwgdW5z
aWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOwogCisgICAgdmlydHVhbCB2b2lkIGdldEF0
dGFjaGVkU2hhZGVycyhXZWJHTElkIHByb2dyYW0sIGludCBtYXhDb3VudCwgaW50KiBjb3VudCwg
dW5zaWduZWQgaW50KiBzaGFkZXJzKTsKKwogICAgIHZpcnR1YWwgaW50ICBnZXRBdHRyaWJMb2Nh
dGlvbihXZWJHTElkIHByb2dyYW0sIGNvbnN0IGNoYXIqIG5hbWUpOwogCiAgICAgdmlydHVhbCB2
b2lkIGdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUsIHVuc2lnbmVkIGNoYXIqIHZhbHVl
KTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMDc2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYtMjggIFpoZW55YW8gTW8gIDx6
bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbXBsZW1lbnQgZ2V0QXR0YWNoZWRTaGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTE3MgorCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvZ2wtb2JqZWN0LWdldC1jYWxscy1leHBlY3RlZC50eHQ6IEFkZCBhIHRlc3QgY2Fz
ZSBmb3IgZ2V0QXR0YWNoZWRTaGFkZXJzKCkuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wv
c2NyaXB0LXRlc3RzL2dsLW9iamVjdC1nZXQtY2FsbHMuanM6IERpdHRvLgorCiAyMDEwLTA2LTI4
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1vYmpl
Y3QtZ2V0LWNhbGxzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9nbC1vYmplY3QtZ2V0LWNhbGxzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NjIwMTYpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1vYmplY3QtZ2V0LWNh
bGxzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNyw2ICs3LDEzIEBAIFBBU1MgZ2wu
Z2V0U2hhZGVySW5mb0xvZyhlcnJvclZlcnQpIGlzIHAKIFBBU1MgZ2wuZ2V0U2hhZGVySW5mb0xv
ZyhlcnJvckZyYWcpIGlzIHBhcnNlRXJyb3IKIFBBU1MgZ2wuZ2V0U2hhZGVyU291cmNlKGVycm9y
VmVydCkgaXMgZXJyb3JWZXJ0U3RyaW5nCiBQQVNTIGdsLmdldFNoYWRlclNvdXJjZShlcnJvckZy
YWcpIGlzIGVycm9yRnJhZ1N0cmluZworUEFTUyBzaGFkZXJzLmxlbmd0aCBpcyAyCitQQVNTIHNo
YWRlcnNbMF0gPT0gc3RhbmRhcmRWZXJ0ICYmIHNoYWRlcnNbMV0gPT0gc3RhbmRhcmRGcmFnIHx8
IHNoYWRlcnNbMV0gPT0gc3RhbmRhcmRWZXJ0ICYmIHNoYWRlcnNbMF0gPT0gc3RhbmRhcmRGcmFn
IGlzIHRydWUKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRB
dHRhY2hlZFNoYWRlcnMobnVsbCkgaXMgdW5kZWZpbmVkLgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLklOVkFMSURfVkFMVUUKK1BBU1MgZ2wuZ2V0QXR0YWNoZWRTaGFkZXJzKHN0YW5kYXJkVmVy
dCkgaXMgdW5kZWZpbmVkLgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfVkFMVUUK
IFBBU1MgZ2wuZ2V0QnVmZmVyUGFyYW1ldGVyKGdsLkFSUkFZX0JVRkZFUiwgZ2wuQlVGRkVSX1NJ
WkUpIGlzIDE2CiBQQVNTIGdsLmdldEJ1ZmZlclBhcmFtZXRlcihnbC5BUlJBWV9CVUZGRVIsIGds
LkJVRkZFUl9VU0FHRSkgaXMgZ2wuRFlOQU1JQ19EUkFXCiBQQVNTIGdsLmdldEVycm9yKCkgaXMg
MApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2dsLW9i
amVjdC1nZXQtY2FsbHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvc2NyaXB0LXRlc3RzL2dsLW9iamVjdC1nZXQtY2FsbHMuanMJKHJldmlzaW9uIDYyMDE2
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2dsLW9iamVj
dC1nZXQtY2FsbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDE0IEBAIHNob3VsZEJl
KCdnbC5nZXRTaGFkZXJJbmZvTG9nKGVycm9yVmVydCkKIHNob3VsZEJlKCdnbC5nZXRTaGFkZXJJ
bmZvTG9nKGVycm9yRnJhZyknLCAncGFyc2VFcnJvcicpOwogc2hvdWxkQmUoJ2dsLmdldFNoYWRl
clNvdXJjZShlcnJvclZlcnQpJywgJ2Vycm9yVmVydFN0cmluZycpOwogc2hvdWxkQmUoJ2dsLmdl
dFNoYWRlclNvdXJjZShlcnJvckZyYWcpJywgJ2Vycm9yRnJhZ1N0cmluZycpOwordmFyIHNoYWRl
cnMgPSBnbC5nZXRBdHRhY2hlZFNoYWRlcnMoc3RhbmRhcmRQcm9ncmFtKTsKK3Nob3VsZEJlKCdz
aGFkZXJzLmxlbmd0aCcsICcyJyk7CitzaG91bGRCZVRydWUoJ3NoYWRlcnNbMF0gPT0gc3RhbmRh
cmRWZXJ0ICYmIHNoYWRlcnNbMV0gPT0gc3RhbmRhcmRGcmFnIHx8IHNoYWRlcnNbMV0gPT0gc3Rh
bmRhcmRWZXJ0ICYmIHNoYWRlcnNbMF0gPT0gc3RhbmRhcmRGcmFnJyk7CitzaG91bGRCZSgnZ2wu
Z2V0RXJyb3IoKScsICdnbC5OT19FUlJPUicpOworc2hvdWxkQmVVbmRlZmluZWQoJ2dsLmdldEF0
dGFjaGVkU2hhZGVycyhudWxsKScpOworc2hvdWxkQmUoJ2dsLmdldEVycm9yKCknLCAnZ2wuSU5W
QUxJRF9WQUxVRScpOworc2hvdWxkQmVVbmRlZmluZWQoJ2dsLmdldEF0dGFjaGVkU2hhZGVycyhz
dGFuZGFyZFZlcnQpJyk7CitzaG91bGRCZSgnZ2wuZ2V0RXJyb3IoKScsICdnbC5JTlZBTElEX1ZB
TFVFJyk7CiAKIC8vIFRlc3QgZ2V0QnVmZmVyUGFyYW1ldGVyCiB2YXIgYnVmZmVyID0gZ2wuY3Jl
YXRlQnVmZmVyKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>