<?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>40175</bug_id>
          
          <creation_ts>2010-06-04 11:30:22 -0700</creation_ts>
          <short_desc>Bring framebuffer functions to GLES2 conformance</short_desc>
          <delta_ts>2010-06-23 13:01:31 -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>PC</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>
          
          <blocked>29230</blocked>
    
    <blocked>40631</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>234305</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-04 11:30:22 -0700</bug_when>
    <thetext>1) target has to be FRAMEBUFFER
2) attachment has to be COLOR0, DEPTH, STENCIL, or DEPTH_STENCIL
3) level in framebufferTexImage2D has to be 0
4) has to check whether a user-created framebuffer is bound (otherwise the internal framebuffer will be wrongly used).
   4.1) For checkFramebufferStatus(), return FRAMEBUFFER_COMPLETE if no user-created framebuffer is bound.
   4.2) For getFramebufferAttachmentParameter, return default values if no user-created framebuffer is bound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234342</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-04 12:44:44 -0700</bug_when>
    <thetext>A mistake. For 4.2, should generate INVALID_OPERATION and return 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234416</commentid>
    <comment_count>2</comment_count>
      <attachid>57926</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-04 16:13:23 -0700</bug_when>
    <thetext>Created attachment 57926
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235507</commentid>
    <comment_count>3</comment_count>
      <attachid>57926</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-08 14:00:32 -0700</bug_when>
    <thetext>Comment on attachment 57926
patch

Looks good to me. Upon first glance it looked like some of the checks might be redundant, but it turns out that OpenGL 3.3 accepts more enums for calls like glCheckFramebufferStatus than OpenGL ES 2.0 does, so all of the checks you&apos;ve added are needed. The test case looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235516</commentid>
    <comment_count>4</comment_count>
      <attachid>57926</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-08 14:13:51 -0700</bug_when>
    <thetext>Comment on attachment 57926
patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235921</commentid>
    <comment_count>5</comment_count>
      <attachid>57926</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-09 11:55:01 -0700</bug_when>
    <thetext>Comment on attachment 57926
patch

Rejecting patch 57926 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--ignore-tests&apos;, &apos;compositing&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Last 500 characters of output:
ing Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Skipped list contained &apos;compositing/iframes/composited-iframe.html&apos;, but no file of that name could be found
Testing 19071 test cases.
fast/dom/Window/window-property-descriptors.html -&gt; failed

Exiting early after 1 failures. 6789 tests run.
130.08s total testing time

6788 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
1 test case (&lt;1%) had stderr output

Full output: http://webkit-commit-queue.appspot.com/results/3175098</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235990</commentid>
    <comment_count>6</comment_count>
      <attachid>57926</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-09 13:54:18 -0700</bug_when>
    <thetext>Comment on attachment 57926
patch

Rejecting patch 57926 from commit-queue.

zmo@google.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in WebKitTools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  Due to bug 30084 the commit-queue will require a restart after your change.  Please contact eseidel@chromium.org to request a commit-queue restart.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236015</commentid>
    <comment_count>7</comment_count>
      <attachid>57926</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-09 14:36:44 -0700</bug_when>
    <thetext>Comment on attachment 57926
patch

Rejecting patch 57926 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--ignore-tests&apos;, &apos;compositing&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Last 500 characters of output:
ing Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Skipped list contained &apos;compositing/iframes/composited-iframe.html&apos;, but no file of that name could be found
Testing 19072 test cases.
fast/dom/Window/window-property-descriptors.html -&gt; failed

Exiting early after 1 failures. 6790 tests run.
129.73s total testing time

6789 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
1 test case (&lt;1%) had stderr output

Full output: http://webkit-commit-queue.appspot.com/results/3195102</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236720</commentid>
    <comment_count>8</comment_count>
      <attachid>57926</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-11 00:59:05 -0700</bug_when>
    <thetext>Comment on attachment 57926
patch

Rejecting patch 57926 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--ignore-tests&apos;, &apos;compositing&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Last 500 characters of output:
ing Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Skipped list contained &apos;compositing/iframes/composited-iframe.html&apos;, but no file of that name could be found
Testing 19079 test cases.
fast/dom/Window/window-property-descriptors.html -&gt; failed

Exiting early after 1 failures. 6791 tests run.
127.44s total testing time

6790 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
1 test case (&lt;1%) had stderr output

Full output: http://webkit-commit-queue.appspot.com/results/3226234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236866</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-11 09:24:38 -0700</bug_when>
    <thetext>One more try failed.  I looked at the patch again.  The only possibility is I added a assertMsg() function to LayoutTests/fast/js/resources/js-test-pre.js.

Since I have no way to confirm it, I&apos;ll just refactor the test to remove the assertMsg() and give it another try.

The only problem I see is that we have a few other WebGL conformance tests that we might want to add to LayoutTests, and they also use assertMsg, so they also need to be rewritten.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236879</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-11 09:52:26 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; One more try failed.  I looked at the patch again.  The only possibility is I added a assertMsg() function to LayoutTests/fast/js/resources/js-test-pre.js.
&gt; 
&gt; Since I have no way to confirm it, I&apos;ll just refactor the test to remove the assertMsg() and give it another try.

Did you run this test on your machine? If it is a real failure then it will reproduce there.

run-webkit-tests [--debug] LayoutTests/fast/dom/Window/window-property-descriptors.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236883</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-11 10:08:04 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; One more try failed.  I looked at the patch again.  The only possibility is I added a assertMsg() function to LayoutTests/fast/js/resources/js-test-pre.js.
&gt; &gt; 
&gt; &gt; Since I have no way to confirm it, I&apos;ll just refactor the test to remove the assertMsg() and give it another try.
&gt; 
&gt; Did you run this test on your machine? If it is a real failure then it will reproduce there.
&gt; 
&gt; run-webkit-tests [--debug] LayoutTests/fast/dom/Window/window-property-descriptors.html

I just applied your patch and found that this test does in fact fail with your patch applied. Run it on your own machine to see the error reported. You should consider doing full LayoutTest runs (&quot;run-webkit-tests [--debug]&quot;) for changes that touch non-WebGL code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236963</commentid>
    <comment_count>12</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-11 12:20:07 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; One more try failed.  I looked at the patch again.  The only possibility is I added a assertMsg() function to LayoutTests/fast/js/resources/js-test-pre.js.
&gt; &gt; &gt; 
&gt; &gt; &gt; Since I have no way to confirm it, I&apos;ll just refactor the test to remove the assertMsg() and give it another try.
&gt; &gt; 
&gt; &gt; Did you run this test on your machine? If it is a real failure then it will reproduce there.
&gt; &gt; 
&gt; &gt; run-webkit-tests [--debug] LayoutTests/fast/dom/Window/window-property-descriptors.html
&gt; 
&gt; I just applied your patch and found that this test does in fact fail with your patch applied. Run it on your own machine to see the error reported. You should consider doing full LayoutTest runs (&quot;run-webkit-tests [--debug]&quot;) for changes that touch non-WebGL code.

OK, I could reproduce it by run-webkit-tests.  Originally I tested with run-safari and open the failed test and saw no FAIL, so I thought I could not reproduce the error.  Actually because I added a new function in js-test-pre.js, the expected txt will have one extra PASS line, that&apos;s why it failed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236981</commentid>
    <comment_count>13</comment_count>
      <attachid>58497</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-11 12:40:55 -0700</bug_when>
    <thetext>Created attachment 58497
revised patch

Moved assertMsg() to webgl-test.js since it&apos;s only used by WebGL.  The rest is the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237057</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-11 15:06:50 -0700</bug_when>
    <thetext>Looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237954</commentid>
    <comment_count>15</comment_count>
      <attachid>58497</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-14 11:46:50 -0700</bug_when>
    <thetext>Comment on attachment 58497
revised patch

let&apos;s try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238355</commentid>
    <comment_count>16</comment_count>
      <attachid>58497</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-15 06:38:11 -0700</bug_when>
    <thetext>Comment on attachment 58497
revised patch

Clearing flags on attachment: 58497

Committed r61185: &lt;http://trac.webkit.org/changeset/61185&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238356</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-15 06:38:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238373</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-15 07:22:29 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61185 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238390</commentid>
    <comment_count>19</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-06-15 08:23:16 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; http://trac.webkit.org/changeset/61185 might have broken SnowLeopard Intel Release (Tests)

pretty diff here: http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20%28Tests%29/r61186%20%2811683%29/fast/canvas/webgl/texture-npot-pretty-diff.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57926</attachid>
            <date>2010-06-04 16:13:23 -0700</date>
            <delta_ts>2010-06-11 12:40:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fbo.patch</filename>
            <type>text/plain</type>
            <size>19932</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDcxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDYtMDQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCcmluZyBm
cmFtZWJ1ZmZlciBmdW5jdGlvbnMgdG8gR0xFUzIgY29uZm9ybWFuY2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTc1CisKKyAgICAgICAgVGVzdDog
ZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItdGVzdC5odG1sCisKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogQ2hlY2sgaW5wdXQg
cGFyYW1ldGVycyBhbmQgZGVhbCB3aXRoIGRlZmF1bHQgZnJhbWVidWZmZXIgc2l0dWF0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcik6IENoZWNrIGlucHV0IHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMpOiBDaGVjayBpbnB1dCBwYXJh
bWV0ZXJzLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBB
ZGQgdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzLgorCiAyMDEwLTA2LTA0ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCShyZXZpc2lvbiA2MDY5MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDYgKzM4MCwxNCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0CiAKIHVuc2lnbmVkIGxvbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0KQogeworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGlmICh0
YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFt
X2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFOwog
ICAgIHJldHVybiBtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtODQwLDEwICs4NDgsMTYg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZsdXNoKCkKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgV2ViR0xSZW5kZXJidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1l
dGVycyh0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKGJ1ZmZlciAmJiBidWZm
ZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0
dXJuOwotICAgIH0gICAgICAgCisgICAgfQogICAgIC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0
IGZyYW1lYnVmZmVyIHRvIGJlIG11dGF0ZWQ7IGFsbCBjdXJyZW50CiAgICAgLy8gaW1wbGVtZW50
YXRpb25zIHVzZSBhbiBGQk8gaW50ZXJuYWxseSBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdAogICAg
IC8vIEZCTy4KQEAgLTg4Niw2ICs5MDAsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZyYW1lYnVmZmVyUgogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVu
c2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIGxvbmcgbGV2ZWws
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKCF2
YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChsZXZlbCkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5jb250ZXh0KCkgIT0g
dGhpcykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKQEAgLTk5MSwxOSAr
MTAxMSwyNCBAQCB1bnNpZ25lZCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0CiBXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
dW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UgotICAgICAgICB8fCAoYXR0YWNobWVudCAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRU
QUNITUVOVDAKLSAgICAgICAgICAgICYmIGF0dGFjaG1lbnQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0FUVEFDSE1FTlQKLSAgICAgICAgICAgICYmIGF0dGFjaG1lbnQgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVAotICAgICAgICAgICAgJiYgYXR0YWNobWVudCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQotICAgICAgICB8
fCAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX1RZUEUKLSAgICAgICAgICAgICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FCi0gICAgICAgICAgICAmJiBwbmFtZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMCi0g
ICAgICAgICAgICAmJiBwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UpKSB7CisgICAgaWYgKCF2YWxpZGF0ZUZyYW1l
YnVmZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJF
X0xFVkVMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQogCisg
ICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9i
amVjdCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOworICAgIH0KKwogICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSkgewogICAgICAgICBXZWJHTFN0YXRlUmVzdG9y
ZXIodGhpcywgZmFsc2UpOwogICAgICAgICBpbnQgdmFsdWU7CkBAIC0zMDk3LDYgKzMxMjIsMjUg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZhbGxiYQogICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIDApOwog
fQogCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQ
YXJhbWV0ZXJzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQp
Cit7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsK
KyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzd2l0Y2gg
KGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hN
RU5UMDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDYwNjkxKQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDYgKzM4
OSwxMCBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAKICAgICAgICAgdm9pZCBjcmVhdGVGYWxs
YmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKIAorICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
dmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgorICAg
ICAgICAvLyBHZW5lcmF0ZSBHTCBlcnJvciBpZiBwYXJhbWV0ZXJzIGFyZSBpbGxlZ2FsLgorICAg
ICAgICBib29sIHZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50KTsKKwogICAgICAgICBmcmllbmQgY2xh
c3MgV2ViR0xTdGF0ZVJlc3RvcmVyOwogICAgIH07CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwNzEz
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTAtMDYtMDQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCcmluZyBmcmFtZWJ1ZmZlciBm
dW5jdGlvbnMgdG8gR0xFUzIgY29uZm9ybWFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTc1CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC9mcmFtZWJ1ZmZlci10ZXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9j
YW52YXMvd2ViZ2wvZnJhbWVidWZmZXItdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC90ZXh0dXJlLW5wb3QuaHRtbDogUmVtb3ZlIGFzc2VydE1zZyBmdW5jdGlv
bi4KKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qczogQWRkIGFzc2Vy
dE1zZyBmdW5jdGlvbi4KKwogMjAxMC0wNi0wNCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29u
QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2ZyYW1lYnVmZmVyLXRlc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2ZyYW1lYnVmZmVyLXRlc3QtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZnJh
bWVidWZmZXItdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAK
K1RoaXMgdGVzdHMgZnJhbWVidWZmZXIvcmVuZGVyYnVmZmVyLXJlbGF0ZWQgZnVuY3Rpb25zCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitDYW52YXMuZ2V0Q29udGV4dAorUEFTUyBj
b250ZXh0IGV4aXN0cworCitDaGVja2luZyBmcmFtZWJ1ZmZlci9yZW5kZXJidWZmZXIgc3R1ZmYu
CitQQVNTIGNhbGxpbmcgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIG9uIHRoZSBk
ZWZhdWx0IGZyYW1lYnVmZmVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTi4KK1BB
U1MgY2FsbGluZyBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIG9uIHRoZSBkZWZhdWx0IGZyYW1lYnVm
ZmVyIHNob3VsZCBnZW5lcmF0ZSBGUkFNRUJVRkZFUl9DT01QTEVURS4KK1BBU1MgdHJ5aW5nIHRv
IGF0dGFjaCBhIHRleHR1cmUgdG8gZGVmYXVsdCBmcmFtZWJ1ZmZlciBzaG91bGQgZ2VuZXJhdGUg
SU5WQUxJRF9PUEVSQVRJT04uCitQQVNTIHRyeWluZyB0byBkZXRhY2ggZGVmYXVsdCByZW5kZXJi
dWZmZXIgZnJvbSBkZWZhdWx0IGZyYW1lYnVmZmVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09Q
RVJBVElPTi4KK1BBU1MgYWxsb2NhdGluZyByZW5kZXJidWZmZXIgc3RvcmFnZSBvZiBhIG5ld2x5
IGNyZWF0ZWQgcmVuZGVyYnVmZmVyIHNob3VsZCBzdWNjZWVkLgorUEFTUyB0cnlpbmcgdG8gYXR0
YWNoIGEgcmVuZGVyYnVmZmVyIHRvIHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyIHNob3VsZCBnZW5l
cmF0ZSBJTlZBTElEX09QRVJBVElPTi4KK1BBU1MgYmluZGluZyBhIG5ld2x5IGNyZWF0ZWQgZnJh
bWVidWZmZXIgc2hvdWxkIHN1Y2NlZWQuCitQQVNTIGNhbGxpbmcgZ2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyIHdpdGggdGFyZ2V0ID0gUkVBRF9GUkFNRUJVRkZFUiBzaG91bGQgZ2Vu
ZXJhdGUgSU5WQUxJRF9FTlVNLgorUEFTUyBjYWxsaW5nIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMg
d2l0aCB0YXJnZXQgPSBSRUFEX0ZSQU1FQlVGRkVSIHNob3VsZCByZXR1cm4gMC4KK1BBU1MgY2Fs
bGluZyBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIHdpdGggdGFyZ2V0ID0gUkVBRF9GUkFNRUJVRkZF
UiBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLgorUEFTUyBjYWxsaW5nIGJpbmRGcmFtZWJ1
ZmZlciB3aXRoIHRhcmdldCA9IFJFQURfRlJBTUVCVUZGRVIgc2hvdWxkIGdlbmVyYXRlIElOVkFM
SURfRU5VTS4KK1BBU1MgY2FsbGluZyBiaW5kRnJhbWVidWZmZXIgd2l0aCB0YXJnZXQgPSBSRUFE
X0ZSQU1FQlVGRkVSIHNob3VsZCBub3QgY2hhbmdlIEZSQU1FQlVGRkVSX0JJTkRJTkcuCitQQVNT
IGNhbGxpbmcgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIHdpdGggdGFyZ2V0ID0g
UkVBRF9GUkFNRUJVRkZFUiBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLgorUEFTUyBjYWxs
aW5nIGZyYW1lYnVmZmVyVGV4SW1hZ2UyRCB3aXRoIHRhcmdldCA9IFJFQURfRlJBTUVCVUZGRVIg
c2hvdWxkIGdlbmVyYXRlIElOVkFMSURfRU5VTS4KK1BBU1MgY2FsbGluZyBmcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlciB3aXRoIHRhcmdldCA9IFJFQURfRlJBTUVCVUZGRVIgc2hvdWxkIGdlbmVyYXRl
IElOVkFMSURfRU5VTS4KK1BBU1MgY2FsbGluZyBmcmFtZWJ1ZmZlclRleEltYWdlMkQgd2l0aCBh
dHRhY2htZW50ID0gQ09MT1JfQVRUQUNITUVOVDEgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfRU5V
TS4KK1BBU1MgY2FsbGluZyBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciB3aXRoIGF0dGFjaG1lbnQg
PSBDT0xPUl9BVFRBQ0hNRU5UMSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLgorUEFTUyBj
YWxsaW5nIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciB3aXRoIHBuYW1lID0gR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORyBzaG91bGQgZ2VuZXJhdGUgSU5W
QUxJRF9FTlVNLgorUEFTUyBhdHRhY2hpbmcgYSB0ZXh0dXJlIHRvIGEgZnJhbWVidWZmZXIgc2hv
dWxkIHN1Y2NlZWQuCitQQVNTIGRldGFjaGluZyBhIHRleHR1cmUgZnJvbSBhIGZyYW1lYnVmZmVy
IHNob3VsZCBzdWNjZWVkLgorUEFTUyBjYWxsaW5nIGZyYW1lYnVmZmVyVGV4dHVyZTJEIHdpdGgg
bm9uLXplcm8gbWlwbWFwIGxldmVsIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX1ZBTFVFLgorUEFT
UyBhdHRhY2hpbmcgYSByZW5kZXJidWZmZXIgdG8gYSBmcmFtZWJ1ZmZlciBzaG91bGQgc3VjY2Vl
ZC4KK1BBU1MgZGV0YWNoaW5nIGEgcmVuZGVyYnVmZmVyIGZyb20gYSBmcmFtZWJ1ZmZlciBzaG91
bGQgc3VjY2VlZC4KK1BBU1MgYmluZGluZyBkZWZhdWx0IChudWxsKSBmcmFtZWJ1ZmZlciBzaG91
bGQgc3VjY2VlZC4KKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2ZyYW1lYnVmZmVy
LXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9m
cmFtZWJ1ZmZlci10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9mcmFtZWJ1ZmZlci10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTcwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFu
c2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4K
KzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9
InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+V2ViR0wgRnJhbWVidWZmZXIgVGVz
dDwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRl
c3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+
PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjIiIGhlaWdodD0iMiI+IDwvY2FudmFzPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlz
IHRlc3RzIGZyYW1lYnVmZmVyL3JlbmRlcmJ1ZmZlci1yZWxhdGVkIGZ1bmN0aW9ucyIpOworCitk
ZWJ1ZygiIik7CitkZWJ1ZygiQ2FudmFzLmdldENvbnRleHQiKTsKKwordmFyIGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK3ZhciBnbCA9IGNyZWF0ZTNEQ29udGV4
dChjYW52YXMpOworaWYgKCFnbCkgeworICB0ZXN0RmFpbGVkKCJjb250ZXh0IGRvZXMgbm90IGV4
aXN0Iik7Cit9IGVsc2UgeworICB0ZXN0UGFzc2VkKCJjb250ZXh0IGV4aXN0cyIpOworCisgIGRl
YnVnKCIiKTsKKyAgZGVidWcoIkNoZWNraW5nIGZyYW1lYnVmZmVyL3JlbmRlcmJ1ZmZlciBzdHVm
Zi4iKTsKKworICB2YXIgdmFsdWUgPSBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIoCisgICAgIGdsLkZSQU1FQlVGRkVSLAorICAgICBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwKKyAg
ICAgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSk7CisgIGFzc2VydE1zZyhn
bC5nZXRFcnJvcigpID09IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICAgImNhbGxp
bmcgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIG9uIHRoZSBkZWZhdWx0IGZyYW1l
YnVmZmVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTi4iKTsKKworICBhc3NlcnRN
c2coZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgPT0gZ2wuRlJBTUVC
VUZGRVJfQ09NUExFVEUsCisgICAgICAgICAgICAiY2FsbGluZyBjaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzIG9uIHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyIHNob3VsZCBnZW5lcmF0ZSBGUkFNRUJVRkZF
Ul9DT01QTEVURS4iKTsKKworICB2YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICBnbC5i
aW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOworICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRF
WFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgIGdsLnRleFBh
cmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNU
KTsKKyAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywg
Z2wuQ0xBTVBfVE9fRURHRSk7CisgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wu
VEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOworICBnbC50ZXhJbWFnZTJEKGdsLlRF
WFRVUkVfMkQsCisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgIC8vIGxldmVsCisg
ICAgICAgICAgICAgICAgZ2wuUkdCQSwgICAgICAgICAgIC8vIGludGVybmFsRm9ybWF0CisgICAg
ICAgICAgICAgICAgY2FudmFzLndpZHRoLCAgICAgIC8vIHdpZHRoCisgICAgICAgICAgICAgICAg
Y2FudmFzLmhlaWdodCwgICAgIC8vIGhlaWdodAorICAgICAgICAgICAgICAgIDAsICAgICAgICAg
ICAgICAgICAvLyBib3JkZXIKKyAgICAgICAgICAgICAgICBnbC5SR0JBLCAgICAgICAgICAgLy8g
Zm9ybWF0CisgICAgICAgICAgICAgICAgZ2wuVU5TSUdORURfQllURSwgIC8vIHR5cGUKKyAgICAg
ICAgICAgICAgICBudWxsKTsgICAgICAgICAgICAgLy8gZGF0YQorICBnbC5mcmFtZWJ1ZmZlclRl
eHR1cmUyRCgKKyAgICAgIGdsLkZSQU1FQlVGRkVSLAorICAgICAgZ2wuQ09MT1JfQVRUQUNITUVO
VDAsCisgICAgICBnbC5URVhUVVJFXzJELAorICAgICAgdGV4LAorICAgICAgMCk7CisgIGFzc2Vy
dE1zZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICAg
InRyeWluZyB0byBhdHRhY2ggYSB0ZXh0dXJlIHRvIGRlZmF1bHQgZnJhbWVidWZmZXIgc2hvdWxk
IGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OLiIpOworCisgIGdsLmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKAorICAgICAgZ2wuRlJBTUVCVUZGRVIsCisgICAgICBnbC5DT0xPUl9BVFRBQ0hNRU5U
MCwKKyAgICAgIGdsLlJFTkRFUkJVRkZFUiwKKyAgICAgIG51bGwpOworICBhc3NlcnRNc2coZ2wu
Z2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAgICAgICAgICJ0cnlpbmcg
dG8gZGV0YWNoIGRlZmF1bHQgcmVuZGVyYnVmZmVyIGZyb20gZGVmYXVsdCBmcmFtZWJ1ZmZlciBz
aG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04uIik7CisKKyAgdmFyIHJiID0gZ2wuY3Jl
YXRlUmVuZGVyYnVmZmVyKCk7CisgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVS
LCByYik7CisgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5SR0JB
NCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9y
KCkgPT0gZ2wuTk9fRVJST1IsCisgICAgICAgICAgICAiYWxsb2NhdGluZyByZW5kZXJidWZmZXIg
c3RvcmFnZSBvZiBhIG5ld2x5IGNyZWF0ZWQgcmVuZGVyYnVmZmVyIHNob3VsZCBzdWNjZWVkLiIp
OworCisgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKAorICAgICAgZ2wuRlJBTUVCVUZGRVIs
CisgICAgICBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwKKyAgICAgIGdsLlJFTkRFUkJVRkZFUiwKKyAg
ICAgIHJiKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9PUEVSQVRJ
T04sCisgICAgICAgICAgICAidHJ5aW5nIHRvIGF0dGFjaCBhIHJlbmRlcmJ1ZmZlciB0byB0aGUg
ZGVmYXVsdCBmcmFtZWJ1ZmZlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04uIik7
CisKKyAgdmFyIGZidGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICBnbC5iaW5kVGV4dHVyZShn
bC5URVhUVVJFXzJELCBmYnRleCk7CisgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwg
Z2wuUkdCQSwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJ
R05FRF9CWVRFLCBudWxsKTsKKyAgdmFyIGZiID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKKwor
ICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZiKTsKKyAgYXNzZXJ0TXNnKGds
LmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsCisgICAgICAgICAgICAiYmluZGluZyBhIG5ld2x5
IGNyZWF0ZWQgZnJhbWVidWZmZXIgc2hvdWxkIHN1Y2NlZWQuIik7CisKKyAgdmFyIHRhcmdldCA9
IDB4OENBODsgLy8gR0xfUkVBRF9GUkFNRUJVRkZFUgorICBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIoCisgICAgIHRhcmdldCwKKyAgICAgZ2wuQ09MT1JfQVRUQUNITUVOVDAs
CisgICAgIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUpOworICBhc3NlcnRN
c2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX0VOVU0sCisgICAgICAgICAgICAiY2FsbGlu
ZyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgd2l0aCB0YXJnZXQgPSBSRUFEX0ZS
QU1FQlVGRkVSIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX0VOVU0uIik7CisgIGFzc2VydE1zZyhn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCkgPT0gMCwKKyAgICAgICAgICAgICJjYWxs
aW5nIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMgd2l0aCB0YXJnZXQgPSBSRUFEX0ZSQU1FQlVGRkVS
IHNob3VsZCByZXR1cm4gMC4iKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5W
QUxJRF9FTlVNLAorICAgICAgICAgICAgImNhbGxpbmcgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyB3
aXRoIHRhcmdldCA9IFJFQURfRlJBTUVCVUZGRVIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfRU5V
TS4iKTsKKyAgZ2wuYmluZEZyYW1lYnVmZmVyKHRhcmdldCwgZ2wuY3JlYXRlRnJhbWVidWZmZXIo
KSk7CisgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFMSURfRU5VTSwKKyAgICAg
ICAgICAgICJjYWxsaW5nIGJpbmRGcmFtZWJ1ZmZlciB3aXRoIHRhcmdldCA9IFJFQURfRlJBTUVC
VUZGRVIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfRU5VTS4iKTsKKyAgYXNzZXJ0TXNnKGZiID09
IGdsLmdldFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUl9CSU5ESU5HKSwKKyAgICAgICAgICAgICJj
YWxsaW5nIGJpbmRGcmFtZWJ1ZmZlciB3aXRoIHRhcmdldCA9IFJFQURfRlJBTUVCVUZGRVIgc2hv
dWxkIG5vdCBjaGFuZ2UgRlJBTUVCVUZGRVJfQklORElORy4iKTsKKyAgZ2wuZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJy
b3IoKSA9PSBnbC5JTlZBTElEX0VOVU0sCisgICAgICAgICAgICAiY2FsbGluZyBnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgd2l0aCB0YXJnZXQgPSBSRUFEX0ZSQU1FQlVGRkVSIHNo
b3VsZCBnZW5lcmF0ZSBJTlZBTElEX0VOVU0uIik7CisgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJE
KHRhcmdldCwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIGZidGV4LCAwKTsK
KyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9FTlVNLAorICAgICAgICAg
ICAgImNhbGxpbmcgZnJhbWVidWZmZXJUZXhJbWFnZTJEIHdpdGggdGFyZ2V0ID0gUkVBRF9GUkFN
RUJVRkZFUiBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLiIpOworICBnbC5mcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcih0YXJnZXQsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5SRU5ERVJCVUZG
RVIsIHJiKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9FTlVNLAor
ICAgICAgICAgICAgImNhbGxpbmcgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIgd2l0aCB0YXJnZXQg
PSBSRUFEX0ZSQU1FQlVGRkVSIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX0VOVU0uIik7CisKKyAg
dmFyIGF0dGFjaG1lbnQgPSAweDhDRTE7IC8vIEdMX0NPTE9SX0FUVEFDSE1FTlQxCisgIGdsLmZy
YW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBnbC5URVhUVVJF
XzJELCBmYnRleCwgMCk7CisgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFMSURf
RU5VTSwKKyAgICAgICAgICAgICJjYWxsaW5nIGZyYW1lYnVmZmVyVGV4SW1hZ2UyRCB3aXRoIGF0
dGFjaG1lbnQgPSBDT0xPUl9BVFRBQ0hNRU5UMSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9FTlVN
LiIpOworICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgYXR0YWNo
bWVudCwgZ2wuUkVOREVSQlVGRkVSLCByYik7CisgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09
IGdsLklOVkFMSURfRU5VTSwKKyAgICAgICAgICAgICJjYWxsaW5nIGZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyIHdpdGggYXR0YWNobWVudCA9IENPTE9SX0FUVEFDSE1FTlQxIHNob3VsZCBnZW5lcmF0
ZSBJTlZBTElEX0VOVU0uIik7CisKKyAgZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKGdsLkZSQU1FQlVGRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2wuQ09MT1JfQVRUQUNITUVOVDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMTApOyAvLyBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09E
SU5HCisgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFMSURfRU5VTSwKKyAgICAg
ICAgICAgICJjYWxsaW5nIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciB3aXRoIHBu
YW1lID0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORyBzaG91bGQgZ2Vu
ZXJhdGUgSU5WQUxJRF9FTlVNLiIpOworCisgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZS
QU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgZmJ0ZXgsIDAp
OworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKKyAgICAgICAgICAg
ICJhdHRhY2hpbmcgYSB0ZXh0dXJlIHRvIGEgZnJhbWVidWZmZXIgc2hvdWxkIHN1Y2NlZWQuIik7
CisKKyAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FU
VEFDSE1FTlQwLCBnbC5URVhUVVJFXzJELCBudWxsLCAwKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVy
cm9yKCkgPT0gZ2wuTk9fRVJST1IsCisgICAgICAgICAgICAiZGV0YWNoaW5nIGEgdGV4dHVyZSBm
cm9tIGEgZnJhbWVidWZmZXIgc2hvdWxkIHN1Y2NlZWQuIik7CisKKyAgZ2wuZnJhbWVidWZmZXJU
ZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5URVhUVVJF
XzJELCBmYnRleCwgMSk7CisgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFMSURf
VkFMVUUsCisgICAgICAgICAgICAiY2FsbGluZyBmcmFtZWJ1ZmZlclRleHR1cmUyRCB3aXRoIG5v
bi16ZXJvIG1pcG1hcCBsZXZlbCBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9WQUxVRS4iKTsKKwor
ICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRU
QUNITUVOVDAsIGdsLlJFTkRFUkJVRkZFUiwgcmIpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3Io
KSA9PSBnbC5OT19FUlJPUiwKKyAgICAgICAgICAgICJhdHRhY2hpbmcgYSByZW5kZXJidWZmZXIg
dG8gYSBmcmFtZWJ1ZmZlciBzaG91bGQgc3VjY2VlZC4iKTsKKworICBnbC5mcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlJFTkRF
UkJVRkZFUiwgbnVsbCk7CisgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9S
LAorICAgICAgICAgICAgImRldGFjaGluZyBhIHJlbmRlcmJ1ZmZlciBmcm9tIGEgZnJhbWVidWZm
ZXIgc2hvdWxkIHN1Y2NlZWQuIik7CisKKyAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVG
RkVSLCBudWxsKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsCisg
ICAgICAgICAgICAiYmluZGluZyBkZWZhdWx0IChudWxsKSBmcmFtZWJ1ZmZlciBzaG91bGQgc3Vj
Y2VlZC4iKTsKK30KKworZGVidWcoIiIpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleHR1cmUtbnBvdC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleHR1cmUtbnBvdC5odG1s
CShyZXZpc2lvbiA2MDY5MSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleHR1
cmUtbnBvdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogPGh0bWw+DQogICA8
aGVhZD4NCiAgICAgPHRpdGxlPldlYkdMIE5vbi1Qb3dlciBvZiAyIHRleHR1cmUgY29uZm9ybWFu
Y2UgdGVzdC48L3RpdGxlPg0KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L2pzLy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4NCisgICAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4NCiAg
ICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+DQogICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdXRpbHMzZC5qcyI+IDwvc2NyaXB0Pg0K
IDwvaGVhZD4NCkBAIC0zMywxNCArMzMsNiBAQAogICAgIDwvc2NyaXB0Pg0KIA0KICAgICA8c2Ny
aXB0Pg0KLSAgICAgICAgZnVuY3Rpb24gYXNzZXJ0TXNnKGFzc2VydGlvbiwgbXNnKSB7DQotICAg
ICAgICAgICAgaWYgKGFzc2VydGlvbikgew0KLSAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKG1z
Zyk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgdGVzdEZhaWxlZCht
c2cpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCiAgICAgICAgIGZ1bmN0aW9uIGlu
aXQoKQ0KICAgICAgICAgew0KICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsNCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcwkocmV2aXNpb24gNjA2OTEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCwxNCBAQCBmdW5j
dGlvbiBzaG91bGRUaHJvdyhfYSwgX2UpCiAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIHRo
cm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYp
ICsgIi4gV2FzICIgKyBfYXYgKyAiLiIpOwogfQogCitmdW5jdGlvbiBhc3NlcnRNc2coYXNzZXJ0
aW9uLCBtc2cpIHsKKyAgICBpZiAoYXNzZXJ0aW9uKSB7CisgICAgICAgIHRlc3RQYXNzZWQobXNn
KTsKKyAgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZChtc2cpOworICAgICB9Cit9CisK
IGZ1bmN0aW9uIGdjKCkgewogICAgIGlmICh0eXBlb2YgR0NDb250cm9sbGVyICE9PSAidW5kZWZp
bmVkIikKICAgICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsK
</data>
<flag name="review"
          id="42640"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="42641"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58497</attachid>
            <date>2010-06-11 12:40:55 -0700</date>
            <delta_ts>2010-06-15 06:38:11 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>fbo.patch</filename>
            <type>text/plain</type>
            <size>20026</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTAzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDYtMTEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCcmluZyBm
cmFtZWJ1ZmZlciBmdW5jdGlvbnMgdG8gR0xFUzIgY29uZm9ybWFuY2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTc1CisKKyAgICAgICAgVGVzdDog
ZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItdGVzdC5odG1sCisKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTogQ2hlY2sgaW5wdXQg
cGFyYW1ldGVycyBhbmQgZGVhbCB3aXRoIGRlZmF1bHQgZnJhbWVidWZmZXIgc2l0dWF0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcik6IENoZWNrIGlucHV0IHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMpOiBDaGVjayBpbnB1dCBwYXJh
bWV0ZXJzLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBB
ZGQgdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzLgorCiAyMDEwLTA2LTExICBBbnRv
biBNdWhpbiAgPGFudG9ubUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDYwOTA1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTUsNiArMzk1LDE0IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXQKIAogdW5zaWduZWQgbG9uZyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9u
ZyB0YXJnZXQpCiB7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgaWYg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
IW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7
CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC04NjQsMTAgKzg3Miwx
NiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2goKQogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFy
Z2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmICghdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJh
bWV0ZXJzKHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVu
ZGVyYnVmZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZiAoYnVmZmVyICYmIGJ1
ZmZlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICBy
ZXR1cm47Ci0gICAgfSAgICAgICAKKyAgICB9CiAgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1
bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKICAgICAvLyBpbXBsZW1l
bnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0CiAg
ICAgLy8gRkJPLgpAQCAtOTEwLDYgKzkyNCwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZnJhbWVidWZmZXJSCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJU
ZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
dW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgbG9uZyBsZXZl
bCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
IXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFjaG1lbnQpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKGxldmVsKSB7CisgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAg
ICByZXR1cm47CisgICAgfQogICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmNvbnRleHQoKSAh
PSB0aGlzKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTAxNSwx
OSArMTAzNSwyNCBAQCB1bnNpZ25lZCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0CiBX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVu
dCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUgotICAgICAgICB8fCAoYXR0YWNobWVudCAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QVRUQUNITUVOVDAKLSAgICAgICAgICAgICYmIGF0dGFjaG1lbnQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0FUVEFDSE1FTlQKLSAgICAgICAgICAgICYmIGF0dGFjaG1lbnQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVAotICAgICAgICAgICAgJiYgYXR0YWNobWVu
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQotICAgICAg
ICB8fCAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
T0JKRUNUX1RZUEUKLSAgICAgICAgICAgICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FCi0gICAgICAgICAgICAmJiBwbmFtZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVM
Ci0gICAgICAgICAgICAmJiBwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UpKSB7CisgICAgaWYgKCF2YWxpZGF0ZUZy
YW1lYnVmZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0xFVkVMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQog
CisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9iamVjdCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOworICAgIH0KKwogICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSkgewogICAgICAgICBXZWJHTFN0YXRlUmVz
dG9yZXIodGhpcywgZmFsc2UpOwogICAgICAgICBpbnQgdmFsdWU7CkBAIC0zMjYyLDYgKzMyODcs
MjUgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RgogICAgIHJldHVy
biB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZvcm1hdCwgdHlwZSk7CiB9CiAKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCkKK3sKKyAgICBp
ZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgeworICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN3aXRjaCAoYXR0YWNobWVu
dCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaAkocmV2aXNpb24gNjA5MDUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTUsNiArNDE1LDEwIEBAIGNs
YXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXhQ
YXJhbWV0ZXJmIGFuZCB0ZXhQYXJhbWV0ZXJpLgogICAgICAgICB2b2lkIHRleFBhcmFtZXRlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQgcGFyYW1pLCBp
bnQgcGFyYW1mLCBib29sIGlzRmxvYXQpOwogCisgICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0
byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmcmFtZWJ1ZmZlciBmdW5jdGlvbnMuCisg
ICAgICAgIC8vIEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCisg
ICAgICAgIGJvb2wgdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQpOworCiAgICAgICAgIGZyaWVuZCBj
bGFzcyBXZWJHTFN0YXRlUmVzdG9yZXI7CiAgICAgfTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjEw
MzIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAxMC0wNi0xMSAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJyaW5nIGZyYW1lYnVmZmVy
IGZ1bmN0aW9ucyB0byBHTEVTMiBjb25mb3JtYW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxNzUKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dl
YmdsL2ZyYW1lYnVmZmVyLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9mcmFtZWJ1ZmZlci10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LmpzOgorICAgICAgICAoYXNzZXJ0
TXNnKTogRnVuY3Rpb24gYWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVy
ZS1ucG90Lmh0bWw6IFJlbW92ZSBhc3NlcnRNc2cgZnVuY3Rpb24uCisKIDIwMTAtMDYtMTEgIERt
aXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
dXBkYXRlIENocm9taXVtIHRlc3QgZXhwZWN0YXRpb25zLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItdGVzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItdGVzdC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9mcmFt
ZWJ1ZmZlci10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAor
VGhpcyB0ZXN0cyBmcmFtZWJ1ZmZlci9yZW5kZXJidWZmZXItcmVsYXRlZCBmdW5jdGlvbnMKKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0NhbnZhcy5nZXRDb250ZXh0CitQQVNTIGNv
bnRleHQgZXhpc3RzCisKK0NoZWNraW5nIGZyYW1lYnVmZmVyL3JlbmRlcmJ1ZmZlciBzdHVmZi4K
K1BBU1MgY2FsbGluZyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgb24gdGhlIGRl
ZmF1bHQgZnJhbWVidWZmZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OLgorUEFT
UyBjYWxsaW5nIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMgb24gdGhlIGRlZmF1bHQgZnJhbWVidWZm
ZXIgc2hvdWxkIGdlbmVyYXRlIEZSQU1FQlVGRkVSX0NPTVBMRVRFLgorUEFTUyB0cnlpbmcgdG8g
YXR0YWNoIGEgdGV4dHVyZSB0byBkZWZhdWx0IGZyYW1lYnVmZmVyIHNob3VsZCBnZW5lcmF0ZSBJ
TlZBTElEX09QRVJBVElPTi4KK1BBU1MgdHJ5aW5nIHRvIGRldGFjaCBkZWZhdWx0IHJlbmRlcmJ1
ZmZlciBmcm9tIGRlZmF1bHQgZnJhbWVidWZmZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BF
UkFUSU9OLgorUEFTUyBhbGxvY2F0aW5nIHJlbmRlcmJ1ZmZlciBzdG9yYWdlIG9mIGEgbmV3bHkg
Y3JlYXRlZCByZW5kZXJidWZmZXIgc2hvdWxkIHN1Y2NlZWQuCitQQVNTIHRyeWluZyB0byBhdHRh
Y2ggYSByZW5kZXJidWZmZXIgdG8gdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgc2hvdWxkIGdlbmVy
YXRlIElOVkFMSURfT1BFUkFUSU9OLgorUEFTUyBiaW5kaW5nIGEgbmV3bHkgY3JlYXRlZCBmcmFt
ZWJ1ZmZlciBzaG91bGQgc3VjY2VlZC4KK1BBU1MgY2FsbGluZyBnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIgd2l0aCB0YXJnZXQgPSBSRUFEX0ZSQU1FQlVGRkVSIHNob3VsZCBnZW5l
cmF0ZSBJTlZBTElEX0VOVU0uCitQQVNTIGNhbGxpbmcgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyB3
aXRoIHRhcmdldCA9IFJFQURfRlJBTUVCVUZGRVIgc2hvdWxkIHJldHVybiAwLgorUEFTUyBjYWxs
aW5nIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMgd2l0aCB0YXJnZXQgPSBSRUFEX0ZSQU1FQlVGRkVS
IHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX0VOVU0uCitQQVNTIGNhbGxpbmcgYmluZEZyYW1lYnVm
ZmVyIHdpdGggdGFyZ2V0ID0gUkVBRF9GUkFNRUJVRkZFUiBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJ
RF9FTlVNLgorUEFTUyBjYWxsaW5nIGJpbmRGcmFtZWJ1ZmZlciB3aXRoIHRhcmdldCA9IFJFQURf
RlJBTUVCVUZGRVIgc2hvdWxkIG5vdCBjaGFuZ2UgRlJBTUVCVUZGRVJfQklORElORy4KK1BBU1Mg
Y2FsbGluZyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgd2l0aCB0YXJnZXQgPSBS
RUFEX0ZSQU1FQlVGRkVSIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX0VOVU0uCitQQVNTIGNhbGxp
bmcgZnJhbWVidWZmZXJUZXhJbWFnZTJEIHdpdGggdGFyZ2V0ID0gUkVBRF9GUkFNRUJVRkZFUiBz
aG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLgorUEFTUyBjYWxsaW5nIGZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyIHdpdGggdGFyZ2V0ID0gUkVBRF9GUkFNRUJVRkZFUiBzaG91bGQgZ2VuZXJhdGUg
SU5WQUxJRF9FTlVNLgorUEFTUyBjYWxsaW5nIGZyYW1lYnVmZmVyVGV4SW1hZ2UyRCB3aXRoIGF0
dGFjaG1lbnQgPSBDT0xPUl9BVFRBQ0hNRU5UMSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9FTlVN
LgorUEFTUyBjYWxsaW5nIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIHdpdGggYXR0YWNobWVudCA9
IENPTE9SX0FUVEFDSE1FTlQxIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX0VOVU0uCitQQVNTIGNh
bGxpbmcgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIHdpdGggcG5hbWUgPSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HIHNob3VsZCBnZW5lcmF0ZSBJTlZB
TElEX0VOVU0uCitQQVNTIGF0dGFjaGluZyBhIHRleHR1cmUgdG8gYSBmcmFtZWJ1ZmZlciBzaG91
bGQgc3VjY2VlZC4KK1BBU1MgZGV0YWNoaW5nIGEgdGV4dHVyZSBmcm9tIGEgZnJhbWVidWZmZXIg
c2hvdWxkIHN1Y2NlZWQuCitQQVNTIGNhbGxpbmcgZnJhbWVidWZmZXJUZXh0dXJlMkQgd2l0aCBu
b24temVybyBtaXBtYXAgbGV2ZWwgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfVkFMVUUuCitQQVNT
IGF0dGFjaGluZyBhIHJlbmRlcmJ1ZmZlciB0byBhIGZyYW1lYnVmZmVyIHNob3VsZCBzdWNjZWVk
LgorUEFTUyBkZXRhY2hpbmcgYSByZW5kZXJidWZmZXIgZnJvbSBhIGZyYW1lYnVmZmVyIHNob3Vs
ZCBzdWNjZWVkLgorUEFTUyBiaW5kaW5nIGRlZmF1bHQgKG51bGwpIGZyYW1lYnVmZmVyIHNob3Vs
ZCBzdWNjZWVkLgorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXIt
dGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Zy
YW1lYnVmZmVyLXRlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2ZyYW1lYnVmZmVyLXRlc3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NzAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5z
aXRpb25hbC8vRU4iCisgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgor
PGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5XZWJHTCBGcmFtZWJ1ZmZlciBUZXN0
PC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48
L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iMiIgaGVpZ2h0PSIyIj4gPC9jYW52YXM+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMg
dGVzdHMgZnJhbWVidWZmZXIvcmVuZGVyYnVmZmVyLXJlbGF0ZWQgZnVuY3Rpb25zIik7CisKK2Rl
YnVnKCIiKTsKK2RlYnVnKCJDYW52YXMuZ2V0Q29udGV4dCIpOworCit2YXIgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwordmFyIGdsID0gY3JlYXRlM0RDb250ZXh0
KGNhbnZhcyk7CitpZiAoIWdsKSB7CisgIHRlc3RGYWlsZWQoImNvbnRleHQgZG9lcyBub3QgZXhp
c3QiKTsKK30gZWxzZSB7CisgIHRlc3RQYXNzZWQoImNvbnRleHQgZXhpc3RzIik7CisKKyAgZGVi
dWcoIiIpOworICBkZWJ1ZygiQ2hlY2tpbmcgZnJhbWVidWZmZXIvcmVuZGVyYnVmZmVyIHN0dWZm
LiIpOworCisgIHZhciB2YWx1ZSA9IGdsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cigKKyAgICAgZ2wuRlJBTUVCVUZGRVIsCisgICAgIGdsLkNPTE9SX0FUVEFDSE1FTlQwLAorICAg
ICBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKTsKKyAgYXNzZXJ0TXNnKGds
LmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAiY2FsbGlu
ZyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgb24gdGhlIGRlZmF1bHQgZnJhbWVi
dWZmZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OLiIpOworCisgIGFzc2VydE1z
ZyhnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSA9PSBnbC5GUkFNRUJV
RkZFUl9DT01QTEVURSwKKyAgICAgICAgICAgICJjYWxsaW5nIGNoZWNrRnJhbWVidWZmZXJTdGF0
dXMgb24gdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgc2hvdWxkIGdlbmVyYXRlIEZSQU1FQlVGRkVS
X0NPTVBMRVRFLiIpOworCisgIHZhciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgIGdsLmJp
bmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7CisgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVY
VFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgZ2wudGV4UGFy
YW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1Qp
OworICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBn
bC5DTEFNUF9UT19FREdFKTsKKyAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5U
RVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7CisgIGdsLnRleEltYWdlMkQoZ2wuVEVY
VFVSRV8yRCwKKyAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgLy8gbGV2ZWwKKyAg
ICAgICAgICAgICAgICBnbC5SR0JBLCAgICAgICAgICAgLy8gaW50ZXJuYWxGb3JtYXQKKyAgICAg
ICAgICAgICAgICBjYW52YXMud2lkdGgsICAgICAgLy8gd2lkdGgKKyAgICAgICAgICAgICAgICBj
YW52YXMuaGVpZ2h0LCAgICAgLy8gaGVpZ2h0CisgICAgICAgICAgICAgICAgMCwgICAgICAgICAg
ICAgICAgIC8vIGJvcmRlcgorICAgICAgICAgICAgICAgIGdsLlJHQkEsICAgICAgICAgICAvLyBm
b3JtYXQKKyAgICAgICAgICAgICAgICBnbC5VTlNJR05FRF9CWVRFLCAgLy8gdHlwZQorICAgICAg
ICAgICAgICAgIG51bGwpOyAgICAgICAgICAgICAvLyBkYXRhCisgIGdsLmZyYW1lYnVmZmVyVGV4
dHVyZTJEKAorICAgICAgZ2wuRlJBTUVCVUZGRVIsCisgICAgICBnbC5DT0xPUl9BVFRBQ0hNRU5U
MCwKKyAgICAgIGdsLlRFWFRVUkVfMkQsCisgICAgICB0ZXgsCisgICAgICAwKTsKKyAgYXNzZXJ0
TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAi
dHJ5aW5nIHRvIGF0dGFjaCBhIHRleHR1cmUgdG8gZGVmYXVsdCBmcmFtZWJ1ZmZlciBzaG91bGQg
Z2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04uIik7CisKKyAgZ2wuZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoCisgICAgICBnbC5GUkFNRUJVRkZFUiwKKyAgICAgIGdsLkNPTE9SX0FUVEFDSE1FTlQw
LAorICAgICAgZ2wuUkVOREVSQlVGRkVSLAorICAgICAgbnVsbCk7CisgIGFzc2VydE1zZyhnbC5n
ZXRFcnJvcigpID09IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICAgInRyeWluZyB0
byBkZXRhY2ggZGVmYXVsdCByZW5kZXJidWZmZXIgZnJvbSBkZWZhdWx0IGZyYW1lYnVmZmVyIHNo
b3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTi4iKTsKKworICB2YXIgcmIgPSBnbC5jcmVh
dGVSZW5kZXJidWZmZXIoKTsKKyAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIs
IHJiKTsKKyAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLlJHQkE0
LCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3Io
KSA9PSBnbC5OT19FUlJPUiwKKyAgICAgICAgICAgICJhbGxvY2F0aW5nIHJlbmRlcmJ1ZmZlciBz
dG9yYWdlIG9mIGEgbmV3bHkgY3JlYXRlZCByZW5kZXJidWZmZXIgc2hvdWxkIHN1Y2NlZWQuIik7
CisKKyAgZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoCisgICAgICBnbC5GUkFNRUJVRkZFUiwK
KyAgICAgIGdsLkNPTE9SX0FUVEFDSE1FTlQwLAorICAgICAgZ2wuUkVOREVSQlVGRkVSLAorICAg
ICAgcmIpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX09QRVJBVElP
TiwKKyAgICAgICAgICAgICJ0cnlpbmcgdG8gYXR0YWNoIGEgcmVuZGVyYnVmZmVyIHRvIHRoZSBk
ZWZhdWx0IGZyYW1lYnVmZmVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTi4iKTsK
KworICB2YXIgZmJ0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgIGdsLmJpbmRUZXh0dXJlKGds
LlRFWFRVUkVfMkQsIGZidGV4KTsKKyAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBn
bC5SR0JBLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lH
TkVEX0JZVEUsIG51bGwpOworICB2YXIgZmIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworCisg
IGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmIpOworICBhc3NlcnRNc2coZ2wu
Z2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKKyAgICAgICAgICAgICJiaW5kaW5nIGEgbmV3bHkg
Y3JlYXRlZCBmcmFtZWJ1ZmZlciBzaG91bGQgc3VjY2VlZC4iKTsKKworICB2YXIgdGFyZ2V0ID0g
MHg4Q0E4OyAvLyBHTF9SRUFEX0ZSQU1FQlVGRkVSCisgIGdsLmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcigKKyAgICAgdGFyZ2V0LAorICAgICBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwK
KyAgICAgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSk7CisgIGFzc2VydE1z
ZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFMSURfRU5VTSwKKyAgICAgICAgICAgICJjYWxsaW5n
IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciB3aXRoIHRhcmdldCA9IFJFQURfRlJB
TUVCVUZGRVIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfRU5VTS4iKTsKKyAgYXNzZXJ0TXNnKGds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KSA9PSAwLAorICAgICAgICAgICAgImNhbGxp
bmcgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyB3aXRoIHRhcmdldCA9IFJFQURfRlJBTUVCVUZGRVIg
c2hvdWxkIHJldHVybiAwLiIpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZB
TElEX0VOVU0sCisgICAgICAgICAgICAiY2FsbGluZyBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIHdp
dGggdGFyZ2V0ID0gUkVBRF9GUkFNRUJVRkZFUiBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9FTlVN
LiIpOworICBnbC5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigp
KTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9FTlVNLAorICAgICAg
ICAgICAgImNhbGxpbmcgYmluZEZyYW1lYnVmZmVyIHdpdGggdGFyZ2V0ID0gUkVBRF9GUkFNRUJV
RkZFUiBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLiIpOworICBhc3NlcnRNc2coZmIgPT0g
Z2wuZ2V0UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSX0JJTkRJTkcpLAorICAgICAgICAgICAgImNh
bGxpbmcgYmluZEZyYW1lYnVmZmVyIHdpdGggdGFyZ2V0ID0gUkVBRF9GUkFNRUJVRkZFUiBzaG91
bGQgbm90IGNoYW5nZSBGUkFNRUJVRkZFUl9CSU5ESU5HLiIpOworICBnbC5nZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0LCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSk7CisgIGFzc2VydE1zZyhnbC5nZXRFcnJv
cigpID09IGdsLklOVkFMSURfRU5VTSwKKyAgICAgICAgICAgICJjYWxsaW5nIGdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlciB3aXRoIHRhcmdldCA9IFJFQURfRlJBTUVCVUZGRVIgc2hv
dWxkIGdlbmVyYXRlIElOVkFMSURfRU5VTS4iKTsKKyAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQo
dGFyZ2V0LCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgZmJ0ZXgsIDApOwor
ICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX0VOVU0sCisgICAgICAgICAg
ICAiY2FsbGluZyBmcmFtZWJ1ZmZlclRleEltYWdlMkQgd2l0aCB0YXJnZXQgPSBSRUFEX0ZSQU1F
QlVGRkVSIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX0VOVU0uIik7CisgIGdsLmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKHRhcmdldCwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlJFTkRFUkJVRkZF
UiwgcmIpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX0VOVU0sCisg
ICAgICAgICAgICAiY2FsbGluZyBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciB3aXRoIHRhcmdldCA9
IFJFQURfRlJBTUVCVUZGRVIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfRU5VTS4iKTsKKworICB2
YXIgYXR0YWNobWVudCA9IDB4OENFMTsgLy8gR0xfQ09MT1JfQVRUQUNITUVOVDEKKyAgZ2wuZnJh
bWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIGdsLlRFWFRVUkVf
MkQsIGZidGV4LCAwKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9F
TlVNLAorICAgICAgICAgICAgImNhbGxpbmcgZnJhbWVidWZmZXJUZXhJbWFnZTJEIHdpdGggYXR0
YWNobWVudCA9IENPTE9SX0FUVEFDSE1FTlQxIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX0VOVU0u
Iik7CisgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBhdHRhY2ht
ZW50LCBnbC5SRU5ERVJCVUZGRVIsIHJiKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0g
Z2wuSU5WQUxJRF9FTlVNLAorICAgICAgICAgICAgImNhbGxpbmcgZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIgd2l0aCBhdHRhY2htZW50ID0gQ09MT1JfQVRUQUNITUVOVDEgc2hvdWxkIGdlbmVyYXRl
IElOVkFMSURfRU5VTS4iKTsKKworICBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIoZ2wuRlJBTUVCVUZGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODIxMCk7IC8vIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJ
TkcKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9FTlVNLAorICAgICAg
ICAgICAgImNhbGxpbmcgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIHdpdGggcG5h
bWUgPSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HIHNob3VsZCBnZW5l
cmF0ZSBJTlZBTElEX0VOVU0uIik7CisKKyAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJB
TUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5URVhUVVJFXzJELCBmYnRleCwgMCk7
CisgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAorICAgICAgICAgICAg
ImF0dGFjaGluZyBhIHRleHR1cmUgdG8gYSBmcmFtZWJ1ZmZlciBzaG91bGQgc3VjY2VlZC4iKTsK
KworICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRU
QUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIG51bGwsIDApOworICBhc3NlcnRNc2coZ2wuZ2V0RXJy
b3IoKSA9PSBnbC5OT19FUlJPUiwKKyAgICAgICAgICAgICJkZXRhY2hpbmcgYSB0ZXh0dXJlIGZy
b20gYSBmcmFtZWJ1ZmZlciBzaG91bGQgc3VjY2VlZC4iKTsKKworICBnbC5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVf
MkQsIGZidGV4LCAxKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9W
QUxVRSwKKyAgICAgICAgICAgICJjYWxsaW5nIGZyYW1lYnVmZmVyVGV4dHVyZTJEIHdpdGggbm9u
LXplcm8gbWlwbWFwIGxldmVsIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX1ZBTFVFLiIpOworCisg
IGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRB
Q0hNRU5UMCwgZ2wuUkVOREVSQlVGRkVSLCByYik7CisgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigp
ID09IGdsLk5PX0VSUk9SLAorICAgICAgICAgICAgImF0dGFjaGluZyBhIHJlbmRlcmJ1ZmZlciB0
byBhIGZyYW1lYnVmZmVyIHNob3VsZCBzdWNjZWVkLiIpOworCisgIGdsLmZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuUkVOREVS
QlVGRkVSLCBudWxsKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1Is
CisgICAgICAgICAgICAiZGV0YWNoaW5nIGEgcmVuZGVyYnVmZmVyIGZyb20gYSBmcmFtZWJ1ZmZl
ciBzaG91bGQgc3VjY2VlZC4iKTsKKworICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZG
RVIsIG51bGwpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKKyAg
ICAgICAgICAgICJiaW5kaW5nIGRlZmF1bHQgKG51bGwpIGZyYW1lYnVmZmVyIHNob3VsZCBzdWNj
ZWVkLiIpOworfQorCitkZWJ1ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+Cis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1ucG90Lmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1ucG90Lmh0bWwJ
KHJldmlzaW9uIDYwOTA1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVy
ZS1ucG90Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiA8aHRtbD4NCiAgIDxo
ZWFkPg0KICAgICA8dGl0bGU+V2ViR0wgTm9uLVBvd2VyIG9mIDIgdGV4dHVyZSBjb25mb3JtYW5j
ZSB0ZXN0LjwvdGl0bGU+DQotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4v
anMvL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPg0KKyAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPg0KICAg
ICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4NCiAgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy91dGlsczNkLmpzIj4gPC9zY3JpcHQ+DQog
PC9oZWFkPg0KQEAgLTMzLDE0ICszMyw2IEBACiAgICAgPC9zY3JpcHQ+DQogDQogICAgIDxzY3Jp
cHQ+DQotICAgICAgICBmdW5jdGlvbiBhc3NlcnRNc2coYXNzZXJ0aW9uLCBtc2cpIHsNCi0gICAg
ICAgICAgICBpZiAoYXNzZXJ0aW9uKSB7DQotICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQobXNn
KTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKG1z
Zyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KICAgICAgICAgZnVuY3Rpb24gaW5p
dCgpDQogICAgICAgICB7DQogICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgew0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93
ZWJnbC10ZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3Jlc291cmNlcy93ZWJnbC10ZXN0LmpzCShyZXZpc2lvbiA2MDkwNSkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC04NCwzICs4NCwxMSBAQCBmdW5jdGlvbiBsb2FkRnJhZ21lbnRTaGFkZXIoY29udGV4dCwg
cGF0CiAgICAgY29udGV4dC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKICAgICByZXR1
cm4gZnJhZ21lbnRTaGFkZXI7CiB9CisKK2Z1bmN0aW9uIGFzc2VydE1zZyhhc3NlcnRpb24sIG1z
ZykgeworICAgIGlmIChhc3NlcnRpb24pIHsKKyAgICAgICAgdGVzdFBhc3NlZChtc2cpOworICAg
ICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKG1zZyk7CisgICAgIH0KK30KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>