<?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>87513</bug_id>
          
          <creation_ts>2012-05-25 11:00:28 -0700</creation_ts>
          <short_desc>WebBackForwardList needs an overhaul to consistently and clearly handle error conditions.</short_desc>
          <delta_ts>2012-06-27 11:29:15 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>634069</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-25 11:00:28 -0700</bug_when>
    <thetext>WebBackForwardList needs an overhaul to consistently and clearly handle error conditions.

This will be a followup to https://bugs.webkit.org/show_bug.cgi?id=87418</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634334</commentid>
    <comment_count>1</comment_count>
      <attachid>144154</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-25 15:22:32 -0700</bug_when>
    <thetext>Created attachment 144154
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634339</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-25 15:24:30 -0700</bug_when>
    <thetext>Attachment 144154 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:192:  Extra space before ) in if  [whitespace/parens] [5]
Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:255:  Extra space before ) in if  [whitespace/parens] [5]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634360</commentid>
    <comment_count>3</comment_count>
      <attachid>144159</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-25 15:42:18 -0700</bug_when>
    <thetext>Created attachment 144159
Patch v2 - Now with more style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657938</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-06-26 13:40:02 -0700</bug_when>
    <thetext>Bump.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658082</commentid>
    <comment_count>5</comment_count>
      <attachid>144159</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-06-26 16:21:17 -0700</bug_when>
    <thetext>Comment on attachment 144159
Patch v2 - Now with more style

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

Looks OK. Did we really have to add a V1?

&gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:266
&gt; +        // And if that&apos;s the case we should also not have any entries.
&gt; +        ASSERT(m_entries.isEmpty());

This assertion is pointless. The code above already returned if m_entries.size() was &lt;= 1 so this assertion can never be hit.

So if we want to assert something, we should assert currentItem before this impossible if statement.

&gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:268
&gt; +        // But just in case it does happen in practice we should get back in to a consistent state now.

Typo: Should be &quot;into&quot; not &quot;in to&quot;.

&gt; Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:112
&gt; +    ASSERT(currentIndex == -1 || (currentIndex &gt; -1 &amp;&amp; currentIndex &lt; CFArrayGetCount(entries.get())));

I would have written &gt;= 0 rather than &gt; -1).

&gt; Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:113
&gt; +    if (currentIndex &lt; -1 || (currentIndex &gt; -1 &amp;&amp; currentIndex &gt;= CFArrayGetCount(entries.get()))) {

Either you should write this exactly like the assertion, or more simply like this:

    if (currentIndex &lt; -1 || currentIndex &gt;= CFArrayGetCount(entries.get()))

The check for currentIndex &gt; -1 does not add anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658642</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-06-27 09:01:21 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 144159 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144159&amp;action=review
&gt; 
&gt; Looks OK. Did we really have to add a V1?

I like how much stricter we get to be in the V1 code because we get to differentiate the &quot;has no current item index&quot; case.

All other comments accounted for before landing.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658734</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-06-27 11:29:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/121354</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144154</attachid>
            <date>2012-05-25 15:22:32 -0700</date>
            <delta_ts>2012-05-25 15:42:18 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25659</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5OWEzZjNjLi45YTZmZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDEg
QEAKIDIwMTItMDUtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzUxMworICAgICAg
ICBXZWJCYWNrRm9yd2FyZExpc3QgbmVlZHMgYW4gb3ZlcmhhdWwgdG8gY29uc2lzdGVudGx5IGFu
ZCBjbGVhcmx5IGhhbmRsZSBlcnJvciBjb25kaXRpb25zLgorCisgICAgICAgIC0gV2UgdGhpbmsg
YSBudWxsIGVudHJ5IG1pZ2h0IHNvbWVob3cgZ2V0IGluIHRvIHRoZSBsaXN0IHNvIHdlIG5vdyB0
cnkgdG8gcHJldmVudCB0aGF0LgorICAgICAgICAtIFdlIHRoaW5rIGEgbnVsbCBlbnRyeSBtaWdo
dCBzb21laG93IGJlIGluIHRoZSBsaXN0IHNvIHdlIG5vdyBudWxsIGNoZWNrIHdoZW4gaW5kZXhp
bmcgaW50byBtX2VudHJpZXMuCisgICAgICAgIC0gQSBsb3Qgb2YgaW5kZXggbWF0aCAtIGVzcGVj
aWFsbHkgdHJhY2tpbmcgIm5vIGN1cnJlbnQgaW5kZXgiIC0gd2FzIGltcGxpY2l0IG9yIHdyb25n
LgorICAgICAgICAtIE9wZXJhdGluZyBvbiBhIFdlYkJhY2tGb3J3YXJkTGlzdCB3aG9zZSBwYWdl
IGhhcyBiZWVuIGNsb3NlZCBpcyBub3cgYW4gZXhwbGljaXQgbm8tb3AuCisgICAgICAgIC0gVGhl
IHNlc3Npb24gc3RhdGUgZGF0YSByZWFkaW5nIGFuZCB3cml0aW5nIGNvZGUgd2FzIGZyYWdpbGUg
YW5kIG5lZWRlZCBhbiBvdmVyaGF1bC4KKyAgICAgICAgLSBUaGlzIGluY2x1ZGVzIGFkZGluZyBh
IG5ldyBWMSBmb3JtYXQgb2YgdGhlIHNlc3Npb24gZGF0YSB0aGF0IGlzIGVhc2llciB0byB2YWxp
ZGF0ZSB3aGVuIHJlYWRpbmcgYmFjayBpbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6On5XZWJCYWNrRm9yd2FyZExpc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OnBhZ2VDbG9zZWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdENvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0Ojpmb3J3YXJkTGlzdENvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0OjpiYWNrTGlzdEFzSW1tdXRhYmxlQXJyYXlXaXRoTGltaXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmZvcndhcmRMaXN0QXNJbW11dGFibGVBcnJh
eVdpdGhMaW1pdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIp
OgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oOgorICAgICAgICAo
V2ViQmFja0ZvcndhcmRMaXN0KToKKworICAgICAgICAqIFVJUHJvY2Vzcy9jZi9XZWJCYWNrRm9y
d2FyZExpc3RDRi5jcHA6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZUVtcHR5U2Vzc2lvbkhpc3Rv
cnlEaWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpjcmVh
dGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tG
b3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21WMENGRGljdGlvbmFy
eVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0Ojpy
ZXN0b3JlRnJvbVYxQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpleHRyYWN0QmFja0ZvcndhcmRMaXN0RW50cmllc0Zyb21BcnJheSk6CisKKzIwMTItMDUtMjUg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzQxOAogICAgICAgICBXZWJCYWNrRm9yd2Fy
ZExpc3Qgc2hvdWxkIHNlcGFyYXRlICJoYXMgbm8gY3VycmVudCBpbmRleCIgZnJvbSB0aGUgaW50
ZWdlciB2YWx1ZSBvZiB0aGUgY3VycmVudCBpbmRleAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCmluZGV4IDRhODFhODcuLmRmOGM2ZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCkBA
IC00MywxNyArNDMsMjggQEAgV2ViQmFja0ZvcndhcmRMaXN0OjpXZWJCYWNrRm9yd2FyZExpc3Qo
V2ViUGFnZVByb3h5KiBwYWdlKQogCiBXZWJCYWNrRm9yd2FyZExpc3Q6On5XZWJCYWNrRm9yd2Fy
ZExpc3QoKQogeworICAgIC8vIEEgV2ViQmFja0ZvcndhcmRMaXN0IHNob3VsZCBuZXZlciBiZSBk
ZXN0cm95ZWQgdW5sZXNzIGl0J3MgYXNzb2NpYXRlZCBwYWdlIGhhcyBiZWVuIGNsb3NlZC4KKyAg
ICBBU1NFUlQoIW1fcGFnZSAmJiAhbV9oYXNDdXJyZW50SW5kZXgpOwogfQogCiB2b2lkIFdlYkJh
Y2tGb3J3YXJkTGlzdDo6cGFnZUNsb3NlZCgpCiB7CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWx3
YXlzIHN0YXJ0ZWQgb3V0IHdpdGggYW4gbV9wYWdlIGFuZCB3ZSBzaG91bGQgbmV2ZXIgY2xvc2Ug
dGhlIHBhZ2UgdHdpY2UuCisgICAgQVNTRVJUKG1fcGFnZSk7CisKICAgICBpZiAobV9wYWdlKSB7
CiAgICAgICAgIHNpemVfdCBzaXplID0gbV9lbnRyaWVzLnNpemUoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQobV9lbnRyaWVzW2ldKTsKKyAgICAg
ICAgICAgIGlmICghbV9lbnRyaWVzW2ldKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgbV9wYWdlLT5iYWNrRm9yd2FyZFJlbW92ZWRJdGVtKG1fZW50cmllc1tpXS0+aXRl
bUlEKCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9wYWdlID0gMDsKKyAgICBtX2VudHJp
ZXMuY2xlYXIoKTsKKyAgICBtX2hhc0N1cnJlbnRJbmRleCA9IGZhbHNlOwogfQogCiB2b2lkIFdl
YkJhY2tGb3J3YXJkTGlzdDo6YWRkSXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBuZXdJdGVt
KQpAQCAtODEsMTUgKzkyLDIyIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiAgICAgICAgICAgICBtX3BhZ2UtPmJhY2tG
b3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRyaWVzWzBdLT5pdGVtSUQoKSk7CiAgICAgICAgICAgICBy
ZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmllc1swXS5yZWxlYXNlKCkpOwogICAgICAgICAgICAg
bV9lbnRyaWVzLnJlbW92ZSgwKTsKKwogICAgICAgICAgICAgaWYgKG1fZW50cmllcy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgbV9oYXNDdXJyZW50SW5kZXggPSBmYWxzZTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleC0tOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBjdXJyZW50IGl0ZW0gaW5kZXgs
IHdlIHNob3VsZCBoYXZlIG5vIG90aGVyIGVudHJpZXMgYmVmb3JlIGFkZGluZyB0aGlzIG5ldyBp
dGVtLgorICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpbmRleCB3ZSBzaG91
bGQgYWxzbyBub3QgaGF2ZSBhbnkgZW50cmllcy4KKyAgICAgICAgQVNTRVJUKG1fZW50cmllcy5p
c0VtcHR5KCkpOworCisgICAgICAgIC8vIEJ1dCBqdXN0IGluIGNhc2UgaXQgZG9lcyBoYXBwZW4g
aW4gcHJhY3RpY2Ugd2UnbGwgZ2V0IGJhY2sgaW4gdG8gYSBjb25zaXN0ZW50IHN0YXRlIG5vdyBi
ZWZvcmUgYWRkaW5nIHRoZSBuZXcgaXRlbS4KICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2VudHJp
ZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICAgICAgQVNTRVJUKG1fZW50cmllc1tpXSk7CisgICAgICAgICAgICBpZiAoIW1fZW50
cmllc1tpXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fcGFnZS0+
YmFja0ZvcndhcmRSZW1vdmVkSXRlbShtX2VudHJpZXNbaV0tPml0ZW1JRCgpKTsKICAgICAgICAg
ICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzW2ldLnJlbGVhc2UoKSk7CiAgICAgICAg
IH0KQEAgLTk3LDYgKzExNSw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiAgICAgfQogICAgIAogICAgIGlmICghbV9o
YXNDdXJyZW50SW5kZXgpIHsKKyAgICAgICAgQVNTRVJUKG1fZW50cmllcy5pc0VtcHR5KCkpOwog
ICAgICAgICBtX2N1cnJlbnRJbmRleCA9IDA7CiAgICAgICAgIG1faGFzQ3VycmVudEluZGV4ID0g
dHJ1ZTsKICAgICB9IGVsc2UKQEAgLTExNSw3ICsxMzQsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJk
TGlzdDo6Z29Ub0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKIHsKICAgICBBU1NF
UlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUo
KSk7CiAKLSAgICBpZiAoIW1fZW50cmllcy5zaXplKCkgfHwgIWl0ZW0pCisgICAgaWYgKCFtX2Vu
dHJpZXMuc2l6ZSgpIHx8ICFpdGVtIHx8ICFtX3BhZ2UgfHwgIW1faGFzQ3VycmVudEluZGV4KQog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAgLTEy
NSw4ICsxNDQsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Z29Ub0l0ZW0oV2ViQmFja0Zv
cndhcmRMaXN0SXRlbSogaXRlbSkKICAgICB9CiAgICAgaWYgKGluZGV4IDwgbV9lbnRyaWVzLnNp
emUoKSkgewogICAgICAgICBtX2N1cnJlbnRJbmRleCA9IGluZGV4OwotICAgICAgICBpZiAobV9w
YWdlKQotICAgICAgICAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoMCwgMCk7
CisgICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KDAsIDApOwogICAgIH0K
IH0KIApAQCAtMTM0LDI4ICsxNTIsMjggQEAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogV2ViQmFj
a0ZvcndhcmRMaXN0OjpjdXJyZW50SXRlbSgpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJ
bmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCi0gICAgcmV0dXJu
IG1faGFzQ3VycmVudEluZGV4ID8gbV9lbnRyaWVzW21fY3VycmVudEluZGV4XS5nZXQoKSA6IDA7
CisgICAgcmV0dXJuIG1fcGFnZSAmJiBtX2hhc0N1cnJlbnRJbmRleCA/IG1fZW50cmllc1ttX2N1
cnJlbnRJbmRleF0uZ2V0KCkgOiAwOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJC
YWNrRm9yd2FyZExpc3Q6OmJhY2tJdGVtKCkKIHsKICAgICBBU1NFUlQoIW1faGFzQ3VycmVudElu
ZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICByZXR1cm4g
bV9oYXNDdXJyZW50SW5kZXggJiYgbV9jdXJyZW50SW5kZXggPyBtX2VudHJpZXNbbV9jdXJyZW50
SW5kZXggLSAxXS5nZXQoKSA6IDA7CisgICAgcmV0dXJuIG1fcGFnZSAmJiBtX2hhc0N1cnJlbnRJ
bmRleCAmJiBtX2N1cnJlbnRJbmRleCA/IG1fZW50cmllc1ttX2N1cnJlbnRJbmRleCAtIDFdLmdl
dCgpIDogMDsKIH0KIAogV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0
Ojpmb3J3YXJkSXRlbSgpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJbmRleCB8fCBtX2N1
cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCi0gICAgcmV0dXJuIG1faGFzQ3VycmVu
dEluZGV4ICYmIG1fZW50cmllcy5zaXplKCkgJiYgbV9jdXJyZW50SW5kZXggPCBtX2VudHJpZXMu
c2l6ZSgpIC0gMSA/IG1fZW50cmllc1ttX2N1cnJlbnRJbmRleCArIDFdLmdldCgpIDogMDsKKyAg
ICByZXR1cm4gbV9wYWdlICYmIG1faGFzQ3VycmVudEluZGV4ICYmIG1fZW50cmllcy5zaXplKCkg
JiYgbV9jdXJyZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpIC0gMSA/IG1fZW50cmllc1ttX2N1
cnJlbnRJbmRleCArIDFdLmdldCgpIDogMDsKIH0KIAogV2ViQmFja0ZvcndhcmRMaXN0SXRlbSog
V2ViQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleChpbnQgaW5kZXgpCiB7CiAgICAgQVNTRVJU
KCFtX2hhc0N1cnJlbnRJbmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkp
OwogCi0gICAgaWYgKCFtX2hhc0N1cnJlbnRJbmRleCkKKyAgICBpZiAoIW1faGFzQ3VycmVudElu
ZGV4IHx8ICFtX3BhZ2UpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIERvIHJhbmdl
IGNoZWNrcyB3aXRob3V0IGRvaW5nIG1hdGggb24gaW5kZXggdG8gYXZvaWQgb3ZlcmZsb3cuCkBA
IC0xNzIsMjAgKzE5MCwyMyBAQCBpbnQgV2ViQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdENvdW50
KCkKIHsKICAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwg
bV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICByZXR1cm4gIW1faGFzQ3VycmVudEluZGV4ID8gMCA6
IG1fY3VycmVudEluZGV4OworICAgIHJldHVybiBtX3BhZ2UgJiYgbV9oYXNDdXJyZW50SW5kZXgg
PyBtX2N1cnJlbnRJbmRleCA6IDA7CiB9CiAKIGludCBXZWJCYWNrRm9yd2FyZExpc3Q6OmZvcndh
cmRMaXN0Q291bnQoKQogewogICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXggfHwgbV9jdXJy
ZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsKIAotICAgIHJldHVybiAhbV9oYXNDdXJyZW50
SW5kZXggPyAwIDogc3RhdGljX2Nhc3Q8aW50PihtX2VudHJpZXMuc2l6ZSgpKSAtIChtX2N1cnJl
bnRJbmRleCArIDEpOworICAgIHJldHVybiBtX3BhZ2UgJiYgbV9oYXNDdXJyZW50SW5kZXggPyBt
X2VudHJpZXMuc2l6ZSgpIC0gKG1fY3VycmVudEluZGV4ICsgMSkgOiAwOwogfQogCiBQYXNzUmVm
UHRyPEltbXV0YWJsZUFycmF5PiBXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0QXNJbW11dGFi
bGVBcnJheVdpdGhMaW1pdCh1bnNpZ25lZCBsaW1pdCkKIHsKICAgICBBU1NFUlQoIW1faGFzQ3Vy
cmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKKyAgICBp
ZiAoIW1fcGFnZSB8fCAhbV9oYXNDdXJyZW50SW5kZXgpCisgICAgICAgIHJldHVybiBJbW11dGFi
bGVBcnJheTo6Y3JlYXRlKCk7CisKICAgICB1bnNpZ25lZCBiYWNrTGlzdFNpemUgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oYmFja0xpc3RDb3VudCgpKTsKICAgICB1bnNpZ25lZCBzaXplID0gc3Rk
OjptaW4oYmFja0xpc3RTaXplLCBsaW1pdCk7CiAgICAgaWYgKCFzaXplKQpAQCAtMTk1LDggKzIx
NiwxMCBAQCBQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBXZWJCYWNrRm9yd2FyZExpc3Q6OmJh
Y2tMaXN0QXNJbW11dGFibGVBcnJheVdpdGhMaW1pdAogICAgIHZlY3Rvci5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNpemUpOwogCiAgICAgQVNTRVJUKGJhY2tMaXN0U2l6ZSA+PSBzaXplKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBiYWNrTGlzdFNpemUgLSBzaXplOyBpIDwgYmFja0xpc3RTaXpl
OyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gYmFja0xpc3RTaXplIC0gc2l6ZTsgaSA8IGJh
Y2tMaXN0U2l6ZTsgKytpKSB7CisgICAgICAgIEFTU0VSVChtX2VudHJpZXNbaV0pOwogICAgICAg
ICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKG1fZW50cmllc1tpXS5nZXQoKSk7CisgICAgfQogCiAg
ICAgcmV0dXJuIEltbXV0YWJsZUFycmF5OjphZG9wdCh2ZWN0b3IpOwogfQpAQCAtMjA1LDYgKzIy
OCw5IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlQXJyYXk+IFdlYkJhY2tGb3J3YXJkTGlzdDo6Zm9y
d2FyZExpc3RBc0ltbXV0YWJsZUFycmF5V2l0aExpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0N1cnJl
bnRJbmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCisgICAgaWYg
KCFtX3BhZ2UgfHwgIW1faGFzQ3VycmVudEluZGV4KQorICAgICAgICByZXR1cm4gSW1tdXRhYmxl
QXJyYXk6OmNyZWF0ZSgpOworCiAgICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWluKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihmb3J3YXJkTGlzdENvdW50KCkpLCBsaW1pdCk7CiAgICAgaWYgKCFzaXpl
KQogICAgICAgICByZXR1cm4gSW1tdXRhYmxlQXJyYXk6OmNyZWF0ZSgpOwpAQCAtMjE0LDggKzI0
MCwxMCBAQCBQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBXZWJCYWNrRm9yd2FyZExpc3Q6OmZv
cndhcmRMaXN0QXNJbW11dGFibGVBcnJheVdpdGhMaQogCiAgICAgdW5zaWduZWQgbGFzdCA9IG1f
Y3VycmVudEluZGV4ICsgc2l6ZTsKICAgICBBU1NFUlQobGFzdCA8IG1fZW50cmllcy5zaXplKCkp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fY3VycmVudEluZGV4ICsgMTsgaSA8PSBsYXN0OyAr
K2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9jdXJyZW50SW5kZXggKyAxOyBpIDw9IGxhc3Q7
ICsraSkgeworICAgICAgICBBU1NFUlQobV9lbnRyaWVzW2ldKTsKICAgICAgICAgdmVjdG9yLnVu
Y2hlY2tlZEFwcGVuZChtX2VudHJpZXNbaV0uZ2V0KCkpOworICAgIH0KIAogICAgIHJldHVybiBJ
bW11dGFibGVBcnJheTo6YWRvcHQodmVjdG9yKTsKIH0KQEAgLTIyNSwyMiArMjUzLDQ0IEBAIHZv
aWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJ
bmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCiAgICAgc2l6ZV90
IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGlmIChzaXplIDw9IDEpCisgICAgaWYgKCFt
X3BhZ2UgfHwgc2l6ZSA8PSAxKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50SXRlbSgpOworICAg
IFZlY3RvcjxSZWZQdHI8QVBJT2JqZWN0PiA+IHJlbW92ZWRJdGVtczsKIAotICAgIGlmIChtX3Bh
Z2UpIHsKKyAgICBpZiAoIWN1cnJlbnRJdGVtKSB7CisgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5
IGV2ZXIgaGF2ZSBubyBjdXJyZW50IGl0ZW0gaWYgd2UgYWxzbyBoYXZlIG5vIGN1cnJlbnQgaXRl
bSBpbmRleC4KKyAgICAgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJbmRleCk7CisgICAgICAgIC8v
IEFuZCBpZiB0aGF0J3MgdGhlIGNhc2Ugd2Ugc2hvdWxkIGFsc28gbm90IGhhdmUgYW55IGVudHJp
ZXMuCisgICAgICAgIEFTU0VSVChtX2VudHJpZXMuaXNFbXB0eSgpKTsKKworICAgICAgICAvLyBC
dXQganVzdCBpbiBjYXNlIGl0IGRvZXMgaGFwcGVuIGluIHByYWN0aWNlIHdlIHNob3VsZCBnZXQg
YmFjayBpbiB0byBhIGNvbnNpc3RlbnQgc3RhdGUgbm93LgogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fZW50cmllc1tpXSAhPSBj
dXJyZW50SXRlbSkKLSAgICAgICAgICAgICAgICBtX3BhZ2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0
ZW0obV9lbnRyaWVzW2ldLT5pdGVtSUQoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9lbnRyaWVz
W2ldKTsKKyAgICAgICAgICAgIGlmICghbV9lbnRyaWVzW2ldKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBtX3BhZ2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZW0obV9l
bnRyaWVzW2ldLT5pdGVtSUQoKSk7CisgICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1f
ZW50cmllc1tpXS5yZWxlYXNlKCkpOwogICAgICAgICB9CisKKyAgICAgICAgbV9lbnRyaWVzLmNs
ZWFyKCk7CisgICAgICAgIG1faGFzQ3VycmVudEluZGV4ID0gZmFsc2U7CisgICAgICAgIG1fcGFn
ZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KDAsICZyZW1vdmVkSXRlbXMpOworCisgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPEFQSU9iamVjdD4gPiByZW1vdmVk
SXRlbXM7Ci0gICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVDYXBhY2l0eShtX2VudHJpZXMuc2l6ZSgp
IC0gMSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJpZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKGkgIT0gbV9jdXJyZW50SW5kZXgpCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKG1fZW50cmllc1tpXSk7CisgICAg
ICAgIGlmIChtX2VudHJpZXNbaV0gJiYgbV9lbnRyaWVzW2ldICE9IGN1cnJlbnRJdGVtKQorICAg
ICAgICAgICAgbV9wYWdlLT5iYWNrRm9yd2FyZFJlbW92ZWRJdGVtKG1fZW50cmllc1tpXS0+aXRl
bUlEKCkpOworICAgIH0KKworICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSAt
IDEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlm
IChpICE9IG1fY3VycmVudEluZGV4ICYmIG1faGFzQ3VycmVudEluZGV4ICYmIG1fZW50cmllc1tp
XSkKICAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzW2ldLnJlbGVhc2Uo
KSk7CiAgICAgfQogCkBAIC0yNTQsOCArMzA0LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6
OmNsZWFyKCkKICAgICAgICAgbV9oYXNDdXJyZW50SW5kZXggPSBmYWxzZTsKICAgICB9CiAKLSAg
ICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCgw
LCAmcmVtb3ZlZEl0ZW1zKTsKKyAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCgw
LCAmcmVtb3ZlZEl0ZW1zKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmgKaW5kZXggOTdiZDJhMy4uMTZh
NTYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJk
TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3Qu
aApAQCAtODAsNiArODAsOCBAQCBwdWJsaWM6CiAjaWYgVVNFKENGKQogICAgIENGRGljdGlvbmFy
eVJlZiBjcmVhdGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihXZWJQYWdlUHJveHk6OldlYlBh
Z2VQcm94eVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KSBjb25zdDsK
ICAgICBib29sIHJlc3RvcmVGcm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9u
YXJ5UmVmKTsKKyAgICBib29sIHJlc3RvcmVGcm9tVjBDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlv
bihDRkRpY3Rpb25hcnlSZWYpOworICAgIGJvb2wgcmVzdG9yZUZyb21WMUNGRGljdGlvbmFyeVJl
cHJlc2VudGF0aW9uKENGRGljdGlvbmFyeVJlZik7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3Bw
CmluZGV4IGI0ODg1MjIuLjA1NGY2ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNiArNDQs
MTAgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlV2ViQmFja0ZvcndhcmRJdGVtSUQoKQogICAg
IHJldHVybiB1bmlxdWVIaXN0b3J5SXRlbUlEOwogfQogCitzdGF0aWMgQ0ZJbmRleCBjdXJyZW50
VmVyc2lvbiA9IDE7CitERUZJTkVfU1RBVElDX0dFVFRFUihDRk51bWJlclJlZiwgU2Vzc2lvbkhp
c3RvcnlDdXJyZW50VmVyc2lvbiwgKENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckNGSW5kZXhU
eXBlLCAmY3VycmVudFZlcnNpb24pKSk7CisKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5n
UmVmLCBTZXNzaW9uSGlzdG9yeVZlcnNpb25LZXksIChDRlNUUigiU2Vzc2lvbkhpc3RvcnlWZXJz
aW9uIikpKTsKIERFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9uSGlzdG9y
eUN1cnJlbnRJbmRleEtleSwgKENGU1RSKCJTZXNzaW9uSGlzdG9yeUN1cnJlbnRJbmRleCIpKSk7
CiBERUZJTkVfU1RBVElDX0dFVFRFUihDRlN0cmluZ1JlZiwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVz
S2V5LCAoQ0ZTVFIoIlNlc3Npb25IaXN0b3J5RW50cmllcyIpKSk7CiBERUZJTkVfU1RBVElDX0dF
VFRFUihDRlN0cmluZ1JlZiwgU2Vzc2lvbkhpc3RvcnlFbnRyeVRpdGxlS2V5LCAoQ0ZTVFIoIlNl
c3Npb25IaXN0b3J5RW50cnlUaXRsZSIpKSk7CkBAIC01MSwyMyArNTUsNDEgQEAgREVGSU5FX1NU
QVRJQ19HRVRURVIoQ0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5RW50cnlVUkxLZXksIChDRlNU
UigiU2Vzc2lvbkhpc3QKIERFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9u
SGlzdG9yeUVudHJ5T3JpZ2luYWxVUkxLZXksIChDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyeU9y
aWdpbmFsVVJMIikpKTsKIERFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9u
SGlzdG9yeUVudHJ5RGF0YUtleSwgKENGU1RSKCJTZXNzaW9uSGlzdG9yeUVudHJ5RGF0YSIpKSk7
CiAKK3N0YXRpYyBib29sIGV4dHJhY3RCYWNrRm9yd2FyZExpc3RFbnRyaWVzRnJvbUFycmF5KENG
QXJyYXlSZWYsIEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0b3ImKTsKKworc3RhdGljIENGRGljdGlv
bmFyeVJlZiBjcmVhdGVFbXB0eVNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSgpCit7CisgICAgc3Rh
dGljIGNvbnN0IHZvaWQqIGtleXNbMV0gPSB7IFNlc3Npb25IaXN0b3J5VmVyc2lvbktleSgpIH07
CisgICAgc3RhdGljIGNvbnN0IHZvaWQqIHZhbHVlc1sxXSA9IHsgU2Vzc2lvbkhpc3RvcnlDdXJy
ZW50VmVyc2lvbigpIH07CisKKyAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMs
IHZhbHVlcywgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcyk7Cit9CisKIENGRGljdGlvbmFyeVJlZiBXZWJCYWNrRm9yd2Fy
ZExpc3Q6OmNyZWF0ZUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKFdlYlBhZ2VQcm94eTo6V2Vi
UGFnZVByb3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2sgZmlsdGVyLCB2b2lkKiBjb250ZXh0
KSBjb25zdAogewogICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXggfHwgbV9jdXJyZW50SW5k
ZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsKIAorICAgIGlmICghbV9oYXNDdXJyZW50SW5kZXgpIHsK
KyAgICAgICAgLy8gV2UgcmVwcmVzZW50IGhhdmluZyBubyBjdXJyZW50IGluZGV4IGJ5IHdyaXRp
bmcgb3V0IGFuIGVtcHR5IGRpY3Rpb25hcnkgKGJlc2lkZXMgdGhlIHZlcnNpb24pLgorICAgICAg
ICByZXR1cm4gY3JlYXRlRW1wdHlTZXNzaW9uSGlzdG9yeURpY3Rpb25hcnkoKTsKKyAgICB9CisK
ICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGVudHJpZXMoQWRvcHRDRiwgQ0ZBcnJh
eUNyZWF0ZU11dGFibGUoMCwgbV9lbnRyaWVzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNr
cykpOwogCiAgICAgLy8gV2UgbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGluZGV4IHRv
IGFjY291bnQgZm9yIGVudHJpZXMgdGhhdCBhcmUgZmlsdGVyZWQgYnkgdGhlIGNhbGxiYWNrLgog
ICAgIENGSW5kZXggY3VycmVudEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAgYm9vbCBoYXND
dXJyZW50SW5kZXggPSB0cnVlOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJp
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgLy8gSWYgd2Ugc29tZWhvdyBlbmRlZCB1cCB3aXRo
IGEgbnVsbCBlbnRyeSB0aGVuIHdlIHNob3VsZCBjb25zaWRlciB0aGUgZGF0YSBpbnZhbGlkIGFu
ZCBub3Qgc2F2ZSBzZXNzaW9uIGhpc3RvcnkgYXQgYWxsLgogICAgICAgICBBU1NFUlQobV9lbnRy
aWVzW2ldKTsKLSAgICAgICAgaWYgKCFtX2VudHJpZXNbaV0pCisgICAgICAgIGlmICghbV9lbnRy
aWVzW2ldKSB7CisgICAgICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRM
aXN0IGNvbnRhaW5lZCBhIG51bGwgZW50cnkgYXQgaW5kZXggJWx1IiwgaSk7CiAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcih0
b0FQSShtX3BhZ2UpLCBXS1BhZ2VHZXRTZXNzaW9uSGlzdG9yeVVSTFZhbHVlVHlwZSgpLCB0b1VS
TFJlZihtX2VudHJpZXNbaV0tPm9yaWdpbmFsVVJMKCkuaW1wbCgpKSwgY29udGV4dCkpIHsKLSAg
ICAgICAgICAgIGlmIChpIDw9IHN0YXRpY19jYXN0PHNpemVfdD4obV9jdXJyZW50SW5kZXgpKQor
ICAgICAgICAgICAgaWYgKGkgPD0gbV9jdXJyZW50SW5kZXgpCiAgICAgICAgICAgICAgICAgY3Vy
cmVudEluZGV4LS07CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtODcsMjYg
KzEwOSw2MiBAQCBDRkRpY3Rpb25hcnlSZWYgV2ViQmFja0ZvcndhcmRMaXN0OjpjcmVhdGVDRkRp
Y3Rpb25hcnlSZXByZXNlbnRhdGlvbihXZWJQYWdlUHJveAogICAgICAgICBDRkFycmF5QXBwZW5k
VmFsdWUoZW50cmllcy5nZXQoKSwgZW50cnlEaWN0aW9uYXJ5LmdldCgpKTsKICAgICB9CiAgICAg
ICAgIAotICAgIC8vIElmIGFsbCBpdGVtcyBiZWZvcmUgYW5kIGluY2x1ZGluZyB0aGUgY3VycmVu
dCBpdGVtIHdlcmUgZmlsdGVyZWQgdGhlbiBjdXJyZW50SW5kZXggd2lsbCBiZSAtMS4KLSAgICAv
LyBBc3N1bWluZyB3ZSBkaWRuJ3Qgc3RhcnQgb3V0IHdpdGggTm9DdXJyZW50SXRlbUluZGV4LCB3
ZSBzaG91bGQgc3RvcmUgImN1cnJlbnQiIHRvIHBvaW50IGF0IHRoZSBmaXJzdCBpdGVtLgotICAg
IGlmIChjdXJyZW50SW5kZXggPT0gLTEgJiYgbV9oYXNDdXJyZW50SW5kZXggJiYgQ0ZBcnJheUdl
dENvdW50KGVudHJpZXMuZ2V0KCkpKQotICAgICAgICBjdXJyZW50SW5kZXggPSAwOwotCi0gICAg
Ly8gRklYTUU6IFdlJ3JlIHJlbHlpbmcgb24gY3VycmVudEluZGV4ID09IC0xIHRvIG1lYW4gdGhl
IGV4YWN0IHNhbWUgdGhpbmcgYXMgTm9DdXJyZW50SXRlbUluZGV4IChVSU5UX01BWCkgaW4gdW5z
aWduZWQgZm9ybS4KLSAgICAvLyBUaGF0IHNlZW1zIGltcGxpY2l0IGFuZCBmcmFnaWxlIGFuZCB3
ZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkgb2YgcmVwcmVzZW50aW5nIHRoZSBOb0N1cnJlbnRJ
dGVtSW5kZXggY2FzZS4KLSAgICBpZiAoIW1faGFzQ3VycmVudEluZGV4IHx8ICFDRkFycmF5R2V0
Q291bnQoZW50cmllcy5nZXQoKSkpCi0gICAgICAgIGN1cnJlbnRJbmRleCA9IC0xOworICAgIEFT
U0VSVChjdXJyZW50SW5kZXggPT0gLTEgfHwgKGN1cnJlbnRJbmRleCA+IC0xICYmIGN1cnJlbnRJ
bmRleCA8IENGQXJyYXlHZXRDb3VudChlbnRyaWVzLmdldCgpKSkpOworICAgIGlmIChjdXJyZW50
SW5kZXggPCAtMSB8fCAoY3VycmVudEluZGV4ID4gLTEgJiYgY3VycmVudEluZGV4ID49IENGQXJy
YXlHZXRDb3VudChlbnRyaWVzLmdldCgpKSkpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwg
IkZpbHRlcmluZyBlbnRyaWVzIHRvIGJlIHNhdmVkIHJlc3VsdGVkIGluIGFuIGluY29uc2lzdGVu
dCBzdGF0ZSB0aGF0IHdlIGNhbm5vdCByZXByZXNlbnQiKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCi0gICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBjdXJyZW50SW5kZXhOdW1iZXIoQWRv
cHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyQ0ZJbmRleFR5cGUsICZjdXJyZW50SW5k
ZXgpKTsKKyAgICAvLyBJZiB3ZSBoYXZlIGFuIGluZGV4IGFuZCBhbGwgaXRlbXMgYmVmb3JlIGFu
ZCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgaXRlbSB3ZXJlIGZpbHRlcmVkIHRoZW4gY3VycmVudElu
ZGV4IHdpbGwgYmUgLTEuCisgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBuZXcgY3VycmVudCBpbmRl
eCBzaG91bGQgcG9pbnQgYXQgdGhlIGZpcnN0IGl0ZW0uCisgICAgLy8gSXQncyBhbHNvIHBvc3Np
YmxlIHRoYXQgYWxsIGl0ZW1zIHdlcmUgZmlsdGVyZWQgc28gd2Ugc2hvdWxkIHJlcHJlc2VudCBu
b3QgaGF2aW5nIGEgY3VycmVudCBpbmRleC4KKyAgICBpZiAoY3VycmVudEluZGV4ID09IC0xKSB7
CisgICAgICAgIGlmIChDRkFycmF5R2V0Q291bnQoZW50cmllcy5nZXQoKSkpCisgICAgICAgICAg
ICBjdXJyZW50SW5kZXggPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYXNDdXJyZW50
SW5kZXggPSBmYWxzZTsKKyAgICB9CiAKLSAgICBjb25zdCB2b2lkKiBrZXlzWzJdID0geyBTZXNz
aW9uSGlzdG9yeUN1cnJlbnRJbmRleEtleSgpLCBTZXNzaW9uSGlzdG9yeUVudHJpZXNLZXkoKSB9
OwotICAgIGNvbnN0IHZvaWQqIHZhbHVlc1syXSA9IHsgY3VycmVudEluZGV4TnVtYmVyLmdldCgp
LCBlbnRyaWVzLmdldCgpIH07CisgICAgaWYgKGhhc0N1cnJlbnRJbmRleCkgeworICAgICAgICBS
ZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IGN1cnJlbnRJbmRleE51bWJlcihBZG9wdENGLCBDRk51bWJl
ckNyZWF0ZSgwLCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJmN1cnJlbnRJbmRleCkpOworICAgICAg
ICBjb25zdCB2b2lkKiBrZXlzWzNdID0geyBTZXNzaW9uSGlzdG9yeVZlcnNpb25LZXkoKSwgU2Vz
c2lvbkhpc3RvcnlDdXJyZW50SW5kZXhLZXkoKSwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5KCkg
fTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFsdWVzWzNdID0geyBTZXNzaW9uSGlzdG9yeUN1cnJl
bnRWZXJzaW9uKCksIGN1cnJlbnRJbmRleE51bWJlci5nZXQoKSwgZW50cmllcy5nZXQoKSB9Owor
IAorICAgICAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgMywg
JmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcyk7CisgICAgfQogCi0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNyZWF0ZSgwLCBrZXlz
LCB2YWx1ZXMsIDIsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgIC8vIFdlIHJlcHJlc2VudCBoYXZpbmcgbm8gY3Vy
cmVudCBpbmRleCBieSB3cml0aW5nIG91dCBhbiBlbXB0eSBkaWN0aW9uYXJ5IChiZXNpZGVzIHRo
ZSB2ZXJzaW9uKS4KKyAgICByZXR1cm4gY3JlYXRlRW1wdHlTZXNzaW9uSGlzdG9yeURpY3Rpb25h
cnkoKTsKIH0KIAogYm9vbCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlc3RvcmVGcm9tQ0ZEaWN0aW9u
YXJ5UmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnkpCiB7CisgICAgQ0ZO
dW1iZXJSZWYgY2ZWZXJzaW9uID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGRp
Y3Rpb25hcnksIFNlc3Npb25IaXN0b3J5VmVyc2lvbktleSgpKTsKKyAgICBpZiAoIWNmVmVyc2lv
bikgeworICAgICAgICAvLyB2MCBzZXNzaW9uIGhpc3RvcnkgZGljdGlvbmFyaWVzIGRpZCBub3Qg
Y29udGFpbiB2ZXJzaW9uaW5nCisgICAgICAgIHJldHVybiByZXN0b3JlRnJvbVYwQ0ZEaWN0aW9u
YXJ5UmVwcmVzZW50YXRpb24oZGljdGlvbmFyeSk7CisgICAgfQorICAgIAorICAgIGlmIChDRkdl
dFR5cGVJRChjZlZlcnNpb24pICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgTE9H
KFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0
aW9uIGNvbnRhaW5zIGEgdmVyc2lvbiB0aGF0IGlzIG5vdCBhIG51bWJlciIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ0ZJbmRleCB2ZXJzaW9uOworICAgIGlmICghQ0ZO
dW1iZXJHZXRWYWx1ZShjZlZlcnNpb24sIGtDRk51bWJlckNGSW5kZXhUeXBlLCAmdmVyc2lvbikp
IHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9u
YXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGhhdmUgYSBjb3JyZWN0bHkgdHlwZWQgY3VycmVu
dCB2ZXJzaW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYg
KHZlcnNpb24gPT0gMSkKKyAgICAgICAgcmV0dXJuIHJlc3RvcmVGcm9tVjFDRkRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbihkaWN0aW9uYXJ5KTsKKyAgICAKKyAgICBMT0coU2Vzc2lvblN0YXRlLCAi
V2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gaGFzIGFuIGludmFs
aWQgY3VycmVudCB2ZXJzaW9uICglbGQpIiwgdmVyc2lvbik7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21WMENGRGljdGlvbmFyeVJl
cHJlc2VudGF0aW9uKENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5KQorewogICAgIENGTnVtYmVy
UmVmIGNmSW5kZXggPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFy
eSwgU2Vzc2lvbkhpc3RvcnlDdXJyZW50SW5kZXhLZXkoKSk7CiAgICAgaWYgKCFjZkluZGV4IHx8
IENGR2V0VHlwZUlEKGNmSW5kZXgpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKICAgICAgICAg
TE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2Vu
dGF0aW9uIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjdXJyZW50IGluZGV4Iik7CkBAIC0xMTUsMTIg
KzE3MywxMiBAQCBib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25h
cnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgZAogCiAgICAgQ0ZJbmRleCBjdXJyZW50
Q0ZJbmRleDsKICAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUoY2ZJbmRleCwga0NGTnVtYmVyQ0ZJ
bmRleFR5cGUsICZjdXJyZW50Q0ZJbmRleCkpIHsKLSAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwg
IldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGhh
dmUgYSB2YWxpZCBpbnRlZ2VyIGN1cnJlbnQgaW5kZXgiKTsKKyAgICAgICAgTE9HKFNlc3Npb25T
dGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMg
bm90IGhhdmUgYSBjb3JyZWN0bHkgdHlwZWQgY3VycmVudCBpbmRleCIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIGlmIChjdXJyZW50Q0ZJbmRleCA8IC0xKSB7Ci0g
ICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSBy
ZXByZXNlbnRhdGlvbiBjb250YWlucyBhIG5lZ2F0aXZlIGN1cnJlbnQgaW5kZXggdGhhdCBpcyBi
b2d1cyAoJWxkKSIsIGN1cnJlbnRDRkluZGV4KTsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwg
IldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGNvbnRhaW5zIGFu
IHVuZXhwZWN0ZWQgbmVnYXRpdmUgY3VycmVudCBpbmRleCAoJWxkKSIsIGN1cnJlbnRDRkluZGV4
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTMxLDIzICsxODksOTQgQEAg
Ym9vbCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlc3RvcmVGcm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50
YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIGQKICAgICB9CiAKICAgICBDRkluZGV4IHNpemUgPSBDRkFy
cmF5R2V0Q291bnQoY2ZFbnRyaWVzKTsKLSAgICBpZiAoY3VycmVudENGSW5kZXggPCAtMSB8fCBj
dXJyZW50Q0ZJbmRleCA+PSBzaXplICkgeworICAgIGlmIChzaXplIDwgMCB8fCBjdXJyZW50Q0ZJ
bmRleCA+PSBzaXplICkgewogICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0Zvcndh
cmRMaXN0IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gY29udGFpbnMgYW4gaW52YWxpZCBjdXJy
ZW50IGluZGV4ICglbGQpIGZvciB0aGUgbnVtYmVyIG9mIGVudHJpZXMgKCVsZCkiLCBjdXJyZW50
Q0ZJbmRleCwgc2l6ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBG
SVhNRTogV2UncmUgcmVseWluZyBvbiBjdXJyZW50SW5kZXggPT0gLTEgdG8gbWVhbiB0aGUgZXhh
Y3Qgc2FtZSB0aGluZyBhcyBOb0N1cnJlbnRJdGVtSW5kZXggKFVJTlRfTUFYKSBpbiB1bnNpZ25l
ZCBmb3JtLgotICAgIC8vIFRoYXQgc2VlbXMgaW1wbGljaXQgYW5kIGZyYWdpbGUgYW5kIHdlIHNo
b3VsZCBmaW5kIGEgYmV0dGVyIHdheSBvZiByZXByZXNlbnRpbmcgdGhlIE5vQ3VycmVudEl0ZW1J
bmRleCBjYXNlLgotICAgIGJvb2wgaGFzQ3VycmVudEluZGV4ID0gY3VycmVudENGSW5kZXggPiAt
MTsKLSAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBoYXNDdXJyZW50SW5kZXggPyBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY3VycmVudENGSW5kZXgpIDogMDsKKyAgICAvLyBWZXJzaW9uIDAgc2Vz
c2lvbiBoaXN0b3J5IHJlbGllZCBvbiBjdXJyZW50SW5kZXggPT0gLTEgdG8gcmVwcmVzZW50IHRo
ZSBzYW1lIHRoaW5nIGFzIG5vdCBoYXZpbmcgYSBjdXJyZW50IGluZGV4LgorICAgIGJvb2wgaGFz
Q3VycmVudEluZGV4ID0gY3VycmVudENGSW5kZXggIT0gLTE7CiAKICAgICBpZiAoIWhhc0N1cnJl
bnRJbmRleCAmJiBzaXplKSB7Ci0gICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9y
d2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBzYXlzIHRoZXJlIGlzIG5vIGN1cnJl
bnQgaXRlbSBpbmRleCwgYnV0IHRoZXJlIGlzIGEgbGlzdCBvZiAlbGQgZW50cmllcyAtIHRoaXMg
aXMgYm9ndXMiLCBzaXplKTsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3
YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIHNheXMgdGhlcmUgaXMgbm8gY3VycmVu
dCBpbmRleCwgYnV0IHRoZXJlIGlzIGEgbGlzdCBvZiAlbGQgZW50cmllcyIsIHNpemUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEJhY2tGb3J3YXJkTGlzdEl0ZW1W
ZWN0b3IgbmV3RW50cmllczsKLSAgICBuZXdFbnRyaWVzLnJlc2VydmVDYXBhY2l0eShzaXplKTsK
KyAgICBCYWNrRm9yd2FyZExpc3RJdGVtVmVjdG9yIGVudHJpZXM7CisgICAgaWYgKCFleHRyYWN0
QmFja0ZvcndhcmRMaXN0RW50cmllc0Zyb21BcnJheShjZkVudHJpZXMsIGVudHJpZXMpKSB7Cisg
ICAgICAgIC8vIGV4dHJhY3RCYWNrRm9yd2FyZExpc3RFbnRyaWVzRnJvbUFycmF5IGhhcyBhbHJl
YWR5IGxvZ2dlZCB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVChlbnRyaWVzLnNpemUoKSA9PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc2l6ZSkpOworICAgIAorICAgIG1faGFzQ3VycmVudEluZGV4ID0gaGFzQ3Vy
cmVudEluZGV4OworICAgIG1fY3VycmVudEluZGV4ID0gbV9oYXNDdXJyZW50SW5kZXggPyBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oY3VycmVudENGSW5kZXgpIDogMDsKKyAgICBtX2VudHJpZXMgPSBl
bnRyaWVzOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViQmFja0ZvcndhcmRMaXN0
OjpyZXN0b3JlRnJvbVYxQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVm
IGRpY3Rpb25hcnkpCit7CisgICAgQ0ZOdW1iZXJSZWYgY2ZJbmRleCA9IChDRk51bWJlclJlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShkaWN0aW9uYXJ5LCBTZXNzaW9uSGlzdG9yeUN1cnJlbnRJbmRl
eEtleSgpKTsKKyAgICBpZiAoIWNmSW5kZXgpIHsKKyAgICAgICAgLy8gTm8gY3VycmVudCBpbmRl
eCBtZWFucyB0aGUgZGljdGlvbmFyeSByZXByZXNlbnRzIGFuIGVtcHR5IHNlc3Npb24uCisgICAg
ICAgIG1faGFzQ3VycmVudEluZGV4ID0gZmFsc2U7CisgICAgICAgIG1fY3VycmVudEluZGV4ID0g
MDsKKyAgICAgICAgbV9lbnRyaWVzLmNsZWFyKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKENGR2V0VHlwZUlEKGNmSW5kZXgpICE9IENGTnVtYmVyR2V0VHlwZUlE
KCkpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0
aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjdXJyZW50IGluZGV4
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBDRkluZGV4IGN1cnJlbnRD
RkluZGV4OworICAgIGlmICghQ0ZOdW1iZXJHZXRWYWx1ZShjZkluZGV4LCBrQ0ZOdW1iZXJDRklu
ZGV4VHlwZSwgJmN1cnJlbnRDRkluZGV4KSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAi
V2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2
ZSBhIGNvcnJlY3RseSB0eXBlZCBjdXJyZW50IGluZGV4Iik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGN1cnJlbnRDRkluZGV4IDwgMCkgeworICAgICAgICBM
T0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkgcmVwcmVzZW50
YXRpb24gY29udGFpbnMgYW4gdW5leHBlY3RlZCBuZWdhdGl2ZSBjdXJyZW50IGluZGV4ICglbGQp
IiwgY3VycmVudENGSW5kZXgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Q0ZBcnJheVJlZiBjZkVudHJpZXMgPSAoQ0ZBcnJheVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShk
aWN0aW9uYXJ5LCBTZXNzaW9uSGlzdG9yeUVudHJpZXNLZXkoKSk7CisgICAgaWYgKCFjZkVudHJp
ZXMgfHwgQ0ZHZXRUeXBlSUQoY2ZFbnRyaWVzKSAhPSBDRkFycmF5R2V0VHlwZUlEKCkpIHsKKyAg
ICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJl
cHJlc2VudGF0aW9uIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBsaXN0IG9mIGVudHJpZXMiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIENGSW5kZXggc2l6ZSA9IENGQXJyYXlH
ZXRDb3VudChjZkVudHJpZXMpOworICAgIGlmIChjdXJyZW50Q0ZJbmRleCA+PSBzaXplICkgewor
ICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkg
cmVwcmVzZW50YXRpb24gY29udGFpbnMgYW4gaW52YWxpZCBjdXJyZW50IGluZGV4ICglbGQpIGZv
ciB0aGUgbnVtYmVyIG9mIGVudHJpZXMgKCVsZCkiLCBjdXJyZW50Q0ZJbmRleCwgc2l6ZSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgQmFja0ZvcndhcmRMaXN0SXRl
bVZlY3RvciBlbnRyaWVzOworICAgIGlmICghZXh0cmFjdEJhY2tGb3J3YXJkTGlzdEVudHJpZXNG
cm9tQXJyYXkoY2ZFbnRyaWVzLCBlbnRyaWVzKSkgeworICAgICAgICAvLyBleHRyYWN0QmFja0Zv
cndhcmRMaXN0RW50cmllc0Zyb21BcnJheSBoYXMgYWxyZWFkeSBsb2dnZWQgdGhlIGFwcHJvcHJp
YXRlIGVycm9yIG1lc3NhZ2UuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgQVNTRVJUKGVudHJpZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKSk7
CisgICAgCisgICAgbV9oYXNDdXJyZW50SW5kZXggPSB0cnVlOworICAgIG1fY3VycmVudEluZGV4
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGN1cnJlbnRDRkluZGV4KTsKKyAgICBtX2VudHJpZXMg
PSBlbnRyaWVzOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGV4dHJhY3RC
YWNrRm9yd2FyZExpc3RFbnRyaWVzRnJvbUFycmF5KENGQXJyYXlSZWYgY2ZFbnRyaWVzLCBCYWNr
Rm9yd2FyZExpc3RJdGVtVmVjdG9yJiBlbnRyaWVzKQoreworICAgIENGSW5kZXggc2l6ZSA9IENG
QXJyYXlHZXRDb3VudChjZkVudHJpZXMpOworCisgICAgZW50cmllcy5yZXNlcnZlQ2FwYWNpdHko
c2l6ZSk7CiAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAg
IENGRGljdGlvbmFyeVJlZiBlbnRyeURpY3Rpb25hcnkgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgoY2ZFbnRyaWVzLCBpKTsKICAgICAgICAgaWYgKCFlbnRyeURpY3Rp
b25hcnkgfHwgQ0ZHZXRUeXBlSUQoZW50cnlEaWN0aW9uYXJ5KSAhPSBDRkRpY3Rpb25hcnlHZXRU
eXBlSUQoKSkgewpAQCAtMTc5LDEyICszMDgsOCBAQCBib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6
cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgZAog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBu
ZXdFbnRyaWVzLmFwcGVuZChXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUob3JpZ2luYWxV
UkwsIGVudHJ5VVJMLCBlbnRyeVRpdGxlLCBDRkRhdGFHZXRCeXRlUHRyKGJhY2tGb3J3YXJkRGF0
YSksIENGRGF0YUdldExlbmd0aChiYWNrRm9yd2FyZERhdGEpLCBnZW5lcmF0ZVdlYkJhY2tGb3J3
YXJkSXRlbUlEKCkpKTsKKyAgICAgICAgZW50cmllcy5hcHBlbmQoV2ViQmFja0ZvcndhcmRMaXN0
SXRlbTo6Y3JlYXRlKG9yaWdpbmFsVVJMLCBlbnRyeVVSTCwgZW50cnlUaXRsZSwgQ0ZEYXRhR2V0
Qnl0ZVB0cihiYWNrRm9yd2FyZERhdGEpLCBDRkRhdGFHZXRMZW5ndGgoYmFja0ZvcndhcmREYXRh
KSwgZ2VuZXJhdGVXZWJCYWNrRm9yd2FyZEl0ZW1JRCgpKSk7CiAgICAgfQotICAgIAotICAgIG1f
ZW50cmllcyA9IG5ld0VudHJpZXM7Ci0gICAgbV9oYXNDdXJyZW50SW5kZXggPSBoYXNDdXJyZW50
SW5kZXg7Ci0gICAgbV9jdXJyZW50SW5kZXggPSBjdXJyZW50SW5kZXg7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144159</attachid>
            <date>2012-05-25 15:42:18 -0700</date>
            <delta_ts>2012-06-26 16:21:17 -0700</delta_ts>
            <desc>Patch v2 - Now with more style</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25657</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5OWEzZjNjLi45YTZmZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDEg
QEAKIDIwMTItMDUtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzUxMworICAgICAg
ICBXZWJCYWNrRm9yd2FyZExpc3QgbmVlZHMgYW4gb3ZlcmhhdWwgdG8gY29uc2lzdGVudGx5IGFu
ZCBjbGVhcmx5IGhhbmRsZSBlcnJvciBjb25kaXRpb25zLgorCisgICAgICAgIC0gV2UgdGhpbmsg
YSBudWxsIGVudHJ5IG1pZ2h0IHNvbWVob3cgZ2V0IGluIHRvIHRoZSBsaXN0IHNvIHdlIG5vdyB0
cnkgdG8gcHJldmVudCB0aGF0LgorICAgICAgICAtIFdlIHRoaW5rIGEgbnVsbCBlbnRyeSBtaWdo
dCBzb21laG93IGJlIGluIHRoZSBsaXN0IHNvIHdlIG5vdyBudWxsIGNoZWNrIHdoZW4gaW5kZXhp
bmcgaW50byBtX2VudHJpZXMuCisgICAgICAgIC0gQSBsb3Qgb2YgaW5kZXggbWF0aCAtIGVzcGVj
aWFsbHkgdHJhY2tpbmcgIm5vIGN1cnJlbnQgaW5kZXgiIC0gd2FzIGltcGxpY2l0IG9yIHdyb25n
LgorICAgICAgICAtIE9wZXJhdGluZyBvbiBhIFdlYkJhY2tGb3J3YXJkTGlzdCB3aG9zZSBwYWdl
IGhhcyBiZWVuIGNsb3NlZCBpcyBub3cgYW4gZXhwbGljaXQgbm8tb3AuCisgICAgICAgIC0gVGhl
IHNlc3Npb24gc3RhdGUgZGF0YSByZWFkaW5nIGFuZCB3cml0aW5nIGNvZGUgd2FzIGZyYWdpbGUg
YW5kIG5lZWRlZCBhbiBvdmVyaGF1bC4KKyAgICAgICAgLSBUaGlzIGluY2x1ZGVzIGFkZGluZyBh
IG5ldyBWMSBmb3JtYXQgb2YgdGhlIHNlc3Npb24gZGF0YSB0aGF0IGlzIGVhc2llciB0byB2YWxp
ZGF0ZSB3aGVuIHJlYWRpbmcgYmFjayBpbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6On5XZWJCYWNrRm9yd2FyZExpc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OnBhZ2VDbG9zZWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdENvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0Ojpmb3J3YXJkTGlzdENvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0OjpiYWNrTGlzdEFzSW1tdXRhYmxlQXJyYXlXaXRoTGltaXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmZvcndhcmRMaXN0QXNJbW11dGFibGVBcnJh
eVdpdGhMaW1pdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIp
OgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oOgorICAgICAgICAo
V2ViQmFja0ZvcndhcmRMaXN0KToKKworICAgICAgICAqIFVJUHJvY2Vzcy9jZi9XZWJCYWNrRm9y
d2FyZExpc3RDRi5jcHA6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZUVtcHR5U2Vzc2lvbkhpc3Rv
cnlEaWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpjcmVh
dGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tG
b3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21WMENGRGljdGlvbmFy
eVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0Ojpy
ZXN0b3JlRnJvbVYxQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpleHRyYWN0QmFja0ZvcndhcmRMaXN0RW50cmllc0Zyb21BcnJheSk6CisKKzIwMTItMDUtMjUg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzQxOAogICAgICAgICBXZWJCYWNrRm9yd2Fy
ZExpc3Qgc2hvdWxkIHNlcGFyYXRlICJoYXMgbm8gY3VycmVudCBpbmRleCIgZnJvbSB0aGUgaW50
ZWdlciB2YWx1ZSBvZiB0aGUgY3VycmVudCBpbmRleAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCmluZGV4IDRhODFhODcuLmRmOGM2ZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCkBA
IC00MywxNyArNDMsMjggQEAgV2ViQmFja0ZvcndhcmRMaXN0OjpXZWJCYWNrRm9yd2FyZExpc3Qo
V2ViUGFnZVByb3h5KiBwYWdlKQogCiBXZWJCYWNrRm9yd2FyZExpc3Q6On5XZWJCYWNrRm9yd2Fy
ZExpc3QoKQogeworICAgIC8vIEEgV2ViQmFja0ZvcndhcmRMaXN0IHNob3VsZCBuZXZlciBiZSBk
ZXN0cm95ZWQgdW5sZXNzIGl0J3MgYXNzb2NpYXRlZCBwYWdlIGhhcyBiZWVuIGNsb3NlZC4KKyAg
ICBBU1NFUlQoIW1fcGFnZSAmJiAhbV9oYXNDdXJyZW50SW5kZXgpOwogfQogCiB2b2lkIFdlYkJh
Y2tGb3J3YXJkTGlzdDo6cGFnZUNsb3NlZCgpCiB7CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWx3
YXlzIHN0YXJ0ZWQgb3V0IHdpdGggYW4gbV9wYWdlIGFuZCB3ZSBzaG91bGQgbmV2ZXIgY2xvc2Ug
dGhlIHBhZ2UgdHdpY2UuCisgICAgQVNTRVJUKG1fcGFnZSk7CisKICAgICBpZiAobV9wYWdlKSB7
CiAgICAgICAgIHNpemVfdCBzaXplID0gbV9lbnRyaWVzLnNpemUoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQobV9lbnRyaWVzW2ldKTsKKyAgICAg
ICAgICAgIGlmICghbV9lbnRyaWVzW2ldKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgbV9wYWdlLT5iYWNrRm9yd2FyZFJlbW92ZWRJdGVtKG1fZW50cmllc1tpXS0+aXRl
bUlEKCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9wYWdlID0gMDsKKyAgICBtX2VudHJp
ZXMuY2xlYXIoKTsKKyAgICBtX2hhc0N1cnJlbnRJbmRleCA9IGZhbHNlOwogfQogCiB2b2lkIFdl
YkJhY2tGb3J3YXJkTGlzdDo6YWRkSXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBuZXdJdGVt
KQpAQCAtODEsMTUgKzkyLDIyIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiAgICAgICAgICAgICBtX3BhZ2UtPmJhY2tG
b3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRyaWVzWzBdLT5pdGVtSUQoKSk7CiAgICAgICAgICAgICBy
ZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmllc1swXS5yZWxlYXNlKCkpOwogICAgICAgICAgICAg
bV9lbnRyaWVzLnJlbW92ZSgwKTsKKwogICAgICAgICAgICAgaWYgKG1fZW50cmllcy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgbV9oYXNDdXJyZW50SW5kZXggPSBmYWxzZTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleC0tOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBjdXJyZW50IGl0ZW0gaW5kZXgs
IHdlIHNob3VsZCBoYXZlIG5vIG90aGVyIGVudHJpZXMgYmVmb3JlIGFkZGluZyB0aGlzIG5ldyBp
dGVtLgorICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpbmRleCB3ZSBzaG91
bGQgYWxzbyBub3QgaGF2ZSBhbnkgZW50cmllcy4KKyAgICAgICAgQVNTRVJUKG1fZW50cmllcy5p
c0VtcHR5KCkpOworCisgICAgICAgIC8vIEJ1dCBqdXN0IGluIGNhc2UgaXQgZG9lcyBoYXBwZW4g
aW4gcHJhY3RpY2Ugd2UnbGwgZ2V0IGJhY2sgaW4gdG8gYSBjb25zaXN0ZW50IHN0YXRlIG5vdyBi
ZWZvcmUgYWRkaW5nIHRoZSBuZXcgaXRlbS4KICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2VudHJp
ZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICAgICAgQVNTRVJUKG1fZW50cmllc1tpXSk7CisgICAgICAgICAgICBpZiAoIW1fZW50
cmllc1tpXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fcGFnZS0+
YmFja0ZvcndhcmRSZW1vdmVkSXRlbShtX2VudHJpZXNbaV0tPml0ZW1JRCgpKTsKICAgICAgICAg
ICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzW2ldLnJlbGVhc2UoKSk7CiAgICAgICAg
IH0KQEAgLTk3LDYgKzExNSw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiAgICAgfQogICAgIAogICAgIGlmICghbV9o
YXNDdXJyZW50SW5kZXgpIHsKKyAgICAgICAgQVNTRVJUKG1fZW50cmllcy5pc0VtcHR5KCkpOwog
ICAgICAgICBtX2N1cnJlbnRJbmRleCA9IDA7CiAgICAgICAgIG1faGFzQ3VycmVudEluZGV4ID0g
dHJ1ZTsKICAgICB9IGVsc2UKQEAgLTExNSw3ICsxMzQsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJk
TGlzdDo6Z29Ub0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKIHsKICAgICBBU1NF
UlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUo
KSk7CiAKLSAgICBpZiAoIW1fZW50cmllcy5zaXplKCkgfHwgIWl0ZW0pCisgICAgaWYgKCFtX2Vu
dHJpZXMuc2l6ZSgpIHx8ICFpdGVtIHx8ICFtX3BhZ2UgfHwgIW1faGFzQ3VycmVudEluZGV4KQog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAgLTEy
NSw4ICsxNDQsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Z29Ub0l0ZW0oV2ViQmFja0Zv
cndhcmRMaXN0SXRlbSogaXRlbSkKICAgICB9CiAgICAgaWYgKGluZGV4IDwgbV9lbnRyaWVzLnNp
emUoKSkgewogICAgICAgICBtX2N1cnJlbnRJbmRleCA9IGluZGV4OwotICAgICAgICBpZiAobV9w
YWdlKQotICAgICAgICAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoMCwgMCk7
CisgICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KDAsIDApOwogICAgIH0K
IH0KIApAQCAtMTM0LDI4ICsxNTIsMjggQEAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogV2ViQmFj
a0ZvcndhcmRMaXN0OjpjdXJyZW50SXRlbSgpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJ
bmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCi0gICAgcmV0dXJu
IG1faGFzQ3VycmVudEluZGV4ID8gbV9lbnRyaWVzW21fY3VycmVudEluZGV4XS5nZXQoKSA6IDA7
CisgICAgcmV0dXJuIG1fcGFnZSAmJiBtX2hhc0N1cnJlbnRJbmRleCA/IG1fZW50cmllc1ttX2N1
cnJlbnRJbmRleF0uZ2V0KCkgOiAwOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJC
YWNrRm9yd2FyZExpc3Q6OmJhY2tJdGVtKCkKIHsKICAgICBBU1NFUlQoIW1faGFzQ3VycmVudElu
ZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICByZXR1cm4g
bV9oYXNDdXJyZW50SW5kZXggJiYgbV9jdXJyZW50SW5kZXggPyBtX2VudHJpZXNbbV9jdXJyZW50
SW5kZXggLSAxXS5nZXQoKSA6IDA7CisgICAgcmV0dXJuIG1fcGFnZSAmJiBtX2hhc0N1cnJlbnRJ
bmRleCAmJiBtX2N1cnJlbnRJbmRleCA/IG1fZW50cmllc1ttX2N1cnJlbnRJbmRleCAtIDFdLmdl
dCgpIDogMDsKIH0KIAogV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0
Ojpmb3J3YXJkSXRlbSgpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJbmRleCB8fCBtX2N1
cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCi0gICAgcmV0dXJuIG1faGFzQ3VycmVu
dEluZGV4ICYmIG1fZW50cmllcy5zaXplKCkgJiYgbV9jdXJyZW50SW5kZXggPCBtX2VudHJpZXMu
c2l6ZSgpIC0gMSA/IG1fZW50cmllc1ttX2N1cnJlbnRJbmRleCArIDFdLmdldCgpIDogMDsKKyAg
ICByZXR1cm4gbV9wYWdlICYmIG1faGFzQ3VycmVudEluZGV4ICYmIG1fZW50cmllcy5zaXplKCkg
JiYgbV9jdXJyZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpIC0gMSA/IG1fZW50cmllc1ttX2N1
cnJlbnRJbmRleCArIDFdLmdldCgpIDogMDsKIH0KIAogV2ViQmFja0ZvcndhcmRMaXN0SXRlbSog
V2ViQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleChpbnQgaW5kZXgpCiB7CiAgICAgQVNTRVJU
KCFtX2hhc0N1cnJlbnRJbmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkp
OwogCi0gICAgaWYgKCFtX2hhc0N1cnJlbnRJbmRleCkKKyAgICBpZiAoIW1faGFzQ3VycmVudElu
ZGV4IHx8ICFtX3BhZ2UpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIERvIHJhbmdl
IGNoZWNrcyB3aXRob3V0IGRvaW5nIG1hdGggb24gaW5kZXggdG8gYXZvaWQgb3ZlcmZsb3cuCkBA
IC0xNzIsMjAgKzE5MCwyMyBAQCBpbnQgV2ViQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdENvdW50
KCkKIHsKICAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwg
bV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICByZXR1cm4gIW1faGFzQ3VycmVudEluZGV4ID8gMCA6
IG1fY3VycmVudEluZGV4OworICAgIHJldHVybiBtX3BhZ2UgJiYgbV9oYXNDdXJyZW50SW5kZXgg
PyBtX2N1cnJlbnRJbmRleCA6IDA7CiB9CiAKIGludCBXZWJCYWNrRm9yd2FyZExpc3Q6OmZvcndh
cmRMaXN0Q291bnQoKQogewogICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXggfHwgbV9jdXJy
ZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsKIAotICAgIHJldHVybiAhbV9oYXNDdXJyZW50
SW5kZXggPyAwIDogc3RhdGljX2Nhc3Q8aW50PihtX2VudHJpZXMuc2l6ZSgpKSAtIChtX2N1cnJl
bnRJbmRleCArIDEpOworICAgIHJldHVybiBtX3BhZ2UgJiYgbV9oYXNDdXJyZW50SW5kZXggPyBt
X2VudHJpZXMuc2l6ZSgpIC0gKG1fY3VycmVudEluZGV4ICsgMSkgOiAwOwogfQogCiBQYXNzUmVm
UHRyPEltbXV0YWJsZUFycmF5PiBXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0QXNJbW11dGFi
bGVBcnJheVdpdGhMaW1pdCh1bnNpZ25lZCBsaW1pdCkKIHsKICAgICBBU1NFUlQoIW1faGFzQ3Vy
cmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKKyAgICBp
ZiAoIW1fcGFnZSB8fCAhbV9oYXNDdXJyZW50SW5kZXgpCisgICAgICAgIHJldHVybiBJbW11dGFi
bGVBcnJheTo6Y3JlYXRlKCk7CisKICAgICB1bnNpZ25lZCBiYWNrTGlzdFNpemUgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oYmFja0xpc3RDb3VudCgpKTsKICAgICB1bnNpZ25lZCBzaXplID0gc3Rk
OjptaW4oYmFja0xpc3RTaXplLCBsaW1pdCk7CiAgICAgaWYgKCFzaXplKQpAQCAtMTk1LDggKzIx
NiwxMCBAQCBQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBXZWJCYWNrRm9yd2FyZExpc3Q6OmJh
Y2tMaXN0QXNJbW11dGFibGVBcnJheVdpdGhMaW1pdAogICAgIHZlY3Rvci5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNpemUpOwogCiAgICAgQVNTRVJUKGJhY2tMaXN0U2l6ZSA+PSBzaXplKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBiYWNrTGlzdFNpemUgLSBzaXplOyBpIDwgYmFja0xpc3RTaXpl
OyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gYmFja0xpc3RTaXplIC0gc2l6ZTsgaSA8IGJh
Y2tMaXN0U2l6ZTsgKytpKSB7CisgICAgICAgIEFTU0VSVChtX2VudHJpZXNbaV0pOwogICAgICAg
ICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKG1fZW50cmllc1tpXS5nZXQoKSk7CisgICAgfQogCiAg
ICAgcmV0dXJuIEltbXV0YWJsZUFycmF5OjphZG9wdCh2ZWN0b3IpOwogfQpAQCAtMjA1LDYgKzIy
OCw5IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlQXJyYXk+IFdlYkJhY2tGb3J3YXJkTGlzdDo6Zm9y
d2FyZExpc3RBc0ltbXV0YWJsZUFycmF5V2l0aExpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0N1cnJl
bnRJbmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCisgICAgaWYg
KCFtX3BhZ2UgfHwgIW1faGFzQ3VycmVudEluZGV4KQorICAgICAgICByZXR1cm4gSW1tdXRhYmxl
QXJyYXk6OmNyZWF0ZSgpOworCiAgICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWluKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihmb3J3YXJkTGlzdENvdW50KCkpLCBsaW1pdCk7CiAgICAgaWYgKCFzaXpl
KQogICAgICAgICByZXR1cm4gSW1tdXRhYmxlQXJyYXk6OmNyZWF0ZSgpOwpAQCAtMjE0LDggKzI0
MCwxMCBAQCBQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBXZWJCYWNrRm9yd2FyZExpc3Q6OmZv
cndhcmRMaXN0QXNJbW11dGFibGVBcnJheVdpdGhMaQogCiAgICAgdW5zaWduZWQgbGFzdCA9IG1f
Y3VycmVudEluZGV4ICsgc2l6ZTsKICAgICBBU1NFUlQobGFzdCA8IG1fZW50cmllcy5zaXplKCkp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fY3VycmVudEluZGV4ICsgMTsgaSA8PSBsYXN0OyAr
K2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9jdXJyZW50SW5kZXggKyAxOyBpIDw9IGxhc3Q7
ICsraSkgeworICAgICAgICBBU1NFUlQobV9lbnRyaWVzW2ldKTsKICAgICAgICAgdmVjdG9yLnVu
Y2hlY2tlZEFwcGVuZChtX2VudHJpZXNbaV0uZ2V0KCkpOworICAgIH0KIAogICAgIHJldHVybiBJ
bW11dGFibGVBcnJheTo6YWRvcHQodmVjdG9yKTsKIH0KQEAgLTIyNSwyMiArMjUzLDQ0IEBAIHZv
aWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJ
bmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCiAgICAgc2l6ZV90
IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGlmIChzaXplIDw9IDEpCisgICAgaWYgKCFt
X3BhZ2UgfHwgc2l6ZSA8PSAxKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50SXRlbSgpOworICAg
IFZlY3RvcjxSZWZQdHI8QVBJT2JqZWN0PiA+IHJlbW92ZWRJdGVtczsKIAotICAgIGlmIChtX3Bh
Z2UpIHsKKyAgICBpZiAoIWN1cnJlbnRJdGVtKSB7CisgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5
IGV2ZXIgaGF2ZSBubyBjdXJyZW50IGl0ZW0gaWYgd2UgYWxzbyBoYXZlIG5vIGN1cnJlbnQgaXRl
bSBpbmRleC4KKyAgICAgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJbmRleCk7CisgICAgICAgIC8v
IEFuZCBpZiB0aGF0J3MgdGhlIGNhc2Ugd2Ugc2hvdWxkIGFsc28gbm90IGhhdmUgYW55IGVudHJp
ZXMuCisgICAgICAgIEFTU0VSVChtX2VudHJpZXMuaXNFbXB0eSgpKTsKKworICAgICAgICAvLyBC
dXQganVzdCBpbiBjYXNlIGl0IGRvZXMgaGFwcGVuIGluIHByYWN0aWNlIHdlIHNob3VsZCBnZXQg
YmFjayBpbiB0byBhIGNvbnNpc3RlbnQgc3RhdGUgbm93LgogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fZW50cmllc1tpXSAhPSBj
dXJyZW50SXRlbSkKLSAgICAgICAgICAgICAgICBtX3BhZ2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0
ZW0obV9lbnRyaWVzW2ldLT5pdGVtSUQoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9lbnRyaWVz
W2ldKTsKKyAgICAgICAgICAgIGlmICghbV9lbnRyaWVzW2ldKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBtX3BhZ2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZW0obV9l
bnRyaWVzW2ldLT5pdGVtSUQoKSk7CisgICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1f
ZW50cmllc1tpXS5yZWxlYXNlKCkpOwogICAgICAgICB9CisKKyAgICAgICAgbV9lbnRyaWVzLmNs
ZWFyKCk7CisgICAgICAgIG1faGFzQ3VycmVudEluZGV4ID0gZmFsc2U7CisgICAgICAgIG1fcGFn
ZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KDAsICZyZW1vdmVkSXRlbXMpOworCisgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPEFQSU9iamVjdD4gPiByZW1vdmVk
SXRlbXM7Ci0gICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVDYXBhY2l0eShtX2VudHJpZXMuc2l6ZSgp
IC0gMSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJpZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKGkgIT0gbV9jdXJyZW50SW5kZXgpCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKG1fZW50cmllc1tpXSk7CisgICAg
ICAgIGlmIChtX2VudHJpZXNbaV0gJiYgbV9lbnRyaWVzW2ldICE9IGN1cnJlbnRJdGVtKQorICAg
ICAgICAgICAgbV9wYWdlLT5iYWNrRm9yd2FyZFJlbW92ZWRJdGVtKG1fZW50cmllc1tpXS0+aXRl
bUlEKCkpOworICAgIH0KKworICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSAt
IDEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlm
IChpICE9IG1fY3VycmVudEluZGV4ICYmIG1faGFzQ3VycmVudEluZGV4ICYmIG1fZW50cmllc1tp
XSkKICAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzW2ldLnJlbGVhc2Uo
KSk7CiAgICAgfQogCkBAIC0yNTQsOCArMzA0LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6
OmNsZWFyKCkKICAgICAgICAgbV9oYXNDdXJyZW50SW5kZXggPSBmYWxzZTsKICAgICB9CiAKLSAg
ICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCgw
LCAmcmVtb3ZlZEl0ZW1zKTsKKyAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCgw
LCAmcmVtb3ZlZEl0ZW1zKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmgKaW5kZXggOTdiZDJhMy4uMTZh
NTYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJk
TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3Qu
aApAQCAtODAsNiArODAsOCBAQCBwdWJsaWM6CiAjaWYgVVNFKENGKQogICAgIENGRGljdGlvbmFy
eVJlZiBjcmVhdGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihXZWJQYWdlUHJveHk6OldlYlBh
Z2VQcm94eVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KSBjb25zdDsK
ICAgICBib29sIHJlc3RvcmVGcm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9u
YXJ5UmVmKTsKKyAgICBib29sIHJlc3RvcmVGcm9tVjBDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlv
bihDRkRpY3Rpb25hcnlSZWYpOworICAgIGJvb2wgcmVzdG9yZUZyb21WMUNGRGljdGlvbmFyeVJl
cHJlc2VudGF0aW9uKENGRGljdGlvbmFyeVJlZik7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3Bw
CmluZGV4IGI0ODg1MjIuLjY0ZWI5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNiArNDQs
MTAgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlV2ViQmFja0ZvcndhcmRJdGVtSUQoKQogICAg
IHJldHVybiB1bmlxdWVIaXN0b3J5SXRlbUlEOwogfQogCitzdGF0aWMgQ0ZJbmRleCBjdXJyZW50
VmVyc2lvbiA9IDE7CitERUZJTkVfU1RBVElDX0dFVFRFUihDRk51bWJlclJlZiwgU2Vzc2lvbkhp
c3RvcnlDdXJyZW50VmVyc2lvbiwgKENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckNGSW5kZXhU
eXBlLCAmY3VycmVudFZlcnNpb24pKSk7CisKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5n
UmVmLCBTZXNzaW9uSGlzdG9yeVZlcnNpb25LZXksIChDRlNUUigiU2Vzc2lvbkhpc3RvcnlWZXJz
aW9uIikpKTsKIERFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9uSGlzdG9y
eUN1cnJlbnRJbmRleEtleSwgKENGU1RSKCJTZXNzaW9uSGlzdG9yeUN1cnJlbnRJbmRleCIpKSk7
CiBERUZJTkVfU1RBVElDX0dFVFRFUihDRlN0cmluZ1JlZiwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVz
S2V5LCAoQ0ZTVFIoIlNlc3Npb25IaXN0b3J5RW50cmllcyIpKSk7CiBERUZJTkVfU1RBVElDX0dF
VFRFUihDRlN0cmluZ1JlZiwgU2Vzc2lvbkhpc3RvcnlFbnRyeVRpdGxlS2V5LCAoQ0ZTVFIoIlNl
c3Npb25IaXN0b3J5RW50cnlUaXRsZSIpKSk7CkBAIC01MSwyMyArNTUsNDEgQEAgREVGSU5FX1NU
QVRJQ19HRVRURVIoQ0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5RW50cnlVUkxLZXksIChDRlNU
UigiU2Vzc2lvbkhpc3QKIERFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9u
SGlzdG9yeUVudHJ5T3JpZ2luYWxVUkxLZXksIChDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyeU9y
aWdpbmFsVVJMIikpKTsKIERFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9u
SGlzdG9yeUVudHJ5RGF0YUtleSwgKENGU1RSKCJTZXNzaW9uSGlzdG9yeUVudHJ5RGF0YSIpKSk7
CiAKK3N0YXRpYyBib29sIGV4dHJhY3RCYWNrRm9yd2FyZExpc3RFbnRyaWVzRnJvbUFycmF5KENG
QXJyYXlSZWYsIEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0b3ImKTsKKworc3RhdGljIENGRGljdGlv
bmFyeVJlZiBjcmVhdGVFbXB0eVNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSgpCit7CisgICAgc3Rh
dGljIGNvbnN0IHZvaWQqIGtleXNbMV0gPSB7IFNlc3Npb25IaXN0b3J5VmVyc2lvbktleSgpIH07
CisgICAgc3RhdGljIGNvbnN0IHZvaWQqIHZhbHVlc1sxXSA9IHsgU2Vzc2lvbkhpc3RvcnlDdXJy
ZW50VmVyc2lvbigpIH07CisKKyAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMs
IHZhbHVlcywgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcyk7Cit9CisKIENGRGljdGlvbmFyeVJlZiBXZWJCYWNrRm9yd2Fy
ZExpc3Q6OmNyZWF0ZUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKFdlYlBhZ2VQcm94eTo6V2Vi
UGFnZVByb3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2sgZmlsdGVyLCB2b2lkKiBjb250ZXh0
KSBjb25zdAogewogICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXggfHwgbV9jdXJyZW50SW5k
ZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsKIAorICAgIGlmICghbV9oYXNDdXJyZW50SW5kZXgpIHsK
KyAgICAgICAgLy8gV2UgcmVwcmVzZW50IGhhdmluZyBubyBjdXJyZW50IGluZGV4IGJ5IHdyaXRp
bmcgb3V0IGFuIGVtcHR5IGRpY3Rpb25hcnkgKGJlc2lkZXMgdGhlIHZlcnNpb24pLgorICAgICAg
ICByZXR1cm4gY3JlYXRlRW1wdHlTZXNzaW9uSGlzdG9yeURpY3Rpb25hcnkoKTsKKyAgICB9CisK
ICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGVudHJpZXMoQWRvcHRDRiwgQ0ZBcnJh
eUNyZWF0ZU11dGFibGUoMCwgbV9lbnRyaWVzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNr
cykpOwogCiAgICAgLy8gV2UgbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGluZGV4IHRv
IGFjY291bnQgZm9yIGVudHJpZXMgdGhhdCBhcmUgZmlsdGVyZWQgYnkgdGhlIGNhbGxiYWNrLgog
ICAgIENGSW5kZXggY3VycmVudEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAgYm9vbCBoYXND
dXJyZW50SW5kZXggPSB0cnVlOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJp
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgLy8gSWYgd2Ugc29tZWhvdyBlbmRlZCB1cCB3aXRo
IGEgbnVsbCBlbnRyeSB0aGVuIHdlIHNob3VsZCBjb25zaWRlciB0aGUgZGF0YSBpbnZhbGlkIGFu
ZCBub3Qgc2F2ZSBzZXNzaW9uIGhpc3RvcnkgYXQgYWxsLgogICAgICAgICBBU1NFUlQobV9lbnRy
aWVzW2ldKTsKLSAgICAgICAgaWYgKCFtX2VudHJpZXNbaV0pCisgICAgICAgIGlmICghbV9lbnRy
aWVzW2ldKSB7CisgICAgICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRM
aXN0IGNvbnRhaW5lZCBhIG51bGwgZW50cnkgYXQgaW5kZXggJWx1IiwgaSk7CiAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcih0
b0FQSShtX3BhZ2UpLCBXS1BhZ2VHZXRTZXNzaW9uSGlzdG9yeVVSTFZhbHVlVHlwZSgpLCB0b1VS
TFJlZihtX2VudHJpZXNbaV0tPm9yaWdpbmFsVVJMKCkuaW1wbCgpKSwgY29udGV4dCkpIHsKLSAg
ICAgICAgICAgIGlmIChpIDw9IHN0YXRpY19jYXN0PHNpemVfdD4obV9jdXJyZW50SW5kZXgpKQor
ICAgICAgICAgICAgaWYgKGkgPD0gbV9jdXJyZW50SW5kZXgpCiAgICAgICAgICAgICAgICAgY3Vy
cmVudEluZGV4LS07CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtODcsMjYg
KzEwOSw2MiBAQCBDRkRpY3Rpb25hcnlSZWYgV2ViQmFja0ZvcndhcmRMaXN0OjpjcmVhdGVDRkRp
Y3Rpb25hcnlSZXByZXNlbnRhdGlvbihXZWJQYWdlUHJveAogICAgICAgICBDRkFycmF5QXBwZW5k
VmFsdWUoZW50cmllcy5nZXQoKSwgZW50cnlEaWN0aW9uYXJ5LmdldCgpKTsKICAgICB9CiAgICAg
ICAgIAotICAgIC8vIElmIGFsbCBpdGVtcyBiZWZvcmUgYW5kIGluY2x1ZGluZyB0aGUgY3VycmVu
dCBpdGVtIHdlcmUgZmlsdGVyZWQgdGhlbiBjdXJyZW50SW5kZXggd2lsbCBiZSAtMS4KLSAgICAv
LyBBc3N1bWluZyB3ZSBkaWRuJ3Qgc3RhcnQgb3V0IHdpdGggTm9DdXJyZW50SXRlbUluZGV4LCB3
ZSBzaG91bGQgc3RvcmUgImN1cnJlbnQiIHRvIHBvaW50IGF0IHRoZSBmaXJzdCBpdGVtLgotICAg
IGlmIChjdXJyZW50SW5kZXggPT0gLTEgJiYgbV9oYXNDdXJyZW50SW5kZXggJiYgQ0ZBcnJheUdl
dENvdW50KGVudHJpZXMuZ2V0KCkpKQotICAgICAgICBjdXJyZW50SW5kZXggPSAwOwotCi0gICAg
Ly8gRklYTUU6IFdlJ3JlIHJlbHlpbmcgb24gY3VycmVudEluZGV4ID09IC0xIHRvIG1lYW4gdGhl
IGV4YWN0IHNhbWUgdGhpbmcgYXMgTm9DdXJyZW50SXRlbUluZGV4IChVSU5UX01BWCkgaW4gdW5z
aWduZWQgZm9ybS4KLSAgICAvLyBUaGF0IHNlZW1zIGltcGxpY2l0IGFuZCBmcmFnaWxlIGFuZCB3
ZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkgb2YgcmVwcmVzZW50aW5nIHRoZSBOb0N1cnJlbnRJ
dGVtSW5kZXggY2FzZS4KLSAgICBpZiAoIW1faGFzQ3VycmVudEluZGV4IHx8ICFDRkFycmF5R2V0
Q291bnQoZW50cmllcy5nZXQoKSkpCi0gICAgICAgIGN1cnJlbnRJbmRleCA9IC0xOworICAgIEFT
U0VSVChjdXJyZW50SW5kZXggPT0gLTEgfHwgKGN1cnJlbnRJbmRleCA+IC0xICYmIGN1cnJlbnRJ
bmRleCA8IENGQXJyYXlHZXRDb3VudChlbnRyaWVzLmdldCgpKSkpOworICAgIGlmIChjdXJyZW50
SW5kZXggPCAtMSB8fCAoY3VycmVudEluZGV4ID4gLTEgJiYgY3VycmVudEluZGV4ID49IENGQXJy
YXlHZXRDb3VudChlbnRyaWVzLmdldCgpKSkpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwg
IkZpbHRlcmluZyBlbnRyaWVzIHRvIGJlIHNhdmVkIHJlc3VsdGVkIGluIGFuIGluY29uc2lzdGVu
dCBzdGF0ZSB0aGF0IHdlIGNhbm5vdCByZXByZXNlbnQiKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCi0gICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBjdXJyZW50SW5kZXhOdW1iZXIoQWRv
cHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyQ0ZJbmRleFR5cGUsICZjdXJyZW50SW5k
ZXgpKTsKKyAgICAvLyBJZiB3ZSBoYXZlIGFuIGluZGV4IGFuZCBhbGwgaXRlbXMgYmVmb3JlIGFu
ZCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgaXRlbSB3ZXJlIGZpbHRlcmVkIHRoZW4gY3VycmVudElu
ZGV4IHdpbGwgYmUgLTEuCisgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBuZXcgY3VycmVudCBpbmRl
eCBzaG91bGQgcG9pbnQgYXQgdGhlIGZpcnN0IGl0ZW0uCisgICAgLy8gSXQncyBhbHNvIHBvc3Np
YmxlIHRoYXQgYWxsIGl0ZW1zIHdlcmUgZmlsdGVyZWQgc28gd2Ugc2hvdWxkIHJlcHJlc2VudCBu
b3QgaGF2aW5nIGEgY3VycmVudCBpbmRleC4KKyAgICBpZiAoY3VycmVudEluZGV4ID09IC0xKSB7
CisgICAgICAgIGlmIChDRkFycmF5R2V0Q291bnQoZW50cmllcy5nZXQoKSkpCisgICAgICAgICAg
ICBjdXJyZW50SW5kZXggPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYXNDdXJyZW50
SW5kZXggPSBmYWxzZTsKKyAgICB9CiAKLSAgICBjb25zdCB2b2lkKiBrZXlzWzJdID0geyBTZXNz
aW9uSGlzdG9yeUN1cnJlbnRJbmRleEtleSgpLCBTZXNzaW9uSGlzdG9yeUVudHJpZXNLZXkoKSB9
OwotICAgIGNvbnN0IHZvaWQqIHZhbHVlc1syXSA9IHsgY3VycmVudEluZGV4TnVtYmVyLmdldCgp
LCBlbnRyaWVzLmdldCgpIH07CisgICAgaWYgKGhhc0N1cnJlbnRJbmRleCkgeworICAgICAgICBS
ZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IGN1cnJlbnRJbmRleE51bWJlcihBZG9wdENGLCBDRk51bWJl
ckNyZWF0ZSgwLCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJmN1cnJlbnRJbmRleCkpOworICAgICAg
ICBjb25zdCB2b2lkKiBrZXlzWzNdID0geyBTZXNzaW9uSGlzdG9yeVZlcnNpb25LZXkoKSwgU2Vz
c2lvbkhpc3RvcnlDdXJyZW50SW5kZXhLZXkoKSwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5KCkg
fTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFsdWVzWzNdID0geyBTZXNzaW9uSGlzdG9yeUN1cnJl
bnRWZXJzaW9uKCksIGN1cnJlbnRJbmRleE51bWJlci5nZXQoKSwgZW50cmllcy5nZXQoKSB9Owor
IAorICAgICAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgMywg
JmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcyk7CisgICAgfQogCi0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNyZWF0ZSgwLCBrZXlz
LCB2YWx1ZXMsIDIsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgIC8vIFdlIHJlcHJlc2VudCBoYXZpbmcgbm8gY3Vy
cmVudCBpbmRleCBieSB3cml0aW5nIG91dCBhbiBlbXB0eSBkaWN0aW9uYXJ5IChiZXNpZGVzIHRo
ZSB2ZXJzaW9uKS4KKyAgICByZXR1cm4gY3JlYXRlRW1wdHlTZXNzaW9uSGlzdG9yeURpY3Rpb25h
cnkoKTsKIH0KIAogYm9vbCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlc3RvcmVGcm9tQ0ZEaWN0aW9u
YXJ5UmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnkpCiB7CisgICAgQ0ZO
dW1iZXJSZWYgY2ZWZXJzaW9uID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGRp
Y3Rpb25hcnksIFNlc3Npb25IaXN0b3J5VmVyc2lvbktleSgpKTsKKyAgICBpZiAoIWNmVmVyc2lv
bikgeworICAgICAgICAvLyB2MCBzZXNzaW9uIGhpc3RvcnkgZGljdGlvbmFyaWVzIGRpZCBub3Qg
Y29udGFpbiB2ZXJzaW9uaW5nCisgICAgICAgIHJldHVybiByZXN0b3JlRnJvbVYwQ0ZEaWN0aW9u
YXJ5UmVwcmVzZW50YXRpb24oZGljdGlvbmFyeSk7CisgICAgfQorICAgIAorICAgIGlmIChDRkdl
dFR5cGVJRChjZlZlcnNpb24pICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgTE9H
KFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0
aW9uIGNvbnRhaW5zIGEgdmVyc2lvbiB0aGF0IGlzIG5vdCBhIG51bWJlciIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ0ZJbmRleCB2ZXJzaW9uOworICAgIGlmICghQ0ZO
dW1iZXJHZXRWYWx1ZShjZlZlcnNpb24sIGtDRk51bWJlckNGSW5kZXhUeXBlLCAmdmVyc2lvbikp
IHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9u
YXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGhhdmUgYSBjb3JyZWN0bHkgdHlwZWQgY3VycmVu
dCB2ZXJzaW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYg
KHZlcnNpb24gPT0gMSkKKyAgICAgICAgcmV0dXJuIHJlc3RvcmVGcm9tVjFDRkRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbihkaWN0aW9uYXJ5KTsKKyAgICAKKyAgICBMT0coU2Vzc2lvblN0YXRlLCAi
V2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gaGFzIGFuIGludmFs
aWQgY3VycmVudCB2ZXJzaW9uICglbGQpIiwgdmVyc2lvbik7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21WMENGRGljdGlvbmFyeVJl
cHJlc2VudGF0aW9uKENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5KQorewogICAgIENGTnVtYmVy
UmVmIGNmSW5kZXggPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFy
eSwgU2Vzc2lvbkhpc3RvcnlDdXJyZW50SW5kZXhLZXkoKSk7CiAgICAgaWYgKCFjZkluZGV4IHx8
IENGR2V0VHlwZUlEKGNmSW5kZXgpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKICAgICAgICAg
TE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2Vu
dGF0aW9uIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjdXJyZW50IGluZGV4Iik7CkBAIC0xMTUsMTIg
KzE3MywxMiBAQCBib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25h
cnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgZAogCiAgICAgQ0ZJbmRleCBjdXJyZW50
Q0ZJbmRleDsKICAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUoY2ZJbmRleCwga0NGTnVtYmVyQ0ZJ
bmRleFR5cGUsICZjdXJyZW50Q0ZJbmRleCkpIHsKLSAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwg
IldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGhh
dmUgYSB2YWxpZCBpbnRlZ2VyIGN1cnJlbnQgaW5kZXgiKTsKKyAgICAgICAgTE9HKFNlc3Npb25T
dGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMg
bm90IGhhdmUgYSBjb3JyZWN0bHkgdHlwZWQgY3VycmVudCBpbmRleCIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIGlmIChjdXJyZW50Q0ZJbmRleCA8IC0xKSB7Ci0g
ICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSBy
ZXByZXNlbnRhdGlvbiBjb250YWlucyBhIG5lZ2F0aXZlIGN1cnJlbnQgaW5kZXggdGhhdCBpcyBi
b2d1cyAoJWxkKSIsIGN1cnJlbnRDRkluZGV4KTsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwg
IldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGNvbnRhaW5zIGFu
IHVuZXhwZWN0ZWQgbmVnYXRpdmUgY3VycmVudCBpbmRleCAoJWxkKSIsIGN1cnJlbnRDRkluZGV4
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTMxLDIzICsxODksOTQgQEAg
Ym9vbCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlc3RvcmVGcm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50
YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIGQKICAgICB9CiAKICAgICBDRkluZGV4IHNpemUgPSBDRkFy
cmF5R2V0Q291bnQoY2ZFbnRyaWVzKTsKLSAgICBpZiAoY3VycmVudENGSW5kZXggPCAtMSB8fCBj
dXJyZW50Q0ZJbmRleCA+PSBzaXplICkgeworICAgIGlmIChzaXplIDwgMCB8fCBjdXJyZW50Q0ZJ
bmRleCA+PSBzaXplKSB7CiAgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2Fy
ZExpc3QgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBjb250YWlucyBhbiBpbnZhbGlkIGN1cnJl
bnQgaW5kZXggKCVsZCkgZm9yIHRoZSBudW1iZXIgb2YgZW50cmllcyAoJWxkKSIsIGN1cnJlbnRD
RkluZGV4LCBzaXplKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIEZJ
WE1FOiBXZSdyZSByZWx5aW5nIG9uIGN1cnJlbnRJbmRleCA9PSAtMSB0byBtZWFuIHRoZSBleGFj
dCBzYW1lIHRoaW5nIGFzIE5vQ3VycmVudEl0ZW1JbmRleCAoVUlOVF9NQVgpIGluIHVuc2lnbmVk
IGZvcm0uCi0gICAgLy8gVGhhdCBzZWVtcyBpbXBsaWNpdCBhbmQgZnJhZ2lsZSBhbmQgd2Ugc2hv
dWxkIGZpbmQgYSBiZXR0ZXIgd2F5IG9mIHJlcHJlc2VudGluZyB0aGUgTm9DdXJyZW50SXRlbUlu
ZGV4IGNhc2UuCi0gICAgYm9vbCBoYXNDdXJyZW50SW5kZXggPSBjdXJyZW50Q0ZJbmRleCA+IC0x
OwotICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IGhhc0N1cnJlbnRJbmRleCA/IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjdXJyZW50Q0ZJbmRleCkgOiAwOworICAgIC8vIFZlcnNpb24gMCBzZXNz
aW9uIGhpc3RvcnkgcmVsaWVkIG9uIGN1cnJlbnRJbmRleCA9PSAtMSB0byByZXByZXNlbnQgdGhl
IHNhbWUgdGhpbmcgYXMgbm90IGhhdmluZyBhIGN1cnJlbnQgaW5kZXguCisgICAgYm9vbCBoYXND
dXJyZW50SW5kZXggPSBjdXJyZW50Q0ZJbmRleCAhPSAtMTsKIAogICAgIGlmICghaGFzQ3VycmVu
dEluZGV4ICYmIHNpemUpIHsKLSAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3
YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIHNheXMgdGhlcmUgaXMgbm8gY3VycmVu
dCBpdGVtIGluZGV4LCBidXQgdGhlcmUgaXMgYSBsaXN0IG9mICVsZCBlbnRyaWVzIC0gdGhpcyBp
cyBib2d1cyIsIHNpemUpOworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0Zvcndh
cmRMaXN0IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gc2F5cyB0aGVyZSBpcyBubyBjdXJyZW50
IGluZGV4LCBidXQgdGhlcmUgaXMgYSBsaXN0IG9mICVsZCBlbnRyaWVzIiwgc2l6ZSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgQmFja0ZvcndhcmRMaXN0SXRlbVZl
Y3RvciBuZXdFbnRyaWVzOwotICAgIG5ld0VudHJpZXMucmVzZXJ2ZUNhcGFjaXR5KHNpemUpOwor
ICAgIEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0b3IgZW50cmllczsKKyAgICBpZiAoIWV4dHJhY3RC
YWNrRm9yd2FyZExpc3RFbnRyaWVzRnJvbUFycmF5KGNmRW50cmllcywgZW50cmllcykpIHsKKyAg
ICAgICAgLy8gZXh0cmFjdEJhY2tGb3J3YXJkTGlzdEVudHJpZXNGcm9tQXJyYXkgaGFzIGFscmVh
ZHkgbG9nZ2VkIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlLgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKGVudHJpZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzaXplKSk7CisgICAgCisgICAgbV9oYXNDdXJyZW50SW5kZXggPSBoYXNDdXJy
ZW50SW5kZXg7CisgICAgbV9jdXJyZW50SW5kZXggPSBtX2hhc0N1cnJlbnRJbmRleCA/IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihjdXJyZW50Q0ZJbmRleCkgOiAwOworICAgIG1fZW50cmllcyA9IGVu
dHJpZXM7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJCYWNrRm9yd2FyZExpc3Q6
OnJlc3RvcmVGcm9tVjFDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYg
ZGljdGlvbmFyeSkKK3sKKyAgICBDRk51bWJlclJlZiBjZkluZGV4ID0gKENGTnVtYmVyUmVmKUNG
RGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIFNlc3Npb25IaXN0b3J5Q3VycmVudEluZGV4
S2V5KCkpOworICAgIGlmICghY2ZJbmRleCkgeworICAgICAgICAvLyBObyBjdXJyZW50IGluZGV4
IG1lYW5zIHRoZSBkaWN0aW9uYXJ5IHJlcHJlc2VudHMgYW4gZW1wdHkgc2Vzc2lvbi4KKyAgICAg
ICAgbV9oYXNDdXJyZW50SW5kZXggPSBmYWxzZTsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSAw
OworICAgICAgICBtX2VudHJpZXMuY2xlYXIoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBpZiAoQ0ZHZXRUeXBlSUQoY2ZJbmRleCkgIT0gQ0ZOdW1iZXJHZXRUeXBlSUQo
KSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rp
b25hcnkgcmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGN1cnJlbnQgaW5kZXgi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIENGSW5kZXggY3VycmVudENG
SW5kZXg7CisgICAgaWYgKCFDRk51bWJlckdldFZhbHVlKGNmSW5kZXgsIGtDRk51bWJlckNGSW5k
ZXhUeXBlLCAmY3VycmVudENGSW5kZXgpKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJX
ZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBoYXZl
IGEgY29ycmVjdGx5IHR5cGVkIGN1cnJlbnQgaW5kZXgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICBpZiAoY3VycmVudENGSW5kZXggPCAwKSB7CisgICAgICAgIExP
RyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNlbnRh
dGlvbiBjb250YWlucyBhbiB1bmV4cGVjdGVkIG5lZ2F0aXZlIGN1cnJlbnQgaW5kZXggKCVsZCki
LCBjdXJyZW50Q0ZJbmRleCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBD
RkFycmF5UmVmIGNmRW50cmllcyA9IChDRkFycmF5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGRp
Y3Rpb25hcnksIFNlc3Npb25IaXN0b3J5RW50cmllc0tleSgpKTsKKyAgICBpZiAoIWNmRW50cmll
cyB8fCBDRkdldFR5cGVJRChjZkVudHJpZXMpICE9IENGQXJyYXlHZXRUeXBlSUQoKSkgeworICAg
ICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkgcmVw
cmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgZW50cmllcyIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ0ZJbmRleCBzaXplID0gQ0ZBcnJheUdl
dENvdW50KGNmRW50cmllcyk7CisgICAgaWYgKGN1cnJlbnRDRkluZGV4ID49IHNpemUpIHsKKyAg
ICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJl
cHJlc2VudGF0aW9uIGNvbnRhaW5zIGFuIGludmFsaWQgY3VycmVudCBpbmRleCAoJWxkKSBmb3Ig
dGhlIG51bWJlciBvZiBlbnRyaWVzICglbGQpIiwgY3VycmVudENGSW5kZXgsIHNpemUpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIEJhY2tGb3J3YXJkTGlzdEl0ZW1W
ZWN0b3IgZW50cmllczsKKyAgICBpZiAoIWV4dHJhY3RCYWNrRm9yd2FyZExpc3RFbnRyaWVzRnJv
bUFycmF5KGNmRW50cmllcywgZW50cmllcykpIHsKKyAgICAgICAgLy8gZXh0cmFjdEJhY2tGb3J3
YXJkTGlzdEVudHJpZXNGcm9tQXJyYXkgaGFzIGFscmVhZHkgbG9nZ2VkIHRoZSBhcHByb3ByaWF0
ZSBlcnJvciBtZXNzYWdlLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IEFTU0VSVChlbnRyaWVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSkpOwor
ICAgIAorICAgIG1faGFzQ3VycmVudEluZGV4ID0gdHJ1ZTsKKyAgICBtX2N1cnJlbnRJbmRleCA9
IHN0YXRpY19jYXN0PHVpbnQzMl90PihjdXJyZW50Q0ZJbmRleCk7CisgICAgbV9lbnRyaWVzID0g
ZW50cmllczsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBleHRyYWN0QmFj
a0ZvcndhcmRMaXN0RW50cmllc0Zyb21BcnJheShDRkFycmF5UmVmIGNmRW50cmllcywgQmFja0Zv
cndhcmRMaXN0SXRlbVZlY3RvciYgZW50cmllcykKK3sKKyAgICBDRkluZGV4IHNpemUgPSBDRkFy
cmF5R2V0Q291bnQoY2ZFbnRyaWVzKTsKKworICAgIGVudHJpZXMucmVzZXJ2ZUNhcGFjaXR5KHNp
emUpOwogICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBD
RkRpY3Rpb25hcnlSZWYgZW50cnlEaWN0aW9uYXJ5ID0gKENGRGljdGlvbmFyeVJlZilDRkFycmF5
R2V0VmFsdWVBdEluZGV4KGNmRW50cmllcywgaSk7CiAgICAgICAgIGlmICghZW50cnlEaWN0aW9u
YXJ5IHx8IENGR2V0VHlwZUlEKGVudHJ5RGljdGlvbmFyeSkgIT0gQ0ZEaWN0aW9uYXJ5R2V0VHlw
ZUlEKCkpIHsKQEAgLTE3OSwxMiArMzA4LDggQEAgYm9vbCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJl
c3RvcmVGcm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIGQKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbmV3
RW50cmllcy5hcHBlbmQoV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6Y3JlYXRlKG9yaWdpbmFsVVJM
LCBlbnRyeVVSTCwgZW50cnlUaXRsZSwgQ0ZEYXRhR2V0Qnl0ZVB0cihiYWNrRm9yd2FyZERhdGEp
LCBDRkRhdGFHZXRMZW5ndGgoYmFja0ZvcndhcmREYXRhKSwgZ2VuZXJhdGVXZWJCYWNrRm9yd2Fy
ZEl0ZW1JRCgpKSk7CisgICAgICAgIGVudHJpZXMuYXBwZW5kKFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwgZW50cnlVUkwsIGVudHJ5VGl0bGUsIENGRGF0YUdldEJ5
dGVQdHIoYmFja0ZvcndhcmREYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGJhY2tGb3J3YXJkRGF0YSks
IGdlbmVyYXRlV2ViQmFja0ZvcndhcmRJdGVtSUQoKSkpOwogICAgIH0KLSAgICAKLSAgICBtX2Vu
dHJpZXMgPSBuZXdFbnRyaWVzOwotICAgIG1faGFzQ3VycmVudEluZGV4ID0gaGFzQ3VycmVudElu
ZGV4OwotICAgIG1fY3VycmVudEluZGV4ID0gY3VycmVudEluZGV4OwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9Cg==
</data>
<flag name="review"
          id="150912"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>