<?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>30145</bug_id>
          
          <creation_ts>2009-10-06 18:11:29 -0700</creation_ts>
          <short_desc>There should be a way to reuse isolated worlds</short_desc>
          <delta_ts>2009-10-19 10:55: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>Platform</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Aaron Boodman">aa</reporter>
          <assigned_to name="Aaron Boodman">aa</assigned_to>
          <cc>abarth</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>152913</commentid>
    <comment_count>0</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-10-06 18:11:29 -0700</bug_when>
    <thetext>There should be a way for WebKit clients to reuse isolated worlds, to execute different chunks of code in the same world.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152916</commentid>
    <comment_count>1</comment_count>
      <attachid>40754</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-10-06 18:22:53 -0700</bug_when>
    <thetext>Created attachment 40754
patchity patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152917</commentid>
    <comment_count>2</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-10-06 18:24:02 -0700</bug_when>
    <thetext>See also Chromium patch:
http://codereview.chromium.org/262002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152921</commentid>
    <comment_count>3</comment_count>
      <attachid>40754</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-06 18:49:03 -0700</bug_when>
    <thetext>Comment on attachment 40754
patchity patch

+ To destroy it, call deleteSoon().

This method doesn&apos;t seem to exist.  Also, delete() isn&apos;t the right name.  detach() is probably better.

+ V8Proxy::~V8Proxy()

I wish we had a small scoped object to do this work instead of doing it explicitly in the destructor.

You seem to only clear the worldID map during destruction of V8Proxy, but doesn&apos;t V8Proxy have Frame-lifetime?  You need to clean up the map on every navigation.  You probably want to do that work during |clearForNavigation|.

This design also doesn&apos;t account for the PageCache, but we don&apos;t support PageCache anyway...

Tests???  Feel free to modify layoutTestController to make this stuff testable.  You can see examples in LayoutTests/http/tests/security/isolatedWorld</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153154</commentid>
    <comment_count>4</comment_count>
      <attachid>40813</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-10-07 12:50:11 -0700</bug_when>
    <thetext>Created attachment 40813
now with even more testing goodness</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153157</commentid>
    <comment_count>5</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-10-07 12:54:11 -0700</bug_when>
    <thetext>I renamed the method destroy(). I think this is accurate as, it basically queues the object to be deleted as soon as possible. Since the destructor is private, I don&apos;t think there&apos;s any chance for confusion. But if you feel strongly about &apos;weak&apos; or &apos;release&apos; or whatever, just say so.

Regarding a scoped wrapper for V8Proxy. That sounds fine, but using smart pointers with collections always sketches me out a bit because it&apos;s not clear what the behavior will be when the collection is resized. Let me know if there is a webkity way to do this I can look to.

Regarding clearing the map of worlds. I added a call to clear in navigation and close. It seems to work ,but I am not that familiar with the details of V8Proxy. Please double-check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153158</commentid>
    <comment_count>6</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-10-07 12:55:54 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=40813) [details]
&gt; now with even more testing goodness

The &apos;even more&apos; here is in reference to the testing I already added for this downstream :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153160</commentid>
    <comment_count>7</comment_count>
      <attachid>40813</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-07 13:02:32 -0700</bug_when>
    <thetext>Comment on attachment 40813
now with even more testing goodness

Great.  Thanks Aaron.

I woud probably have picked a different name than |destroy|, but that&apos;s not essential.  Also, you don&apos;t need to mark the HTML files as executable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153162</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-07 13:09:38 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; If you feel
&gt; strongly about &apos;weak&apos; or &apos;release&apos; or whatever, just say so.

I don&apos;t feel strongly about it.

&gt; Regarding a scoped wrapper for V8Proxy. That sounds fine, but using smart
&gt; pointers with collections always sketches me out a bit because it&apos;s not clear
&gt; what the behavior will be when the collection is resized. Let me know if there
&gt; is a webkity way to do this I can look to.

If we see the pattern recurring it might be worth investing in machinery to make it easier.  We&apos;ll have to keep an eye out.

&gt; Regarding clearing the map of worlds. I added a call to clear in navigation and
&gt; close. It seems to work ,but I am not that familiar with the details of
&gt; V8Proxy. Please double-check.

I believe that is correct for the non-PageCache case, which we don&apos;t support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153179</commentid>
    <comment_count>9</comment_count>
      <attachid>40813</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-07 14:05:40 -0700</bug_when>
    <thetext>Comment on attachment 40813
now with even more testing goodness

Rejecting patch 40813 from commit-queue.

aa@chromium.org does not have committer permissions according to http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/modules/committers.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153201</commentid>
    <comment_count>10</comment_count>
      <attachid>40813</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-07 15:29:31 -0700</bug_when>
    <thetext>Comment on attachment 40813
now with even more testing goodness

Rejecting patch 40813 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;]&quot; exit_code: 1
Running build-dumprendertree
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 11405 test cases.
http/tests/security/isolatedWorld/iframe.html -&gt; new (results generated in /Users/eseidel/Projects/CommitQueue/LayoutTests/platform/mac/http/tests/security/isolatedWorld)

Exiting early after 1 failures. 8829 tests run.
248.44s total testing time

8828 test cases (99%) succeeded
1 test case (&lt;1%) was new
5 test cases (&lt;1%) had stderr output</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153202</commentid>
    <comment_count>11</comment_count>
      <attachid>40827</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-10-07 15:41:06 -0700</bug_when>
    <thetext>Created attachment 40827
Forgot to update Skipped files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153206</commentid>
    <comment_count>12</comment_count>
      <attachid>40827</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-10-07 15:43:31 -0700</bug_when>
    <thetext>Comment on attachment 40827
Forgot to update Skipped files

New patch just adds the Skipped entries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153207</commentid>
    <comment_count>13</comment_count>
      <attachid>40827</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-10-07 15:48:37 -0700</bug_when>
    <thetext>Comment on attachment 40827
Forgot to update Skipped files

Assuming previous review holds, r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155712</commentid>
    <comment_count>14</comment_count>
      <attachid>40827</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-10-19 08:57:53 -0700</bug_when>
    <thetext>Comment on attachment 40827
Forgot to update Skipped files

Let commit bot land it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155727</commentid>
    <comment_count>15</comment_count>
      <attachid>40827</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-19 09:09:49 -0700</bug_when>
    <thetext>Comment on attachment 40827
Forgot to update Skipped files

Rejecting patch 40827 from commit-queue.

Patch https://bugs.webkit.org/attachment.cgi?id=40827 from bug 30145 failed to download and apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155780</commentid>
    <comment_count>16</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-10-19 10:55:31 -0700</bug_when>
    <thetext>This was already checked in.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40754</attachid>
            <date>2009-10-06 18:22:53 -0700</date>
            <delta_ts>2009-10-07 12:50:11 -0700</delta_ts>
            <desc>patchity patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>12677</size>
            <attacher name="Aaron Boodman">aa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTIxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMTAtMDYgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlVcGRhdGUgaXNv
bGF0ZWQgd29ybGRzIHVuZGVyIHY4IHRvIHN1cHBvcnQgd29ybGQgcmV1c2UuCisJaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMTQ1CisKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgUmVwbGFjZSBldmFsdWF0ZUluTmV3
SXNvbGF0ZWRXb3JsZCgpIHdpdGhlIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGlkKS4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6IERpdHRvLgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6On5WOFByb3h5KTogRGl0dGlvLgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFBy
b3h5Lmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHA6
CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBjb250cm9sbGluZyBsaWZldGltZSBvZiBhIHdvcmxk
LCByYXRoZXIgdGhhbiByZWx5aW5nIG9uIEdDLgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRl
ZFdvcmxkOjpjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpWOElzb2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6VjhJc29sYXRlZFdvcmxkOjpkZXN0cm95KTogRGl0dG8uCisgICAgICAgICog
YmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmg6IERpdHRvLgorCiAyMDA5LTEwLTA2ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDQ5MTk1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDEzICsxODEsMTIgQEAgYm9vbCBTY3JpcHRDb250cm9s
bGVyOjpwcm9jZXNzaW5nVXNlckdlcwogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3Vy
Y2VDb2RlPiYgc291cmNlcykKIHsKLSAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiBleHRlbnNpb25H
cm91cCBoZXJlLgotICAgIG1fcHJveHktPmV2YWx1YXRlSW5OZXdXb3JsZChzb3VyY2VzLCAxKTsK
KyAgICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCAw
KTsKIH0KIAotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluTmV3V29ybGQoY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCit2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdv
cmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVu
c2lvbkdyb3VwKQogewotICAgIG1fcHJveHktPmV2YWx1YXRlSW5OZXdXb3JsZChzb3VyY2VzLCBl
eHRlbnNpb25Hcm91cCk7CisgICAgbV9wcm94eS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29y
bGRJRCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXApOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5OZXdDb250ZXh0KGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYg
c291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDQ5MTk1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEzICs2NSwxOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFNjcmlw
dFNvdXJjZUNvZGUmKTsKIAogICAgICAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVu
c2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYpOwotICAgICAg
ICAKLSAgICAgICAgLy8gRXhlY3V0ZXMgSmF2YVNjcmlwdCBpbiBhIG5ldyB3b3JsZCBhc3NvY2lh
dGVkIHdpdGggdGhlIHdlYiBmcmFtZS4gVGhlCi0gICAgICAgIC8vIHNjcmlwdCBnZXRzIGl0cyBv
d24gZ2xvYmFsIHNjb3BlLCBpdHMgb3duIHByb3RvdHlwZXMgZm9yIGludHJpbnNpYwotICAgICAg
ICAvLyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywgQXJyYXksIGFuZCBzby1vbiksIGFuZCBp
dHMgb3duIHdyYXBwZXJzIGZvcgotICAgICAgICAvLyBhbGwgRE9NIG5vZGVzIGFuZCBET00gY29u
c3RydWN0b3JzLgotICAgICAgICAvLyBGSVhNRTogTW92ZSB0byB1c2luZyBldmFsdWF0ZUluSXNv
bGF0ZWRXb3JsZCBpbnN0ZWFkLgotICAgICAgICB2b2lkIGV2YWx1YXRlSW5OZXdXb3JsZChjb25z
dCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mLCBpbnQgZXh0ZW5zaW9uR3JvdXApOworCisgICAg
ICAgIC8vIEV4ZWN1dGVzIEphdmFTY3JpcHQgaW4gYW4gaXNvbGF0ZWQgd29ybGQuIFRoZSBzY3Jp
cHQgZ2V0cyBpdHMgb3duIGdsb2JhbCBzY29wZSwKKyAgICAgICAgLy8gaXRzIG93biBwcm90b3R5
cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsIEFycmF5LCBhbmQg
c28tb24pLAorICAgICAgICAvLyBhbmQgaXRzIG93biB3cmFwcGVycyBmb3IgYWxsIERPTSBub2Rl
cyBhbmQgRE9NIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgYW4gaXNv
bGF0ZWQgd29ybGQgd2l0aCB0aGUgc3BlY2lmaWVkIElEIGFscmVhZHkgZXhpc3RzLCBpdCBpcyBy
ZXVzZWQuCisgICAgICAgIC8vIE90aGVyd2lzZSwgYSBuZXcgd29ybGQgaXMgY3JlYXRlZC4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhlIHdvcmxkSUQgaXMgMCwgYSBuZXcgd29ybGQgaXMg
YWx3YXlzIGNyZWF0ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9m
IGV4dGVuc2lvbkdyb3VwIGhlcmUuCisgICAgICAgIHZvaWQgZXZhbHVhdGVJbklzb2xhdGVkV29y
bGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiwgaW50
IGV4dGVuc2lvbkdyb3VwKTsKIAogICAgICAgICAvLyBFeGVjdXRlcyBKYXZhU2NyaXB0IGluIGEg
bmV3IGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSB3ZWIgZnJhbWUuIFRoZQogICAgICAgICAv
LyBzY3JpcHQgZ2V0cyBpdHMgb3duIGdsb2JhbCBzY29wZSBhbmQgaXRzIG93biBwcm90b3R5cGVz
IGZvciBpbnRyaW5zaWMKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5j
cHAJKHJldmlzaW9uIDQ5MTk1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29y
bGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwzMiArNDUsMjcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBpbnQgVjhJc29sYXRlZFdvcmxkOjppc29sYXRlZFdvcmxkQ291bnQgPSAwOwogCi1z
dGF0aWMgdm9pZCBjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4
OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29sYXRlZF93b3JsZCkKK3ZvaWQgVjhJc29sYXRlZFdv
cmxkOjpjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1
ZT4gb2JqZWN0LCB2b2lkKiBpc29sYXRlZF93b3JsZCkKIHsKICAgICAvLyBPdXIgY29udGV4dCBp
cyBnb2luZyBhd2F5LiAgVGltZSB0byBjbGVhbiB1cCB0aGUgd29ybGQuCiAgICAgVjhJc29sYXRl
ZFdvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PFY4SXNvbGF0ZWRXb3JsZCo+KGlzb2xhdGVkX3dv
cmxkKTsKICAgICBkZWxldGUgd29ybGQ7CiB9CiAKLXZvaWQgVjhJc29sYXRlZFdvcmxkOjpldmFs
dWF0ZShjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIFY4UHJveHkqIHBy
b3h5LCBpbnQgZXh0ZW5zaW9uR3JvdXApCitWOElzb2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3Js
ZChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdyb3VwKQogeworICAgICsraXNvbGF0ZWRX
b3JsZENvdW50OworCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpDb250ZXh0PiBjb250ZXh0ID0gcHJveHktPmNyZWF0ZU5ld0NvbnRleHQodjg6Okhh
bmRsZTx2ODo6T2JqZWN0PigpLCBleHRlbnNpb25Hcm91cCk7CisgICAgbV9jb250ZXh0ID0gU2hh
cmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD46OmNyZWF0ZShwcm94eS0+Y3JlYXRlTmV3Q29udGV4
dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGV4dGVuc2lvbkdyb3VwKSk7CiAKICAgICAvLyBS
dW4gY29kZSBpbiB0aGUgbmV3IGNvbnRleHQuCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRl
eHRfc2NvcGUoY29udGV4dCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUo
bV9jb250ZXh0LT5nZXQoKSk7CiAKLSAgICAvLyBUaGUgbGlmZXRpbWUgb2YgdGhpcyBvYmplY3Qg
aXMgY29udHJvbGxlZCBieSB0aGUgVjggR0MuCi0gICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgdGhl
IHdvcmxkIGJlZm9yZSB0b3VjaGluZyBET00gd3JhcHBlcnMuCi0gICAgVjhJc29sYXRlZFdvcmxk
KiB3b3JsZCA9IG5ldyBWOElzb2xhdGVkV29ybGQoY29udGV4dCk7CisgICAgbV9jb250ZXh0LT5n
ZXQoKS0+R2xvYmFsKCktPlNldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjppc29s
YXRlZFdvcmxkKCksIHY4OjpFeHRlcm5hbDo6V3JhcCh0aGlzKSk7CiAKLSAgICBWOFByb3h5Ojpp
bnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKGNvbnRleHQpOwotICAgIHByb3h5LT5pbnN0YWxs
RE9NV2luZG93KGNvbnRleHQsIHByb3h5LT5mcmFtZSgpLT5kb21XaW5kb3coKSk7Ci0KLSAgICBw
cm94eS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVhdGVJc29sYXRlZFNjcmlw
dENvbnRleHQoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7
ICsraSkKLSAgICAgICAgcHJveHktPmV2YWx1YXRlKHNvdXJjZXNbaV0sIDApOworICAgIFY4UHJv
eHk6Omluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGUobV9jb250ZXh0LT5nZXQoKSk7CisgICAg
cHJveHktPmluc3RhbGxET01XaW5kb3cobV9jb250ZXh0LT5nZXQoKSwgcHJveHktPmZyYW1lKCkt
PmRvbVdpbmRvdygpKTsKIAogICAgIC8vIFVzaW5nIHRoZSBkZWZhdWx0IHNlY3VyaXR5IHRva2Vu
IG1lYW5zIHRoYXQgdGhlIGNhbkFjY2VzcyBpcyBhbHdheXMKICAgICAvLyBjYWxsZWQsIHdoaWNo
IGlzIHNsb3cuCkBAIC03OCwyMCArNzMsMTQgQEAgdm9pZCBWOElzb2xhdGVkV29ybGQ6OmV2YWx1
YXRlKGNvbnN0IFZlYwogICAgIC8vICAgICAgICBjcmVhdGVkIGNvbnRleHRzIHNvIHRoYXQgdGhl
eSBjYW4gYWxsIGJlIHVwZGF0ZWQgd2hlbiB0aGUKICAgICAvLyAgICAgICAgZG9jdW1lbnQgZG9t
YWluCiAgICAgLy8gICAgICAgIGNoYW5nZXMuCi0gICAgLy8gRklYTUU6IE1vdmUgdGhpcyBzdGF0
ZW1lbnQgYWJvdmUgcHJveHktPmV2YWx1YXRlPyAgSXQgc2VlbXMgbGlrZSB3ZQotICAgIC8vICAg
ICAgICBzaG91bGQgc2V0IHVwIHRoZSB0b2tlbiBiZWZvcmUgcnVubmluZyB0aGUgc2NyaXB0Lgot
ICAgIGNvbnRleHQtPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7CisgICAgbV9jb250ZXh0LT5n
ZXQoKS0+VXNlRGVmYXVsdFNlY3VyaXR5VG9rZW4oKTsKIAotICAgIGNvbnRleHQuRGlzcG9zZSgp
OwotICAgIC8vIFdBUk5JTkchICBUaGlzIG1pZ2h0IHdlbGwgZGVsZXRlIHx3b3JsZHwuCisgICAg
cHJveHktPmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ3JlYXRlSXNvbGF0ZWRTY3Jp
cHRDb250ZXh0KCk7CiB9CiAKLVY4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdvcmxkKHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCi0gICAgOiBtX2NvbnRleHQoU2hhcmVkUGVyc2lz
dGVudDx2ODo6Q29udGV4dD46OmNyZWF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD46Ok5l
dyhjb250ZXh0KSkpCit2b2lkIFY4SXNvbGF0ZWRXb3JsZDo6ZGVzdHJveSgpCiB7Ci0gICAgKytp
c29sYXRlZFdvcmxkQ291bnQ7CiAgICAgbV9jb250ZXh0LT5nZXQoKS5NYWtlV2Vhayh0aGlzLCAm
Y29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7Ci0gICAgY29udGV4dC0+R2xvYmFsKCktPlNl
dEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjppc29sYXRlZFdvcmxkKCksIHY4OjpF
eHRlcm5hbDo6V3JhcCh0aGlzKSk7CiB9CiAKIFY4SXNvbGF0ZWRXb3JsZDo6flY4SXNvbGF0ZWRX
b3JsZCgpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmgJKHJldmlzaW9u
IDQ5MTk1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLwog
ICAgIGNsYXNzIFY4SXNvbGF0ZWRXb3JsZCB7CiAgICAgcHVibGljOgotICAgICAgICB+VjhJc29s
YXRlZFdvcmxkKCk7Ci0KLSAgICAgICAgLy8gRXZhbHVhdGUgSmF2YVNjcmlwdCBpbiBhIG5ldyBp
c29sYXRlZCB3b3JsZC4gIFRoZSBzY3JpcHQgaGFzIGFjY2VzcwotICAgICAgICAvLyB0byB0aGUg
RE9NIG9mIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggfHByb3h5fC4KLSAgICAgICAgc3Rh
dGljIHZvaWQgZXZhbHVhdGUoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2Vz
LCBWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgLy8gQ3JlYXRl
cyBhbiBpc29sYXRlZCB3b3JsZC4gVG8gZGVzdHJveSBpdCwgY2FsbCBkZWxldGVTb29uKCkuCisg
ICAgICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIGlzb2xhdGVkIHdvcmxkIHdoZW4gdGhlIGNv
bnRleHQgaXQgb3ducyBpcyBHQydkLgorICAgICAgICBWOElzb2xhdGVkV29ybGQoVjhQcm94eSog
cHJveHksIGludCBleHRlbnNpb25Hcm91cCk7CisKKyAgICAgICAgLy8gVGhlIEMrKyBvd25lciBv
ZiB0aGUgd29ybGQgc2hvdWxkIGNhbGwgdGhpcyBpbnN0ZWFkIG9mIHRoZQorICAgICAgICAvLyBk
ZXN0cnVjdG9yLgorICAgICAgICB2b2lkIGRlc3Ryb3koKTsKIAogICAgICAgICAvLyBSZXR1cm5z
IHRoZSBpc29sYXRlZCB3b3JsZCBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgLy8gdjg6OkNvbnRl
eHQ6OkdldEVudGVyZWQoKS4gIEJlY2F1c2Ugd29ybGRzIGFyZSBpc29sYXRlZCwgdGhlIGVudGly
ZQpAQCAtOTAsMTIgKzkyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRE9NRGF0
YVN0b3JlKiBnZXRET01EYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RvbURhdGFTdG9yZS5n
ZXRTdG9yZSgpOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICB+VjhJc29sYXRlZFdvcmxkKCk7
CisKICAgICAgICAgc3RhdGljIFY4SXNvbGF0ZWRXb3JsZCogZ2V0RW50ZXJlZEltcGwoKTsKIAot
ICAgICAgICAvLyBUaGUgbGlmZXRpbWUgb2YgYW4gaXNvbGF0ZWQgd29ybGQgaXMgbWFuYWdlZCBi
eSB0aGUgVjggZ2FyYmFnZQotICAgICAgICAvLyBjb2xsZWN0b3IuICBJbiBwYXJ0aWN1bGFyLCB0
aGUgb2JqZWN0IGNyZWF0ZWQgYnkgdGhpcyBjb25zdHJ1Y3RvciBpcwotICAgICAgICAvLyBmcmVl
ZCB3aGVuIHxjb250ZXh0fCBpcyBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICAgICAgZXhwbGljaXQg
VjhJc29sYXRlZFdvcmxkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpOworICAgICAg
ICAvLyBDYWxsZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHdoZW4gb3VyIEphdmFTY3JpcHQg
Y29udGV4dCBpcyBhYm91dAorICAgICAgICAvLyB0byBiZSBkZXN0cm95ZWQuCisgICAgICAgIHN0
YXRpYyB2b2lkIGNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6
OlZhbHVlPiBvYmplY3QsIHZvaWQqIGlzb2xhdGVkX3dvcmxkKTsKIAogICAgICAgICAvLyBUaGUg
djg6OkNvbnRleHQgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4gIFRoaXMgb2JqZWN0IGlzIGtlZXAg
b24gdGhlCiAgICAgICAgIC8vIGhlYXAgYXMgbG9uZyBhcyB8bV9jb250ZXh0fCBoYXMgbm90IGJl
ZW4gZ2FyYmFnZSBjb2xsZWN0ZWQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlz
aW9uIDQ5MTk1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIzLDYgKzIyMywxMSBAQCBWOFByb3h5Ojp+VjhQcm94eSgpCiB7CiAgICAgY2xl
YXJGb3JDbG9zZSgpOwogICAgIGRlc3Ryb3lHbG9iYWwoKTsKKworICAgIGZvciAoSXNvbGF0ZWRX
b3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuYmVnaW4oKTsKKyAgICAg
ICAgIGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGl0
ZXItPnNlY29uZC0+ZGVzdHJveSgpOworICAgIH0KIH0KIAogdm9pZCBWOFByb3h5OjpkZXN0cm95
R2xvYmFsKCkKQEAgLTI3NCwxMCArMjc5LDMyIEBAIGJvb2wgVjhQcm94eTo6aGFuZGxlT3V0T2ZN
ZW1vcnkoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5O
ZXdXb3JsZChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRl
bnNpb25Hcm91cCkKK3ZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdv
cmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVu
c2lvbkdyb3VwKQogewogICAgIGluaXRDb250ZXh0SWZOZWVkZWQoKTsKLSAgICBWOElzb2xhdGVk
V29ybGQ6OmV2YWx1YXRlKHNvdXJjZXMsIHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKKworICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICBWOElzb2xhdGVkV29ybGQqIHdvcmxkID0g
MDsKKworICAgIGlmICh3b3JsZElEID4gMCkgeworICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOworICAgICAgICBp
ZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7CisgICAgICAgICAgICB3b3JsZCA9
IGl0ZXItPnNlY29uZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdvcmxkID0gbmV3
IFY4SXNvbGF0ZWRXb3JsZCh0aGlzLCBleHRlbnNpb25Hcm91cCk7CisgICAgICAgICAgICBtX2lz
b2xhdGVkV29ybGRzLnNldCh3b3JsZElELCB3b3JsZCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICB3b3JsZCA9IG5ldyBWOElzb2xhdGVkV29ybGQodGhpcywgZXh0ZW5zaW9uR3Jv
dXApOworICAgIH0KKworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpM
b2NhbDx2ODo6Q29udGV4dD46Ok5ldyh3b3JsZC0+Y29udGV4dCgpKTsKKyAgICB2ODo6Q29udGV4
dDo6U2NvcGUgY29udGV4dF9zY29wZShjb250ZXh0KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNvdXJjZXMuc2l6ZSgpOyArK2kpCisgICAgICBldmFsdWF0ZShzb3VyY2VzW2ldLCAwKTsK
KworICAgIGlmICh3b3JsZElEID09IDApCisgICAgICB3b3JsZC0+ZGVzdHJveSgpOwogfQogCiB2
b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5OZXdDb250ZXh0KGNvbnN0IFZlY3RvcjxTY3JpcHRTb3Vy
Y2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmgJKHJldmlzaW9uIDQ5MTk1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNs
YXNzIFY4RXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQ7CiAKICAgICAv
LyBGSVhNRTogdXNlIHN0YW5kYXJkIGxvZ2dpbmcgZmFjaWxpdGllcyBpbiBXZWJDb3JlLgogICAg
IHZvaWQgbG9nSW5mbyhGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5n
JiB1cmwpOwpAQCAtMTY2LDcgKzE2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ly8gZ2xvYmFsIHNjb3BlLCBpdHMgb3duIHByb3RvdHlwZXMgZm9yIGludHJpbnNpYyBKYXZhU2Ny
aXB0IG9iamVjdHMgKFN0cmluZywKICAgICAgICAgLy8gQXJyYXksIGFuZCBzby1vbiksIGFuZCBp
dHMgb3duIHdyYXBwZXJzIGZvciBhbGwgRE9NIG5vZGVzIGFuZCBET00KICAgICAgICAgLy8gY29u
c3RydWN0b3JzLgotICAgICAgICB2b2lkIGV2YWx1YXRlSW5OZXdXb3JsZChjb25zdCBWZWN0b3I8
U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCk7CisgICAgICAg
IHZvaWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSWQsIGNvbnN0IFZlY3RvcjxT
Y3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKTsKIAogICAgICAg
ICAvLyBFdmFsdWF0ZSBKYXZhU2NyaXB0IGluIGEgbmV3IGNvbnRleHQuIFRoZSBzY3JpcHQgZ2V0
cyBpdHMgb3duIGdsb2JhbCBzY29wZQogICAgICAgICAvLyBhbmQgaXRzIG93biBwcm90b3R5cGVz
IGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsIEFycmF5LApAQCAtNDE0
LDYgKzQxNSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gQWxsIG9mIHRo
ZSBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY29udGV4dC4KICAgICAgICAgc3RhdGlj
IFY4RXh0ZW5zaW9ucyBtX2V4dGVuc2lvbnM7CisKKyAgICAgICAgLy8gVGhlIGlzb2xhdGVkIHdv
cmxkcyB3ZSBhcmUgdHJhY2tpbmcgZm9yIHRoaXMgZnJhbWUuIFdlIGhvbGQgdGhlbSBhbGl2ZQor
ICAgICAgICAvLyBoZXJlIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBhZ2FpbiBieSBmdXR1cmUg
Y2FsbHMgdG8KKyAgICAgICAgLy8gZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoKS4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gTm90ZTogYWx0aG91Z2ggdGhlIHBvaW50ZXIgaXMgcmF3LCB0aGUgaW5z
dGFuY2UgaXMga2VwdCBhbGl2ZSBieSBhIHN0cm9uZworICAgICAgICAvLyByZWZlcmVuY2UgdG8g
dGhlIHY4IGNvbnRleHQgaXQgY29udGFpbnMsIHdoaWNoIGlzIG5vdCBtYWRlIHdlYWsgdW50aWwg
d2UKKyAgICAgICAgLy8gY2FsbCB3b3JsZC0+ZGVzdHJveSgpLgorICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8aW50LCBWOElzb2xhdGVkV29ybGQqPiBJc29sYXRlZFdvcmxkTWFwOworICAgICAgICBJ
c29sYXRlZFdvcmxkTWFwIG1faXNvbGF0ZWRXb3JsZHM7CiAgICAgfTsKIAogICAgIHRlbXBsYXRl
IDxpbnQgdGFnLCB0eXBlbmFtZSBUPgo=
</data>
<flag name="review"
          id="22028"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40813</attachid>
            <date>2009-10-07 12:50:11 -0700</date>
            <delta_ts>2009-10-07 15:41:06 -0700</delta_ts>
            <desc>now with even more testing goodness</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>18881</size>
            <attacher name="Aaron Boodman">aa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTI1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMTAtMDcgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlVcGRhdGUgaXNv
bGF0ZWQgd29ybGRzIHVuZGVyIHY4IHRvIHN1cHBvcnQgd29ybGQgcmV1c2UuCisJaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMTQ1CisKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgUmVwbGFjZSBldmFsdWF0ZUluTmV3
SXNvbGF0ZWRXb3JsZCgpIHdpdGhlIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGlkKS4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6IERpdHRvLgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6On5WOFByb3h5KTogRGl0dGlvLgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFBy
b3h5Lmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHA6
CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBjb250cm9sbGluZyBsaWZldGltZSBvZiBhIHdvcmxk
LCByYXRoZXIgdGhhbiByZWx5aW5nIG9uIEdDLgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRl
ZFdvcmxkOjpjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpWOElzb2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6VjhJc29sYXRlZFdvcmxkOjpkZXN0cm95KTogRGl0dG8uCisgICAgICAgICog
YmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmg6IERpdHRvLgorCiAyMDA5LTEwLTA3ICBWaXRh
bHkgUmVwZXNoa28gIDx2aXRhbHlyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiA0OTE5NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxMyArMTgxLDEyIEBAIGJvb2wgU2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXMKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpl
dmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2Ny
aXB0U291cmNlQ29kZT4mIHNvdXJjZXMpCiB7Ci0gICAgLy8gRklYTUU6IEdldCByaWQgb2YgZXh0
ZW5zaW9uR3JvdXAgaGVyZS4KLSAgICBtX3Byb3h5LT5ldmFsdWF0ZUluTmV3V29ybGQoc291cmNl
cywgMSk7CisgICAgbV9wcm94eS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291
cmNlcywgMCk7CiB9CiAKLXZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbk5ld1dvcmxk
KGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdy
b3VwKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNp
Z25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGlu
dCBleHRlbnNpb25Hcm91cCkKIHsKLSAgICBtX3Byb3h5LT5ldmFsdWF0ZUluTmV3V29ybGQoc291
cmNlcywgZXh0ZW5zaW9uR3JvdXApOworICAgIG1fcHJveHktPmV2YWx1YXRlSW5Jc29sYXRlZFdv
cmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKIH0KIAogdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZUluTmV3Q29udGV4dChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNl
Q29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiA0OTE5NSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMyArNjUsMTgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJik7CiAKICAgICAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRX
b3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEV4ZWN1dGVzIEphdmFTY3JpcHQgaW4gYSBuZXcgd29ybGQg
YXNzb2NpYXRlZCB3aXRoIHRoZSB3ZWIgZnJhbWUuIFRoZQotICAgICAgICAvLyBzY3JpcHQgZ2V0
cyBpdHMgb3duIGdsb2JhbCBzY29wZSwgaXRzIG93biBwcm90b3R5cGVzIGZvciBpbnRyaW5zaWMK
LSAgICAgICAgLy8gSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsIEFycmF5LCBhbmQgc28tb24p
LCBhbmQgaXRzIG93biB3cmFwcGVycyBmb3IKLSAgICAgICAgLy8gYWxsIERPTSBub2RlcyBhbmQg
RE9NIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgLy8gRklYTUU6IE1vdmUgdG8gdXNpbmcgZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQgaW5zdGVhZC4KLSAgICAgICAgdm9pZCBldmFsdWF0ZUluTmV3V29y
bGQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiwgaW50IGV4dGVuc2lvbkdyb3VwKTsK
KworICAgICAgICAvLyBFeGVjdXRlcyBKYXZhU2NyaXB0IGluIGFuIGlzb2xhdGVkIHdvcmxkLiBU
aGUgc2NyaXB0IGdldHMgaXRzIG93biBnbG9iYWwgc2NvcGUsCisgICAgICAgIC8vIGl0cyBvd24g
cHJvdG90eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5nLCBBcnJh
eSwgYW5kIHNvLW9uKSwKKyAgICAgICAgLy8gYW5kIGl0cyBvd24gd3JhcHBlcnMgZm9yIGFsbCBE
T00gbm9kZXMgYW5kIERPTSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIC8vCisgICAgICAgIC8vIElm
IGFuIGlzb2xhdGVkIHdvcmxkIHdpdGggdGhlIHNwZWNpZmllZCBJRCBhbHJlYWR5IGV4aXN0cywg
aXQgaXMgcmV1c2VkLgorICAgICAgICAvLyBPdGhlcndpc2UsIGEgbmV3IHdvcmxkIGlzIGNyZWF0
ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoZSB3b3JsZElEIGlzIDAsIGEgbmV3IHdv
cmxkIGlzIGFsd2F5cyBjcmVhdGVkLgorICAgICAgICAvLworICAgICAgICAvLyBGSVhNRTogR2V0
IHJpZCBvZiBleHRlbnNpb25Hcm91cCBoZXJlLgorICAgICAgICB2b2lkIGV2YWx1YXRlSW5Jc29s
YXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2Rl
PiYsIGludCBleHRlbnNpb25Hcm91cCk7CiAKICAgICAgICAgLy8gRXhlY3V0ZXMgSmF2YVNjcmlw
dCBpbiBhIG5ldyBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgd2ViIGZyYW1lLiBUaGUKICAg
ICAgICAgLy8gc2NyaXB0IGdldHMgaXRzIG93biBnbG9iYWwgc2NvcGUgYW5kIGl0cyBvd24gcHJv
dG90eXBlcyBmb3IgaW50cmluc2ljCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0
ZWRXb3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVk
V29ybGQuY3BwCShyZXZpc2lvbiA0OTE5NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29s
YXRlZFdvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMzIgKzQ1LDI3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogaW50IFY4SXNvbGF0ZWRXb3JsZDo6aXNvbGF0ZWRXb3JsZENvdW50ID0g
MDsKIAotc3RhdGljIHZvaWQgY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6UGVyc2lz
dGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRfd29ybGQpCit2b2lkIFY4SXNv
bGF0ZWRXb3JsZDo6Y29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2
ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRfd29ybGQpCiB7CiAgICAgLy8gT3VyIGNv
bnRleHQgaXMgZ29pbmcgYXdheS4gIFRpbWUgdG8gY2xlYW4gdXAgdGhlIHdvcmxkLgogICAgIFY4
SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBzdGF0aWNfY2FzdDxWOElzb2xhdGVkV29ybGQqPihpc29s
YXRlZF93b3JsZCk7CiAgICAgZGVsZXRlIHdvcmxkOwogfQogCi12b2lkIFY4SXNvbGF0ZWRXb3Js
ZDo6ZXZhbHVhdGUoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBWOFBy
b3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdyb3VwKQorVjhJc29sYXRlZFdvcmxkOjpWOElzb2xh
dGVkV29ybGQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCkKIHsKKyAgICArK2lz
b2xhdGVkV29ybGRDb3VudDsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6
UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHByb3h5LT5jcmVhdGVOZXdDb250ZXh0
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgZXh0ZW5zaW9uR3JvdXApOworICAgIG1fY29udGV4
dCA9IFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpjcmVhdGUocHJveHktPmNyZWF0ZU5l
d0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBleHRlbnNpb25Hcm91cCkpOwogCiAg
ICAgLy8gUnVuIGNvZGUgaW4gdGhlIG5ldyBjb250ZXh0LgotICAgIHY4OjpDb250ZXh0OjpTY29w
ZSBjb250ZXh0X3Njb3BlKGNvbnRleHQpOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0
X3Njb3BlKG1fY29udGV4dC0+Z2V0KCkpOwogCi0gICAgLy8gVGhlIGxpZmV0aW1lIG9mIHRoaXMg
b2JqZWN0IGlzIGNvbnRyb2xsZWQgYnkgdGhlIFY4IEdDLgotICAgIC8vIFdlIG5lZWQgdG8gY3Jl
YXRlIHRoZSB3b3JsZCBiZWZvcmUgdG91Y2hpbmcgRE9NIHdyYXBwZXJzLgotICAgIFY4SXNvbGF0
ZWRXb3JsZCogd29ybGQgPSBuZXcgVjhJc29sYXRlZFdvcmxkKGNvbnRleHQpOworICAgIG1fY29u
dGV4dC0+Z2V0KCktPkdsb2JhbCgpLT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFt
ZTo6aXNvbGF0ZWRXb3JsZCgpLCB2ODo6RXh0ZXJuYWw6OldyYXAodGhpcykpOwogCi0gICAgVjhQ
cm94eTo6aW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZShjb250ZXh0KTsKLSAgICBwcm94eS0+
aW5zdGFsbERPTVdpbmRvdyhjb250ZXh0LCBwcm94eS0+ZnJhbWUoKS0+ZG9tV2luZG93KCkpOwot
Ci0gICAgcHJveHktPmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ3JlYXRlSXNvbGF0
ZWRTY3JpcHRDb250ZXh0KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHByb3h5LT5ldmFsdWF0ZShzb3VyY2VzW2ldLCAwKTsKKyAg
ICBWOFByb3h5OjppbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKG1fY29udGV4dC0+Z2V0KCkp
OworICAgIHByb3h5LT5pbnN0YWxsRE9NV2luZG93KG1fY29udGV4dC0+Z2V0KCksIHByb3h5LT5m
cmFtZSgpLT5kb21XaW5kb3coKSk7CiAKICAgICAvLyBVc2luZyB0aGUgZGVmYXVsdCBzZWN1cml0
eSB0b2tlbiBtZWFucyB0aGF0IHRoZSBjYW5BY2Nlc3MgaXMgYWx3YXlzCiAgICAgLy8gY2FsbGVk
LCB3aGljaCBpcyBzbG93LgpAQCAtNzgsMjAgKzczLDE0IEBAIHZvaWQgVjhJc29sYXRlZFdvcmxk
OjpldmFsdWF0ZShjb25zdCBWZWMKICAgICAvLyAgICAgICAgY3JlYXRlZCBjb250ZXh0cyBzbyB0
aGF0IHRoZXkgY2FuIGFsbCBiZSB1cGRhdGVkIHdoZW4gdGhlCiAgICAgLy8gICAgICAgIGRvY3Vt
ZW50IGRvbWFpbgogICAgIC8vICAgICAgICBjaGFuZ2VzLgotICAgIC8vIEZJWE1FOiBNb3ZlIHRo
aXMgc3RhdGVtZW50IGFib3ZlIHByb3h5LT5ldmFsdWF0ZT8gIEl0IHNlZW1zIGxpa2Ugd2UKLSAg
ICAvLyAgICAgICAgc2hvdWxkIHNldCB1cCB0aGUgdG9rZW4gYmVmb3JlIHJ1bm5pbmcgdGhlIHNj
cmlwdC4KLSAgICBjb250ZXh0LT5Vc2VEZWZhdWx0U2VjdXJpdHlUb2tlbigpOworICAgIG1fY29u
dGV4dC0+Z2V0KCktPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7CiAKLSAgICBjb250ZXh0LkRp
c3Bvc2UoKTsKLSAgICAvLyBXQVJOSU5HISAgVGhpcyBtaWdodCB3ZWxsIGRlbGV0ZSB8d29ybGR8
LgorICAgIHByb3h5LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENyZWF0ZUlzb2xh
dGVkU2NyaXB0Q29udGV4dCgpOwogfQogCi1WOElzb2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3Js
ZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KFNoYXJl
ZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpjcmVhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRl
eHQ+OjpOZXcoY29udGV4dCkpKQordm9pZCBWOElzb2xhdGVkV29ybGQ6OmRlc3Ryb3koKQogewot
ICAgICsraXNvbGF0ZWRXb3JsZENvdW50OwogICAgIG1fY29udGV4dC0+Z2V0KCkuTWFrZVdlYWso
dGhpcywgJmNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2spOwotICAgIGNvbnRleHQtPkdsb2Jh
bCgpLT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6aXNvbGF0ZWRXb3JsZCgp
LCB2ODo6RXh0ZXJuYWw6OldyYXAodGhpcykpOwogfQogCiBWOElzb2xhdGVkV29ybGQ6On5WOElz
b2xhdGVkV29ybGQoKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5oCShy
ZXZpc2lvbiA0OTE5NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDExICs1OCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgLy8KICAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQgewogICAgIHB1YmxpYzoKLSAgICAgICAg
flY4SXNvbGF0ZWRXb3JsZCgpOwotCi0gICAgICAgIC8vIEV2YWx1YXRlIEphdmFTY3JpcHQgaW4g
YSBuZXcgaXNvbGF0ZWQgd29ybGQuICBUaGUgc2NyaXB0IGhhcyBhY2Nlc3MKLSAgICAgICAgLy8g
dG8gdGhlIERPTSBvZiB0aGUgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHxwcm94eXwuCi0gICAg
ICAgIHN0YXRpYyB2b2lkIGV2YWx1YXRlKGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYg
c291cmNlcywgVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7CisgICAgICAgIC8v
IENyZWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQuIFRvIGRlc3Ryb3kgaXQsIGNhbGwgZGVzdHJveSgp
LgorICAgICAgICAvLyBUaGlzIHdpbGwgZGVsZXRlIHRoZSBpc29sYXRlZCB3b3JsZCB3aGVuIHRo
ZSBjb250ZXh0IGl0IG93bnMgaXMgR0MnZC4KKyAgICAgICAgVjhJc29sYXRlZFdvcmxkKFY4UHJv
eHkqIHByb3h5LCBpbnQgZXh0ZW5zaW9uR3JvdXApOworCisgICAgICAgIC8vIENhbGwgdGhpcyB0
byBkZXN0cm95IHRoZSBpc29sYXRlZCB3b3JsZC4gSXQgd2lsbCBiZSBkZWxldGVkIHNvbWV0aW1l
CisgICAgICAgIC8vIGFmdGVyIHRoaXMgY2FsbCwgb25jZSBhbGwgc2NyaXB0IHJlZmVyZW5jZXMg
dG8gdGhlIHdvcmxkJ3MgY29udGV4dAorICAgICAgICAvLyBoYXZlIGJlZW4gZHJvcHBlZC4KKyAg
ICAgICAgdm9pZCBkZXN0cm95KCk7CiAKICAgICAgICAgLy8gUmV0dXJucyB0aGUgaXNvbGF0ZWQg
d29ybGQgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIC8vIHY4OjpDb250ZXh0OjpHZXRFbnRlcmVk
KCkuICBCZWNhdXNlIHdvcmxkcyBhcmUgaXNvbGF0ZWQsIHRoZSBlbnRpcmUKQEAgLTkwLDEyICs5
MywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERPTURhdGFTdG9yZSogZ2V0RE9N
RGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kb21EYXRhU3RvcmUuZ2V0U3RvcmUoKTsgfQog
CiAgICAgcHJpdmF0ZToKKyAgICAgICAgflY4SXNvbGF0ZWRXb3JsZCgpOworCiAgICAgICAgIHN0
YXRpYyBWOElzb2xhdGVkV29ybGQqIGdldEVudGVyZWRJbXBsKCk7CiAKLSAgICAgICAgLy8gVGhl
IGxpZmV0aW1lIG9mIGFuIGlzb2xhdGVkIHdvcmxkIGlzIG1hbmFnZWQgYnkgdGhlIFY4IGdhcmJh
Z2UKLSAgICAgICAgLy8gY29sbGVjdG9yLiAgSW4gcGFydGljdWxhciwgdGhlIG9iamVjdCBjcmVh
dGVkIGJ5IHRoaXMgY29uc3RydWN0b3IgaXMKLSAgICAgICAgLy8gZnJlZWQgd2hlbiB8Y29udGV4
dHwgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuCi0gICAgICAgIGV4cGxpY2l0IFY4SXNvbGF0ZWRXb3Js
ZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KTsKKyAgICAgICAgLy8gQ2FsbGVkIGJ5
IHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aGVuIG91ciBKYXZhU2NyaXB0IGNvbnRleHQgaXMgYWJv
dXQKKyAgICAgICAgLy8gdG8gYmUgZGVzdHJveWVkLgorICAgICAgICBzdGF0aWMgdm9pZCBjb250
ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0
LCB2b2lkKiBpc29sYXRlZF93b3JsZCk7CiAKICAgICAgICAgLy8gVGhlIHY4OjpDb250ZXh0IGZv
ciB0aGUgaXNvbGF0ZWQgd29ybGQuICBUaGlzIG9iamVjdCBpcyBrZWVwIG9uIHRoZQogICAgICAg
ICAvLyBoZWFwIGFzIGxvbmcgYXMgfG1fY29udGV4dHwgaGFzIG5vdCBiZWVuIGdhcmJhZ2UgY29s
bGVjdGVkLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lvbiA0OTE5NSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwx
MCArMjc0LDMyIEBAIGJvb2wgVjhQcm94eTo6aGFuZGxlT3V0T2ZNZW1vcnkoKQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5OZXdXb3JsZChjb25zdCBWZWN0
b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkKK3ZvaWQg
VjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3Rv
cjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQogewogICAg
IGluaXRDb250ZXh0SWZOZWVkZWQoKTsKLSAgICBWOElzb2xhdGVkV29ybGQ6OmV2YWx1YXRlKHNv
dXJjZXMsIHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKKyAgICBWOElzb2xhdGVkV29ybGQqIHdvcmxkID0gMDsKKworICAgIGlmICh3b3Js
ZElEID4gMCkgeworICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9p
c29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOworICAgICAgICBpZiAoaXRlciAhPSBtX2lzb2xh
dGVkV29ybGRzLmVuZCgpKSB7CisgICAgICAgICAgICB3b3JsZCA9IGl0ZXItPnNlY29uZDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdvcmxkID0gbmV3IFY4SXNvbGF0ZWRXb3JsZCh0
aGlzLCBleHRlbnNpb25Hcm91cCk7CisgICAgICAgICAgICBtX2lzb2xhdGVkV29ybGRzLnNldCh3
b3JsZElELCB3b3JsZCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB3b3JsZCA9
IG5ldyBWOElzb2xhdGVkV29ybGQodGhpcywgZXh0ZW5zaW9uR3JvdXApOworICAgIH0KKworICAg
IHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46
Ok5ldyh3b3JsZC0+Y29udGV4dCgpKTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9z
Y29wZShjb250ZXh0KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgp
OyArK2kpCisgICAgICBldmFsdWF0ZShzb3VyY2VzW2ldLCAwKTsKKworICAgIGlmICh3b3JsZElE
ID09IDApCisgICAgICB3b3JsZC0+ZGVzdHJveSgpOwogfQogCiB2b2lkIFY4UHJveHk6OmV2YWx1
YXRlSW5OZXdDb250ZXh0KGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywg
aW50IGV4dGVuc2lvbkdyb3VwKQpAQCAtNzA4LDkgKzczMCwyMCBAQCB2b2lkIFY4UHJveHk6OmRp
c2Nvbm5lY3RFdmVudExpc3RlbmVycygpCiAgICAgbV9saXN0ZW5lckd1YXJkLT5kaXNjb25uZWN0
TGlzdGVuZXJzKCk7CiAgICAgbV9saXN0ZW5lckd1YXJkID0gVjhMaXN0ZW5lckd1YXJkOjpjcmVh
dGUoKTsKIH0KKyAgICAKK3ZvaWQgVjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxkcygpCit7Cisg
ICAgZm9yIChJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxk
cy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0
ZXIpIHsKKyAgICAgICAgaXRlci0+c2Vjb25kLT5kZXN0cm95KCk7CisgICAgfQorICAgIG1faXNv
bGF0ZWRXb3JsZHMuY2xlYXIoKTsKK30KIAogdm9pZCBWOFByb3h5OjpjbGVhckZvckNsb3NlKCkK
IHsKKyAgICByZXNldElzb2xhdGVkV29ybGRzKCk7CisKICAgICBpZiAoIWNvbnRleHQoKS5Jc0Vt
cHR5KCkpIHsKICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCkBAIC03MjIs
NiArNzU1LDggQEAgdm9pZCBWOFByb3h5OjpjbGVhckZvckNsb3NlKCkKIHZvaWQgVjhQcm94eTo6
Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKIHsKICAgICBkaXNjb25uZWN0RXZlbnRMaXN0ZW5lcnMoKTsK
KyAgICByZXNldElzb2xhdGVkV29ybGRzKCk7CisKICAgICBpZiAoIWNvbnRleHQoKS5Jc0VtcHR5
KCkpIHsKICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZTsKICAgICAgICAgY2xlYXJEb2N1
bWVudFdyYXBwZXIoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiA0OTE5NSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2
ICs1OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXI7Cisg
ICAgY2xhc3MgVjhJc29sYXRlZFdvcmxkOwogCiAgICAgLy8gRklYTUU6IHVzZSBzdGFuZGFyZCBs
b2dnaW5nIGZhY2lsaXRpZXMgaW4gV2ViQ29yZS4KICAgICB2b2lkIGxvZ0luZm8oRnJhbWUqLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsKTsKQEAgLTE2Niw3ICsxNjcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGdsb2JhbCBzY29wZSwgaXRzIG93
biBwcm90b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsCiAg
ICAgICAgIC8vIEFycmF5LCBhbmQgc28tb24pLCBhbmQgaXRzIG93biB3cmFwcGVycyBmb3IgYWxs
IERPTSBub2RlcyBhbmQgRE9NCiAgICAgICAgIC8vIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgdm9p
ZCBldmFsdWF0ZUluTmV3V29ybGQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3Vy
Y2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApOworICAgICAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRl
ZFdvcmxkKGludCB3b3JsZElkLCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJj
ZXMsIGludCBleHRlbnNpb25Hcm91cCk7CiAKICAgICAgICAgLy8gRXZhbHVhdGUgSmF2YVNjcmlw
dCBpbiBhIG5ldyBjb250ZXh0LiBUaGUgc2NyaXB0IGdldHMgaXRzIG93biBnbG9iYWwgc2NvcGUK
ICAgICAgICAgLy8gYW5kIGl0cyBvd24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3Jp
cHQgb2JqZWN0cyAoU3RyaW5nLCBBcnJheSwKQEAgLTM0OCw2ICszNDksOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcmVsZWFzZVN0b3JhZ2VNdXRleCgpOwogCiAgICAgICAg
IHZvaWQgZGlzY29ubmVjdEV2ZW50TGlzdGVuZXJzKCk7CisgICAgICAgIAorICAgICAgICB2b2lk
IHJlc2V0SXNvbGF0ZWRXb3JsZHMoKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NQ
cml2YXRlKERPTVdpbmRvdyopOwogCkBAIC00MTQsNiArNDE3LDE2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICAvLyBBbGwgb2YgdGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3aXRo
IHRoZSBjb250ZXh0LgogICAgICAgICBzdGF0aWMgVjhFeHRlbnNpb25zIG1fZXh0ZW5zaW9uczsK
KworICAgICAgICAvLyBUaGUgaXNvbGF0ZWQgd29ybGRzIHdlIGFyZSB0cmFja2luZyBmb3IgdGhp
cyBmcmFtZS4gV2UgaG9sZCB0aGVtIGFsaXZlCisgICAgICAgIC8vIGhlcmUgc28gdGhhdCB0aGV5
IGNhbiBiZSB1c2VkIGFnYWluIGJ5IGZ1dHVyZSBjYWxscyB0bworICAgICAgICAvLyBldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZCgpLgorICAgICAgICAvLworICAgICAgICAvLyBOb3RlOiBhbHRob3Vn
aCB0aGUgcG9pbnRlciBpcyByYXcsIHRoZSBpbnN0YW5jZSBpcyBrZXB0IGFsaXZlIGJ5IGEgc3Ry
b25nCisgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgdjggY29udGV4dCBpdCBjb250YWlucywg
d2hpY2ggaXMgbm90IG1hZGUgd2VhayB1bnRpbCB3ZQorICAgICAgICAvLyBjYWxsIHdvcmxkLT5k
ZXN0cm95KCkuCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFY4SXNvbGF0ZWRXb3JsZCo+
IElzb2xhdGVkV29ybGRNYXA7CisgICAgICAgIElzb2xhdGVkV29ybGRNYXAgbV9pc29sYXRlZFdv
cmxkczsKICAgICB9OwogCiAgICAgdGVtcGxhdGUgPGludCB0YWcsIHR5cGVuYW1lIFQ+CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA0OTI1NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDA5LTEwLTA3ICBBYXJvbiBCb29kbWFuICA8YWFAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJVXBk
YXRlIGlzb2xhdGVkIHdvcmxkcyB1bmRlciB2OCB0byBzdXBwb3J0IHdvcmxkIHJldXNlLgorCWh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE0NQorCisgICAgICAgICog
aHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2lmcmFtZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvd29ybGQtcmV1c2UtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVk
V29ybGQvd29ybGQtcmV1c2UuaHRtbDogQWRkZWQuCisKIDIwMDktMTAtMDcgIEV2YW4gTWFydGlu
ICA8ZXZhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2lm
cmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
aXNvbGF0ZWRXb3JsZC9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4NCis8Ym9keT4NCis8ZGl2
IGlkPSJvdXRwdXQiPjwvZGl2Pg0KKzxzY3JpcHQ+DQord2luZG93LmZvY3VzKCk7DQorDQorLy8g
VGhpcyBzaG91bGQgbm90IHBpY2sgdXAgdGhlICdiYXInIGRlZmluZWQgaW4gdGhlIGlzb2xhdGVk
IHdvcmxkIGZyb20gdGhlIHBhcmVudAorLy8gZG9jdW1lbnQsIG9yIHRoZSAnaG90ZG9nJyBkZWZp
bmVkIGluIHByZXZpb3VzIHJ1bnMgb2YgdGhpcyBmcmFtZS4KK2xheW91dFRlc3RDb250cm9sbGVy
LmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKDEsCisgICJkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnb3V0cHV0JykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUod2luZG93
LmJhciArICcsJyArIHdpbmRvdy5ob3Rkb2cpKTsiKTsKKw0KKy8vIE5leHQgdGltZSB3ZSBydW4s
IHdlIGFsc28gc2hvdWxkbid0IHNlZSB0aGlzICdob3Rkb2cnLgorbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoMSwgInZhciBob3Rkb2cgPSAnaG90ZG9n
JzsiKTsKKw0KK3BhcmVudC5pZnJhbWVDb21wbGV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
b3V0cHV0IikudGV4dENvbnRlbnQpOw0KKzwvc2NyaXB0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29s
YXRlZFdvcmxkL2lmcmFtZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmV4ZWN1dGFibGUKICAg
KyAqCgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxk
L3dvcmxkLXJldXNlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvd29ybGQtcmV1c2UtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdv
cmxkL3dvcmxkLXJldXNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBA
CisNCitFeHBlY3RpbmcgdW5kZWZpbmVkOiB1bmRlZmluZWQNCitFeHBlY3RpbmcgYmFyOiBiYXIN
CitFeHBlY3RpbmcgdW5kZWZpbmVkOiB1bmRlZmluZWQNCitFeHBlY3RpbmcgdW5kZWZpbmVkLHVu
ZGVmaW5lZDogdW5kZWZpbmVkLHVuZGVmaW5lZA0KK0V4cGVjdGluZyB1bmRlZmluZWQsdW5kZWZp
bmVkOiB1bmRlZmluZWQsdW5kZWZpbmVkDQorDQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3dvcmxkLXJldXNlLWV4cGVj
dGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC93b3JsZC1yZXVzZS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0
ZWRXb3JsZC93b3JsZC1yZXVzZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3dvcmxkLXJldXNlLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxz
Y3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworCisgIC8vIFdvcmxkIGlkIDAgaXMgbmV2ZXIgc2F2ZWQsIHNvIHRoaXMgc2hvdWxk
IHByaW50ICd1bmRlZmluZWQnLgorICBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZCgwLCAidmFyIGZvbyA9ICdmb28nOyIpOworICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgwLAorICAgICJkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgdW5kZWZp
bmVkOiAnICsgd2luZG93LmZvbykpOyIgKworICAgICJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOyIpOworCisgIC8vIFNpbmNlIHRoZXNlIHR3
byBydW4gaW4gdGhlIHNhbWUgd29ybGQsIHRoaXMgc2hvdWxkIHByaW50ICdiYXInLgorICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgxLCAidmFyIGJh
ciA9ICdiYXInOyIpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZCgxLAorICAgICJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgYmFyOiAnICsgd2luZG93LmJhcikpOyIgKworICAgICJk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOyIp
OworCisgIC8vIFNpbmNlIHRoZXNlIHR3byBhcmUgaW4gZGlmZmVyZW50IHdvcmxkcywgdGhpcyBz
aG91bGQgcHJpbnQgJ3VuZGVmaW5lZCcuCisgIGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKDIsICJ2YXIgYmF6ID0gJ2Jheic7Iik7CisgIGxheW91dFRl
c3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKDMsCisgICAgImRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyB1
bmRlZmluZWQ6ICcgKyB3aW5kb3cuYmF6KSk7IiArCisgICAgImRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7Iik7CisKKyAgLy8gV29ybGRzIHNo
b3VsZCBub3QgYmUgc2hhcmVkIGFjcm9zcyBkb2N1bWVudHMsIHNvIGFub3RoZXIgZnJhbWUgdGhh
dCB1c2VzIHRoZSBzYW1lCisgIC8vIHdvcmxkIGlkIHNob3VsZCBub3Qgc2VlIG91ciB2YXJpYWJs
ZXMuCisgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAg
ZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUoaWZyYW1lLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hp
bGQpOworICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJiciIpLCBpZnJhbWUubmV4dFNpYmxpbmcpOworICB2YXIgaWZyYW1lQ29tcGxldGUgPSBmdW5j
dGlvbihyZXN1bHQpIHsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgdW5kZWZpbmVkLHVuZGVmaW5lZDogJyArIHJlc3VsdCkp
OworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
YnInKSk7CisgICAgcmVsb2FkRnJhbWUoKTsKKyAgfQorICBpZnJhbWUuc3JjID0gImlmcmFtZS5o
dG1sIjsKKyAgCisgIC8vIEFsc28sIG5hdmlnYXRpbmcgYSBzaW5nbGUgZnJhbWUgc2hvdWxkIG5v
dCByZXN1bHQgaW4gc2hhcmluZyB2YXJpYWJsZXMuCisgIGZ1bmN0aW9uIHJlbG9hZEZyYW1lKCkg
eworICAgIGlmcmFtZUNvbXBsZXRlID0gZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgdW5k
ZWZpbmVkLHVuZGVmaW5lZDogJyArIHJlc3VsdCkpOworICAgICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKyAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cu
bG9jYXRpb24ucmVsb2FkKHRydWUpOworICB9Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
aXNvbGF0ZWRXb3JsZC93b3JsZC1yZXVzZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmV4ZWN1
dGFibGUKICAgKyAqCgo=
</data>
<flag name="review"
          id="22095"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="22107"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40827</attachid>
            <date>2009-10-07 15:41:06 -0700</date>
            <delta_ts>2009-10-19 09:09:49 -0700</delta_ts>
            <desc>Forgot to update Skipped files</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>20844</size>
            <attacher name="Aaron Boodman">aa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTI2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMTAtMDcgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworCVVwZGF0ZSBpc29sYXRl
ZCB3b3JsZHMgdW5kZXIgdjggdG8gc3VwcG9ydCB3b3JsZCByZXVzZS4KKwlodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAxNDUKKworICAgICAgICAqIGJpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICBSZXBsYWNlIGV2YWx1YXRlSW5OZXdJc29s
YXRlZFdvcmxkKCkgd2l0aGUgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaWQpLgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaDogRGl0dG8uCisgICAgICAgICog
YmluZGluZ3MvdjgvVjhQcm94eS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94
eTo6flY4UHJveHkpOiBEaXR0aW8uCisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHku
aDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmNwcDoKKyAg
ICAgICAgQWRkIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIGxpZmV0aW1lIG9mIGEgd29ybGQsIHJh
dGhlciB0aGFuIHJlbHlpbmcgb24gR0MuCisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkV29y
bGQ6OmNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlY4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdvcmxkKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpWOElzb2xhdGVkV29ybGQ6OmRlc3Ryb3kpOiBEaXR0by4KKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOElzb2xhdGVkV29ybGQuaDogRGl0dG8uCisKIDIwMDktMTAtMDcgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQg
Zml4IGZvciBXaW5kb3dzIChDYWlybykuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ5MjYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDEzICsxODEsMTIgQEAg
Ym9vbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlcwogCiB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0
IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcykKIHsKLSAgICAvLyBGSVhNRTogR2V0
IHJpZCBvZiBleHRlbnNpb25Hcm91cCBoZXJlLgotICAgIG1fcHJveHktPmV2YWx1YXRlSW5OZXdX
b3JsZChzb3VyY2VzLCAxKTsKKyAgICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3
b3JsZElELCBzb3VyY2VzLCAwKTsKIH0KIAotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZUluTmV3V29ybGQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQg
ZXh0ZW5zaW9uR3JvdXApCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRl
ZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYg
c291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQogewotICAgIG1fcHJveHktPmV2YWx1YXRlSW5O
ZXdXb3JsZChzb3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CisgICAgbV9wcm94eS0+ZXZhbHVhdGVJ
bklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXApOwogfQogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5OZXdDb250ZXh0KGNvbnN0IFZlY3RvcjxT
Y3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDQ5MjYwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDEzICs2NSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNjcmlwdFZhbHVlIGV2
YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKIAogICAgICAgICB2b2lkIGV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3Vy
Y2VDb2RlPiYpOwotICAgICAgICAKLSAgICAgICAgLy8gRXhlY3V0ZXMgSmF2YVNjcmlwdCBpbiBh
IG5ldyB3b3JsZCBhc3NvY2lhdGVkIHdpdGggdGhlIHdlYiBmcmFtZS4gVGhlCi0gICAgICAgIC8v
IHNjcmlwdCBnZXRzIGl0cyBvd24gZ2xvYmFsIHNjb3BlLCBpdHMgb3duIHByb3RvdHlwZXMgZm9y
IGludHJpbnNpYwotICAgICAgICAvLyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywgQXJyYXks
IGFuZCBzby1vbiksIGFuZCBpdHMgb3duIHdyYXBwZXJzIGZvcgotICAgICAgICAvLyBhbGwgRE9N
IG5vZGVzIGFuZCBET00gY29uc3RydWN0b3JzLgotICAgICAgICAvLyBGSVhNRTogTW92ZSB0byB1
c2luZyBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCBpbnN0ZWFkLgotICAgICAgICB2b2lkIGV2YWx1
YXRlSW5OZXdXb3JsZChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mLCBpbnQgZXh0ZW5z
aW9uR3JvdXApOworCisgICAgICAgIC8vIEV4ZWN1dGVzIEphdmFTY3JpcHQgaW4gYW4gaXNvbGF0
ZWQgd29ybGQuIFRoZSBzY3JpcHQgZ2V0cyBpdHMgb3duIGdsb2JhbCBzY29wZSwKKyAgICAgICAg
Ly8gaXRzIG93biBwcm90b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChT
dHJpbmcsIEFycmF5LCBhbmQgc28tb24pLAorICAgICAgICAvLyBhbmQgaXRzIG93biB3cmFwcGVy
cyBmb3IgYWxsIERPTSBub2RlcyBhbmQgRE9NIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gSWYgYW4gaXNvbGF0ZWQgd29ybGQgd2l0aCB0aGUgc3BlY2lmaWVkIElEIGFscmVh
ZHkgZXhpc3RzLCBpdCBpcyByZXVzZWQuCisgICAgICAgIC8vIE90aGVyd2lzZSwgYSBuZXcgd29y
bGQgaXMgY3JlYXRlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhlIHdvcmxkSUQgaXMg
MCwgYSBuZXcgd29ybGQgaXMgYWx3YXlzIGNyZWF0ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8v
IEZJWE1FOiBHZXQgcmlkIG9mIGV4dGVuc2lvbkdyb3VwIGhlcmUuCisgICAgICAgIHZvaWQgZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlw
dFNvdXJjZUNvZGU+JiwgaW50IGV4dGVuc2lvbkdyb3VwKTsKIAogICAgICAgICAvLyBFeGVjdXRl
cyBKYXZhU2NyaXB0IGluIGEgbmV3IGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSB3ZWIgZnJh
bWUuIFRoZQogICAgICAgICAvLyBzY3JpcHQgZ2V0cyBpdHMgb3duIGdsb2JhbCBzY29wZSBhbmQg
aXRzIG93biBwcm90b3R5cGVzIGZvciBpbnRyaW5zaWMKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhJc29sYXRlZFdvcmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SXNvbGF0ZWRXb3JsZC5jcHAJKHJldmlzaW9uIDQ5MjYwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9WOElzb2xhdGVkV29ybGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwzMiArNDUsMjcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBpbnQgVjhJc29sYXRlZFdvcmxkOjppc29sYXRlZFdv
cmxkQ291bnQgPSAwOwogCi1zdGF0aWMgdm9pZCBjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNr
KHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29sYXRlZF93b3JsZCkK
K3ZvaWQgVjhJc29sYXRlZFdvcmxkOjpjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQ
ZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29sYXRlZF93b3JsZCkKIHsKICAg
ICAvLyBPdXIgY29udGV4dCBpcyBnb2luZyBhd2F5LiAgVGltZSB0byBjbGVhbiB1cCB0aGUgd29y
bGQuCiAgICAgVjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PFY4SXNvbGF0ZWRX
b3JsZCo+KGlzb2xhdGVkX3dvcmxkKTsKICAgICBkZWxldGUgd29ybGQ7CiB9CiAKLXZvaWQgVjhJ
c29sYXRlZFdvcmxkOjpldmFsdWF0ZShjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNv
dXJjZXMsIFY4UHJveHkqIHByb3h5LCBpbnQgZXh0ZW5zaW9uR3JvdXApCitWOElzb2xhdGVkV29y
bGQ6OlY4SXNvbGF0ZWRXb3JsZChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdyb3VwKQog
eworICAgICsraXNvbGF0ZWRXb3JsZENvdW50OworCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3Bl
OwotICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBjb250ZXh0ID0gcHJveHktPmNyZWF0
ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBleHRlbnNpb25Hcm91cCk7Cisg
ICAgbV9jb250ZXh0ID0gU2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD46OmNyZWF0ZShwcm94
eS0+Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGV4dGVuc2lvbkdy
b3VwKSk7CiAKICAgICAvLyBSdW4gY29kZSBpbiB0aGUgbmV3IGNvbnRleHQuCi0gICAgdjg6OkNv
bnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7CisgICAgdjg6OkNvbnRleHQ6OlNj
b3BlIGNvbnRleHRfc2NvcGUobV9jb250ZXh0LT5nZXQoKSk7CiAKLSAgICAvLyBUaGUgbGlmZXRp
bWUgb2YgdGhpcyBvYmplY3QgaXMgY29udHJvbGxlZCBieSB0aGUgVjggR0MuCi0gICAgLy8gV2Ug
bmVlZCB0byBjcmVhdGUgdGhlIHdvcmxkIGJlZm9yZSB0b3VjaGluZyBET00gd3JhcHBlcnMuCi0g
ICAgVjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IG5ldyBWOElzb2xhdGVkV29ybGQoY29udGV4dCk7
CisgICAgbV9jb250ZXh0LT5nZXQoKS0+R2xvYmFsKCktPlNldEhpZGRlblZhbHVlKFY4SGlkZGVu
UHJvcGVydHlOYW1lOjppc29sYXRlZFdvcmxkKCksIHY4OjpFeHRlcm5hbDo6V3JhcCh0aGlzKSk7
CiAKLSAgICBWOFByb3h5OjppbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKGNvbnRleHQpOwot
ICAgIHByb3h5LT5pbnN0YWxsRE9NV2luZG93KGNvbnRleHQsIHByb3h5LT5mcmFtZSgpLT5kb21X
aW5kb3coKSk7Ci0KLSAgICBwcm94eS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRD
cmVhdGVJc29sYXRlZFNjcmlwdENvbnRleHQoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc291cmNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcHJveHktPmV2YWx1YXRlKHNvdXJjZXNb
aV0sIDApOworICAgIFY4UHJveHk6Omluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGUobV9jb250
ZXh0LT5nZXQoKSk7CisgICAgcHJveHktPmluc3RhbGxET01XaW5kb3cobV9jb250ZXh0LT5nZXQo
KSwgcHJveHktPmZyYW1lKCktPmRvbVdpbmRvdygpKTsKIAogICAgIC8vIFVzaW5nIHRoZSBkZWZh
dWx0IHNlY3VyaXR5IHRva2VuIG1lYW5zIHRoYXQgdGhlIGNhbkFjY2VzcyBpcyBhbHdheXMKICAg
ICAvLyBjYWxsZWQsIHdoaWNoIGlzIHNsb3cuCkBAIC03OCwyMCArNzMsMTQgQEAgdm9pZCBWOElz
b2xhdGVkV29ybGQ6OmV2YWx1YXRlKGNvbnN0IFZlYwogICAgIC8vICAgICAgICBjcmVhdGVkIGNv
bnRleHRzIHNvIHRoYXQgdGhleSBjYW4gYWxsIGJlIHVwZGF0ZWQgd2hlbiB0aGUKICAgICAvLyAg
ICAgICAgZG9jdW1lbnQgZG9tYWluCiAgICAgLy8gICAgICAgIGNoYW5nZXMuCi0gICAgLy8gRklY
TUU6IE1vdmUgdGhpcyBzdGF0ZW1lbnQgYWJvdmUgcHJveHktPmV2YWx1YXRlPyAgSXQgc2VlbXMg
bGlrZSB3ZQotICAgIC8vICAgICAgICBzaG91bGQgc2V0IHVwIHRoZSB0b2tlbiBiZWZvcmUgcnVu
bmluZyB0aGUgc2NyaXB0LgotICAgIGNvbnRleHQtPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7
CisgICAgbV9jb250ZXh0LT5nZXQoKS0+VXNlRGVmYXVsdFNlY3VyaXR5VG9rZW4oKTsKIAotICAg
IGNvbnRleHQuRGlzcG9zZSgpOwotICAgIC8vIFdBUk5JTkchICBUaGlzIG1pZ2h0IHdlbGwgZGVs
ZXRlIHx3b3JsZHwuCisgICAgcHJveHktPmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlk
Q3JlYXRlSXNvbGF0ZWRTY3JpcHRDb250ZXh0KCk7CiB9CiAKLVY4SXNvbGF0ZWRXb3JsZDo6VjhJ
c29sYXRlZFdvcmxkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCi0gICAgOiBtX2Nv
bnRleHQoU2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD46OmNyZWF0ZSh2ODo6UGVyc2lzdGVu
dDx2ODo6Q29udGV4dD46Ok5ldyhjb250ZXh0KSkpCit2b2lkIFY4SXNvbGF0ZWRXb3JsZDo6ZGVz
dHJveSgpCiB7Ci0gICAgKytpc29sYXRlZFdvcmxkQ291bnQ7CiAgICAgbV9jb250ZXh0LT5nZXQo
KS5NYWtlV2Vhayh0aGlzLCAmY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7Ci0gICAgY29u
dGV4dC0+R2xvYmFsKCktPlNldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjppc29s
YXRlZFdvcmxkKCksIHY4OjpFeHRlcm5hbDo6V3JhcCh0aGlzKSk7CiB9CiAKIFY4SXNvbGF0ZWRX
b3JsZDo6flY4SXNvbGF0ZWRXb3JsZCgpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNv
bGF0ZWRXb3JsZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRl
ZFdvcmxkLmgJKHJldmlzaW9uIDQ5MjYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xh
dGVkV29ybGQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDE0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAvLwogICAgIGNsYXNzIFY4SXNvbGF0ZWRXb3JsZCB7CiAgICAgcHVibGlj
OgotICAgICAgICB+VjhJc29sYXRlZFdvcmxkKCk7Ci0KLSAgICAgICAgLy8gRXZhbHVhdGUgSmF2
YVNjcmlwdCBpbiBhIG5ldyBpc29sYXRlZCB3b3JsZC4gIFRoZSBzY3JpcHQgaGFzIGFjY2Vzcwot
ICAgICAgICAvLyB0byB0aGUgRE9NIG9mIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggfHBy
b3h5fC4KLSAgICAgICAgc3RhdGljIHZvaWQgZXZhbHVhdGUoY29uc3QgVmVjdG9yPFNjcmlwdFNv
dXJjZUNvZGU+JiBzb3VyY2VzLCBWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdyb3VwKTsK
KyAgICAgICAgLy8gQ3JlYXRlcyBhbiBpc29sYXRlZCB3b3JsZC4gVG8gZGVzdHJveSBpdCwgY2Fs
bCBkZXN0cm95KCkuCisgICAgICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIGlzb2xhdGVkIHdv
cmxkIHdoZW4gdGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydkLgorICAgICAgICBWOElzb2xhdGVk
V29ybGQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7CisKKyAgICAgICAgLy8g
Q2FsbCB0aGlzIHRvIGRlc3Ryb3kgdGhlIGlzb2xhdGVkIHdvcmxkLiBJdCB3aWxsIGJlIGRlbGV0
ZWQgc29tZXRpbWUKKyAgICAgICAgLy8gYWZ0ZXIgdGhpcyBjYWxsLCBvbmNlIGFsbCBzY3JpcHQg
cmVmZXJlbmNlcyB0byB0aGUgd29ybGQncyBjb250ZXh0CisgICAgICAgIC8vIGhhdmUgYmVlbiBk
cm9wcGVkLgorICAgICAgICB2b2lkIGRlc3Ryb3koKTsKIAogICAgICAgICAvLyBSZXR1cm5zIHRo
ZSBpc29sYXRlZCB3b3JsZCBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgLy8gdjg6OkNvbnRleHQ6
OkdldEVudGVyZWQoKS4gIEJlY2F1c2Ugd29ybGRzIGFyZSBpc29sYXRlZCwgdGhlIGVudGlyZQpA
QCAtOTAsMTIgKzkzLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRE9NRGF0YVN0
b3JlKiBnZXRET01EYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RvbURhdGFTdG9yZS5nZXRT
dG9yZSgpOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICB+VjhJc29sYXRlZFdvcmxkKCk7CisK
ICAgICAgICAgc3RhdGljIFY4SXNvbGF0ZWRXb3JsZCogZ2V0RW50ZXJlZEltcGwoKTsKIAotICAg
ICAgICAvLyBUaGUgbGlmZXRpbWUgb2YgYW4gaXNvbGF0ZWQgd29ybGQgaXMgbWFuYWdlZCBieSB0
aGUgVjggZ2FyYmFnZQotICAgICAgICAvLyBjb2xsZWN0b3IuICBJbiBwYXJ0aWN1bGFyLCB0aGUg
b2JqZWN0IGNyZWF0ZWQgYnkgdGhpcyBjb25zdHJ1Y3RvciBpcwotICAgICAgICAvLyBmcmVlZCB3
aGVuIHxjb250ZXh0fCBpcyBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICAgICAgZXhwbGljaXQgVjhJ
c29sYXRlZFdvcmxkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpOworICAgICAgICAv
LyBDYWxsZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHdoZW4gb3VyIEphdmFTY3JpcHQgY29u
dGV4dCBpcyBhYm91dAorICAgICAgICAvLyB0byBiZSBkZXN0cm95ZWQuCisgICAgICAgIHN0YXRp
YyB2b2lkIGNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZh
bHVlPiBvYmplY3QsIHZvaWQqIGlzb2xhdGVkX3dvcmxkKTsKIAogICAgICAgICAvLyBUaGUgdjg6
OkNvbnRleHQgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4gIFRoaXMgb2JqZWN0IGlzIGtlZXAgb24g
dGhlCiAgICAgICAgIC8vIGhlYXAgYXMgbG9uZyBhcyB8bV9jb250ZXh0fCBoYXMgbm90IGJlZW4g
Z2FyYmFnZSBjb2xsZWN0ZWQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9u
IDQ5MjYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjc0LDEwICsyNzQsMzIgQEAgYm9vbCBWOFByb3h5OjpoYW5kbGVPdXRPZk1lbW9yeSgp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbk5ld1dvcmxk
KGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdy
b3VwKQordm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwg
Y29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3Jv
dXApCiB7CiAgICAgaW5pdENvbnRleHRJZk5lZWRlZCgpOwotICAgIFY4SXNvbGF0ZWRXb3JsZDo6
ZXZhbHVhdGUoc291cmNlcywgdGhpcywgZXh0ZW5zaW9uR3JvdXApOworCisgICAgdjg6OkhhbmRs
ZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSAwOworCisg
ICAgaWYgKHdvcmxkSUQgPiAwKSB7CisgICAgICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CisgICAgICAgIGlmIChpdGVy
ICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpIHsKKyAgICAgICAgICAgIHdvcmxkID0gaXRlci0+
c2Vjb25kOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd29ybGQgPSBuZXcgVjhJc29s
YXRlZFdvcmxkKHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgICAgIG1faXNvbGF0ZWRX
b3JsZHMuc2V0KHdvcmxkSUQsIHdvcmxkKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIHdvcmxkID0gbmV3IFY4SXNvbGF0ZWRXb3JsZCh0aGlzLCBleHRlbnNpb25Hcm91cCk7Cisg
ICAgfQorCisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2FsPHY4
OjpDb250ZXh0Pjo6TmV3KHdvcmxkLT5jb250ZXh0KCkpOworICAgIHY4OjpDb250ZXh0OjpTY29w
ZSBjb250ZXh0X3Njb3BlKGNvbnRleHQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291
cmNlcy5zaXplKCk7ICsraSkKKyAgICAgIGV2YWx1YXRlKHNvdXJjZXNbaV0sIDApOworCisgICAg
aWYgKHdvcmxkSUQgPT0gMCkKKyAgICAgIHdvcmxkLT5kZXN0cm95KCk7CiB9CiAKIHZvaWQgVjhQ
cm94eTo6ZXZhbHVhdGVJbk5ld0NvbnRleHQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+
JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCkBAIC03MDgsOSArNzMwLDIwIEBAIHZvaWQg
VjhQcm94eTo6ZGlzY29ubmVjdEV2ZW50TGlzdGVuZXJzKCkKICAgICBtX2xpc3RlbmVyR3VhcmQt
PmRpc2Nvbm5lY3RMaXN0ZW5lcnMoKTsKICAgICBtX2xpc3RlbmVyR3VhcmQgPSBWOExpc3RlbmVy
R3VhcmQ6OmNyZWF0ZSgpOwogfQorICAgIAordm9pZCBWOFByb3h5OjpyZXNldElzb2xhdGVkV29y
bGRzKCkKK3sKKyAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lz
b2xhdGVkV29ybGRzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBpdGVyLT5zZWNvbmQtPmRlc3Ryb3koKTsKKyAgICB9
CisgICAgbV9pc29sYXRlZFdvcmxkcy5jbGVhcigpOworfQogCiB2b2lkIFY4UHJveHk6OmNsZWFy
Rm9yQ2xvc2UoKQogeworICAgIHJlc2V0SXNvbGF0ZWRXb3JsZHMoKTsKKwogICAgIGlmICghY29u
dGV4dCgpLklzRW1wdHkoKSkgewogICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
CiAKQEAgLTcyMiw2ICs3NTUsOCBAQCB2b2lkIFY4UHJveHk6OmNsZWFyRm9yQ2xvc2UoKQogdm9p
ZCBWOFByb3h5OjpjbGVhckZvck5hdmlnYXRpb24oKQogewogICAgIGRpc2Nvbm5lY3RFdmVudExp
c3RlbmVycygpOworICAgIHJlc2V0SXNvbGF0ZWRXb3JsZHMoKTsKKwogICAgIGlmICghY29udGV4
dCgpLklzRW1wdHkoKSkgewogICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlOwogICAgICAg
ICBjbGVhckRvY3VtZW50V3JhcHBlcigpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHJldmlz
aW9uIDQ5MjYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDYgKzU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFY4RXZlbnRM
aXN0ZW5lcjsKKyAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQ7CiAKICAgICAvLyBGSVhNRTogdXNl
IHN0YW5kYXJkIGxvZ2dpbmcgZmFjaWxpdGllcyBpbiBXZWJDb3JlLgogICAgIHZvaWQgbG9nSW5m
byhGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwpOwpAQCAt
MTY2LDcgKzE2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gZ2xvYmFsIHNj
b3BlLCBpdHMgb3duIHByb3RvdHlwZXMgZm9yIGludHJpbnNpYyBKYXZhU2NyaXB0IG9iamVjdHMg
KFN0cmluZywKICAgICAgICAgLy8gQXJyYXksIGFuZCBzby1vbiksIGFuZCBpdHMgb3duIHdyYXBw
ZXJzIGZvciBhbGwgRE9NIG5vZGVzIGFuZCBET00KICAgICAgICAgLy8gY29uc3RydWN0b3JzLgot
ICAgICAgICB2b2lkIGV2YWx1YXRlSW5OZXdXb3JsZChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNl
Q29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCk7CisgICAgICAgIHZvaWQgZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSWQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VD
b2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKTsKIAogICAgICAgICAvLyBFdmFsdWF0
ZSBKYXZhU2NyaXB0IGluIGEgbmV3IGNvbnRleHQuIFRoZSBzY3JpcHQgZ2V0cyBpdHMgb3duIGds
b2JhbCBzY29wZQogICAgICAgICAvLyBhbmQgaXRzIG93biBwcm90b3R5cGVzIGZvciBpbnRyaW5z
aWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsIEFycmF5LApAQCAtMzQ4LDYgKzM0OSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZWxlYXNlU3RvcmFnZU11dGV4KCk7
CiAKICAgICAgICAgdm9pZCBkaXNjb25uZWN0RXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgcmVzZXRJc29sYXRlZFdvcmxkcygpOwogCiAgICAgICAgIHN0YXRpYyBib29s
IGNhbkFjY2Vzc1ByaXZhdGUoRE9NV2luZG93Kik7CiAKQEAgLTQxNCw2ICs0MTcsMTYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIEFsbCBvZiB0aGUgZXh0ZW5zaW9ucyByZWdp
c3RlcmVkIHdpdGggdGhlIGNvbnRleHQuCiAgICAgICAgIHN0YXRpYyBWOEV4dGVuc2lvbnMgbV9l
eHRlbnNpb25zOworCisgICAgICAgIC8vIFRoZSBpc29sYXRlZCB3b3JsZHMgd2UgYXJlIHRyYWNr
aW5nIGZvciB0aGlzIGZyYW1lLiBXZSBob2xkIHRoZW0gYWxpdmUKKyAgICAgICAgLy8gaGVyZSBz
byB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgYWdhaW4gYnkgZnV0dXJlIGNhbGxzIHRvCisgICAgICAg
IC8vIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKCkuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5v
dGU6IGFsdGhvdWdoIHRoZSBwb2ludGVyIGlzIHJhdywgdGhlIGluc3RhbmNlIGlzIGtlcHQgYWxp
dmUgYnkgYSBzdHJvbmcKKyAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSB2OCBjb250ZXh0IGl0
IGNvbnRhaW5zLCB3aGljaCBpcyBub3QgbWFkZSB3ZWFrIHVudGlsIHdlCisgICAgICAgIC8vIGNh
bGwgd29ybGQtPmRlc3Ryb3koKS4KKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVjhJc29s
YXRlZFdvcmxkKj4gSXNvbGF0ZWRXb3JsZE1hcDsKKyAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcCBt
X2lzb2xhdGVkV29ybGRzOwogICAgIH07CiAKICAgICB0ZW1wbGF0ZSA8aW50IHRhZywgdHlwZW5h
bWUgVD4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ5MjYwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMTAtMDcgIEFhcm9uIEJvb2Rt
YW4gIDxhYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4K
KworCVVwZGF0ZSBpc29sYXRlZCB3b3JsZHMgdW5kZXIgdjggdG8gc3VwcG9ydCB3b3JsZCByZXVz
ZS4KKwlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAxNDUKKworICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9pZnJhbWUuaHRtbDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3dvcmxkLXJl
dXNlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9p
c29sYXRlZFdvcmxkL3dvcmxkLXJldXNlLmh0bWw6IEFkZGVkLgorCiAyMDA5LTEwLTA3ICBFdmFu
IE1hcnRpbiAgPGV2YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEZyYXNlci4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRX
b3JsZC9pZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L2lzb2xhdGVkV29ybGQvaWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvaWZyYW1lLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+DQorPGJvZHk+
DQorPGRpdiBpZD0ib3V0cHV0Ij48L2Rpdj4NCis8c2NyaXB0Pg0KK3dpbmRvdy5mb2N1cygpOw0K
Kw0KKy8vIFRoaXMgc2hvdWxkIG5vdCBwaWNrIHVwIHRoZSAnYmFyJyBkZWZpbmVkIGluIHRoZSBp
c29sYXRlZCB3b3JsZCBmcm9tIHRoZSBwYXJlbnQKKy8vIGRvY3VtZW50LCBvciB0aGUgJ2hvdGRv
ZycgZGVmaW5lZCBpbiBwcmV2aW91cyBydW5zIG9mIHRoaXMgZnJhbWUuCitsYXlvdXRUZXN0Q29u
dHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgxLAorICAiZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ291dHB1dCcpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHdpbmRvdy5iYXIgKyAnLCcgKyB3aW5kb3cuaG90ZG9nKSk7Iik7CisNCisvLyBOZXh0IHRpbWUg
d2UgcnVuLCB3ZSBhbHNvIHNob3VsZG4ndCBzZWUgdGhpcyAnaG90ZG9nJy4KK2xheW91dFRlc3RD
b250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKDEsICJ2YXIgaG90ZG9nID0g
J2hvdGRvZyc7Iik7CisNCitwYXJlbnQuaWZyYW1lQ29tcGxldGUoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm91dHB1dCIpLnRleHRDb250ZW50KTsNCis8L3NjcmlwdD4NCis8L2JvZHk+DQorPC9o
dG1sPg0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3Js
ZC93b3JsZC1yZXVzZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3dvcmxkLXJldXNlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRX
b3JsZC93b3JsZC1yZXVzZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBA
QAorDQorRXhwZWN0aW5nIHVuZGVmaW5lZDogdW5kZWZpbmVkDQorRXhwZWN0aW5nIGJhcjogYmFy
DQorRXhwZWN0aW5nIHVuZGVmaW5lZDogdW5kZWZpbmVkDQorRXhwZWN0aW5nIHVuZGVmaW5lZCx1
bmRlZmluZWQ6IHVuZGVmaW5lZCx1bmRlZmluZWQNCitFeHBlY3RpbmcgdW5kZWZpbmVkLHVuZGVm
aW5lZDogdW5kZWZpbmVkLHVuZGVmaW5lZA0KKw0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC93b3JsZC1yZXVzZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC93b3JsZC1yZXVz
ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9p
c29sYXRlZFdvcmxkL3dvcmxkLXJldXNlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQ+CitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCisgIC8vIFdv
cmxkIGlkIDAgaXMgbmV2ZXIgc2F2ZWQsIHNvIHRoaXMgc2hvdWxkIHByaW50ICd1bmRlZmluZWQn
LgorICBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgw
LCAidmFyIGZvbyA9ICdmb28nOyIpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZCgwLAorICAgICJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgdW5kZWZpbmVkOiAnICsgd2luZG93LmZv
bykpOyIgKworICAgICJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2JyJykpOyIpOworCisgIC8vIFNpbmNlIHRoZXNlIHR3byBydW4gaW4gdGhlIHNhbWUg
d29ybGQsIHRoaXMgc2hvdWxkIHByaW50ICdiYXInLgorICBsYXlvdXRUZXN0Q29udHJvbGxlci5l
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgxLCAidmFyIGJhciA9ICdiYXInOyIpOworICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgxLAorICAg
ICJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBl
Y3RpbmcgYmFyOiAnICsgd2luZG93LmJhcikpOyIgKworICAgICJkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOyIpOworCisgIC8vIFNpbmNlIHRo
ZXNlIHR3byBhcmUgaW4gZGlmZmVyZW50IHdvcmxkcywgdGhpcyBzaG91bGQgcHJpbnQgJ3VuZGVm
aW5lZCcuCisgIGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKDIsICJ2YXIgYmF6ID0gJ2Jheic7Iik7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKDMsCisgICAgImRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyB1bmRlZmluZWQ6ICcgKyB3aW5k
b3cuYmF6KSk7IiArCisgICAgImRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnYnInKSk7Iik7CisKKyAgLy8gV29ybGRzIHNob3VsZCBub3QgYmUgc2hhcmVk
IGFjcm9zcyBkb2N1bWVudHMsIHNvIGFub3RoZXIgZnJhbWUgdGhhdCB1c2VzIHRoZSBzYW1lCisg
IC8vIHdvcmxkIGlkIHNob3VsZCBub3Qgc2VlIG91ciB2YXJpYWJsZXMuCisgIHZhciBpZnJhbWUg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgZG9jdW1lbnQuYm9keS5pbnNl
cnRCZWZvcmUoaWZyYW1lLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOworICBkb2N1bWVudC5i
b2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpLCBpZnJhbWUubmV4
dFNpYmxpbmcpOworICB2YXIgaWZyYW1lQ29tcGxldGUgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBl
Y3RpbmcgdW5kZWZpbmVkLHVuZGVmaW5lZDogJyArIHJlc3VsdCkpOworICAgIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisgICAgcmVsb2Fk
RnJhbWUoKTsKKyAgfQorICBpZnJhbWUuc3JjID0gImlmcmFtZS5odG1sIjsKKyAgCisgIC8vIEFs
c28sIG5hdmlnYXRpbmcgYSBzaW5nbGUgZnJhbWUgc2hvdWxkIG5vdCByZXN1bHQgaW4gc2hhcmlu
ZyB2YXJpYWJsZXMuCisgIGZ1bmN0aW9uIHJlbG9hZEZyYW1lKCkgeworICAgIGlmcmFtZUNvbXBs
ZXRlID0gZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgdW5kZWZpbmVkLHVuZGVmaW5lZDog
JyArIHJlc3VsdCkpOworICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdicicpKTsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgICB9CisgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24ucmVsb2FkKHRy
dWUpOworICB9Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9Ta2lwcGVkCShyZXZpc2lvbiA0OTI2MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC01Mzg5LDYgKzUzODksNyBAQCBodHRwL3Rl
c3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvbnVtYmVyCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lz
b2xhdGVkV29ybGQvb2JqZWN0LXByb3RvdHlwZS5odG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lz
b2xhdGVkV29ybGQvc3RyaW5nLXByb3RvdHlwZS5odG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lz
b2xhdGVkV29ybGQvd2luZG93LXByb3BlcnRpZXMuaHRtbAoraHR0cC90ZXN0cy9zZWN1cml0eS9p
c29sYXRlZFdvcmxkL3dvcmxkLXJldXNlLmh0bWwKIAogIyBNaXNzaW5nIERSVCBhYmlsaXR5IHJl
dHVybiBhIG51bGwgcmVxdWVzdCBmb3Igd2lsbFNlbmRSZXF1ZXN0IHJlZGlyZWN0IGNhbGxzCiBo
dHRwL3Rlc3RzL21pc2Mvd2lsbC1zZW5kLXJlcXVlc3QtcmV0dXJucy1udWxsLW9uLXJlZGlyZWN0
Lmh0bWwKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCShyZXZpc2lvbiA0OTI2MCkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2
ICs4OSw3IEBAIGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9udW1iZXIKIGh0dHAv
dGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9vYmplY3QtcHJvdG90eXBlLmh0bWwKIGh0dHAv
dGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9zdHJpbmctcHJvdG90eXBlLmh0bWwKIGh0dHAv
dGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC93aW5kb3ctcHJvcGVydGllcy5odG1sCitodHRw
L3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvd29ybGQtcmV1c2UuaHRtbAogCiAjIE5ldyB0
ZXN0IHdpdGggcXVlc3Rpb25hYmxlIHJlc3VsdHMKICMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yODA3OSBmb3IgZXhwbGFuYXRpb24uCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDQ5MjYwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L2lzb2xhdGVkV29ybGQvbnVtYmVyCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVk
V29ybGQvb2JqZWN0LXByb3RvdHlwZS5odG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVk
V29ybGQvc3RyaW5nLXByb3RvdHlwZS5odG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVk
V29ybGQvd2luZG93LXByb3BlcnRpZXMuaHRtbAoraHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRl
ZFdvcmxkL3dvcmxkLXJldXNlLmh0bWwKIAogIyBNaXNzaW5nIERSVCBhYmlsaXR5IHJldHVybiBh
IG51bGwgcmVxdWVzdCBmb3Igd2lsbFNlbmRSZXF1ZXN0IHJlZGlyZWN0IGNhbGxzCiBodHRwL3Rl
c3RzL21pc2Mvd2lsbC1zZW5kLXJlcXVlc3QtcmV0dXJucy1udWxsLW9uLXJlZGlyZWN0Lmh0bWwK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA0OTI2MCkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC02MTgsNiArNjE4
LDcgQEAgaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL251bWJlcgogaHR0cC90ZXN0
cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL29iamVjdC1wcm90b3R5cGUuaHRtbAogaHR0cC90ZXN0
cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3N0cmluZy1wcm90b3R5cGUuaHRtbAogaHR0cC90ZXN0
cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwKK2h0dHAvdGVz
dHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC93b3JsZC1yZXVzZS5odG1sCiAKICMgTmV3IHRlc3Qg
d2l0aCBxdWVzdGlvbmFibGUgcmVzdWx0cwogIyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI4MDc5IGZvciBleHBsYW5hdGlvbi4K
</data>
<flag name="review"
          id="22118"
          type_id="1"
          status="+"
          setter="staikos"
    />
    <flag name="commit-queue"
          id="22817"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>