<?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>70369</bug_id>
          
          <creation_ts>2011-10-18 14:50:55 -0700</creation_ts>
          <short_desc>RenderTableCell m_row and m_column should not be signed values</short_desc>
          <delta_ts>2011-10-27 18:29:19 -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>Layout and Rendering</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="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>486325</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-10-18 14:50:55 -0700</bug_when>
    <thetext>It does not make sense to have a negative column / row index (they are using -1 to indicate the initial value which could be done in another way).

This change would free 2 bits that were pretty much unused and that we could use to pack the 2 booleans. It is also a first step to remove the use of integer in the table code.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486363</commentid>
    <comment_count>1</comment_count>
      <attachid>111512</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-10-18 15:41:48 -0700</bug_when>
    <thetext>Created attachment 111512
Proposed refactoring: Switched some of the table rendering code to unsigned to match RenderTableCell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491656</commentid>
    <comment_count>2</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-10-27 10:04:48 -0700</bug_when>
    <thetext>Renaming the bug (the old one was not very explicit of the change).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491682</commentid>
    <comment_count>3</comment_count>
      <attachid>112702</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-10-27 10:20:29 -0700</bug_when>
    <thetext>Created attachment 112702
Changelog update + minor edit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491692</commentid>
    <comment_count>4</comment_count>
      <attachid>112702</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-27 10:29:20 -0700</bug_when>
    <thetext>Comment on attachment 112702
Changelog update + minor edit.

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

&gt; Source/WebCore/rendering/RenderTable.h:149
&gt; +    void splitColumn(unsigned pos, int firstSpan);

When touching a line of code like this, it’s nice to remove abbreviations like “pos”.

&gt; Source/WebCore/rendering/RenderTable.h:154
&gt; +    unsigned colToEffCol(unsigned col) const

And “col”.

&gt; Source/WebCore/rendering/RenderTableCell.h:33
&gt; +// FIXME: It is possible for these indexes to be reached for a table big enough.
&gt; +// We would need to enforce a maximal index on both rows and columns.

We should make a test case.

&gt; Source/WebCore/rendering/RenderTableCell.h:51
&gt; +    void setCol(unsigned col) { m_column = col; }

“column” instead of “col” at least for the local variable would be better

&gt; Source/WebCore/rendering/RenderTableSection.h:156
&gt; +    unsigned m_gridRows;

Not a great name for a data member that is a count. It sounds like this holds actual rows, not a count of the number of rows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491742</commentid>
    <comment_count>5</comment_count>
      <attachid>112702</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-10-27 11:15:15 -0700</bug_when>
    <thetext>Comment on attachment 112702
Changelog update + minor edit.

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

&gt;&gt; Source/WebCore/rendering/RenderTableCell.h:33
&gt;&gt; +// We would need to enforce a maximal index on both rows and columns.
&gt; 
&gt; We should make a test case.

I thought about it but it would mean constructing a table with a huge number of cells. This would likely take a huge file and a long time (or an even longer time if we construct it with JS). A unit test would work here but I don&apos;t think this is worth the effort until we implement some proper limit.

&gt;&gt; Source/WebCore/rendering/RenderTableCell.h:51
&gt;&gt; +    void setCol(unsigned col) { m_column = col; }
&gt; 
&gt; “column” instead of “col” at least for the local variable would be better

Yes, sir! All the abbreviations will be changed.

&gt;&gt; Source/WebCore/rendering/RenderTableSection.h:156
&gt;&gt; +    unsigned m_gridRows;
&gt; 
&gt; Not a great name for a data member that is a count. It sounds like this holds actual rows, not a count of the number of rows.

This member is going away in https://bugs.webkit.org/show_bug.cgi?id=70570 as it is a duplicate of the internal vector size :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491881</commentid>
    <comment_count>6</comment_count>
      <attachid>112739</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-10-27 13:38:23 -0700</bug_when>
    <thetext>Created attachment 112739
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492049</commentid>
    <comment_count>7</comment_count>
      <attachid>112739</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-27 15:57:34 -0700</bug_when>
    <thetext>Comment on attachment 112739
Patch for landing

Rejecting attachment 112739 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
bcore_rendering/Source/WebCore/rendering/RenderObject.o
  CXX(target) out/Debug/obj.target/webcore_rendering/Source/WebCore/rendering/RenderTable.o
Source/WebCore/rendering/RenderTable.cpp: In member function &apos;void WebCore::RenderTable::splitColumn(unsigned int, int)&apos;:
Source/WebCore/rendering/RenderTable.cpp:642: error: &apos;pos&apos; was not declared in this scope
make: *** [out/Debug/obj.target/webcore_rendering/Source/WebCore/rendering/RenderTable.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/10224939</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492166</commentid>
    <comment_count>8</comment_count>
      <attachid>112798</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-10-27 18:12:22 -0700</bug_when>
    <thetext>Created attachment 112798
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492180</commentid>
    <comment_count>9</comment_count>
      <attachid>112798</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-27 18:29:14 -0700</bug_when>
    <thetext>Comment on attachment 112798
Patch for landing

Clearing flags on attachment: 112798

Committed r98676: &lt;http://trac.webkit.org/changeset/98676&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492181</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-27 18:29:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111512</attachid>
            <date>2011-10-18 15:41:48 -0700</date>
            <delta_ts>2011-10-27 10:20:26 -0700</delta_ts>
            <desc>Proposed refactoring: Switched some of the table rendering code to unsigned to match RenderTableCell.</desc>
            <filename>bug-70369-20111018154147.patch</filename>
            <type>text/plain</type>
            <size>29715</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2OTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5MDk1MDNkZWJmZjgyY2Mw
ZDkyMDY1ZjIwMDBlNDQ5Nzc3ZDA1NTUxLi5iZWU5NTMwYzQ4MTBlN2VlNGY0OGFlZjA1YWZiYjY4
OWRjZjViMzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUgQEAKKzIwMTEtMTAtMTggIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVuZGVyVGFi
bGVDZWxsIG1fcm93IGFuZCBtX2NvbHVtbiBhcmUgc2lnbmVkIHZhbHVlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzNjkKKworICAgICAgICBUaGUg
Z2lzdCBvZiB0aGUgY2hhbmdlIGlzIHRvIHVwZGF0ZSByb3cgLyBjb2x1bW4gaGFuZGxpbmcgaW4g
dGhlIHRhYmxlJ3MKKyAgICAgICAgcmVuZGVyaW5nIGNvZGUgdG8gdXNlIHVuc2lnbmVkIHZhbHVl
cy4gTm90IGFsbCB0aGUgY29kZSBpcyBzd2l0Y2hlZCBvdmVyCisgICAgICAgIHRvIHVuc2lnbmVk
IGJ1dCBpdCBpcyBhIGdvb2Qgc3RhcnQuCisKKyAgICAgICAgVXNpbmcgdW5zaWduZWQgbWFrZXMg
YSBsb3QgbW9yZSBzZW5zZSB0aGF0IGFsbG93aW5nIHNvbWUgbmVnYXRpdmUgaW5kZXhlcworICAg
ICAgICB0byBjcmVlcCBpbiB0aGUgYWxnb3JpdGhtcy4gQWxzbyBpdCBlbmFibGVzIHVzIHRvICJm
cmVlIiB0aGUgdW51c2VkIHNpZ25lZAorICAgICAgICBiaXQgb24gdGhlIDIgUmVuZGVyVGFibGVD
ZWxsIGZpZWxkcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHBhY2sgMiBiaXRzIGluIGEKKyAgICAgICAg
Zm9sbG93LXVwIHBhdGNoLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVmYWN0b3Jpbmcgb25seS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlUYWJsZTo6Y2VsbEZvckNvbHVtbkFuZFJvdyk6CisgICAgICAgIFJlbW92ZWQg
MiBjYXN0cyB0byBpbnQgYXMgdGhlIGxlZnQgc2lkZSBub3cgY29tcHV0ZXMgdG8gYW4gdW5zaWdu
ZWQgdG9vLgorICAgICAgICBBZGRlZCBzb21lIEFTU0VSVCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qg
Z2V0IG5lZ2F0aXZlIHZhbHVlcyAoY29sU3BhbiAvIHJvd1NwYW4KKyAgICAgICAgYXJlIGFsd2F5
cyA+PSAxIGJ5IGRlZmluaXRpb24gYnV0IGJldHRlciB0byBiZSBzYWZlKS4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbjo6aGVhZGVyT2JqZWN0Rm9yU2VjdGlvbik6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaDoKKyAg
ICAgICAgU3dpdGNoZWQgbV9jb2x1bW5JbmRleCB0byB1bnNpZ25lZCB0byByZW1vdmUgYW55IHNp
Z25lZCAvIHVuc2lnbmVkIGNvbXBhcmlzb25zLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzcGxpdENvbHVtbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlckVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlOjpjZWxsQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNl
bGxCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNlbGxBZnRlcik6Cisg
ICAgICAgIE1vc3RseSBtZWNoYW5pY2FsIGNoYW5nZXMgdG8gYXZvaWQgc2lnbmVkIC8gdW5zaWdu
ZWQgY29tcGFyaXNvbnMgb3IgY2FzdHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpudW1FZmZDb2xzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjb2xUb0VmZkNvbCk6CisgICAgICAgIFVwZGF0ZWQg
YSBjb3VwbGUgb2YgZnVuY3Rpb25zIHRvIHVzZSBhbiB1bnNpZ25lZC4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVDZWxsOjpSZW5kZXJUYWJsZUNlbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJs
ZUNlbGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2V0Q29sKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6cm93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2Vs
bDo6c2V0Um93KToKKyAgICAgICAgVXBkYXRlZCBhZnRlciBzd2l0Y2hpbmcgdGhlIGZpZWxkcyB0
byB1bnNpZ25lZC4gQWxzbyBhZGRlZCAyIGNvbnN0YW50cworICAgICAgICB0byBjb3ZlciB0aGUg
bm90LWluaXRpYWxpemVkLXlldCB2YWx1ZSBmb3Igcm93IGFuZCBjb2x1bW4gaW5kZXhlcy4KKyAg
ICAgICAgTm90ZTogd2UgZG9uJ3QgZW5mb3JjZSB0aGF0IHlvdSBjYW4ndCByZWFjaCB0aG9zZSBp
bmRleGVzIGJ1dCBuZWl0aGVyCisgICAgICAgIGRpZCB0aGUgcHJldmlvdXMgY29kZSEKKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OmVuc3VyZVJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpzZXRDZWxsTG9naWNhbFdpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyRW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVjYWxjQ2VsbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjbGVhckdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlU2VjdGlvbjo6YXBwZW5kQ29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
U2VjdGlvbjo6c3BsaXRDb2x1bW4pOgorICAgICAgICBMb3RzIG9mIG1lY2hhbmljYWw6IHNpZ25l
ZCAtPiB1bnNpZ25lZCBjaGFuZ2VzLiBIb3dldmVyIHdlIGhhZAorICAgICAgICB0byBjaGFuZ2Ug
dGhlIGxvZ2ljIGEgYml0IGFzIGl0IGFzc3VtZWQgdGhhdCBtX2NSb3cgc3RhcnRlZCBhdAorICAg
ICAgICAtMSBhbmQgaW5jcmVhc2VkIGZyb20gdGhlcmUuIFRoZSBuZXcgbWVhbmluZyBvZiBtX2NS
b3cgaXMgdGhlCisgICAgICAgIG51bWJlciBvZiByb3dzIHNlZW4gYW5kIG1fY1JvdyAtIDEgaXMg
d2hlcmUgdG8gaW5zZXJ0IHlvdXIgbmV3CisgICAgICAgIGNlbGxzLgorCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwpOgorICAgICAgICBDaGVja2VkIHRoZSBj
YWxsZXJzIGFuZCBhbGwgaW5jcmVhc2UgbV9jUm93IGJlZm9yZSBjYWxsaW5nIHRoZSBmdW5jdGlv
bi4KKyAgICAgICAgQWRkZWQgYW4gQVNTRVJUIHRvIGNhdGNoIHVwIHdyb25nIHVzYWdlIGluIHRo
ZSBmdXR1cmUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om51bVJvd3MpOiBTd2l0Y2hlZCB0
byB1bnNpZ25lZC4KKwogMjAxMS0xMC0xNyAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBhZnRlciA5NzY5MS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmNwcAppbmRleCA2NTYxOWQwOTcxZDUwNmIwNTFjNmNhN2MzMzRhOTFmNzg0MTI5NmY3Li5jODM2
OTM2ZjRhNDA5M2QzODNkYTE1OGJlY2NjM2NkYjllZjA1ODAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCkBAIC00OTEsMjAg
KzQ5MSwyMiBAQCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBBY2Nlc3NpYmlsaXR5VGFibGU6OmNl
bGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLAogICAgICAgICAgICAgaWYgKCFjZWxs
KSB7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gZmlyc3QgdHJ5IHJvd3MK
LSAgICAgICAgICAgICAgICBmb3IgKGludCB0ZXN0Um93ID0gc2VjdGlvblNwZWNpZmljUm93LTE7
IHRlc3RSb3cgPj0gMDsgLS10ZXN0Um93KSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgdGVz
dFJvdyA9IHNlY3Rpb25TcGVjaWZpY1JvdyAtIDE7IHRlc3RSb3cgPj0gMDsgLS10ZXN0Um93KSB7
CiAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSB0YWJsZVNlY3Rpb24tPnByaW1hcnlDZWxsQXQo
dGVzdFJvdywgY29sdW1uKTsKICAgICAgICAgICAgICAgICAgICAgLy8gY2VsbCBvdmVybGFwcGVk
LiB1c2UgdGhpcyBvbmUKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwgJiYgKChjZWxsLT5y
b3coKSArIChjZWxsLT5yb3dTcGFuKCktMSkpID49IChpbnQpc2VjdGlvblNwZWNpZmljUm93KSkK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNlbGwtPnJvd1NwYW4oKSA+PSAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNlbGwgJiYgKChjZWxsLT5yb3coKSArIChjZWxsLT5yb3dTcGFu
KCkgLSAxKSkgPj0gc2VjdGlvblNwZWNpZmljUm93KSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjZWxsID0gMDsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFjZWxsKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIHRyeSBjb2xzCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHRl
c3RDb2wgPSBjb2x1bW4tMTsgdGVzdENvbCA+PSAwOyAtLXRlc3RDb2wpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgdGVzdENvbCA9IGNvbHVtbiAtIDE7IHRlc3RDb2wgPj0gMDsgLS10
ZXN0Q29sKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsID0gdGFibGVTZWN0aW9uLT5w
cmltYXJ5Q2VsbEF0KHNlY3Rpb25TcGVjaWZpY1JvdywgdGVzdENvbCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBjZWxsIG92ZXJsYXBwZWQuIHVzZSB0aGlzIG9uZQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNlbGwgJiYgKChjZWxsLT5jb2woKSArIChjZWxsLT5jb2xTcGFuKCkt
MSkpID49IChpbnQpY29sdW1uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjZWxs
LT5yb3dTcGFuKCkgPj0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbCAmJiAo
KGNlbGwtPmNvbCgpICsgKGNlbGwtPmNvbFNwYW4oKSAtIDEpKSA+PSBjb2x1bW4pKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgY2Vs
bCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcAppbmRleCA1ODFj
ZGE1ZDUyZjRhNTI2ZDM4NTEzODAyYjY3YWE3ODFhMGViMDYxLi5jOTQ1MjFiMWU3OTcwNDE5YjBm
Y2RmMzMxOGY2MWJkY2QwNjcyYTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCkBAIC0xMjIsNyArMTIy
LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFk
ZXJPYmplY3RGb3JTZWN0aW9uKFJlbmRlclRhYmwKICAgICBpZiAoIXNlY3Rpb24pCiAgICAgICAg
IHJldHVybiAwOwogICAgIAotICAgIGludCBudW1Db2xzID0gc2VjdGlvbi0+bnVtQ29sdW1ucygp
OworICAgIHVuc2lnbmVkIG51bUNvbHMgPSBzZWN0aW9uLT5udW1Db2x1bW5zKCk7CiAgICAgaWYg
KG1fY29sdW1uSW5kZXggPj0gbnVtQ29scykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbi5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVD
b2x1bW4uaAppbmRleCBhOTE0NjU3YTVkNmJiNGJkNTc1NjQ5MDRkODA1NWYwZWRkMzFkNTBkLi4w
MTRmMzJkODQwM2FiZTM0MjgxNDE4OGEzMDIyYzFjNjMxZTJiMzk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmgK
QEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBlbGVtZW50
UmVjdCgpIGNvbnN0OwogICAgIAogcHJpdmF0ZTogICAgCi0gICAgaW50IG1fY29sdW1uSW5kZXg7
CisgICAgdW5zaWduZWQgbV9jb2x1bW5JbmRleDsKICAgICBMYXlvdXRSZWN0IG1fY29sdW1uUmVj
dDsKICAgICAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJPYmplY3RGb3JTZWN0aW9u
KFJlbmRlclRhYmxlU2VjdGlvbiosIGJvb2wgdGhUYWdSZXF1aXJlZCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCAyOGI4MzZjOTRlZTdiZWFiZDgzMGFlN2Rj
MzU5NDgwOGE5ZDU1MzdkLi5kODg0YWRmOGIzOTc5ODcwYmZkODdlMTZkNmFmNDUxZDFmOGNlYzdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTYzNSwxMCAr
NjM1LDEwIEBAIFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OnRvcE5vbkVtcHR5U2Vj
dGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIHNlY3Rpb247CiB9CiAKLXZvaWQgUmVuZGVyVGFibGU6
OnNwbGl0Q29sdW1uKGludCBwb3MsIGludCBmaXJzdFNwYW4pCit2b2lkIFJlbmRlclRhYmxlOjpz
cGxpdENvbHVtbih1bnNpZ25lZCBwb3MsIGludCBmaXJzdFNwYW4pCiB7CiAgICAgLy8gd2UgbmVl
ZCB0byBhZGQgYSBuZXcgY29sdW1uU3RydWN0Ci0gICAgaW50IG9sZFNpemUgPSBtX2NvbHVtbnMu
c2l6ZSgpOworICAgIHVuc2lnbmVkIG9sZFNpemUgPSBtX2NvbHVtbnMuc2l6ZSgpOwogICAgIG1f
Y29sdW1ucy5ncm93KG9sZFNpemUgKyAxKTsKICAgICBpbnQgb2xkU3BhbiA9IG1fY29sdW1uc1tw
b3NdLnNwYW47CiAgICAgQVNTRVJUKG9sZFNwYW4gPiBmaXJzdFNwYW4pOwpAQCAtODg3LDcgKzg4
Nyw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJFbmQoKSBjb25zdAogICAg
ICAgICBpZiAodGIuc3R5bGUoKSA+IEJISURERU4pCiAgICAgICAgICAgICBib3JkZXJXaWR0aCA9
IHRiLndpZHRoKCk7CiAKLSAgICAgICAgaW50IGVuZENvbHVtbiA9IG51bUVmZkNvbHMoKSAtIDE7
CisgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IG51bUVmZkNvbHMoKSAtIDE7CiAgICAgICAg
IGlmIChSZW5kZXJUYWJsZUNvbCogY29sR3JvdXAgPSBjb2xFbGVtZW50KGVuZENvbHVtbikpIHsK
ICAgICAgICAgICAgIGNvbnN0IEJvcmRlclZhbHVlJiBnYiA9IGNvbEdyb3VwLT5zdHlsZSgpLT5i
b3JkZXJFbmQoKTsKICAgICAgICAgICAgIGlmIChnYi5zdHlsZSgpID09IEJISURERU4pCkBAIC0x
MTA0LDcgKzExMDQsNyBAQCBSZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQWJvdmUo
Y29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsKSBjb25zdAogCiAgICAgLy8gTG9vayB1cCB0aGUg
Y2VsbCBpbiB0aGUgc2VjdGlvbidzIGdyaWQsIHdoaWNoIHJlcXVpcmVzIGVmZmVjdGl2ZSBjb2wg
aW5kZXgKICAgICBpZiAoc2VjdGlvbikgewotICAgICAgICBpbnQgZWZmQ29sID0gY29sVG9FZmZD
b2woY2VsbC0+Y29sKCkpOworICAgICAgICB1bnNpZ25lZCBlZmZDb2wgPSBjb2xUb0VmZkNvbChj
ZWxsLT5jb2woKSk7CiAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVjdCYgYWJv
dmVDZWxsID0gc2VjdGlvbi0+Y2VsbEF0KHJBYm92ZSwgZWZmQ29sKTsKICAgICAgICAgcmV0dXJu
IGFib3ZlQ2VsbC5wcmltYXJ5Q2VsbCgpOwogICAgIH0gZWxzZQpAQCAtMTExNiw5ICsxMTE2LDkg
QEAgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6Y2VsbEJlbG93KGNvbnN0IFJlbmRlclRh
YmxlQ2VsbCogY2VsbCkgY29uc3QKICAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAKICAg
ICAvLyBGaW5kIHRoZSBzZWN0aW9uIGFuZCByb3cgdG8gbG9vayBpbgotICAgIGludCByID0gY2Vs
bC0+cm93KCkgKyBjZWxsLT5yb3dTcGFuKCkgLSAxOworICAgIHVuc2lnbmVkIHIgPSBjZWxsLT5y
b3coKSArIGNlbGwtPnJvd1NwYW4oKSAtIDE7CiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0
aW9uID0gMDsKLSAgICBpbnQgckJlbG93ID0gMDsKKyAgICB1bnNpZ25lZCByQmVsb3cgPSAwOwog
ICAgIGlmIChyIDwgY2VsbC0+c2VjdGlvbigpLT5udW1Sb3dzKCkgLSAxKSB7CiAgICAgICAgIC8v
IFRoZSBjZWxsIGlzIG5vdCBpbiB0aGUgbGFzdCByb3csIHNvIHVzZSB0aGUgbmV4dCByb3cgaW4g
dGhlIHNlY3Rpb24uCiAgICAgICAgIHNlY3Rpb24gPSBjZWxsLT5zZWN0aW9uKCk7CkBAIC0xMTMx
LDcgKzExMzEsNyBAQCBSZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQmVsb3coY29u
c3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsKSBjb25zdAogCiAgICAgLy8gTG9vayB1cCB0aGUgY2Vs
bCBpbiB0aGUgc2VjdGlvbidzIGdyaWQsIHdoaWNoIHJlcXVpcmVzIGVmZmVjdGl2ZSBjb2wgaW5k
ZXgKICAgICBpZiAoc2VjdGlvbikgewotICAgICAgICBpbnQgZWZmQ29sID0gY29sVG9FZmZDb2wo
Y2VsbC0+Y29sKCkpOworICAgICAgICB1bnNpZ25lZCBlZmZDb2wgPSBjb2xUb0VmZkNvbChjZWxs
LT5jb2woKSk7CiAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVjdCYgYmVsb3dD
ZWxsID0gc2VjdGlvbi0+Y2VsbEF0KHJCZWxvdywgZWZmQ29sKTsKICAgICAgICAgcmV0dXJuIGJl
bG93Q2VsbC5wcmltYXJ5Q2VsbCgpOwogICAgIH0gZWxzZQpAQCAtMTE0Myw3ICsxMTQzLDcgQEAg
UmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6Y2VsbEJlZm9yZShjb25zdCBSZW5kZXJUYWJs
ZUNlbGwqIGNlbGwpIGNvbnN0CiAgICAgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwogCiAgICAg
UmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gY2VsbC0+c2VjdGlvbigpOwotICAgIGludCBl
ZmZDb2wgPSBjb2xUb0VmZkNvbChjZWxsLT5jb2woKSk7CisgICAgdW5zaWduZWQgZWZmQ29sID0g
Y29sVG9FZmZDb2woY2VsbC0+Y29sKCkpOwogICAgIGlmICghZWZmQ29sKQogICAgICAgICByZXR1
cm4gMDsKICAgICAKQEAgLTExNTYsNyArMTE1Niw3IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVy
VGFibGU6OmNlbGxBZnRlcihjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpIGNvbnN0CiB7CiAg
ICAgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwogCi0gICAgaW50IGVmZkNvbCA9IGNvbFRvRWZm
Q29sKGNlbGwtPmNvbCgpICsgY2VsbC0+Y29sU3BhbigpKTsKKyAgICB1bnNpZ25lZCBlZmZDb2wg
PSBjb2xUb0VmZkNvbChjZWxsLT5jb2woKSArIGNlbGwtPmNvbFNwYW4oKSk7CiAgICAgaWYgKGVm
ZkNvbCA+PSBudW1FZmZDb2xzKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBjZWxs
LT5zZWN0aW9uKCktPnByaW1hcnlDZWxsQXQoY2VsbC0+cm93KCksIGVmZkNvbCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCmluZGV4IDhhNjQzM2NkYjkzNWJhODQxNDNjOGM0
OWMwOWQ4ZmI2ZWI0ZGQ1YjIuLjZkODFlYWZlM2Y5MzQ3ZDQ2M2U1M2I3N2VlZjQwYjIxMmZkZWQx
ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCkBAIC0xNDYsMTIgKzE0
NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIHRh
YmxlIGhhcyBubyBub24tZW1wdHkgc2VjdGlvbnMuCiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiB0
b3BOb25FbXB0eVNlY3Rpb24oKSBjb25zdDsKIAotICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50IHBv
cywgaW50IGZpcnN0U3Bhbik7CisgICAgdm9pZCBzcGxpdENvbHVtbih1bnNpZ25lZCBwb3MsIGlu
dCBmaXJzdFNwYW4pOwogICAgIHZvaWQgYXBwZW5kQ29sdW1uKGludCBzcGFuKTsKLSAgICBpbnQg
bnVtRWZmQ29scygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1ucy5zaXplKCk7IH0KKyAgICB1bnNp
Z25lZCBudW1FZmZDb2xzKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zLnNpemUoKTsgfQogICAg
IGludCBzcGFuT2ZFZmZDb2woaW50IGVmZkNvbCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zW2Vm
ZkNvbF0uc3BhbjsgfQogICAgIAotICAgIGludCBjb2xUb0VmZkNvbCh1bnNpZ25lZCBjb2wpIGNv
bnN0CisgICAgdW5zaWduZWQgY29sVG9FZmZDb2wodW5zaWduZWQgY29sKSBjb25zdAogICAgIHsK
ICAgICAgICAgdW5zaWduZWQgZWZmQ29sID0gMDsKICAgICAgICAgdW5zaWduZWQgbnVtQ29scyA9
IG51bUVmZkNvbHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5jcHAKaW5kZXggZmRiNDVkYjY5ZmVhNjEyMWI4MTkzN2JmNWEzMjBjNWJhZjFlYTIyMi4uNjFl
NDc4ODQ2NjA5NTVhMjgzMWZmNzkzMWQ5YTQ5ZmZiYmM2MjUyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTQzLDggKzQzLDggQEAgdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUmVuZGVyVGFibGVDZWxsOjpSZW5kZXJUYWJsZUNlbGwo
Tm9kZSogbm9kZSkKICAgICA6IFJlbmRlckJsb2NrKG5vZGUpCi0gICAgLCBtX3JvdygtMSkKLSAg
ICAsIG1fY29sdW1uKC0xKQorICAgICwgbV9yb3codW5zZXRSb3dJbmRleCkKKyAgICAsIG1fY29s
dW1uKHVuc2V0Q29sdW1uSW5kZXgpCiAgICAgLCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmUoMCkK
ICAgICAsIG1faW50cmluc2ljUGFkZGluZ0FmdGVyKDApCiAgICAgLCBtX2NlbGxXaWR0aENoYW5n
ZWQoZmFsc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKaW5k
ZXggNzU1YTg1NGU0ZWFkN2Y4NzA0MzgxNWY2ODY3NjEyMjk3ZDRmYzk2MC4uYTIzYWUzNWI0YTEx
ZjI0MDE5YWU0OWQxMmQ5YWRiMDhmYjVjMDFiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuaApAQCAtMjksNiArMjksMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisvLyBGSVhNRTogSXQgaXMgcG9zc2libGUgZm9yIHRoZXNlIGluZGV4ZXMgdG8gYmUg
cmVhY2hlZCBmb3IgYSB0YWJsZSBiaWcgZW5vdWdoLgorLy8gV2Ugd291bGQgbmVlZCB0byBlbmZv
cmNlIGEgbWF4aW1hbCBpbmRleCBvbiBib3RoIHJvd3MgYW5kIGNvbHVtbnMuCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgdW5zZXRDb2x1bW5JbmRleCA9IDB4RkZGRkZGRkY7CitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgdW5zZXRSb3dJbmRleCA9IDB4RkZGRkZGRkY7CisKIGNsYXNzIFJlbmRlclRhYmxl
Q2VsbCA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmVuZGVy
VGFibGVDZWxsKE5vZGUqKTsKQEAgLTQzLDEwICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gQ2Fs
bGVkIGZyb20gSFRNTFRhYmxlQ2VsbEVsZW1lbnQuCiAgICAgdm9pZCBjb2xTcGFuT3JSb3dTcGFu
Q2hhbmdlZCgpOwogCi0gICAgaW50IGNvbCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uOyB9Ci0g
ICAgdm9pZCBzZXRDb2woaW50IGNvbCkgeyBtX2NvbHVtbiA9IGNvbDsgfQotICAgIGludCByb3co
KSBjb25zdCB7IHJldHVybiBtX3JvdzsgfQotICAgIHZvaWQgc2V0Um93KGludCByb3cpIHsgbV9y
b3cgPSByb3c7IH0KKyAgICB1bnNpZ25lZCBjb2woKSBjb25zdCB7IEFTU0VSVChtX2NvbHVtbiAh
PSB1bnNldENvbHVtbkluZGV4KTsgcmV0dXJuIG1fY29sdW1uOyB9CisgICAgdm9pZCBzZXRDb2wo
dW5zaWduZWQgY29sKSB7IG1fY29sdW1uID0gY29sOyB9CisgICAgdW5zaWduZWQgcm93KCkgY29u
c3QgeyBBU1NFUlQobV9yb3cgIT0gdW5zZXRSb3dJbmRleCk7IHJldHVybiBtX3JvdzsgfQorICAg
IHZvaWQgc2V0Um93KHVuc2lnbmVkIHJvdykgeyBtX3JvdyA9IHJvdzsgfQogCiAgICAgUmVuZGVy
VGFibGVTZWN0aW9uKiBzZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdG9SZW5kZXJUYWJsZVNlY3Rp
b24ocGFyZW50KCktPnBhcmVudCgpKTsgfQogICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHRvUmVuZGVyVGFibGUocGFyZW50KCktPnBhcmVudCgpLT5wYXJlbnQoKSk7IH0K
QEAgLTE0NSw4ICsxNTAsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwYWludENvbGxhcHNlZEJv
cmRlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAKLSAgICBpbnQgbV9y
b3c7Ci0gICAgaW50IG1fY29sdW1uOworICAgIHVuc2lnbmVkIG1fcm93OworICAgIHVuc2lnbmVk
IG1fY29sdW1uOwogICAgIGludCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmU7CiAgICAgaW50IG1f
aW50cmluc2ljUGFkZGluZ0FmdGVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IDY5MGUxMDNlOGQwYmFmZDBjMzMwZTQzMzE2ZDUy
OGNkZDcyMWQzMmEuLjQyOTE3NzAwZGYzOTJiYzJjM2E0YmViNTBkMDFkN2IwODUyMDQwYjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBA
IC02MCw3ICs2MCw3IEBAIFJlbmRlclRhYmxlU2VjdGlvbjo6UmVuZGVyVGFibGVTZWN0aW9uKE5v
ZGUqIG5vZGUpCiAgICAgOiBSZW5kZXJCb3gobm9kZSkKICAgICAsIG1fZ3JpZFJvd3MoMCkKICAg
ICAsIG1fY0NvbCgwKQotICAgICwgbV9jUm93KC0xKQorICAgICwgbV9jUm93KDApCiAgICAgLCBt
X291dGVyQm9yZGVyU3RhcnQoMCkKICAgICAsIG1fb3V0ZXJCb3JkZXJFbmQoMCkKICAgICAsIG1f
b3V0ZXJCb3JkZXJCZWZvcmUoMCkKQEAgLTE0OSwxNyArMTQ5LDE4IEBAIHZvaWQgUmVuZGVyVGFi
bGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkCiAgICAgaWYgKGJlZm9yZUNoaWxkKQogICAgICAgICBzZXROZWVkc0NlbGxSZWNh
bGMoKTsKIAorICAgIHVuc2lnbmVkIGluc2VydGlvblJvdyA9IG1fY1JvdzsKICAgICArK21fY1Jv
dzsKICAgICBtX2NDb2wgPSAwOwogCiAgICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJv
d3MKLSAgICBpZiAoIWVuc3VyZVJvd3MobV9jUm93ICsgMSkpCisgICAgaWYgKCFlbnN1cmVSb3dz
KG1fY1JvdykpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRl
cmVyID0gdG9SZW5kZXJUYWJsZVJvdyhjaGlsZCk7CisgICAgbV9ncmlkW2luc2VydGlvblJvd10u
cm93UmVuZGVyZXIgPSB0b1JlbmRlclRhYmxlUm93KGNoaWxkKTsKIAogICAgIGlmICghYmVmb3Jl
Q2hpbGQpCi0gICAgICAgIHNldFJvd0xvZ2ljYWxIZWlnaHRUb1Jvd1N0eWxlTG9naWNhbEhlaWdo
dElmTm90UmVsYXRpdmUoJm1fZ3JpZFttX2NSb3ddKTsKKyAgICAgICAgc2V0Um93TG9naWNhbEhl
aWdodFRvUm93U3R5bGVMb2dpY2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZSgmbV9ncmlkW2luc2VydGlv
blJvd10pOwogCiAgICAgLy8gSWYgdGhlIG5leHQgcmVuZGVyZXIgaXMgYWN0dWFsbHkgd3JhcHBl
ZCBpbiBhbiBhbm9ueW1vdXMgdGFibGUgcm93LCB3ZSBuZWVkIHRvIGdvIHVwIGFuZCBmaW5kIHRo
YXQuCiAgICAgd2hpbGUgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0
aGlzKQpAQCAtMTc2LDE5ICsxNzcsMTkgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlbW92
ZUNoaWxkKFJlbmRlck9iamVjdCogb2xkQ2hpbGQpCiAgICAgUmVuZGVyQm94OjpyZW1vdmVDaGls
ZChvbGRDaGlsZCk7CiB9CiAKLWJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGlu
dCBudW1Sb3dzKQorYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246OmVuc3VyZVJvd3ModW5zaWduZWQg
bnVtUm93cykKIHsKLSAgICBpbnQgblJvd3MgPSBtX2dyaWRSb3dzOworICAgIHVuc2lnbmVkIG5S
b3dzID0gbV9ncmlkUm93czsKICAgICBpZiAobnVtUm93cyA+IG5Sb3dzKSB7Ci0gICAgICAgIGlm
IChudW1Sb3dzID4gc3RhdGljX2Nhc3Q8aW50PihtX2dyaWQuc2l6ZSgpKSkgeworICAgICAgICBp
ZiAobnVtUm93cyA+IG1fZ3JpZC5zaXplKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBtYXhTaXpl
ID0gbnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoUm93U3RydWN0KTsKICAg
ICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KG51bVJvd3MpID4gbWF4U2l6ZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBtX2dyaWQuZ3JvdyhudW1S
b3dzKTsKICAgICAgICAgfQogICAgICAgICBtX2dyaWRSb3dzID0gbnVtUm93czsKLSAgICAgICAg
aW50IG5Db2xzID0gbWF4KDEsIHRhYmxlKCktPm51bUVmZkNvbHMoKSk7Ci0gICAgICAgIGZvciAo
aW50IHIgPSBuUm93czsgciA8IG51bVJvd3M7IHIrKykgeworICAgICAgICB1bnNpZ25lZCBuQ29s
cyA9IG1heCgxdSwgdGFibGUoKS0+bnVtRWZmQ29scygpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCByID0gblJvd3M7IHIgPCBudW1Sb3dzOyByKyspIHsKICAgICAgICAgICAgIG1fZ3JpZFtyXS5y
b3cgPSBuZXcgUm93KG5Db2xzKTsKICAgICAgICAgICAgIG1fZ3JpZFtyXS5yb3dSZW5kZXJlciA9
IDA7CiAgICAgICAgICAgICBtX2dyaWRbcl0uYmFzZWxpbmUgPSAwOwpAQCAtMjA0LDcgKzIwNSwx
MCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqIGNl
bGwsIFJlbmRlclRhYmxlUm93KiByb3cpCiAgICAgaW50IHJTcGFuID0gY2VsbC0+cm93U3Bhbigp
OwogICAgIGludCBjU3BhbiA9IGNlbGwtPmNvbFNwYW4oKTsKICAgICBWZWN0b3I8UmVuZGVyVGFi
bGU6OkNvbHVtblN0cnVjdD4mIGNvbHVtbnMgPSB0YWJsZSgpLT5jb2x1bW5zKCk7Ci0gICAgaW50
IG5Db2xzID0gY29sdW1ucy5zaXplKCk7CisgICAgdW5zaWduZWQgbkNvbHMgPSBjb2x1bW5zLnNp
emUoKTsKKyAgICAvLyBhZGRDZWxsIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBtX2NSb3cg
aGFzIGJlZW4gaW5jcmVtZW50ZWQuCisgICAgQVNTRVJUKG1fY1Jvdyk7CisgICAgdW5zaWduZWQg
aW5zZXJ0aW9uUm93ID0gbV9jUm93IC0gMTsKIAogICAgIC8vICMjIyBtb3ppbGxhIHN0aWxsIHNl
ZW1zIHRvIGRvIHRoZSBvbGQgSFRNTCB3YXksIGV2ZW4gZm9yIHN0cmljdCBEVEQKICAgICAvLyAo
c2VlIHRoZSBhbm5vdGF0aW9uIG9uIHRhYmxlIGNlbGwgbGF5b3V0aW5nIGluIHRoZSBDU1Mgc3Bl
Y3MgYW5kIHRoZSB0ZXN0Y2FzZSBiZWxvdzoKQEAgLTIxMiwyNCArMjE2LDI0IEBAIHZvaWQgUmVu
ZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyVGFi
bGVSb3cqIHJvdykKICAgICAvLyA8VFI+PFREPjEgPFREIHJvd3NwYW49IjIiPjIgPFREPjMgPFRE
PjQKICAgICAvLyA8VFI+PFREIGNvbHNwYW49IjIiPjUKICAgICAvLyA8L1RBQkxFPgotICAgIHdo
aWxlIChtX2NDb2wgPCBuQ29scyAmJiAoY2VsbEF0KG1fY1JvdywgbV9jQ29sKS5oYXNDZWxscygp
IHx8IGNlbGxBdChtX2NSb3csIG1fY0NvbCkuaW5Db2xTcGFuKSkKKyAgICB3aGlsZSAobV9jQ29s
IDwgbkNvbHMgJiYgKGNlbGxBdChpbnNlcnRpb25Sb3csIG1fY0NvbCkuaGFzQ2VsbHMoKSB8fCBj
ZWxsQXQoaW5zZXJ0aW9uUm93LCBtX2NDb2wpLmluQ29sU3BhbikpCiAgICAgICAgIG1fY0NvbCsr
OwogCiAgICAgaWYgKHJTcGFuID09IDEpIHsKICAgICAgICAgLy8gd2UgaWdub3JlIGhlaWdodCBz
ZXR0aW5ncyBvbiByb3dzcGFuIGNlbGxzCiAgICAgICAgIExlbmd0aCBsb2dpY2FsSGVpZ2h0ID0g
Y2VsbC0+c3R5bGUoKS0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBpZiAobG9naWNhbEhlaWdo
dC5pc1Bvc2l0aXZlKCkgfHwgKGxvZ2ljYWxIZWlnaHQuaXNSZWxhdGl2ZSgpICYmIGxvZ2ljYWxI
ZWlnaHQudmFsdWUoKSA+PSAwKSkgewotICAgICAgICAgICAgTGVuZ3RoIGNSb3dMb2dpY2FsSGVp
Z2h0ID0gbV9ncmlkW21fY1Jvd10ubG9naWNhbEhlaWdodDsKKyAgICAgICAgICAgIExlbmd0aCBj
Um93TG9naWNhbEhlaWdodCA9IG1fZ3JpZFtpbnNlcnRpb25Sb3ddLmxvZ2ljYWxIZWlnaHQ7CiAg
ICAgICAgICAgICBzd2l0Y2ggKGxvZ2ljYWxIZWlnaHQudHlwZSgpKSB7CiAgICAgICAgICAgICAg
ICAgY2FzZSBQZXJjZW50OgogICAgICAgICAgICAgICAgICAgICBpZiAoIShjUm93TG9naWNhbEhl
aWdodC5pc1BlcmNlbnQoKSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIChjUm93TG9naWNh
bEhlaWdodC5pc1BlcmNlbnQoKSAmJiBjUm93TG9naWNhbEhlaWdodC5wZXJjZW50KCkgPCBsb2dp
Y2FsSGVpZ2h0LnBlcmNlbnQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyaWRbbV9j
Um93XS5sb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JpZFtpbnNlcnRpb25Sb3ddLmxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0Owog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBGaXhl
ZDoKICAgICAgICAgICAgICAgICAgICAgaWYgKGNSb3dMb2dpY2FsSGVpZ2h0LnR5cGUoKSA8IFBl
cmNlbnQgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIChjUm93TG9naWNhbEhlaWdodC5pc0Zp
eGVkKCkgJiYgY1Jvd0xvZ2ljYWxIZWlnaHQudmFsdWUoKSA8IGxvZ2ljYWxIZWlnaHQudmFsdWUo
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyaWRbbV9jUm93XS5sb2dpY2FsSGVpZ2h0
ID0gbG9naWNhbEhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JpZFtpbnNlcnRp
b25Sb3ddLmxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0OwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFJlbGF0aXZlOgogICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0yMzksMTIgKzI0MywxMiBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6
YWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFJlbmRlclRhYmxlUm93KiByb3cpCiAgICAg
fQogCiAgICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvd3MKLSAgICBpZiAoIWVuc3Vy
ZVJvd3MobV9jUm93ICsgclNwYW4pKQorICAgIGlmICghZW5zdXJlUm93cyhpbnNlcnRpb25Sb3cg
KyByU3BhbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRl
cmVyID0gcm93OworICAgIG1fZ3JpZFtpbnNlcnRpb25Sb3ddLnJvd1JlbmRlcmVyID0gcm93Owog
Ci0gICAgaW50IGNvbCA9IG1fY0NvbDsKKyAgICB1bnNpZ25lZCBjb2wgPSBtX2NDb2w7CiAgICAg
Ly8gdGVsbCB0aGUgY2VsbCB3aGVyZSBpdCBpcwogICAgIGJvb2wgaW5Db2xTcGFuID0gZmFsc2U7
CiAgICAgd2hpbGUgKGNTcGFuKSB7CkBAIC0yNTgsNyArMjYyLDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBSZW5kZXJUYWJsZVJvdyog
cm93KQogICAgICAgICAgICAgY3VycmVudFNwYW4gPSBjb2x1bW5zW21fY0NvbF0uc3BhbjsKICAg
ICAgICAgfQogICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJTcGFuOyByKyspIHsKLSAgICAg
ICAgICAgIENlbGxTdHJ1Y3QmIGMgPSBjZWxsQXQobV9jUm93ICsgciwgbV9jQ29sKTsKKyAgICAg
ICAgICAgIENlbGxTdHJ1Y3QmIGMgPSBjZWxsQXQoaW5zZXJ0aW9uUm93ICsgciwgbV9jQ29sKTsK
ICAgICAgICAgICAgIEFTU0VSVChjZWxsKTsKICAgICAgICAgICAgIGMuY2VsbHMuYXBwZW5kKGNl
bGwpOwogICAgICAgICAgICAgLy8gSWYgY2VsbHMgb3ZlcmxhcCB0aGVuIHdlIHRha2UgdGhlIHNs
b3cgcGF0aCBmb3IgcGFpbnRpbmcuCkBAIC0yNzEsNyArMjc1LDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBSZW5kZXJUYWJsZVJvdyog
cm93KQogICAgICAgICBjU3BhbiAtPSBjdXJyZW50U3BhbjsKICAgICAgICAgaW5Db2xTcGFuID0g
dHJ1ZTsKICAgICB9Ci0gICAgY2VsbC0+c2V0Um93KG1fY1Jvdyk7CisgICAgY2VsbC0+c2V0Um93
KGluc2VydGlvblJvdyk7CiAgICAgY2VsbC0+c2V0Q29sKHRhYmxlKCktPmVmZkNvbFRvQ29sKGNv
bCkpOwogfQogCkBAIC0yODEsNyArMjg1LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNl
dENlbGxMb2dpY2FsV2lkdGhzKCkKIAogICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1
c2hlcih2aWV3KCkpOwogICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9ncmlkUm93czsg
aSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JpZFJvd3M7IGkrKykgewog
ICAgICAgICBSb3cmIHJvdyA9ICptX2dyaWRbaV0ucm93OwogICAgICAgICBpbnQgY29scyA9IHJv
dy5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29sczsgaisrKSB7CkBAIC0z
MzMsNyArMzM3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dp
Y2FsSGVpZ2h0KCkKICAgICBtX3Jvd1Bvcy5yZXNpemUobV9ncmlkUm93cyArIDEpOwogICAgIG1f
cm93UG9zWzBdID0gc3BhY2luZzsKIAotICAgIGZvciAoaW50IHIgPSAwOyByIDwgbV9ncmlkUm93
czsgcisrKSB7CisgICAgZm9yICh1bnNpZ25lZCByID0gMDsgciA8IG1fZ3JpZFJvd3M7IHIrKykg
ewogICAgICAgICBtX3Jvd1Bvc1tyICsgMV0gPSAwOwogICAgICAgICBtX2dyaWRbcl0uYmFzZWxp
bmUgPSAwOwogICAgICAgICBMYXlvdXRVbml0IGJhc2VsaW5lID0gMDsKQEAgLTM0NCw5ICszNDgs
OSBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jvd0xvZ2ljYWxIZWlnaHQo
KQogICAgICAgICBtX3Jvd1Bvc1tyICsgMV0gPSBtYXgobV9yb3dQb3NbciArIDFdLCBwb3MpOwog
CiAgICAgICAgIFJvdyogcm93ID0gbV9ncmlkW3JdLnJvdzsKLSAgICAgICAgaW50IHRvdGFsQ29s
cyA9IHJvdy0+c2l6ZSgpOworICAgICAgICB1bnNpZ25lZCB0b3RhbENvbHMgPSByb3ctPnNpemUo
KTsKIAotICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IHRvdGFsQ29sczsgYysrKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgYyA9IDA7IGMgPCB0b3RhbENvbHM7IGMrKykgewogICAgICAgICAg
ICAgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChyLCBjKTsKICAgICAgICAgICAgIGNlbGwg
PSBjdXJyZW50LnByaW1hcnlDZWxsKCk7CiAKQEAgLTM1Niw3ICszNjAsNyBAQCBMYXlvdXRVbml0
IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jvd0xvZ2ljYWxIZWlnaHQoKQogICAgICAgICAgICAg
aWYgKChjZWxsLT5yb3coKSArIGNlbGwtPnJvd1NwYW4oKSAtIDEpID4gcikKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaW50IGluZHggPSBtYXgociAtIGNlbGwtPnJv
d1NwYW4oKSArIDEsIDApOworICAgICAgICAgICAgdW5zaWduZWQgaW5keCA9IG1heChyIC0gY2Vs
bC0+cm93U3BhbigpICsgMSwgMHUpOwogCiAgICAgICAgICAgICBpZiAoY2VsbC0+aGFzT3ZlcnJp
ZGVIZWlnaHQoKSkgewogICAgICAgICAgICAgICAgIGlmICghc3RhdGVQdXNoZXIuZGlkUHVzaCgp
KSB7CkBAIC00NDIsOCArNDQ2LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246Omxh
eW91dFJvd3MoTGF5b3V0VW5pdCB0b0FkZCkKIAogICAgIExheW91dFVuaXQgckhlaWdodDsKICAg
ICBpbnQgcmluZHg7Ci0gICAgaW50IHRvdGFsUm93cyA9IG1fZ3JpZFJvd3M7Ci0gICAgCisgICAg
dW5zaWduZWQgdG90YWxSb3dzID0gbV9ncmlkUm93czsKKwogICAgIC8vIFNldCB0aGUgd2lkdGgg
b2Ygb3VyIHNlY3Rpb24gbm93LiAgVGhlIHJvd3Mgd2lsbCBhbHNvIGJlIHRoaXMgd2lkdGguCiAg
ICAgc2V0TG9naWNhbFdpZHRoKHRhYmxlKCktPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAgICAg
bV9vdmVyZmxvdy5jbGVhcigpOwpAQCAtNDU2LDcgKzQ2MCw3IEBAIExheW91dFVuaXQgUmVuZGVy
VGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKExheW91dFVuaXQgdG9BZGQpCiAgICAgICAgIExheW91
dFVuaXQgZGggPSB0b0FkZDsKICAgICAgICAgaW50IHRvdGFsUGVyY2VudCA9IDA7CiAgICAgICAg
IGludCBudW1BdXRvID0gMDsKLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7
IHIrKykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgdG90YWxSb3dzOyByKysp
IHsKICAgICAgICAgICAgIGlmIChtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5pc0F1dG8oKSkKICAg
ICAgICAgICAgICAgICBudW1BdXRvKys7CiAgICAgICAgICAgICBlbHNlIGlmIChtX2dyaWRbcl0u
bG9naWNhbEhlaWdodC5pc1BlcmNlbnQoKSkKQEAgLTQ2Nyw3ICs0NzEsNyBAQCBMYXlvdXRVbml0
IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0IHRvQWRkKQogICAgICAg
ICAgICAgTGF5b3V0VW5pdCBhZGQgPSAwOwogICAgICAgICAgICAgdG90YWxQZXJjZW50ID0gbWlu
KHRvdGFsUGVyY2VudCwgMTAwKTsKICAgICAgICAgICAgIGludCByaCA9IG1fcm93UG9zWzFdIC0g
bV9yb3dQb3NbMF07Ci0gICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHRvdGFsUm93czsg
cisrKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgdG90YWxSb3dzOyBy
KyspIHsKICAgICAgICAgICAgICAgICBpZiAodG90YWxQZXJjZW50ID4gMCAmJiBtX2dyaWRbcl0u
bG9naWNhbEhlaWdodC5pc1BlcmNlbnQoKSkgewogICAgICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IHRvQWRkID0gbWluKGRoLCBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PigodG90YWxIZWlnaHQg
KiBtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5wZXJjZW50KCkgLyAxMDApIC0gcmgpKTsKICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgdG9BZGQgaXMgbmVnYXRpdmUsIHRoZW4gd2UgZG9uJ3Qgd2Fu
dCB0byBzaHJpbmsgdGhlIHJvdyAodGhpcyBidWcKQEAgLTQ3Nyw2ICs0ODEsNyBAQCBMYXlvdXRV
bml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0IHRvQWRkKQogICAg
ICAgICAgICAgICAgICAgICBkaCAtPSB0b0FkZDsKICAgICAgICAgICAgICAgICAgICAgdG90YWxQ
ZXJjZW50IC09IG1fZ3JpZFtyXS5sb2dpY2FsSGVpZ2h0LnBlcmNlbnQoKTsKICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKHRvdGFsUm93cyA+PSAxKTsKICAgICAgICAg
ICAgICAgICBpZiAociA8IHRvdGFsUm93cyAtIDEpCiAgICAgICAgICAgICAgICAgICAgIHJoID0g
bV9yb3dQb3NbciArIDJdIC0gbV9yb3dQb3NbciArIDFdOwogICAgICAgICAgICAgICAgIG1fcm93
UG9zW3IgKyAxXSArPSBhZGQ7CkBAIC00ODUsNyArNDkwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJU
YWJsZVNlY3Rpb246OmxheW91dFJvd3MoTGF5b3V0VW5pdCB0b0FkZCkKICAgICAgICAgaWYgKG51
bUF1dG8pIHsKICAgICAgICAgICAgIC8vIGRpc3RyaWJ1dGUgb3ZlciB2YXJpYWJsZSBjb2xzCiAg
ICAgICAgICAgICBMYXlvdXRVbml0IGFkZCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCByID0g
MDsgciA8IHRvdGFsUm93czsgcisrKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAw
OyByIDwgdG90YWxSb3dzOyByKyspIHsKICAgICAgICAgICAgICAgICBpZiAobnVtQXV0byA+IDAg
JiYgbV9ncmlkW3JdLmxvZ2ljYWxIZWlnaHQuaXNBdXRvKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCB0b0FkZCA9IGRoIC8gbnVtQXV0bzsKICAgICAgICAgICAgICAgICAgICAg
YWRkICs9IHRvQWRkOwpAQCAtNTAwLDcgKzUwNSw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVT
ZWN0aW9uOjpsYXlvdXRSb3dzKExheW91dFVuaXQgdG9BZGQpCiAgICAgICAgICAgICBMYXlvdXRV
bml0IHRvdCA9IG1fcm93UG9zW3RvdGFsUm93c107CiAgICAgICAgICAgICBMYXlvdXRVbml0IGFk
ZCA9IDA7CiAgICAgICAgICAgICBMYXlvdXRVbml0IHByZXYgPSBtX3Jvd1Bvc1swXTsKLSAgICAg
ICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAgICAgICAgICAg
ICAgIC8vIHdlaWdodCB3aXRoIHRoZSBvcmlnaW5hbCBoZWlnaHQKICAgICAgICAgICAgICAgICBh
ZGQgKz0gZGggKiAobV9yb3dQb3NbciArIDFdIC0gcHJldikgLyB0b3Q7CiAgICAgICAgICAgICAg
ICAgcHJldiA9IG1fcm93UG9zW3IgKyAxXTsKQEAgLTUxNSw3ICs1MjAsNyBAQCBMYXlvdXRVbml0
IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0IHRvQWRkKQogCiAgICAg
TGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgTGF5b3V0U2l6
ZSh4KCksIHkoKSksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpOwogCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgeworICAgIGZvciAodW5zaWdu
ZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAgICAgICAvLyBTZXQgdGhlIHJvdydz
IHgveSBwb3NpdGlvbiBhbmQgd2lkdGgvaGVpZ2h0LgogICAgICAgICBpZiAoUmVuZGVyVGFibGVS
b3cqIHJvd1JlbmRlcmVyID0gbV9ncmlkW3JdLnJvd1JlbmRlcmVyKSB7CiAgICAgICAgICAgICBy
b3dSZW5kZXJlci0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQoMCwgbV9yb3dQb3Nbcl0pKTsKQEAg
LTY4MCw3ICs2ODUsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93
cyhMYXlvdXRVbml0IHRvQWRkKQogICAgIGJvb2wgaGFzT3ZlcmZsb3dpbmdDZWxsID0gZmFsc2U7
CiAjZW5kaWYKICAgICAvLyBOb3cgdGhhdCBvdXIgaGVpZ2h0IGhhcyBiZWVuIGRldGVybWluZWQs
IGFkZCBpbiBvdmVyZmxvdyBmcm9tIGNlbGxzLgotICAgIGZvciAoaW50IHIgPSAwOyByIDwgdG90
YWxSb3dzOyByKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgdG90YWxSb3dzOyBy
KyspIHsKICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBuRWZmQ29sczsgYysrKSB7CiAgICAg
ICAgICAgICBDZWxsU3RydWN0JiBjcyA9IGNlbGxBdChyLCBjKTsKICAgICAgICAgICAgIFJlbmRl
clRhYmxlQ2VsbCogY2VsbCA9IGNzLnByaW1hcnlDZWxsKCk7CkBAIC04MzUsNyArODQwLDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclN0YXJ0KCkgY29u
c3QKICAgICB9CiAKICAgICBib29sIGFsbEhpZGRlbiA9IHRydWU7Ci0gICAgZm9yIChpbnQgciA9
IDA7IHIgPCBtX2dyaWRSb3dzOyByKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwg
bV9ncmlkUm93czsgcisrKSB7CiAgICAgICAgIGNvbnN0IENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBj
ZWxsQXQociwgMCk7CiAgICAgICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQogICAgICAgICAg
ICAgY29udGludWU7CkBAIC04NzksNyArODg0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNl
Y3Rpb246OmNhbGNPdXRlckJvcmRlckVuZCgpIGNvbnN0CiAgICAgfQogCiAgICAgYm9vbCBhbGxI
aWRkZW4gPSB0cnVlOwotICAgIGZvciAoaW50IHIgPSAwOyByIDwgbV9ncmlkUm93czsgcisrKSB7
CisgICAgZm9yICh1bnNpZ25lZCByID0gMDsgciA8IG1fZ3JpZFJvd3M7IHIrKykgewogICAgICAg
ICBjb25zdCBDZWxsU3RydWN0JiBjdXJyZW50ID0gY2VsbEF0KHIsIHRvdGFsQ29scyAtIDEpOwog
ICAgICAgICBpZiAoIWN1cnJlbnQuaGFzQ2VsbHMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMTEyNSwyMCArMTEzMCwyMSBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6aW1hZ2VDaGFu
Z2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCopCiB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6cmVjYWxjQ2VsbHMoKQogewogICAgIG1fY0NvbCA9IDA7Ci0gICAgbV9jUm93ID0gLTE7
CisgICAgbV9jUm93ID0gMDsKICAgICBjbGVhckdyaWQoKTsKICAgICBtX2dyaWRSb3dzID0gMDsK
IAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0g
cm93LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChyb3ctPmlzVGFibGVSb3coKSkgewot
ICAgICAgICAgICAgbV9jUm93Kys7CisgICAgICAgICAgICBpbnQgaW5zZXJ0aW9uUm93ID0gbV9j
Um93OworICAgICAgICAgICAgKyttX2NSb3c7CiAgICAgICAgICAgICBtX2NDb2wgPSAwOwotICAg
ICAgICAgICAgaWYgKCFlbnN1cmVSb3dzKG1fY1JvdyArIDEpKQorICAgICAgICAgICAgaWYgKCFl
bnN1cmVSb3dzKG1fY1JvdykpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIFJlbmRlclRhYmxlUm93KiB0YWJsZVJvdyA9IHRvUmVuZGVyVGFibGVSb3co
cm93KTsKLSAgICAgICAgICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRlcmVyID0gdGFibGVSb3c7
Ci0gICAgICAgICAgICBzZXRSb3dMb2dpY2FsSGVpZ2h0VG9Sb3dTdHlsZUxvZ2ljYWxIZWlnaHRJ
Zk5vdFJlbGF0aXZlKCZtX2dyaWRbbV9jUm93XSk7CisgICAgICAgICAgICBtX2dyaWRbaW5zZXJ0
aW9uUm93XS5yb3dSZW5kZXJlciA9IHRhYmxlUm93OworICAgICAgICAgICAgc2V0Um93TG9naWNh
bEhlaWdodFRvUm93U3R5bGVMb2dpY2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZSgmbV9ncmlkW2luc2Vy
dGlvblJvd10pOwogCiAgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+
Zmlyc3RDaGlsZCgpOyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChjZWxsLT5pc1RhYmxlQ2VsbCgpKQpAQCAtMTE1OSwxNyArMTE2NSwxNyBA
QCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c2V0TmVlZHNDZWxsUmVjYWxjKCkKIAogdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmNsZWFyR3JpZCgpCiB7Ci0gICAgaW50IHJvd3MgPSBtX2dyaWRS
b3dzOworICAgIHVuc2lnbmVkIHJvd3MgPSBtX2dyaWRSb3dzOwogICAgIHdoaWxlIChyb3dzLS0p
CiAgICAgICAgIGRlbGV0ZSBtX2dyaWRbcm93c10ucm93OwogfQogCi1pbnQgUmVuZGVyVGFibGVT
ZWN0aW9uOjpudW1Db2x1bW5zKCkgY29uc3QKK3Vuc2lnbmVkIFJlbmRlclRhYmxlU2VjdGlvbjo6
bnVtQ29sdW1ucygpIGNvbnN0CiB7Ci0gICAgaW50IHJlc3VsdCA9IDA7CisgICAgdW5zaWduZWQg
cmVzdWx0ID0gMDsKICAgICAKLSAgICBmb3IgKGludCByID0gMDsgciA8IG1fZ3JpZFJvd3M7ICsr
cikgewotICAgICAgICBmb3IgKGludCBjID0gcmVzdWx0OyBjIDwgdGFibGUoKS0+bnVtRWZmQ29s
cygpOyArK2MpIHsKKyAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgbV9ncmlkUm93czsgKyty
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgYyA9IHJlc3VsdDsgYyA8IHRhYmxlKCktPm51bUVm
ZkNvbHMoKTsgKytjKSB7CiAgICAgICAgICAgICBjb25zdCBDZWxsU3RydWN0JiBjZWxsID0gY2Vs
bEF0KHIsIGMpOwogICAgICAgICAgICAgaWYgKGNlbGwuaGFzQ2VsbHMoKSB8fCBjZWxsLmluQ29s
U3BhbikKICAgICAgICAgICAgICAgICByZXN1bHQgPSBjOwpAQCAtMTE4MSwxNyArMTE4NywxNyBA
QCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKCkgY29uc3QKIAogdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OmFwcGVuZENvbHVtbihpbnQgcG9zKQogewotICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IG1fZ3JpZFJvd3M7ICsrcm93KQorICAgIGZvciAodW5zaWduZWQgcm93ID0g
MDsgcm93IDwgbV9ncmlkUm93czsgKytyb3cpCiAgICAgICAgIG1fZ3JpZFtyb3ddLnJvdy0+cmVz
aXplKHBvcyArIDEpOwogfQogCi12b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4o
aW50IHBvcywgaW50IGZpcnN0KQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1u
KHVuc2lnbmVkIHBvcywgaW50IGZpcnN0KQogewogICAgIEFTU0VSVCghbV9uZWVkc0NlbGxSZWNh
bGMpOwogCiAgICAgaWYgKG1fY0NvbCA+IHBvcykKICAgICAgICAgbV9jQ29sKys7Ci0gICAgZm9y
IChpbnQgcm93ID0gMDsgcm93IDwgbV9ncmlkUm93czsgKytyb3cpIHsKKyAgICBmb3IgKHVuc2ln
bmVkIHJvdyA9IDA7IHJvdyA8IG1fZ3JpZFJvd3M7ICsrcm93KSB7CiAgICAgICAgIFJvdyYgciA9
ICptX2dyaWRbcm93XS5yb3c7CiAgICAgICAgIHIuaW5zZXJ0KHBvcyArIDEsIENlbGxTdHJ1Y3Qo
KSk7CiAgICAgICAgIGlmIChyW3Bvc10uaGFzQ2VsbHMoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCmluZGV4IDc2M2RiOTQ1Y2E0ZTIyMDY2ZmNk
ODEzZDE1NTJkZjY5OTEwZmY2YmEuLjA3OTg2MGZmMDZiZmNkOGZlY2UzMDJiZDA2NmQ3YzY4NDA1
MmFlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmgKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kQ29s
dW1uKGludCBwb3MpOwotICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0KTsK
KyAgICB2b2lkIHNwbGl0Q29sdW1uKHVuc2lnbmVkIHBvcywgaW50IGZpcnN0KTsKIAogICAgIExh
eW91dFVuaXQgY2FsY091dGVyQm9yZGVyQmVmb3JlKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBj
YWxjT3V0ZXJCb3JkZXJBZnRlcigpIGNvbnN0OwpAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoK
ICAgICBMYXlvdXRVbml0IG91dGVyQm9yZGVyU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX291dGVy
Qm9yZGVyU3RhcnQ7IH0KICAgICBMYXlvdXRVbml0IG91dGVyQm9yZGVyRW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9vdXRlckJvcmRlckVuZDsgfQogCi0gICAgaW50IG51bVJvd3MoKSBjb25zdCB7IHJl
dHVybiBtX2dyaWRSb3dzOyB9Ci0gICAgaW50IG51bUNvbHVtbnMoKSBjb25zdDsKKyAgICB1bnNp
Z25lZCBudW1Sb3dzKCkgY29uc3QgeyByZXR1cm4gbV9ncmlkUm93czsgfQorICAgIHVuc2lnbmVk
IG51bUNvbHVtbnMoKSBjb25zdDsKICAgICB2b2lkIHJlY2FsY0NlbGxzKCk7CiAgICAgdm9pZCBy
ZWNhbGNDZWxsc0lmTmVlZGVkKCkKICAgICB7CkBAIC0xNDMsNyArMTQzLDcgQEAgcHJpdmF0ZToK
IAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAotICAgIGJv
b2wgZW5zdXJlUm93cyhpbnQpOworICAgIGJvb2wgZW5zdXJlUm93cyh1bnNpZ25lZCk7CiAgICAg
dm9pZCBjbGVhckdyaWQoKTsKIAogICAgIGJvb2wgaGFzT3ZlcmZsb3dpbmdDZWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9vdmVyZmxvd2luZ0NlbGxzLnNpemUoKSB8fCBtX2ZvcmNlU2xvd1BhaW50UGF0
aFdpdGhPdmVyZmxvd2luZ0NlbGw7IH0KQEAgLTE1MywxMSArMTUzLDExIEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPFJvd1N0cnVjdD4gbV9ncmlkOwogICAgIFZlY3RvcjxMYXlvdXRVbml0PiBtX3Jv
d1BvczsKIAotICAgIGludCBtX2dyaWRSb3dzOworICAgIHVuc2lnbmVkIG1fZ3JpZFJvd3M7CiAK
ICAgICAvLyB0aGUgY3VycmVudCBpbnNlcnRpb24gcG9zaXRpb24KLSAgICBpbnQgbV9jQ29sOwot
ICAgIGludCBtX2NSb3c7CisgICAgdW5zaWduZWQgbV9jQ29sOworICAgIHVuc2lnbmVkIG1fY1Jv
dzsKIAogICAgIExheW91dFVuaXQgbV9vdXRlckJvcmRlclN0YXJ0OwogICAgIExheW91dFVuaXQg
bV9vdXRlckJvcmRlckVuZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112702</attachid>
            <date>2011-10-27 10:20:29 -0700</date>
            <delta_ts>2011-10-27 13:38:21 -0700</delta_ts>
            <desc>Changelog update + minor edit.</desc>
            <filename>bug-70369-20111027102028.patch</filename>
            <type>text/plain</type>
            <size>29820</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1OTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjY2NhZmRjMjYwZDVkODVj
MDBlOGE0NWJiMTNiMmVlNjMxY2UzMzc1Li44NGVlMjA0MTVlOTA0MDNjZTY3YmNkMzgyZWJiMThm
YWZiNGY4NzBiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUgQEAKKzIwMTEtMTAtMjcgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVuZGVyVGFi
bGVDZWxsIG1fcm93IGFuZCBtX2NvbHVtbiBzaG91bGQgbm90IGJlIHNpZ25lZCB2YWx1ZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzY5CisKKyAg
ICAgICAgVGhlIGdpc3Qgb2YgdGhlIGNoYW5nZSBpcyB0byB1cGRhdGUgcm93IC8gY29sdW1uIGhh
bmRsaW5nIGluIHRoZSB0YWJsZSdzCisgICAgICAgIHJlbmRlcmluZyBjb2RlIHRvIHVzZSB1bnNp
Z25lZCB2YWx1ZXMuIE5vdCBhbGwgdGhlIGNvZGUgaXMgc3dpdGNoZWQgb3ZlcgorICAgICAgICB0
byB1bnNpZ25lZCBidXQgaXQgaXMgYSBnb29kIHN0YXJ0LgorCisgICAgICAgIFVzaW5nIHVuc2ln
bmVkIG1ha2VzIGEgbG90IG1vcmUgc2Vuc2UgdGhhdCBhbGxvd2luZyBzb21lIG5lZ2F0aXZlIGlu
ZGV4ZXMKKyAgICAgICAgdG8gY3JlZXAgaW4gdGhlIGFsZ29yaXRobXMuIEFsc28gaXQgZW5hYmxl
cyB1cyB0byAiZnJlZSIgdGhlIHVudXNlZCBzaWduZWQKKyAgICAgICAgYml0IG9uIHRoZSAyIFJl
bmRlclRhYmxlQ2VsbCBmaWVsZHMgdGhhdCBjYW4gYmUgdXNlZCB0byBwYWNrIDIgYml0cyBpbiBh
CisgICAgICAgIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOgorICAgICAg
ICBSZW1vdmVkIDIgY2FzdHMgdG8gaW50IGFzIHRoZSBsZWZ0IHNpZGUgbm93IGNvbXB1dGVzIHRv
IGFuIHVuc2lnbmVkIHRvby4KKyAgICAgICAgQWRkZWQgc29tZSBBU1NFUlQgdG8gbWFrZSBzdXJl
IHdlIGRvbid0IGdldCBuZWdhdGl2ZSB2YWx1ZXMgKGNvbFNwYW4gLyByb3dTcGFuCisgICAgICAg
IGFyZSBhbHdheXMgPj0gMSBieSBkZWZpbml0aW9uIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZSkuCisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmhlYWRlck9iamVjdEZv
clNlY3Rpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29s
dW1uLmg6CisgICAgICAgIFN3aXRjaGVkIG1fY29sdW1uSW5kZXggdG8gdW5zaWduZWQgdG8gcmVt
b3ZlIGFueSBzaWduZWQgLyB1bnNpZ25lZCBjb21wYXJpc29ucy4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6c3Bs
aXRDb2x1bW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNhbGNCb3JkZXJFbmQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNlbGxBYm92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2VsbEJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlOjpjZWxsQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjZWxs
QWZ0ZXIpOgorICAgICAgICBNb3N0bHkgbWVjaGFuaWNhbCBjaGFuZ2VzIHRvIGF2b2lkIHNpZ25l
ZCAvIHVuc2lnbmVkIGNvbXBhcmlzb25zIG9yIGNhc3RzLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bnVtRWZmQ29s
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29sVG9FZmZDb2wpOgorICAgICAg
ICBVcGRhdGVkIGEgY291cGxlIG9mIGZ1bmN0aW9ucyB0byB1c2UgYW4gdW5zaWduZWQuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6UmVuZGVyVGFibGVDZWxsKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGVDZWxsLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNv
bCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnNldENvbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnJvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZUNlbGw6OnNldFJvdyk6CisgICAgICAgIFVwZGF0ZWQgYWZ0ZXIgc3dpdGNoaW5nIHRo
ZSBmaWVsZHMgdG8gdW5zaWduZWQuIEFsc28gYWRkZWQgMiBjb25zdGFudHMKKyAgICAgICAgdG8g
Y292ZXIgdGhlIG5vdC1pbml0aWFsaXplZC15ZXQgdmFsdWUgZm9yIHJvdyBhbmQgY29sdW1uIGlu
ZGV4ZXMuCisgICAgICAgIE5vdGU6IHdlIGRvbid0IGVuZm9yY2UgdGhhdCB5b3UgY2FuJ3QgcmVh
Y2ggdGhvc2UgaW5kZXhlcyBidXQgbmVpdGhlcgorICAgICAgICBkaWQgdGhlIHByZXZpb3VzIGNv
ZGUhCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6UmVuZGVyVGFibGVTZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q2VsbExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93TG9naWNhbEhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJTdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2FsY0NlbGxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2xlYXJHcmlkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bnVtQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZVNlY3Rpb246OmFwcGVuZENvbHVtbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKToKKyAgICAgICAgTG90cyBvZiBtZWNoYW5p
Y2FsOiBzaWduZWQgLT4gdW5zaWduZWQgY2hhbmdlcy4gSG93ZXZlciB3ZSBoYWQKKyAgICAgICAg
dG8gY2hhbmdlIHRoZSBsb2dpYyBhIGJpdCBhcyBpdCBhc3N1bWVkIHRoYXQgbV9jUm93IHN0YXJ0
ZWQgYXQKKyAgICAgICAgLTEgYW5kIGluY3JlYXNlZCBmcm9tIHRoZXJlLiBUaGUgbmV3IG1lYW5p
bmcgb2YgbV9jUm93IGlzIHRoZQorICAgICAgICBudW1iZXIgb2Ygcm93cyBzZWVuIGFuZCBtX2NS
b3cgLSAxIGlzIHdoZXJlIHRvIGluc2VydCB5b3VyIG5ldworICAgICAgICBjZWxscy4KKworICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKToKKyAgICAgICAgQ2hl
Y2tlZCB0aGUgY2FsbGVycyBhbmQgYWxsIGluY3JlYXNlIG1fY1JvdyBiZWZvcmUgY2FsbGluZyB0
aGUgZnVuY3Rpb24uCisgICAgICAgIEFkZGVkIGFuIEFTU0VSVCB0byBjYXRjaCB1cCB3cm9uZyB1
c2FnZSBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpudW1Sb3dzKTog
U3dpdGNoZWQgdG8gdW5zaWduZWQuCisKIDIwMTEtMTAtMjcgIFRvbnkgQ2hhbmcgIDx0b255QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICB1c2UgbWFpbi9jcm9zcyBpbnN0ZWFkIG9mIGxvZ2ljYWwg
d2lkdGgvaGVpZ2h0IHdoZW4gdGFsa2luZyBhYm91dCBmbG93IGRpcmVjdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4
IDY1NjE5ZDA5NzFkNTA2YjA1MWM2Y2E3YzMzNGE5MWY3ODQxMjk2ZjcuLmM4MzY5MzZmNGE0MDkz
ZDM4M2RhMTU4YmVjY2MzY2RiOWVmMDU4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKQEAgLTQ5MSwyMCArNDkxLDIyIEBA
IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIEFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbEZvckNvbHVt
bkFuZFJvdyh1bnNpZ25lZCBjb2x1bW4sCiAgICAgICAgICAgICBpZiAoIWNlbGwpIHsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBmaXJzdCB0cnkgcm93cwotICAgICAgICAg
ICAgICAgIGZvciAoaW50IHRlc3RSb3cgPSBzZWN0aW9uU3BlY2lmaWNSb3ctMTsgdGVzdFJvdyA+
PSAwOyAtLXRlc3RSb3cpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB0ZXN0Um93ID0gc2Vj
dGlvblNwZWNpZmljUm93IC0gMTsgdGVzdFJvdyA+PSAwOyAtLXRlc3RSb3cpIHsKICAgICAgICAg
ICAgICAgICAgICAgY2VsbCA9IHRhYmxlU2VjdGlvbi0+cHJpbWFyeUNlbGxBdCh0ZXN0Um93LCBj
b2x1bW4pOwogICAgICAgICAgICAgICAgICAgICAvLyBjZWxsIG92ZXJsYXBwZWQuIHVzZSB0aGlz
IG9uZQotICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbCAmJiAoKGNlbGwtPnJvdygpICsgKGNl
bGwtPnJvd1NwYW4oKS0xKSkgPj0gKGludClzZWN0aW9uU3BlY2lmaWNSb3cpKQorICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoY2VsbC0+cm93U3BhbigpID49IDEpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoY2VsbCAmJiAoKGNlbGwtPnJvdygpICsgKGNlbGwtPnJvd1NwYW4oKSAtIDEpKSA+
PSBzZWN0aW9uU3BlY2lmaWNSb3cpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNlbGwgPSAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIWNlbGwpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gdHJ5IGNvbHMKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgdGVzdENvbCA9IGNv
bHVtbi0xOyB0ZXN0Q29sID49IDA7IC0tdGVzdENvbCkgeworICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB0ZXN0Q29sID0gY29sdW1uIC0gMTsgdGVzdENvbCA+PSAwOyAtLXRlc3RDb2wpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSB0YWJsZVNlY3Rpb24tPnByaW1hcnlDZWxs
QXQoc2VjdGlvblNwZWNpZmljUm93LCB0ZXN0Q29sKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNlbGwgb3ZlcmxhcHBlZC4gdXNlIHRoaXMgb25lCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoY2VsbCAmJiAoKGNlbGwtPmNvbCgpICsgKGNlbGwtPmNvbFNwYW4oKS0xKSkgPj0gKGlu
dCljb2x1bW4pKQorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNlbGwtPnJvd1NwYW4o
KSA+PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsICYmICgoY2VsbC0+Y29s
KCkgKyAoY2VsbC0+Y29sU3BhbigpIC0gMSkpID49IGNvbHVtbikpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsID0gMDsKICAg
ICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCmluZGV4IDU4MWNkYTVkNTJmNGE1
MjZkMzg1MTM4MDJiNjdhYTc4MWEwZWIwNjEuLmM5NDUyMWIxZTc5NzA0MTliMGZjZGYzMzE4ZjYx
YmRjZDA2NzJhN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmhlYWRlck9iamVjdEZv
clNlY3Rpb24oUmVuZGVyVGFibAogICAgIGlmICghc2VjdGlvbikKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgCi0gICAgaW50IG51bUNvbHMgPSBzZWN0aW9uLT5udW1Db2x1bW5zKCk7CisgICAgdW5z
aWduZWQgbnVtQ29scyA9IHNlY3Rpb24tPm51bUNvbHVtbnMoKTsKICAgICBpZiAobV9jb2x1bW5J
bmRleCA+PSBudW1Db2xzKQogICAgICAgICByZXR1cm4gMDsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmggYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oCmlu
ZGV4IGE5MTQ2NTdhNWQ2YmI0YmQ1NzU2NDkwNGQ4MDU1ZjBlZGQzMWQ1MGQuLjAxNGYzMmQ4NDAz
YWJlMzQyODE0MTg4YTMwMjJjMWM2MzFlMmIzOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaApAQCAtNjEsNyAr
NjEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGVsZW1lbnRSZWN0KCkgY29u
c3Q7CiAgICAgCiBwcml2YXRlOiAgICAKLSAgICBpbnQgbV9jb2x1bW5JbmRleDsKKyAgICB1bnNp
Z25lZCBtX2NvbHVtbkluZGV4OwogICAgIExheW91dFJlY3QgbV9jb2x1bW5SZWN0OwogICAgIAog
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlck9iamVjdEZvclNlY3Rpb24oUmVuZGVyVGFi
bGVTZWN0aW9uKiwgYm9vbCB0aFRhZ1JlcXVpcmVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwCmluZGV4IDVjNGRmYjFhNjFlMzU3ZjRmMTY2ZDA1MWUwNmY2ZWM1ZGNi
ZDIyYWIuLjNkMGFlY2QzOGVjMDIzMDI1YjgzOTIzZjA1NjIxNzlmNTAyZDM0YzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtNjM0LDEwICs2MzQsMTAgQEAg
UmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6dG9wTm9uRW1wdHlTZWN0aW9uKCkgY29u
c3QKICAgICByZXR1cm4gc2VjdGlvbjsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6c3BsaXRDb2x1
bW4oaW50IHBvcywgaW50IGZpcnN0U3BhbikKK3ZvaWQgUmVuZGVyVGFibGU6OnNwbGl0Q29sdW1u
KHVuc2lnbmVkIHBvcywgaW50IGZpcnN0U3BhbikKIHsKICAgICAvLyB3ZSBuZWVkIHRvIGFkZCBh
IG5ldyBjb2x1bW5TdHJ1Y3QKLSAgICBpbnQgb2xkU2l6ZSA9IG1fY29sdW1ucy5zaXplKCk7Cisg
ICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29sdW1ucy5zaXplKCk7CiAgICAgbV9jb2x1bW5zLmdy
b3cob2xkU2l6ZSArIDEpOwogICAgIGludCBvbGRTcGFuID0gbV9jb2x1bW5zW3Bvc10uc3BhbjsK
ICAgICBBU1NFUlQob2xkU3BhbiA+IGZpcnN0U3Bhbik7CkBAIC04ODYsNyArODg2LDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlckVuZCgpIGNvbnN0CiAgICAgICAgIGlmICh0
Yi5zdHlsZSgpID4gQkhJRERFTikKICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gdGIud2lkdGgo
KTsKIAotICAgICAgICBpbnQgZW5kQ29sdW1uID0gbnVtRWZmQ29scygpIC0gMTsKKyAgICAgICAg
dW5zaWduZWQgZW5kQ29sdW1uID0gbnVtRWZmQ29scygpIC0gMTsKICAgICAgICAgaWYgKFJlbmRl
clRhYmxlQ29sKiBjb2xHcm91cCA9IGNvbEVsZW1lbnQoZW5kQ29sdW1uKSkgewogICAgICAgICAg
ICAgY29uc3QgQm9yZGVyVmFsdWUmIGdiID0gY29sR3JvdXAtPnN0eWxlKCktPmJvcmRlckVuZCgp
OwogICAgICAgICAgICAgaWYgKGdiLnN0eWxlKCkgPT0gQkhJRERFTikKQEAgLTExMDMsNyArMTEw
Myw3IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNlbGxBYm92ZShjb25zdCBSZW5k
ZXJUYWJsZUNlbGwqIGNlbGwpIGNvbnN0CiAKICAgICAvLyBMb29rIHVwIHRoZSBjZWxsIGluIHRo
ZSBzZWN0aW9uJ3MgZ3JpZCwgd2hpY2ggcmVxdWlyZXMgZWZmZWN0aXZlIGNvbCBpbmRleAogICAg
IGlmIChzZWN0aW9uKSB7Ci0gICAgICAgIGludCBlZmZDb2wgPSBjb2xUb0VmZkNvbChjZWxsLT5j
b2woKSk7CisgICAgICAgIHVuc2lnbmVkIGVmZkNvbCA9IGNvbFRvRWZmQ29sKGNlbGwtPmNvbCgp
KTsKICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0JiBhYm92ZUNlbGwgPSBz
ZWN0aW9uLT5jZWxsQXQockFib3ZlLCBlZmZDb2wpOwogICAgICAgICByZXR1cm4gYWJvdmVDZWxs
LnByaW1hcnlDZWxsKCk7CiAgICAgfSBlbHNlCkBAIC0xMTE1LDkgKzExMTUsOSBAQCBSZW5kZXJU
YWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQmVsb3coY29uc3QgUmVuZGVyVGFibGVDZWxsKiBj
ZWxsKSBjb25zdAogICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVkZWQoKTsKIAogICAgIC8vIEZpbmQg
dGhlIHNlY3Rpb24gYW5kIHJvdyB0byBsb29rIGluCi0gICAgaW50IHIgPSBjZWxsLT5yb3coKSAr
IGNlbGwtPnJvd1NwYW4oKSAtIDE7CisgICAgdW5zaWduZWQgciA9IGNlbGwtPnJvdygpICsgY2Vs
bC0+cm93U3BhbigpIC0gMTsKICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSAwOwot
ICAgIGludCByQmVsb3cgPSAwOworICAgIHVuc2lnbmVkIHJCZWxvdyA9IDA7CiAgICAgaWYgKHIg
PCBjZWxsLT5zZWN0aW9uKCktPm51bVJvd3MoKSAtIDEpIHsKICAgICAgICAgLy8gVGhlIGNlbGwg
aXMgbm90IGluIHRoZSBsYXN0IHJvdywgc28gdXNlIHRoZSBuZXh0IHJvdyBpbiB0aGUgc2VjdGlv
bi4KICAgICAgICAgc2VjdGlvbiA9IGNlbGwtPnNlY3Rpb24oKTsKQEAgLTExMzAsNyArMTEzMCw3
IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNlbGxCZWxvdyhjb25zdCBSZW5kZXJU
YWJsZUNlbGwqIGNlbGwpIGNvbnN0CiAKICAgICAvLyBMb29rIHVwIHRoZSBjZWxsIGluIHRoZSBz
ZWN0aW9uJ3MgZ3JpZCwgd2hpY2ggcmVxdWlyZXMgZWZmZWN0aXZlIGNvbCBpbmRleAogICAgIGlm
IChzZWN0aW9uKSB7Ci0gICAgICAgIGludCBlZmZDb2wgPSBjb2xUb0VmZkNvbChjZWxsLT5jb2wo
KSk7CisgICAgICAgIHVuc2lnbmVkIGVmZkNvbCA9IGNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpKTsK
ICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0JiBiZWxvd0NlbGwgPSBzZWN0
aW9uLT5jZWxsQXQockJlbG93LCBlZmZDb2wpOwogICAgICAgICByZXR1cm4gYmVsb3dDZWxsLnBy
aW1hcnlDZWxsKCk7CiAgICAgfSBlbHNlCkBAIC0xMTQyLDcgKzExNDIsNyBAQCBSZW5kZXJUYWJs
ZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQmVmb3JlKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2Vs
bCkgY29uc3QKICAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAKICAgICBSZW5kZXJUYWJs
ZVNlY3Rpb24qIHNlY3Rpb24gPSBjZWxsLT5zZWN0aW9uKCk7Ci0gICAgaW50IGVmZkNvbCA9IGNv
bFRvRWZmQ29sKGNlbGwtPmNvbCgpKTsKKyAgICB1bnNpZ25lZCBlZmZDb2wgPSBjb2xUb0VmZkNv
bChjZWxsLT5jb2woKSk7CiAgICAgaWYgKCFlZmZDb2wpCiAgICAgICAgIHJldHVybiAwOwogICAg
IApAQCAtMTE1NSw3ICsxMTU1LDcgQEAgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6Y2Vs
bEFmdGVyKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCkgY29uc3QKIHsKICAgICByZWNhbGNT
ZWN0aW9uc0lmTmVlZGVkKCk7CiAKLSAgICBpbnQgZWZmQ29sID0gY29sVG9FZmZDb2woY2VsbC0+
Y29sKCkgKyBjZWxsLT5jb2xTcGFuKCkpOworICAgIHVuc2lnbmVkIGVmZkNvbCA9IGNvbFRvRWZm
Q29sKGNlbGwtPmNvbCgpICsgY2VsbC0+Y29sU3BhbigpKTsKICAgICBpZiAoZWZmQ29sID49IG51
bUVmZkNvbHMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGNlbGwtPnNlY3Rpb24o
KS0+cHJpbWFyeUNlbGxBdChjZWxsLT5yb3coKSwgZWZmQ29sKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmgKaW5kZXggOGE2NDMzY2RiOTM1YmE4NDE0M2M4YzQ5YzA5ZDhmYjZl
YjRkZDViMi4uNmQ4MWVhZmUzZjkzNDdkNDYzZTUzYjc3ZWVmNDBiMjEyZmRlZDFlYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTE0NiwxMiArMTQ2LDEyIEBAIHB1
YmxpYzoKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgdGFibGUgaGFzIG5v
IG5vbi1lbXB0eSBzZWN0aW9ucy4KICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHRvcE5vbkVtcHR5
U2VjdGlvbigpIGNvbnN0OwogCi0gICAgdm9pZCBzcGxpdENvbHVtbihpbnQgcG9zLCBpbnQgZmly
c3RTcGFuKTsKKyAgICB2b2lkIHNwbGl0Q29sdW1uKHVuc2lnbmVkIHBvcywgaW50IGZpcnN0U3Bh
bik7CiAgICAgdm9pZCBhcHBlbmRDb2x1bW4oaW50IHNwYW4pOwotICAgIGludCBudW1FZmZDb2xz
KCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIG51bUVm
ZkNvbHMoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnMuc2l6ZSgpOyB9CiAgICAgaW50IHNwYW5P
ZkVmZkNvbChpbnQgZWZmQ29sKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnNbZWZmQ29sXS5zcGFu
OyB9CiAgICAgCi0gICAgaW50IGNvbFRvRWZmQ29sKHVuc2lnbmVkIGNvbCkgY29uc3QKKyAgICB1
bnNpZ25lZCBjb2xUb0VmZkNvbCh1bnNpZ25lZCBjb2wpIGNvbnN0CiAgICAgewogICAgICAgICB1
bnNpZ25lZCBlZmZDb2wgPSAwOwogICAgICAgICB1bnNpZ25lZCBudW1Db2xzID0gbnVtRWZmQ29s
cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAppbmRl
eCBmZGI0NWRiNjlmZWE2MTIxYjgxOTM3YmY1YTMyMGM1YmFmMWVhMjIyLi42MWU0Nzg4NDY2MDk1
NWEyODMxZmY3OTMxZDlhNDlmZmJiYzYyNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNDMsOCArNDMsOCBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCiBSZW5kZXJUYWJsZUNlbGw6OlJlbmRlclRhYmxlQ2VsbChOb2RlKiBub2Rl
KQogICAgIDogUmVuZGVyQmxvY2sobm9kZSkKLSAgICAsIG1fcm93KC0xKQotICAgICwgbV9jb2x1
bW4oLTEpCisgICAgLCBtX3Jvdyh1bnNldFJvd0luZGV4KQorICAgICwgbV9jb2x1bW4odW5zZXRD
b2x1bW5JbmRleCkKICAgICAsIG1faW50cmluc2ljUGFkZGluZ0JlZm9yZSgwKQogICAgICwgbV9p
bnRyaW5zaWNQYWRkaW5nQWZ0ZXIoMCkKICAgICAsIG1fY2VsbFdpZHRoQ2hhbmdlZChmYWxzZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAppbmRleCA3NTVhODU0
ZTRlYWQ3Zjg3MDQzODE1ZjY4Njc2MTIyOTdkNGZjOTYwLi41OTQ0OTdmODM5NjFjMWJiMGU3MWUw
MmUyMmU5ZTNjZGFhMmE5NzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5oCkBAIC0yOSw2ICsyOSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8v
IEZJWE1FOiBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlc2UgaW5kZXhlcyB0byBiZSByZWFjaGVkIGZv
ciBhIHRhYmxlIGJpZyBlbm91Z2guCisvLyBXZSB3b3VsZCBuZWVkIHRvIGVuZm9yY2UgYSBtYXhp
bWFsIGluZGV4IG9uIGJvdGggcm93cyBhbmQgY29sdW1ucy4KK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCB1bnNldENvbHVtbkluZGV4ID0gMHhGRkZGRkZGRjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB1
bnNldFJvd0luZGV4ID0gMHhGRkZGRkZGRjsKKwogY2xhc3MgUmVuZGVyVGFibGVDZWxsIDogcHVi
bGljIFJlbmRlckJsb2NrIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZW5kZXJUYWJsZUNlbGwo
Tm9kZSopOwpAQCAtNDMsMTAgKzQ4LDE5IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgZnJvbSBI
VE1MVGFibGVDZWxsRWxlbWVudC4KICAgICB2b2lkIGNvbFNwYW5PclJvd1NwYW5DaGFuZ2VkKCk7
CiAKLSAgICBpbnQgY29sKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW47IH0KLSAgICB2b2lkIHNl
dENvbChpbnQgY29sKSB7IG1fY29sdW1uID0gY29sOyB9Ci0gICAgaW50IHJvdygpIGNvbnN0IHsg
cmV0dXJuIG1fcm93OyB9Ci0gICAgdm9pZCBzZXRSb3coaW50IHJvdykgeyBtX3JvdyA9IHJvdzsg
fQorICAgIHZvaWQgc2V0Q29sKHVuc2lnbmVkIGNvbCkgeyBtX2NvbHVtbiA9IGNvbDsgfQorICAg
IHVuc2lnbmVkIGNvbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9jb2x1bW4gIT0g
dW5zZXRDb2x1bW5JbmRleCk7CisgICAgICAgIHJldHVybiBtX2NvbHVtbjsKKyAgICB9CisKKyAg
ICB2b2lkIHNldFJvdyh1bnNpZ25lZCByb3cpIHsgbV9yb3cgPSByb3c7IH0KKyAgICB1bnNpZ25l
ZCByb3coKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcm93ICE9IHVuc2V0Um93SW5k
ZXgpOworICAgICAgICByZXR1cm4gbV9yb3c7CisgICAgfQogCiAgICAgUmVuZGVyVGFibGVTZWN0
aW9uKiBzZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdG9SZW5kZXJUYWJsZVNlY3Rpb24ocGFyZW50
KCktPnBhcmVudCgpKTsgfQogICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IHRvUmVuZGVyVGFibGUocGFyZW50KCktPnBhcmVudCgpLT5wYXJlbnQoKSk7IH0KQEAgLTE0NSw4
ICsxNTksOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwYWludENvbGxhcHNlZEJvcmRlcihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAKLSAgICBpbnQgbV9yb3c7Ci0gICAg
aW50IG1fY29sdW1uOworICAgIHVuc2lnbmVkIG1fcm93OworICAgIHVuc2lnbmVkIG1fY29sdW1u
OwogICAgIGludCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmU7CiAgICAgaW50IG1faW50cmluc2lj
UGFkZGluZ0FmdGVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwCmluZGV4IGNjNTM5M2M5ZDUyMzExODllNmJiMmZhMDFlOGFlNGVlMTQ3ZmZm
YWEuLmYwZDU2OTBhYjg0MDlhNWU1NjdiMzNjM2NiNjk2MDYxOWVjNTg5ZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC02MCw3ICs2
MCw3IEBAIFJlbmRlclRhYmxlU2VjdGlvbjo6UmVuZGVyVGFibGVTZWN0aW9uKE5vZGUqIG5vZGUp
CiAgICAgOiBSZW5kZXJCb3gobm9kZSkKICAgICAsIG1fZ3JpZFJvd3MoMCkKICAgICAsIG1fY0Nv
bCgwKQotICAgICwgbV9jUm93KC0xKQorICAgICwgbV9jUm93KDApCiAgICAgLCBtX291dGVyQm9y
ZGVyU3RhcnQoMCkKICAgICAsIG1fb3V0ZXJCb3JkZXJFbmQoMCkKICAgICAsIG1fb3V0ZXJCb3Jk
ZXJCZWZvcmUoMCkKQEAgLTE0OCwxNyArMTQ4LDE4IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9u
OjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
CiAgICAgaWYgKGJlZm9yZUNoaWxkKQogICAgICAgICBzZXROZWVkc0NlbGxSZWNhbGMoKTsKIAor
ICAgIHVuc2lnbmVkIGluc2VydGlvblJvdyA9IG1fY1JvdzsKICAgICArK21fY1JvdzsKICAgICBt
X2NDb2wgPSAwOwogCiAgICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvd3MKLSAgICBp
ZiAoIWVuc3VyZVJvd3MobV9jUm93ICsgMSkpCisgICAgaWYgKCFlbnN1cmVSb3dzKG1fY1Jvdykp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRlcmVyID0gdG9S
ZW5kZXJUYWJsZVJvdyhjaGlsZCk7CisgICAgbV9ncmlkW2luc2VydGlvblJvd10ucm93UmVuZGVy
ZXIgPSB0b1JlbmRlclRhYmxlUm93KGNoaWxkKTsKIAogICAgIGlmICghYmVmb3JlQ2hpbGQpCi0g
ICAgICAgIHNldFJvd0xvZ2ljYWxIZWlnaHRUb1Jvd1N0eWxlTG9naWNhbEhlaWdodElmTm90UmVs
YXRpdmUoJm1fZ3JpZFttX2NSb3ddKTsKKyAgICAgICAgc2V0Um93TG9naWNhbEhlaWdodFRvUm93
U3R5bGVMb2dpY2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZSgmbV9ncmlkW2luc2VydGlvblJvd10pOwog
CiAgICAgLy8gSWYgdGhlIG5leHQgcmVuZGVyZXIgaXMgYWN0dWFsbHkgd3JhcHBlZCBpbiBhbiBh
bm9ueW1vdXMgdGFibGUgcm93LCB3ZSBuZWVkIHRvIGdvIHVwIGFuZCBmaW5kIHRoYXQuCiAgICAg
d2hpbGUgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQpAQCAt
MTc1LDE5ICsxNzYsMTkgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlbW92ZUNoaWxkKFJl
bmRlck9iamVjdCogb2xkQ2hpbGQpCiAgICAgUmVuZGVyQm94OjpyZW1vdmVDaGlsZChvbGRDaGls
ZCk7CiB9CiAKLWJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGludCBudW1Sb3dz
KQorYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246OmVuc3VyZVJvd3ModW5zaWduZWQgbnVtUm93cykK
IHsKLSAgICBpbnQgblJvd3MgPSBtX2dyaWRSb3dzOworICAgIHVuc2lnbmVkIG5Sb3dzID0gbV9n
cmlkUm93czsKICAgICBpZiAobnVtUm93cyA+IG5Sb3dzKSB7Ci0gICAgICAgIGlmIChudW1Sb3dz
ID4gc3RhdGljX2Nhc3Q8aW50PihtX2dyaWQuc2l6ZSgpKSkgeworICAgICAgICBpZiAobnVtUm93
cyA+IG1fZ3JpZC5zaXplKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBtYXhTaXplID0gbnVtZXJp
Y19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoUm93U3RydWN0KTsKICAgICAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KG51bVJvd3MpID4gbWF4U2l6ZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBtX2dyaWQuZ3JvdyhudW1Sb3dzKTsKICAg
ICAgICAgfQogICAgICAgICBtX2dyaWRSb3dzID0gbnVtUm93czsKLSAgICAgICAgaW50IG5Db2xz
ID0gbWF4KDEsIHRhYmxlKCktPm51bUVmZkNvbHMoKSk7Ci0gICAgICAgIGZvciAoaW50IHIgPSBu
Um93czsgciA8IG51bVJvd3M7IHIrKykgeworICAgICAgICB1bnNpZ25lZCBuQ29scyA9IG1heCgx
dSwgdGFibGUoKS0+bnVtRWZmQ29scygpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCByID0gblJv
d3M7IHIgPCBudW1Sb3dzOyByKyspIHsKICAgICAgICAgICAgIG1fZ3JpZFtyXS5yb3cgPSBuZXcg
Um93KG5Db2xzKTsKICAgICAgICAgICAgIG1fZ3JpZFtyXS5yb3dSZW5kZXJlciA9IDA7CiAgICAg
ICAgICAgICBtX2dyaWRbcl0uYmFzZWxpbmUgPSAwOwpAQCAtMjAzLDcgKzIwNCwxMCBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFJlbmRl
clRhYmxlUm93KiByb3cpCiAgICAgaW50IHJTcGFuID0gY2VsbC0+cm93U3BhbigpOwogICAgIGlu
dCBjU3BhbiA9IGNlbGwtPmNvbFNwYW4oKTsKICAgICBWZWN0b3I8UmVuZGVyVGFibGU6OkNvbHVt
blN0cnVjdD4mIGNvbHVtbnMgPSB0YWJsZSgpLT5jb2x1bW5zKCk7Ci0gICAgaW50IG5Db2xzID0g
Y29sdW1ucy5zaXplKCk7CisgICAgdW5zaWduZWQgbkNvbHMgPSBjb2x1bW5zLnNpemUoKTsKKyAg
ICAvLyBhZGRDZWxsIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBtX2NSb3cgaGFzIGJlZW4g
aW5jcmVtZW50ZWQuCisgICAgQVNTRVJUKG1fY1Jvdyk7CisgICAgdW5zaWduZWQgaW5zZXJ0aW9u
Um93ID0gbV9jUm93IC0gMTsKIAogICAgIC8vICMjIyBtb3ppbGxhIHN0aWxsIHNlZW1zIHRvIGRv
IHRoZSBvbGQgSFRNTCB3YXksIGV2ZW4gZm9yIHN0cmljdCBEVEQKICAgICAvLyAoc2VlIHRoZSBh
bm5vdGF0aW9uIG9uIHRhYmxlIGNlbGwgbGF5b3V0aW5nIGluIHRoZSBDU1Mgc3BlY3MgYW5kIHRo
ZSB0ZXN0Y2FzZSBiZWxvdzoKQEAgLTIxMSwyNCArMjE1LDI0IEBAIHZvaWQgUmVuZGVyVGFibGVT
ZWN0aW9uOjphZGRDZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyVGFibGVSb3cqIHJv
dykKICAgICAvLyA8VFI+PFREPjEgPFREIHJvd3NwYW49IjIiPjIgPFREPjMgPFREPjQKICAgICAv
LyA8VFI+PFREIGNvbHNwYW49IjIiPjUKICAgICAvLyA8L1RBQkxFPgotICAgIHdoaWxlIChtX2ND
b2wgPCBuQ29scyAmJiAoY2VsbEF0KG1fY1JvdywgbV9jQ29sKS5oYXNDZWxscygpIHx8IGNlbGxB
dChtX2NSb3csIG1fY0NvbCkuaW5Db2xTcGFuKSkKKyAgICB3aGlsZSAobV9jQ29sIDwgbkNvbHMg
JiYgKGNlbGxBdChpbnNlcnRpb25Sb3csIG1fY0NvbCkuaGFzQ2VsbHMoKSB8fCBjZWxsQXQoaW5z
ZXJ0aW9uUm93LCBtX2NDb2wpLmluQ29sU3BhbikpCiAgICAgICAgIG1fY0NvbCsrOwogCiAgICAg
aWYgKHJTcGFuID09IDEpIHsKICAgICAgICAgLy8gd2UgaWdub3JlIGhlaWdodCBzZXR0aW5ncyBv
biByb3dzcGFuIGNlbGxzCiAgICAgICAgIExlbmd0aCBsb2dpY2FsSGVpZ2h0ID0gY2VsbC0+c3R5
bGUoKS0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBpZiAobG9naWNhbEhlaWdodC5pc1Bvc2l0
aXZlKCkgfHwgKGxvZ2ljYWxIZWlnaHQuaXNSZWxhdGl2ZSgpICYmIGxvZ2ljYWxIZWlnaHQudmFs
dWUoKSA+PSAwKSkgewotICAgICAgICAgICAgTGVuZ3RoIGNSb3dMb2dpY2FsSGVpZ2h0ID0gbV9n
cmlkW21fY1Jvd10ubG9naWNhbEhlaWdodDsKKyAgICAgICAgICAgIExlbmd0aCBjUm93TG9naWNh
bEhlaWdodCA9IG1fZ3JpZFtpbnNlcnRpb25Sb3ddLmxvZ2ljYWxIZWlnaHQ7CiAgICAgICAgICAg
ICBzd2l0Y2ggKGxvZ2ljYWxIZWlnaHQudHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBQ
ZXJjZW50OgogICAgICAgICAgICAgICAgICAgICBpZiAoIShjUm93TG9naWNhbEhlaWdodC5pc1Bl
cmNlbnQoKSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIChjUm93TG9naWNhbEhlaWdodC5p
c1BlcmNlbnQoKSAmJiBjUm93TG9naWNhbEhlaWdodC5wZXJjZW50KCkgPCBsb2dpY2FsSGVpZ2h0
LnBlcmNlbnQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyaWRbbV9jUm93XS5sb2dp
Y2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jp
ZFtpbnNlcnRpb25Sb3ddLmxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0OwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBGaXhlZDoKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNSb3dMb2dpY2FsSGVpZ2h0LnR5cGUoKSA8IFBlcmNlbnQgfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgIChjUm93TG9naWNhbEhlaWdodC5pc0ZpeGVkKCkgJiYg
Y1Jvd0xvZ2ljYWxIZWlnaHQudmFsdWUoKSA8IGxvZ2ljYWxIZWlnaHQudmFsdWUoKSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyaWRbbV9jUm93XS5sb2dpY2FsSGVpZ2h0ID0gbG9naWNh
bEhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JpZFtpbnNlcnRpb25Sb3ddLmxv
Z2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0OwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjYXNlIFJlbGF0aXZlOgogICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CkBAIC0yMzgsMTIgKzI0MiwxMiBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChS
ZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFJlbmRlclRhYmxlUm93KiByb3cpCiAgICAgfQogCiAgICAg
Ly8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvd3MKLSAgICBpZiAoIWVuc3VyZVJvd3MobV9j
Um93ICsgclNwYW4pKQorICAgIGlmICghZW5zdXJlUm93cyhpbnNlcnRpb25Sb3cgKyByU3Bhbikp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRlcmVyID0gcm93
OworICAgIG1fZ3JpZFtpbnNlcnRpb25Sb3ddLnJvd1JlbmRlcmVyID0gcm93OwogCi0gICAgaW50
IGNvbCA9IG1fY0NvbDsKKyAgICB1bnNpZ25lZCBjb2wgPSBtX2NDb2w7CiAgICAgLy8gdGVsbCB0
aGUgY2VsbCB3aGVyZSBpdCBpcwogICAgIGJvb2wgaW5Db2xTcGFuID0gZmFsc2U7CiAgICAgd2hp
bGUgKGNTcGFuKSB7CkBAIC0yNTcsNyArMjYxLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246
OmFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBSZW5kZXJUYWJsZVJvdyogcm93KQogICAg
ICAgICAgICAgY3VycmVudFNwYW4gPSBjb2x1bW5zW21fY0NvbF0uc3BhbjsKICAgICAgICAgfQog
ICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJTcGFuOyByKyspIHsKLSAgICAgICAgICAgIENl
bGxTdHJ1Y3QmIGMgPSBjZWxsQXQobV9jUm93ICsgciwgbV9jQ29sKTsKKyAgICAgICAgICAgIENl
bGxTdHJ1Y3QmIGMgPSBjZWxsQXQoaW5zZXJ0aW9uUm93ICsgciwgbV9jQ29sKTsKICAgICAgICAg
ICAgIEFTU0VSVChjZWxsKTsKICAgICAgICAgICAgIGMuY2VsbHMuYXBwZW5kKGNlbGwpOwogICAg
ICAgICAgICAgLy8gSWYgY2VsbHMgb3ZlcmxhcCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCBm
b3IgcGFpbnRpbmcuCkBAIC0yNzAsNyArMjc0LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246
OmFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBSZW5kZXJUYWJsZVJvdyogcm93KQogICAg
ICAgICBjU3BhbiAtPSBjdXJyZW50U3BhbjsKICAgICAgICAgaW5Db2xTcGFuID0gdHJ1ZTsKICAg
ICB9Ci0gICAgY2VsbC0+c2V0Um93KG1fY1Jvdyk7CisgICAgY2VsbC0+c2V0Um93KGluc2VydGlv
blJvdyk7CiAgICAgY2VsbC0+c2V0Q29sKHRhYmxlKCktPmVmZkNvbFRvQ29sKGNvbCkpOwogfQog
CkBAIC0yODAsNyArMjg0LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNldENlbGxMb2dp
Y2FsV2lkdGhzKCkKIAogICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3
KCkpOwogICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9ncmlkUm93czsgaSsrKSB7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JpZFJvd3M7IGkrKykgewogICAgICAgICBS
b3cmIHJvdyA9ICptX2dyaWRbaV0ucm93OwogICAgICAgICBpbnQgY29scyA9IHJvdy5zaXplKCk7
CiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29sczsgaisrKSB7CkBAIC0zMzIsNyArMzM2
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0
KCkKICAgICBtX3Jvd1Bvcy5yZXNpemUobV9ncmlkUm93cyArIDEpOwogICAgIG1fcm93UG9zWzBd
ID0gc3BhY2luZzsKIAotICAgIGZvciAoaW50IHIgPSAwOyByIDwgbV9ncmlkUm93czsgcisrKSB7
CisgICAgZm9yICh1bnNpZ25lZCByID0gMDsgciA8IG1fZ3JpZFJvd3M7IHIrKykgewogICAgICAg
ICBtX3Jvd1Bvc1tyICsgMV0gPSAwOwogICAgICAgICBtX2dyaWRbcl0uYmFzZWxpbmUgPSAwOwog
ICAgICAgICBMYXlvdXRVbml0IGJhc2VsaW5lID0gMDsKQEAgLTM0Myw5ICszNDcsOSBAQCBMYXlv
dXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jvd0xvZ2ljYWxIZWlnaHQoKQogICAgICAg
ICBtX3Jvd1Bvc1tyICsgMV0gPSBtYXgobV9yb3dQb3NbciArIDFdLCBwb3MpOwogCiAgICAgICAg
IFJvdyogcm93ID0gbV9ncmlkW3JdLnJvdzsKLSAgICAgICAgaW50IHRvdGFsQ29scyA9IHJvdy0+
c2l6ZSgpOworICAgICAgICB1bnNpZ25lZCB0b3RhbENvbHMgPSByb3ctPnNpemUoKTsKIAotICAg
ICAgICBmb3IgKGludCBjID0gMDsgYyA8IHRvdGFsQ29sczsgYysrKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgYyA9IDA7IGMgPCB0b3RhbENvbHM7IGMrKykgewogICAgICAgICAgICAgQ2VsbFN0
cnVjdCYgY3VycmVudCA9IGNlbGxBdChyLCBjKTsKICAgICAgICAgICAgIGNlbGwgPSBjdXJyZW50
LnByaW1hcnlDZWxsKCk7CiAKQEAgLTM1NSw3ICszNTksNyBAQCBMYXlvdXRVbml0IFJlbmRlclRh
YmxlU2VjdGlvbjo6Y2FsY1Jvd0xvZ2ljYWxIZWlnaHQoKQogICAgICAgICAgICAgaWYgKChjZWxs
LT5yb3coKSArIGNlbGwtPnJvd1NwYW4oKSAtIDEpID4gcikKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgaW50IGluZHggPSBtYXgociAtIGNlbGwtPnJvd1NwYW4oKSAr
IDEsIDApOworICAgICAgICAgICAgdW5zaWduZWQgaW5keCA9IG1heChyIC0gY2VsbC0+cm93U3Bh
bigpICsgMSwgMHUpOwogCiAgICAgICAgICAgICBpZiAoY2VsbC0+aGFzT3ZlcnJpZGVIZWlnaHQo
KSkgewogICAgICAgICAgICAgICAgIGlmICghc3RhdGVQdXNoZXIuZGlkUHVzaCgpKSB7CkBAIC00
NDEsOCArNDQ1LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3Mo
TGF5b3V0VW5pdCB0b0FkZCkKIAogICAgIExheW91dFVuaXQgckhlaWdodDsKICAgICBpbnQgcmlu
ZHg7Ci0gICAgaW50IHRvdGFsUm93cyA9IG1fZ3JpZFJvd3M7Ci0gICAgCisgICAgdW5zaWduZWQg
dG90YWxSb3dzID0gbV9ncmlkUm93czsKKwogICAgIC8vIFNldCB0aGUgd2lkdGggb2Ygb3VyIHNl
Y3Rpb24gbm93LiAgVGhlIHJvd3Mgd2lsbCBhbHNvIGJlIHRoaXMgd2lkdGguCiAgICAgc2V0TG9n
aWNhbFdpZHRoKHRhYmxlKCktPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAgICAgbV9vdmVyZmxv
dy5jbGVhcigpOwpAQCAtNDU1LDcgKzQ1OSw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0
aW9uOjpsYXlvdXRSb3dzKExheW91dFVuaXQgdG9BZGQpCiAgICAgICAgIExheW91dFVuaXQgZGgg
PSB0b0FkZDsKICAgICAgICAgaW50IHRvdGFsUGVyY2VudCA9IDA7CiAgICAgICAgIGludCBudW1B
dXRvID0gMDsKLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKICAgICAg
ICAgICAgIGlmIChtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5pc0F1dG8oKSkKICAgICAgICAgICAg
ICAgICBudW1BdXRvKys7CiAgICAgICAgICAgICBlbHNlIGlmIChtX2dyaWRbcl0ubG9naWNhbEhl
aWdodC5pc1BlcmNlbnQoKSkKQEAgLTQ2Niw3ICs0NzAsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRh
YmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0IHRvQWRkKQogICAgICAgICAgICAgTGF5
b3V0VW5pdCBhZGQgPSAwOwogICAgICAgICAgICAgdG90YWxQZXJjZW50ID0gbWluKHRvdGFsUGVy
Y2VudCwgMTAwKTsKICAgICAgICAgICAgIGludCByaCA9IG1fcm93UG9zWzFdIC0gbV9yb3dQb3Nb
MF07Ci0gICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHRvdGFsUm93czsgcisrKSB7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKICAg
ICAgICAgICAgICAgICBpZiAodG90YWxQZXJjZW50ID4gMCAmJiBtX2dyaWRbcl0ubG9naWNhbEhl
aWdodC5pc1BlcmNlbnQoKSkgewogICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvQWRk
ID0gbWluKGRoLCBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PigodG90YWxIZWlnaHQgKiBtX2dyaWRb
cl0ubG9naWNhbEhlaWdodC5wZXJjZW50KCkgLyAxMDApIC0gcmgpKTsKICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgdG9BZGQgaXMgbmVnYXRpdmUsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBzaHJp
bmsgdGhlIHJvdyAodGhpcyBidWcKQEAgLTQ3Niw2ICs0ODAsNyBAQCBMYXlvdXRVbml0IFJlbmRl
clRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0IHRvQWRkKQogICAgICAgICAgICAg
ICAgICAgICBkaCAtPSB0b0FkZDsKICAgICAgICAgICAgICAgICAgICAgdG90YWxQZXJjZW50IC09
IG1fZ3JpZFtyXS5sb2dpY2FsSGVpZ2h0LnBlcmNlbnQoKTsKICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHRvdGFsUm93cyA+PSAxKTsKICAgICAgICAgICAgICAgICBp
ZiAociA8IHRvdGFsUm93cyAtIDEpCiAgICAgICAgICAgICAgICAgICAgIHJoID0gbV9yb3dQb3Nb
ciArIDJdIC0gbV9yb3dQb3NbciArIDFdOwogICAgICAgICAgICAgICAgIG1fcm93UG9zW3IgKyAx
XSArPSBhZGQ7CkBAIC00ODQsNyArNDg5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rp
b246OmxheW91dFJvd3MoTGF5b3V0VW5pdCB0b0FkZCkKICAgICAgICAgaWYgKG51bUF1dG8pIHsK
ICAgICAgICAgICAgIC8vIGRpc3RyaWJ1dGUgb3ZlciB2YXJpYWJsZSBjb2xzCiAgICAgICAgICAg
ICBMYXlvdXRVbml0IGFkZCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHRv
dGFsUm93czsgcisrKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgdG90
YWxSb3dzOyByKyspIHsKICAgICAgICAgICAgICAgICBpZiAobnVtQXV0byA+IDAgJiYgbV9ncmlk
W3JdLmxvZ2ljYWxIZWlnaHQuaXNBdXRvKCkpIHsKICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCB0b0FkZCA9IGRoIC8gbnVtQXV0bzsKICAgICAgICAgICAgICAgICAgICAgYWRkICs9IHRv
QWRkOwpAQCAtNDk5LDcgKzUwNCw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjps
YXlvdXRSb3dzKExheW91dFVuaXQgdG9BZGQpCiAgICAgICAgICAgICBMYXlvdXRVbml0IHRvdCA9
IG1fcm93UG9zW3RvdGFsUm93c107CiAgICAgICAgICAgICBMYXlvdXRVbml0IGFkZCA9IDA7CiAg
ICAgICAgICAgICBMYXlvdXRVbml0IHByZXYgPSBtX3Jvd1Bvc1swXTsKLSAgICAgICAgICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAgICAgICAgICAgICAgIC8vIHdl
aWdodCB3aXRoIHRoZSBvcmlnaW5hbCBoZWlnaHQKICAgICAgICAgICAgICAgICBhZGQgKz0gZGgg
KiAobV9yb3dQb3NbciArIDFdIC0gcHJldikgLyB0b3Q7CiAgICAgICAgICAgICAgICAgcHJldiA9
IG1fcm93UG9zW3IgKyAxXTsKQEAgLTUxNCw3ICs1MTksNyBAQCBMYXlvdXRVbml0IFJlbmRlclRh
YmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0IHRvQWRkKQogCiAgICAgTGF5b3V0U3Rh
dGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgTGF5b3V0U2l6ZSh4KCksIHko
KSksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpOwogCi0gICAgZm9yIChp
bnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgeworICAgIGZvciAodW5zaWduZWQgciA9IDA7
IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAgICAgICAvLyBTZXQgdGhlIHJvdydzIHgveSBwb3Np
dGlvbiBhbmQgd2lkdGgvaGVpZ2h0LgogICAgICAgICBpZiAoUmVuZGVyVGFibGVSb3cqIHJvd1Jl
bmRlcmVyID0gbV9ncmlkW3JdLnJvd1JlbmRlcmVyKSB7CiAgICAgICAgICAgICByb3dSZW5kZXJl
ci0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQoMCwgbV9yb3dQb3Nbcl0pKTsKQEAgLTY3OSw3ICs2
ODQsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRV
bml0IHRvQWRkKQogICAgIGJvb2wgaGFzT3ZlcmZsb3dpbmdDZWxsID0gZmFsc2U7CiAjZW5kaWYK
ICAgICAvLyBOb3cgdGhhdCBvdXIgaGVpZ2h0IGhhcyBiZWVuIGRldGVybWluZWQsIGFkZCBpbiBv
dmVyZmxvdyBmcm9tIGNlbGxzLgotICAgIGZvciAoaW50IHIgPSAwOyByIDwgdG90YWxSb3dzOyBy
KyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKICAg
ICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBuRWZmQ29sczsgYysrKSB7CiAgICAgICAgICAgICBD
ZWxsU3RydWN0JiBjcyA9IGNlbGxBdChyLCBjKTsKICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2Vs
bCogY2VsbCA9IGNzLnByaW1hcnlDZWxsKCk7CkBAIC04MzQsNyArODM5LDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclN0YXJ0KCkgY29uc3QKICAgICB9
CiAKICAgICBib29sIGFsbEhpZGRlbiA9IHRydWU7Ci0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBt
X2dyaWRSb3dzOyByKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgbV9ncmlkUm93
czsgcisrKSB7CiAgICAgICAgIGNvbnN0IENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQociwg
MCk7CiAgICAgICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQogICAgICAgICAgICAgY29udGlu
dWU7CkBAIC04NzgsNyArODgzLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNh
bGNPdXRlckJvcmRlckVuZCgpIGNvbnN0CiAgICAgfQogCiAgICAgYm9vbCBhbGxIaWRkZW4gPSB0
cnVlOwotICAgIGZvciAoaW50IHIgPSAwOyByIDwgbV9ncmlkUm93czsgcisrKSB7CisgICAgZm9y
ICh1bnNpZ25lZCByID0gMDsgciA8IG1fZ3JpZFJvd3M7IHIrKykgewogICAgICAgICBjb25zdCBD
ZWxsU3RydWN0JiBjdXJyZW50ID0gY2VsbEF0KHIsIHRvdGFsQ29scyAtIDEpOwogICAgICAgICBp
ZiAoIWN1cnJlbnQuaGFzQ2VsbHMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTEyNCwy
MCArMTEyOSwyMSBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6aW1hZ2VDaGFuZ2VkKFdyYXBw
ZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCopCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVj
YWxjQ2VsbHMoKQogewogICAgIG1fY0NvbCA9IDA7Ci0gICAgbV9jUm93ID0gLTE7CisgICAgbV9j
Um93ID0gMDsKICAgICBjbGVhckdyaWQoKTsKICAgICBtX2dyaWRSb3dzID0gMDsKIAogICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIGlmIChyb3ctPmlzVGFibGVSb3coKSkgewotICAgICAgICAg
ICAgbV9jUm93Kys7CisgICAgICAgICAgICBpbnQgaW5zZXJ0aW9uUm93ID0gbV9jUm93OworICAg
ICAgICAgICAgKyttX2NSb3c7CiAgICAgICAgICAgICBtX2NDb2wgPSAwOwotICAgICAgICAgICAg
aWYgKCFlbnN1cmVSb3dzKG1fY1JvdyArIDEpKQorICAgICAgICAgICAgaWYgKCFlbnN1cmVSb3dz
KG1fY1JvdykpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIFJlbmRlclRhYmxlUm93KiB0YWJsZVJvdyA9IHRvUmVuZGVyVGFibGVSb3cocm93KTsKLSAg
ICAgICAgICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRlcmVyID0gdGFibGVSb3c7Ci0gICAgICAg
ICAgICBzZXRSb3dMb2dpY2FsSGVpZ2h0VG9Sb3dTdHlsZUxvZ2ljYWxIZWlnaHRJZk5vdFJlbGF0
aXZlKCZtX2dyaWRbbV9jUm93XSk7CisgICAgICAgICAgICBtX2dyaWRbaW5zZXJ0aW9uUm93XS5y
b3dSZW5kZXJlciA9IHRhYmxlUm93OworICAgICAgICAgICAgc2V0Um93TG9naWNhbEhlaWdodFRv
Um93U3R5bGVMb2dpY2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZSgmbV9ncmlkW2luc2VydGlvblJvd10p
OwogCiAgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGls
ZCgpOyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAg
IGlmIChjZWxsLT5pc1RhYmxlQ2VsbCgpKQpAQCAtMTE1OCwxNyArMTE2NCwxNyBAQCB2b2lkIFJl
bmRlclRhYmxlU2VjdGlvbjo6c2V0TmVlZHNDZWxsUmVjYWxjKCkKIAogdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmNsZWFyR3JpZCgpCiB7Ci0gICAgaW50IHJvd3MgPSBtX2dyaWRSb3dzOworICAg
IHVuc2lnbmVkIHJvd3MgPSBtX2dyaWRSb3dzOwogICAgIHdoaWxlIChyb3dzLS0pCiAgICAgICAg
IGRlbGV0ZSBtX2dyaWRbcm93c10ucm93OwogfQogCi1pbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpu
dW1Db2x1bW5zKCkgY29uc3QKK3Vuc2lnbmVkIFJlbmRlclRhYmxlU2VjdGlvbjo6bnVtQ29sdW1u
cygpIGNvbnN0CiB7Ci0gICAgaW50IHJlc3VsdCA9IDA7CisgICAgdW5zaWduZWQgcmVzdWx0ID0g
MDsKICAgICAKLSAgICBmb3IgKGludCByID0gMDsgciA8IG1fZ3JpZFJvd3M7ICsrcikgewotICAg
ICAgICBmb3IgKGludCBjID0gcmVzdWx0OyBjIDwgdGFibGUoKS0+bnVtRWZmQ29scygpOyArK2Mp
IHsKKyAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgbV9ncmlkUm93czsgKytyKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgYyA9IHJlc3VsdDsgYyA8IHRhYmxlKCktPm51bUVmZkNvbHMoKTsg
KytjKSB7CiAgICAgICAgICAgICBjb25zdCBDZWxsU3RydWN0JiBjZWxsID0gY2VsbEF0KHIsIGMp
OwogICAgICAgICAgICAgaWYgKGNlbGwuaGFzQ2VsbHMoKSB8fCBjZWxsLmluQ29sU3BhbikKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBjOwpAQCAtMTE4MCwxNyArMTE4NiwxNyBAQCBpbnQgUmVu
ZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKCkgY29uc3QKIAogdm9pZCBSZW5kZXJUYWJsZVNl
Y3Rpb246OmFwcGVuZENvbHVtbihpbnQgcG9zKQogewotICAgIGZvciAoaW50IHJvdyA9IDA7IHJv
dyA8IG1fZ3JpZFJvd3M7ICsrcm93KQorICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwg
bV9ncmlkUm93czsgKytyb3cpCiAgICAgICAgIG1fZ3JpZFtyb3ddLnJvdy0+cmVzaXplKHBvcyAr
IDEpOwogfQogCi12b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4oaW50IHBvcywg
aW50IGZpcnN0KQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKHVuc2lnbmVk
IHBvcywgaW50IGZpcnN0KQogewogICAgIEFTU0VSVCghbV9uZWVkc0NlbGxSZWNhbGMpOwogCiAg
ICAgaWYgKG1fY0NvbCA+IHBvcykKICAgICAgICAgbV9jQ29sKys7Ci0gICAgZm9yIChpbnQgcm93
ID0gMDsgcm93IDwgbV9ncmlkUm93czsgKytyb3cpIHsKKyAgICBmb3IgKHVuc2lnbmVkIHJvdyA9
IDA7IHJvdyA8IG1fZ3JpZFJvd3M7ICsrcm93KSB7CiAgICAgICAgIFJvdyYgciA9ICptX2dyaWRb
cm93XS5yb3c7CiAgICAgICAgIHIuaW5zZXJ0KHBvcyArIDEsIENlbGxTdHJ1Y3QoKSk7CiAgICAg
ICAgIGlmIChyW3Bvc10uaGFzQ2VsbHMoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oCmluZGV4IDc2M2RiOTQ1Y2E0ZTIyMDY2ZmNkODEzZDE1NTJk
ZjY5OTEwZmY2YmEuLjA3OTg2MGZmMDZiZmNkOGZlY2UzMDJiZDA2NmQ3YzY4NDA1MmFlNTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKQEAgLTkx
LDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kQ29sdW1uKGludCBw
b3MpOwotICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0KTsKKyAgICB2b2lk
IHNwbGl0Q29sdW1uKHVuc2lnbmVkIHBvcywgaW50IGZpcnN0KTsKIAogICAgIExheW91dFVuaXQg
Y2FsY091dGVyQm9yZGVyQmVmb3JlKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjYWxjT3V0ZXJC
b3JkZXJBZnRlcigpIGNvbnN0OwpAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoKICAgICBMYXlv
dXRVbml0IG91dGVyQm9yZGVyU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX291dGVyQm9yZGVyU3Rh
cnQ7IH0KICAgICBMYXlvdXRVbml0IG91dGVyQm9yZGVyRW5kKCkgY29uc3QgeyByZXR1cm4gbV9v
dXRlckJvcmRlckVuZDsgfQogCi0gICAgaW50IG51bVJvd3MoKSBjb25zdCB7IHJldHVybiBtX2dy
aWRSb3dzOyB9Ci0gICAgaW50IG51bUNvbHVtbnMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBudW1S
b3dzKCkgY29uc3QgeyByZXR1cm4gbV9ncmlkUm93czsgfQorICAgIHVuc2lnbmVkIG51bUNvbHVt
bnMoKSBjb25zdDsKICAgICB2b2lkIHJlY2FsY0NlbGxzKCk7CiAgICAgdm9pZCByZWNhbGNDZWxs
c0lmTmVlZGVkKCkKICAgICB7CkBAIC0xNDMsNyArMTQzLDcgQEAgcHJpdmF0ZToKIAogICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAotICAgIGJvb2wgZW5zdXJl
Um93cyhpbnQpOworICAgIGJvb2wgZW5zdXJlUm93cyh1bnNpZ25lZCk7CiAgICAgdm9pZCBjbGVh
ckdyaWQoKTsKIAogICAgIGJvb2wgaGFzT3ZlcmZsb3dpbmdDZWxsKCkgY29uc3QgeyByZXR1cm4g
bV9vdmVyZmxvd2luZ0NlbGxzLnNpemUoKSB8fCBtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVy
Zmxvd2luZ0NlbGw7IH0KQEAgLTE1MywxMSArMTUzLDExIEBAIHByaXZhdGU6CiAgICAgVmVjdG9y
PFJvd1N0cnVjdD4gbV9ncmlkOwogICAgIFZlY3RvcjxMYXlvdXRVbml0PiBtX3Jvd1BvczsKIAot
ICAgIGludCBtX2dyaWRSb3dzOworICAgIHVuc2lnbmVkIG1fZ3JpZFJvd3M7CiAKICAgICAvLyB0
aGUgY3VycmVudCBpbnNlcnRpb24gcG9zaXRpb24KLSAgICBpbnQgbV9jQ29sOwotICAgIGludCBt
X2NSb3c7CisgICAgdW5zaWduZWQgbV9jQ29sOworICAgIHVuc2lnbmVkIG1fY1JvdzsKIAogICAg
IExheW91dFVuaXQgbV9vdXRlckJvcmRlclN0YXJ0OwogICAgIExheW91dFVuaXQgbV9vdXRlckJv
cmRlckVuZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112739</attachid>
            <date>2011-10-27 13:38:23 -0700</date>
            <delta_ts>2011-10-27 18:12:19 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-70369-20111027133822.patch</filename>
            <type>text/plain</type>
            <size>30049</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg2MjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5MmUzNmU2YzJlOTEyODc3
NTljOTQ0ZTY4Y2M0N2FlYTJjZmUzZjExLi5mYjA0ZmE2N2RiMGIyNjRkZTg4ZWM1MjY3YzNjM2Qy
NTdjY2U4MTc5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUgQEAKKzIwMTEtMTAtMjcgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVuZGVyVGFi
bGVDZWxsIG1fcm93IGFuZCBtX2NvbHVtbiBzaG91bGQgbm90IGJlIHNpZ25lZCB2YWx1ZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzY5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBy
ZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgIFRoZSBnaXN0IG9mIHRoZSBjaGFuZ2UgaXMgdG8g
dXBkYXRlIHJvdyAvIGNvbHVtbiBoYW5kbGluZyBpbiB0aGUgdGFibGUncworICAgICAgICByZW5k
ZXJpbmcgY29kZSB0byB1c2UgdW5zaWduZWQgdmFsdWVzLiBOb3QgYWxsIHRoZSBjb2RlIGlzIHN3
aXRjaGVkIG92ZXIKKyAgICAgICAgdG8gdW5zaWduZWQgYnV0IHRoaXMgaXMgYSBnb29kIHN0YXJ0
LgorCisgICAgICAgIFVzaW5nIHVuc2lnbmVkIG1ha2VzIGEgbG90IG1vcmUgc2Vuc2UgdGhhdCBh
bGxvd2luZyBzb21lIG5lZ2F0aXZlIGluZGV4ZXMKKyAgICAgICAgdG8gY3JlZXAgaW4gdGhlIGFs
Z29yaXRobXMuIEFsc28gaXQgZW5hYmxlcyB1cyB0byAiZnJlZSIgdGhlIHVudXNlZCBzaWduZWQK
KyAgICAgICAgYml0IG9uIHRoZSAyIFJlbmRlclRhYmxlQ2VsbCBmaWVsZHMgdGhhdCBjYW4gYmUg
dXNlZCB0byBwYWNrIDIgYml0cyBpbiBhCisgICAgICAgIGZvbGxvdy11cCBwYXRjaC4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbEZvckNvbHVtbkFuZFJvdyk6CisgICAgICAg
IFJlbW92ZWQgMiBjYXN0cyB0byBpbnQgYXMgdGhlIGxlZnQgc2lkZSBub3cgY29tcHV0ZXMgdG8g
YW4gdW5zaWduZWQgdG9vLgorICAgICAgICBBZGRlZCBzb21lIEFTU0VSVCB0byBtYWtlIHN1cmUg
d2UgZG9uJ3QgZ2V0IG5lZ2F0aXZlIHZhbHVlcyAoY29sU3BhbiAvIHJvd1NwYW4KKyAgICAgICAg
YXJlIGFsd2F5cyA+PSAxIGJ5IGRlZmluaXRpb24gYnV0IGJldHRlciB0byBiZSBzYWZlKS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbjo6aGVhZGVyT2JqZWN0Rm9y
U2VjdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1
bW4uaDoKKyAgICAgICAgU3dpdGNoZWQgbV9jb2x1bW5JbmRleCB0byB1bnNpZ25lZCB0byByZW1v
dmUgYW55IHNpZ25lZCAvIHVuc2lnbmVkIGNvbXBhcmlzb25zLgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzcGxp
dENvbHVtbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlckVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlOjpjZWxsQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGU6OmNlbGxCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNlbGxB
ZnRlcik6CisgICAgICAgIE1vc3RseSBtZWNoYW5pY2FsIGNoYW5nZXMgdG8gYXZvaWQgc2lnbmVk
IC8gdW5zaWduZWQgY29tcGFyaXNvbnMgb3IgY2FzdHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpudW1FZmZDb2xz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjb2xUb0VmZkNvbCk6CisgICAgICAg
IFVwZGF0ZWQgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIHRvIHVzZSBhbiB1bnNpZ25lZC4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVDZWxsOjpSZW5kZXJUYWJsZUNlbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29s
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2V0Q29sKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6cm93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlQ2VsbDo6c2V0Um93KToKKyAgICAgICAgVXBkYXRlZCBhZnRlciBzd2l0Y2hpbmcgdGhl
IGZpZWxkcyB0byB1bnNpZ25lZC4gQWxzbyBhZGRlZCAyIGNvbnN0YW50cworICAgICAgICB0byBj
b3ZlciB0aGUgbm90LWluaXRpYWxpemVkLXlldCB2YWx1ZSBmb3Igcm93IGFuZCBjb2x1bW4gaW5k
ZXhlcy4KKyAgICAgICAgTm90ZTogd2UgZG9uJ3QgZW5mb3JjZSB0aGF0IHlvdSBjYW4ndCByZWFj
aCB0aG9zZSBpbmRleGVzIGJ1dCBuZWl0aGVyCisgICAgICAgIGRpZCB0aGUgcHJldmlvdXMgY29k
ZSEKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmVuc3VyZVJvd3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzZXRDZWxsTG9naWNhbFdpZHRocyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyRW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVjYWxjQ2VsbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjbGVhckdyaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlU2VjdGlvbjo6YXBwZW5kQ29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4pOgorICAgICAgICBMb3RzIG9mIG1lY2hhbmlj
YWw6IHNpZ25lZCAtPiB1bnNpZ25lZCBjaGFuZ2VzLiBIb3dldmVyIHdlIGhhZAorICAgICAgICB0
byBjaGFuZ2UgdGhlIGxvZ2ljIGEgYml0IGFzIGl0IGFzc3VtZWQgdGhhdCBtX2NSb3cgc3RhcnRl
ZCBhdAorICAgICAgICAtMSBhbmQgaW5jcmVhc2VkIGZyb20gdGhlcmUuIFRoZSBuZXcgbWVhbmlu
ZyBvZiBtX2NSb3cgaXMgdGhlCisgICAgICAgIG51bWJlciBvZiByb3dzIHNlZW4gYW5kIG1fY1Jv
dyAtIDEgaXMgd2hlcmUgdG8gaW5zZXJ0IHlvdXIgbmV3CisgICAgICAgIGNlbGxzLgorCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwpOgorICAgICAgICBDaGVj
a2VkIHRoZSBjYWxsZXJzIGFuZCBhbGwgaW5jcmVhc2UgbV9jUm93IGJlZm9yZSBjYWxsaW5nIHRo
ZSBmdW5jdGlvbi4KKyAgICAgICAgQWRkZWQgYW4gQVNTRVJUIHRvIGNhdGNoIHVwIHdyb25nIHVz
YWdlIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om51bVJvd3MpOiBT
d2l0Y2hlZCB0byB1bnNpZ25lZC4KKwogMjAxMS0xMC0yNyAgTmF0IER1Y2EgIDxuZHVjYUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBFbmNhcHN1bGF0ZSBzdGF0ZSBtYWNoaW5l
IHBhcnRzIG9mIHNjaGVkdWxpbmcgaW4gQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAppbmRl
eCA2NTYxOWQwOTcxZDUwNmIwNTFjNmNhN2MzMzRhOTFmNzg0MTI5NmY3Li5jODM2OTM2ZjRhNDA5
M2QzODNkYTE1OGJlY2NjM2NkYjllZjA1ODAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCkBAIC00OTEsMjAgKzQ5MSwyMiBA
QCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxGb3JDb2x1
bW5BbmRSb3codW5zaWduZWQgY29sdW1uLAogICAgICAgICAgICAgaWYgKCFjZWxsKSB7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gZmlyc3QgdHJ5IHJvd3MKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCB0ZXN0Um93ID0gc2VjdGlvblNwZWNpZmljUm93LTE7IHRlc3RSb3cg
Pj0gMDsgLS10ZXN0Um93KSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgdGVzdFJvdyA9IHNl
Y3Rpb25TcGVjaWZpY1JvdyAtIDE7IHRlc3RSb3cgPj0gMDsgLS10ZXN0Um93KSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNlbGwgPSB0YWJsZVNlY3Rpb24tPnByaW1hcnlDZWxsQXQodGVzdFJvdywg
Y29sdW1uKTsKICAgICAgICAgICAgICAgICAgICAgLy8gY2VsbCBvdmVybGFwcGVkLiB1c2UgdGhp
cyBvbmUKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwgJiYgKChjZWxsLT5yb3coKSArIChj
ZWxsLT5yb3dTcGFuKCktMSkpID49IChpbnQpc2VjdGlvblNwZWNpZmljUm93KSkKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGNlbGwtPnJvd1NwYW4oKSA+PSAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNlbGwgJiYgKChjZWxsLT5yb3coKSArIChjZWxsLT5yb3dTcGFuKCkgLSAxKSkg
Pj0gc2VjdGlvblNwZWNpZmljUm93KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBjZWxsID0gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFjZWxsKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIHRyeSBjb2xzCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHRlc3RDb2wgPSBj
b2x1bW4tMTsgdGVzdENvbCA+PSAwOyAtLXRlc3RDb2wpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgdGVzdENvbCA9IGNvbHVtbiAtIDE7IHRlc3RDb2wgPj0gMDsgLS10ZXN0Q29sKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsID0gdGFibGVTZWN0aW9uLT5wcmltYXJ5Q2Vs
bEF0KHNlY3Rpb25TcGVjaWZpY1JvdywgdGVzdENvbCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBjZWxsIG92ZXJsYXBwZWQuIHVzZSB0aGlzIG9uZQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNlbGwgJiYgKChjZWxsLT5jb2woKSArIChjZWxsLT5jb2xTcGFuKCktMSkpID49IChp
bnQpY29sdW1uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjZWxsLT5yb3dTcGFu
KCkgPj0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbCAmJiAoKGNlbGwtPmNv
bCgpICsgKGNlbGwtPmNvbFNwYW4oKSAtIDEpKSA+PSBjb2x1bW4pKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCA9IDA7CiAg
ICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcAppbmRleCA1ODFjZGE1ZDUyZjRh
NTI2ZDM4NTEzODAyYjY3YWE3ODFhMGViMDYxLi5jOTQ1MjFiMWU3OTcwNDE5YjBmY2RmMzMxOGY2
MWJkY2QwNjcyYTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCkBAIC0xMjIsNyArMTIyLDcgQEAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFkZXJPYmplY3RG
b3JTZWN0aW9uKFJlbmRlclRhYmwKICAgICBpZiAoIXNlY3Rpb24pCiAgICAgICAgIHJldHVybiAw
OwogICAgIAotICAgIGludCBudW1Db2xzID0gc2VjdGlvbi0+bnVtQ29sdW1ucygpOworICAgIHVu
c2lnbmVkIG51bUNvbHMgPSBzZWN0aW9uLT5udW1Db2x1bW5zKCk7CiAgICAgaWYgKG1fY29sdW1u
SW5kZXggPj0gbnVtQ29scykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaApp
bmRleCBhOTE0NjU3YTVkNmJiNGJkNTc1NjQ5MDRkODA1NWYwZWRkMzFkNTBkLi4wMTRmMzJkODQw
M2FiZTM0MjgxNDE4OGEzMDIyYzFjNjMxZTJiMzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmgKQEAgLTYxLDcg
KzYxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBlbGVtZW50UmVjdCgpIGNv
bnN0OwogICAgIAogcHJpdmF0ZTogICAgCi0gICAgaW50IG1fY29sdW1uSW5kZXg7CisgICAgdW5z
aWduZWQgbV9jb2x1bW5JbmRleDsKICAgICBMYXlvdXRSZWN0IG1fY29sdW1uUmVjdDsKICAgICAK
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJPYmplY3RGb3JTZWN0aW9uKFJlbmRlclRh
YmxlU2VjdGlvbiosIGJvb2wgdGhUYWdSZXF1aXJlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAppbmRleCA1YzRkZmIxYTYxZTM1N2Y0ZjE2NmQwNTFlMDZmNmVjNWRj
YmQyMmFiLi45NTE4Nzk4M2ZhODVjYmY5NWQ0ZmNmMzE4OGNmYjIwOTFmYzk4MmNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTYzNCwyMSArNjM0LDIxIEBA
IFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OnRvcE5vbkVtcHR5U2VjdGlvbigpIGNv
bnN0CiAgICAgcmV0dXJuIHNlY3Rpb247CiB9CiAKLXZvaWQgUmVuZGVyVGFibGU6OnNwbGl0Q29s
dW1uKGludCBwb3MsIGludCBmaXJzdFNwYW4pCit2b2lkIFJlbmRlclRhYmxlOjpzcGxpdENvbHVt
bih1bnNpZ25lZCBwb3NpdGlvbiwgaW50IGZpcnN0U3BhbikKIHsKICAgICAvLyB3ZSBuZWVkIHRv
IGFkZCBhIG5ldyBjb2x1bW5TdHJ1Y3QKLSAgICBpbnQgb2xkU2l6ZSA9IG1fY29sdW1ucy5zaXpl
KCk7CisgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29sdW1ucy5zaXplKCk7CiAgICAgbV9jb2x1
bW5zLmdyb3cob2xkU2l6ZSArIDEpOwogICAgIGludCBvbGRTcGFuID0gbV9jb2x1bW5zW3Bvc10u
c3BhbjsKICAgICBBU1NFUlQob2xkU3BhbiA+IGZpcnN0U3Bhbik7CiAgICAgbV9jb2x1bW5zW3Bv
c10uc3BhbiA9IGZpcnN0U3BhbjsKLSAgICBtZW1tb3ZlKG1fY29sdW1ucy5kYXRhKCkgKyBwb3Mg
KyAxLCBtX2NvbHVtbnMuZGF0YSgpICsgcG9zLCAob2xkU2l6ZSAtIHBvcykgKiBzaXplb2YoQ29s
dW1uU3RydWN0KSk7Ci0gICAgbV9jb2x1bW5zW3BvcyArIDFdLnNwYW4gPSBvbGRTcGFuIC0gZmly
c3RTcGFuOworICAgIG1lbW1vdmUobV9jb2x1bW5zLmRhdGEoKSArIHBvc2l0aW9uICsgMSwgbV9j
b2x1bW5zLmRhdGEoKSArIHBvc2l0aW9uLCAob2xkU2l6ZSAtIHBvc2l0aW9uKSAqIHNpemVvZihD
b2x1bW5TdHJ1Y3QpKTsKKyAgICBtX2NvbHVtbnNbcG9zaXRpb24gKyAxXS5zcGFuID0gb2xkU3Bh
biAtIGZpcnN0U3BhbjsKIAogICAgIC8vIGNoYW5nZSB3aWR0aCBvZiBhbGwgcm93cy4KICAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24o
KSkKLSAgICAgICAgICAgIHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKS0+c3BsaXRDb2x1bW4o
cG9zLCBmaXJzdFNwYW4pOworICAgICAgICAgICAgdG9SZW5kZXJUYWJsZVNlY3Rpb24oY2hpbGQp
LT5zcGxpdENvbHVtbihwb3NpdGlvbiwgZmlyc3RTcGFuKTsKICAgICB9CiAKICAgICBtX2NvbHVt
blBvcy5ncm93KG51bUVmZkNvbHMoKSArIDEpOwpAQCAtODg2LDcgKzg4Niw3IEBAIExheW91dFVu
aXQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJFbmQoKSBjb25zdAogICAgICAgICBpZiAodGIuc3R5
bGUoKSA+IEJISURERU4pCiAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IHRiLndpZHRoKCk7CiAK
LSAgICAgICAgaW50IGVuZENvbHVtbiA9IG51bUVmZkNvbHMoKSAtIDE7CisgICAgICAgIHVuc2ln
bmVkIGVuZENvbHVtbiA9IG51bUVmZkNvbHMoKSAtIDE7CiAgICAgICAgIGlmIChSZW5kZXJUYWJs
ZUNvbCogY29sR3JvdXAgPSBjb2xFbGVtZW50KGVuZENvbHVtbikpIHsKICAgICAgICAgICAgIGNv
bnN0IEJvcmRlclZhbHVlJiBnYiA9IGNvbEdyb3VwLT5zdHlsZSgpLT5ib3JkZXJFbmQoKTsKICAg
ICAgICAgICAgIGlmIChnYi5zdHlsZSgpID09IEJISURERU4pCkBAIC0xMTAzLDcgKzExMDMsNyBA
QCBSZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQWJvdmUoY29uc3QgUmVuZGVyVGFi
bGVDZWxsKiBjZWxsKSBjb25zdAogCiAgICAgLy8gTG9vayB1cCB0aGUgY2VsbCBpbiB0aGUgc2Vj
dGlvbidzIGdyaWQsIHdoaWNoIHJlcXVpcmVzIGVmZmVjdGl2ZSBjb2wgaW5kZXgKICAgICBpZiAo
c2VjdGlvbikgewotICAgICAgICBpbnQgZWZmQ29sID0gY29sVG9FZmZDb2woY2VsbC0+Y29sKCkp
OworICAgICAgICB1bnNpZ25lZCBlZmZDb2wgPSBjb2xUb0VmZkNvbChjZWxsLT5jb2woKSk7CiAg
ICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVjdCYgYWJvdmVDZWxsID0gc2VjdGlv
bi0+Y2VsbEF0KHJBYm92ZSwgZWZmQ29sKTsKICAgICAgICAgcmV0dXJuIGFib3ZlQ2VsbC5wcmlt
YXJ5Q2VsbCgpOwogICAgIH0gZWxzZQpAQCAtMTExNSw5ICsxMTE1LDkgQEAgUmVuZGVyVGFibGVD
ZWxsKiBSZW5kZXJUYWJsZTo6Y2VsbEJlbG93KGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCkg
Y29uc3QKICAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAKICAgICAvLyBGaW5kIHRoZSBz
ZWN0aW9uIGFuZCByb3cgdG8gbG9vayBpbgotICAgIGludCByID0gY2VsbC0+cm93KCkgKyBjZWxs
LT5yb3dTcGFuKCkgLSAxOworICAgIHVuc2lnbmVkIHIgPSBjZWxsLT5yb3coKSArIGNlbGwtPnJv
d1NwYW4oKSAtIDE7CiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gMDsKLSAgICBp
bnQgckJlbG93ID0gMDsKKyAgICB1bnNpZ25lZCByQmVsb3cgPSAwOwogICAgIGlmIChyIDwgY2Vs
bC0+c2VjdGlvbigpLT5udW1Sb3dzKCkgLSAxKSB7CiAgICAgICAgIC8vIFRoZSBjZWxsIGlzIG5v
dCBpbiB0aGUgbGFzdCByb3csIHNvIHVzZSB0aGUgbmV4dCByb3cgaW4gdGhlIHNlY3Rpb24uCiAg
ICAgICAgIHNlY3Rpb24gPSBjZWxsLT5zZWN0aW9uKCk7CkBAIC0xMTMwLDcgKzExMzAsNyBAQCBS
ZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQmVsb3coY29uc3QgUmVuZGVyVGFibGVD
ZWxsKiBjZWxsKSBjb25zdAogCiAgICAgLy8gTG9vayB1cCB0aGUgY2VsbCBpbiB0aGUgc2VjdGlv
bidzIGdyaWQsIHdoaWNoIHJlcXVpcmVzIGVmZmVjdGl2ZSBjb2wgaW5kZXgKICAgICBpZiAoc2Vj
dGlvbikgewotICAgICAgICBpbnQgZWZmQ29sID0gY29sVG9FZmZDb2woY2VsbC0+Y29sKCkpOwor
ICAgICAgICB1bnNpZ25lZCBlZmZDb2wgPSBjb2xUb0VmZkNvbChjZWxsLT5jb2woKSk7CiAgICAg
ICAgIFJlbmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVjdCYgYmVsb3dDZWxsID0gc2VjdGlvbi0+
Y2VsbEF0KHJCZWxvdywgZWZmQ29sKTsKICAgICAgICAgcmV0dXJuIGJlbG93Q2VsbC5wcmltYXJ5
Q2VsbCgpOwogICAgIH0gZWxzZQpAQCAtMTE0Miw3ICsxMTQyLDcgQEAgUmVuZGVyVGFibGVDZWxs
KiBSZW5kZXJUYWJsZTo6Y2VsbEJlZm9yZShjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpIGNv
bnN0CiAgICAgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyVGFibGVTZWN0
aW9uKiBzZWN0aW9uID0gY2VsbC0+c2VjdGlvbigpOwotICAgIGludCBlZmZDb2wgPSBjb2xUb0Vm
ZkNvbChjZWxsLT5jb2woKSk7CisgICAgdW5zaWduZWQgZWZmQ29sID0gY29sVG9FZmZDb2woY2Vs
bC0+Y29sKCkpOwogICAgIGlmICghZWZmQ29sKQogICAgICAgICByZXR1cm4gMDsKICAgICAKQEAg
LTExNTUsNyArMTE1NSw3IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNlbGxBZnRl
cihjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpIGNvbnN0CiB7CiAgICAgcmVjYWxjU2VjdGlv
bnNJZk5lZWRlZCgpOwogCi0gICAgaW50IGVmZkNvbCA9IGNvbFRvRWZmQ29sKGNlbGwtPmNvbCgp
ICsgY2VsbC0+Y29sU3BhbigpKTsKKyAgICB1bnNpZ25lZCBlZmZDb2wgPSBjb2xUb0VmZkNvbChj
ZWxsLT5jb2woKSArIGNlbGwtPmNvbFNwYW4oKSk7CiAgICAgaWYgKGVmZkNvbCA+PSBudW1FZmZD
b2xzKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBjZWxsLT5zZWN0aW9uKCktPnBy
aW1hcnlDZWxsQXQoY2VsbC0+cm93KCksIGVmZkNvbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5oCmluZGV4IDhhNjQzM2NkYjkzNWJhODQxNDNjOGM0OWMwOWQ4ZmI2ZWI0ZGQ1
YjIuLmMxOWQ2MzVhMjMwYTY3ODExODA5YTY5MzQwMWEwYTZlZmJjZTNjYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCkBAIC0xNDYsMTggKzE0NiwxOCBAQCBwdWJsaWM6
CiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIHRhYmxlIGhhcyBubyBub24t
ZW1wdHkgc2VjdGlvbnMuCiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiB0b3BOb25FbXB0eVNlY3Rp
b24oKSBjb25zdDsKIAotICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0U3Bh
bik7CisgICAgdm9pZCBzcGxpdENvbHVtbih1bnNpZ25lZCBwb3NpdGlvbiwgaW50IGZpcnN0U3Bh
bik7CiAgICAgdm9pZCBhcHBlbmRDb2x1bW4oaW50IHNwYW4pOwotICAgIGludCBudW1FZmZDb2xz
KCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIG51bUVm
ZkNvbHMoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnMuc2l6ZSgpOyB9CiAgICAgaW50IHNwYW5P
ZkVmZkNvbChpbnQgZWZmQ29sKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnNbZWZmQ29sXS5zcGFu
OyB9CiAgICAgCi0gICAgaW50IGNvbFRvRWZmQ29sKHVuc2lnbmVkIGNvbCkgY29uc3QKKyAgICB1
bnNpZ25lZCBjb2xUb0VmZkNvbCh1bnNpZ25lZCBjb2x1bW4pIGNvbnN0CiAgICAgewotICAgICAg
ICB1bnNpZ25lZCBlZmZDb2wgPSAwOwotICAgICAgICB1bnNpZ25lZCBudW1Db2xzID0gbnVtRWZm
Q29scygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBlZmZDb2wgPCBudW1Db2xzICYm
IGMgKyBtX2NvbHVtbnNbZWZmQ29sXS5zcGFuIC0gMSA8IGNvbDsgKytlZmZDb2wpCi0gICAgICAg
ICAgICBjICs9IG1fY29sdW1uc1tlZmZDb2xdLnNwYW47Ci0gICAgICAgIHJldHVybiBlZmZDb2w7
CisgICAgICAgIHVuc2lnbmVkIGVmZkNvbHVtbiA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bUNv
bHVtbnMgPSBudW1FZmZDb2xzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgYyA9IDA7IGVmZkNv
bHVtbiA8IG51bUNvbHVtbnMgJiYgYyArIG1fY29sdW1uc1tlZmZDb2x1bW5dLnNwYW4gLSAxIDwg
Y29sdW1uOyArK2VmZkNvbHVtbikKKyAgICAgICAgICAgIGMgKz0gbV9jb2x1bW5zW2VmZkNvbHVt
bl0uc3BhbjsKKyAgICAgICAgcmV0dXJuIGVmZkNvbHVtbjsKICAgICB9CiAgICAgCiAgICAgaW50
IGVmZkNvbFRvQ29sKGludCBlZmZDb2wpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwCmluZGV4IGZkYjQ1ZGI2OWZlYTYxMjFiODE5MzdiZjVhMzIw
YzViYWYxZWEyMjIuLjYxZTQ3ODg0NjYwOTU1YTI4MzFmZjc5MzFkOWE0OWZmYmJjNjI1MjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCkBAIC00Myw4
ICs0Myw4IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFJlbmRlclRhYmxlQ2VsbDo6
UmVuZGVyVGFibGVDZWxsKE5vZGUqIG5vZGUpCiAgICAgOiBSZW5kZXJCbG9jayhub2RlKQotICAg
ICwgbV9yb3coLTEpCi0gICAgLCBtX2NvbHVtbigtMSkKKyAgICAsIG1fcm93KHVuc2V0Um93SW5k
ZXgpCisgICAgLCBtX2NvbHVtbih1bnNldENvbHVtbkluZGV4KQogICAgICwgbV9pbnRyaW5zaWNQ
YWRkaW5nQmVmb3JlKDApCiAgICAgLCBtX2ludHJpbnNpY1BhZGRpbmdBZnRlcigwKQogICAgICwg
bV9jZWxsV2lkdGhDaGFuZ2VkKGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5oCmluZGV4IDc1NWE4NTRlNGVhZDdmODcwNDM4MTVmNjg2NzYxMjI5N2Q0ZmM5
NjAuLmU3MTQyZGYzNzcyNDcyNmU0NzY1N2JjMDczNDhiYzZmYzE0NjM0ZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKQEAgLTI5LDYgKzI5LDExIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IEl0IGlzIHBvc3NpYmxlIGZvciB0aGVz
ZSBpbmRleGVzIHRvIGJlIHJlYWNoZWQgZm9yIGEgdGFibGUgYmlnIGVub3VnaC4KKy8vIFdlIHdv
dWxkIG5lZWQgdG8gZW5mb3JjZSBhIG1heGltYWwgaW5kZXggb24gYm90aCByb3dzIGFuZCBjb2x1
bW5zLgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVuc2V0Q29sdW1uSW5kZXggPSAweEZGRkZGRkZG
Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVuc2V0Um93SW5kZXggPSAweEZGRkZGRkZGOworCiBj
bGFzcyBSZW5kZXJUYWJsZUNlbGwgOiBwdWJsaWMgUmVuZGVyQmxvY2sgewogcHVibGljOgogICAg
IGV4cGxpY2l0IFJlbmRlclRhYmxlQ2VsbChOb2RlKik7CkBAIC00MywxMCArNDgsMTkgQEAgcHVi
bGljOgogICAgIC8vIENhbGxlZCBmcm9tIEhUTUxUYWJsZUNlbGxFbGVtZW50LgogICAgIHZvaWQg
Y29sU3Bhbk9yUm93U3BhbkNoYW5nZWQoKTsKIAotICAgIGludCBjb2woKSBjb25zdCB7IHJldHVy
biBtX2NvbHVtbjsgfQotICAgIHZvaWQgc2V0Q29sKGludCBjb2wpIHsgbV9jb2x1bW4gPSBjb2w7
IH0KLSAgICBpbnQgcm93KCkgY29uc3QgeyByZXR1cm4gbV9yb3c7IH0KLSAgICB2b2lkIHNldFJv
dyhpbnQgcm93KSB7IG1fcm93ID0gcm93OyB9CisgICAgdm9pZCBzZXRDb2wodW5zaWduZWQgY29s
dW1uKSB7IG1fY29sdW1uID0gY29sdW1uOyB9CisgICAgdW5zaWduZWQgY29sKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2NvbHVtbiAhPSB1bnNldENvbHVtbkluZGV4KTsKKyAgICAg
ICAgcmV0dXJuIG1fY29sdW1uOworICAgIH0KKworICAgIHZvaWQgc2V0Um93KHVuc2lnbmVkIHJv
dykgeyBtX3JvdyA9IHJvdzsgfQorICAgIHVuc2lnbmVkIHJvdygpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV9yb3cgIT0gdW5zZXRSb3dJbmRleCk7CisgICAgICAgIHJldHVybiBtX3Jv
dzsKKyAgICB9CiAKICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiB0b1JlbmRlclRhYmxlU2VjdGlvbihwYXJlbnQoKS0+cGFyZW50KCkpOyB9CiAgICAgUmVu
ZGVyVGFibGUqIHRhYmxlKCkgY29uc3QgeyByZXR1cm4gdG9SZW5kZXJUYWJsZShwYXJlbnQoKS0+
cGFyZW50KCktPnBhcmVudCgpKTsgfQpAQCAtMTQ1LDggKzE1OSw4IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHBhaW50Q29sbGFwc2VkQm9yZGVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91
dFJlY3QmKTsKIAotICAgIGludCBtX3JvdzsKLSAgICBpbnQgbV9jb2x1bW47CisgICAgdW5zaWdu
ZWQgbV9yb3c7CisgICAgdW5zaWduZWQgbV9jb2x1bW47CiAgICAgaW50IG1faW50cmluc2ljUGFk
ZGluZ0JlZm9yZTsKICAgICBpbnQgbV9pbnRyaW5zaWNQYWRkaW5nQWZ0ZXI7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggMDc1Zjg3
ZGZkNzdiZWE1YzY0YWFiY2U1NGU1YWM0NjRhZWQ1ODYzZi4uMGY4NDM0ZWMxNTVhOTEyNTI0MWI0
Y2NkODQ4ZTdjM2EwZjA2N2JmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IHNldFJvd0xvZ2ljYWxIZWlnaHRUb1Jvd1N0eWxlTG9naWNhbEhlaWdodElmTm90UmVsYXRpdmUo
UmVuZGUKIFJlbmRlclRhYmxlU2VjdGlvbjo6UmVuZGVyVGFibGVTZWN0aW9uKE5vZGUqIG5vZGUp
CiAgICAgOiBSZW5kZXJCb3gobm9kZSkKICAgICAsIG1fY0NvbCgwKQotICAgICwgbV9jUm93KC0x
KQorICAgICwgbV9jUm93KDApCiAgICAgLCBtX291dGVyQm9yZGVyU3RhcnQoMCkKICAgICAsIG1f
b3V0ZXJCb3JkZXJFbmQoMCkKICAgICAsIG1fb3V0ZXJCb3JkZXJCZWZvcmUoMCkKQEAgLTE0Nywx
NyArMTQ3LDE4IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkCiAgICAgaWYgKGJlZm9yZUNoaWxk
KQogICAgICAgICBzZXROZWVkc0NlbGxSZWNhbGMoKTsKIAorICAgIHVuc2lnbmVkIGluc2VydGlv
blJvdyA9IG1fY1JvdzsKICAgICArK21fY1JvdzsKICAgICBtX2NDb2wgPSAwOwogCiAgICAgLy8g
bWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvd3MKLSAgICBpZiAoIWVuc3VyZVJvd3MobV9jUm93
ICsgMSkpCisgICAgaWYgKCFlbnN1cmVSb3dzKG1fY1JvdykpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRlcmVyID0gdG9SZW5kZXJUYWJsZVJvdyhjaGlsZCk7
CisgICAgbV9ncmlkW2luc2VydGlvblJvd10ucm93UmVuZGVyZXIgPSB0b1JlbmRlclRhYmxlUm93
KGNoaWxkKTsKIAogICAgIGlmICghYmVmb3JlQ2hpbGQpCi0gICAgICAgIHNldFJvd0xvZ2ljYWxI
ZWlnaHRUb1Jvd1N0eWxlTG9naWNhbEhlaWdodElmTm90UmVsYXRpdmUoJm1fZ3JpZFttX2NSb3dd
KTsKKyAgICAgICAgc2V0Um93TG9naWNhbEhlaWdodFRvUm93U3R5bGVMb2dpY2FsSGVpZ2h0SWZO
b3RSZWxhdGl2ZSgmbV9ncmlkW2luc2VydGlvblJvd10pOwogCiAgICAgLy8gSWYgdGhlIG5leHQg
cmVuZGVyZXIgaXMgYWN0dWFsbHkgd3JhcHBlZCBpbiBhbiBhbm9ueW1vdXMgdGFibGUgcm93LCB3
ZSBuZWVkIHRvIGdvIHVwIGFuZCBmaW5kIHRoYXQuCiAgICAgd2hpbGUgKGJlZm9yZUNoaWxkICYm
IGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQpAQCAtMTc0LDkgKzE3NSw5IEBAIHZvaWQg
UmVuZGVyVGFibGVTZWN0aW9uOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIG9sZENoaWxkKQog
ICAgIFJlbmRlckJveDo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwogfQogCi1ib29sIFJlbmRlclRh
YmxlU2VjdGlvbjo6ZW5zdXJlUm93cyhpbnQgbnVtUm93cykKK2Jvb2wgUmVuZGVyVGFibGVTZWN0
aW9uOjplbnN1cmVSb3dzKHVuc2lnbmVkIG51bVJvd3MpCiB7Ci0gICAgaWYgKG51bVJvd3MgPiBz
dGF0aWNfY2FzdDxpbnQ+KG1fZ3JpZC5zaXplKCkpKSB7CisgICAgaWYgKG51bVJvd3MgPiBtX2dy
aWQuc2l6ZSgpKSB7CiAgICAgICAgIHNpemVfdCBtYXhTaXplID0gbnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkgLyBzaXplb2YoUm93U3RydWN0KTsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHNpemVfdD4obnVtUm93cykgPiBtYXhTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTg0LDggKzE4NSw4IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGlu
dCBudW1Sb3dzKQogICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9ncmlkLnNpemUoKTsKICAg
ICAgICAgbV9ncmlkLmdyb3cobnVtUm93cyk7CiAKLSAgICAgICAgaW50IG5Db2xzID0gbWF4KDEs
IHRhYmxlKCktPm51bUVmZkNvbHMoKSk7Ci0gICAgICAgIGZvciAoaW50IHIgPSBvbGRTaXplOyBy
IDwgbnVtUm93czsgcisrKSB7CisgICAgICAgIHVuc2lnbmVkIG5Db2xzID0gbWF4KDF1LCB0YWJs
ZSgpLT5udW1FZmZDb2xzKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSBvbGRTaXplOyBy
IDwgbnVtUm93czsgcisrKSB7CiAgICAgICAgICAgICBtX2dyaWRbcl0ucm93ID0gbmV3IFJvdyhu
Q29scyk7CiAgICAgICAgICAgICBtX2dyaWRbcl0ucm93UmVuZGVyZXIgPSAwOwogICAgICAgICAg
ICAgbV9ncmlkW3JdLmJhc2VsaW5lID0gMDsKQEAgLTIwMSw3ICsyMDIsMTAgQEAgdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBSZW5kZXJUYWJs
ZVJvdyogcm93KQogICAgIGludCByU3BhbiA9IGNlbGwtPnJvd1NwYW4oKTsKICAgICBpbnQgY1Nw
YW4gPSBjZWxsLT5jb2xTcGFuKCk7CiAgICAgVmVjdG9yPFJlbmRlclRhYmxlOjpDb2x1bW5TdHJ1
Y3Q+JiBjb2x1bW5zID0gdGFibGUoKS0+Y29sdW1ucygpOwotICAgIGludCBuQ29scyA9IGNvbHVt
bnMuc2l6ZSgpOworICAgIHVuc2lnbmVkIG5Db2xzID0gY29sdW1ucy5zaXplKCk7CisgICAgLy8g
YWRkQ2VsbCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgbV9jUm93IGhhcyBiZWVuIGluY3Jl
bWVudGVkLgorICAgIEFTU0VSVChtX2NSb3cpOworICAgIHVuc2lnbmVkIGluc2VydGlvblJvdyA9
IG1fY1JvdyAtIDE7CiAKICAgICAvLyAjIyMgbW96aWxsYSBzdGlsbCBzZWVtcyB0byBkbyB0aGUg
b2xkIEhUTUwgd2F5LCBldmVuIGZvciBzdHJpY3QgRFRECiAgICAgLy8gKHNlZSB0aGUgYW5ub3Rh
dGlvbiBvbiB0YWJsZSBjZWxsIGxheW91dGluZyBpbiB0aGUgQ1NTIHNwZWNzIGFuZCB0aGUgdGVz
dGNhc2UgYmVsb3c6CkBAIC0yMDksMjQgKzIxMywyNCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlv
bjo6YWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFJlbmRlclRhYmxlUm93KiByb3cpCiAg
ICAgLy8gPFRSPjxURD4xIDxURCByb3dzcGFuPSIyIj4yIDxURD4zIDxURD40CiAgICAgLy8gPFRS
PjxURCBjb2xzcGFuPSIyIj41CiAgICAgLy8gPC9UQUJMRT4KLSAgICB3aGlsZSAobV9jQ29sIDwg
bkNvbHMgJiYgKGNlbGxBdChtX2NSb3csIG1fY0NvbCkuaGFzQ2VsbHMoKSB8fCBjZWxsQXQobV9j
Um93LCBtX2NDb2wpLmluQ29sU3BhbikpCisgICAgd2hpbGUgKG1fY0NvbCA8IG5Db2xzICYmIChj
ZWxsQXQoaW5zZXJ0aW9uUm93LCBtX2NDb2wpLmhhc0NlbGxzKCkgfHwgY2VsbEF0KGluc2VydGlv
blJvdywgbV9jQ29sKS5pbkNvbFNwYW4pKQogICAgICAgICBtX2NDb2wrKzsKIAogICAgIGlmIChy
U3BhbiA9PSAxKSB7CiAgICAgICAgIC8vIHdlIGlnbm9yZSBoZWlnaHQgc2V0dGluZ3Mgb24gcm93
c3BhbiBjZWxscwogICAgICAgICBMZW5ndGggbG9naWNhbEhlaWdodCA9IGNlbGwtPnN0eWxlKCkt
PmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgaWYgKGxvZ2ljYWxIZWlnaHQuaXNQb3NpdGl2ZSgp
IHx8IChsb2dpY2FsSGVpZ2h0LmlzUmVsYXRpdmUoKSAmJiBsb2dpY2FsSGVpZ2h0LnZhbHVlKCkg
Pj0gMCkpIHsKLSAgICAgICAgICAgIExlbmd0aCBjUm93TG9naWNhbEhlaWdodCA9IG1fZ3JpZFtt
X2NSb3ddLmxvZ2ljYWxIZWlnaHQ7CisgICAgICAgICAgICBMZW5ndGggY1Jvd0xvZ2ljYWxIZWln
aHQgPSBtX2dyaWRbaW5zZXJ0aW9uUm93XS5sb2dpY2FsSGVpZ2h0OwogICAgICAgICAgICAgc3dp
dGNoIChsb2dpY2FsSGVpZ2h0LnR5cGUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgUGVyY2Vu
dDoKICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY1Jvd0xvZ2ljYWxIZWlnaHQuaXNQZXJjZW50
KCkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAoY1Jvd0xvZ2ljYWxIZWlnaHQuaXNQZXJj
ZW50KCkgJiYgY1Jvd0xvZ2ljYWxIZWlnaHQucGVyY2VudCgpIDwgbG9naWNhbEhlaWdodC5wZXJj
ZW50KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmlkW21fY1Jvd10ubG9naWNhbEhl
aWdodCA9IGxvZ2ljYWxIZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyaWRbaW5z
ZXJ0aW9uUm93XS5sb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgRml4ZWQ6CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChjUm93TG9naWNhbEhlaWdodC50eXBlKCkgPCBQZXJjZW50IHx8CiAgICAg
ICAgICAgICAgICAgICAgICAgICAoY1Jvd0xvZ2ljYWxIZWlnaHQuaXNGaXhlZCgpICYmIGNSb3dM
b2dpY2FsSGVpZ2h0LnZhbHVlKCkgPCBsb2dpY2FsSGVpZ2h0LnZhbHVlKCkpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmlkW21fY1Jvd10ubG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWln
aHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyaWRbaW5zZXJ0aW9uUm93XS5sb2dpY2Fs
SGVpZ2h0ID0gbG9naWNhbEhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZToKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MjM2LDEyICsyNDAsMTIgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwoUmVuZGVy
VGFibGVDZWxsKiBjZWxsLCBSZW5kZXJUYWJsZVJvdyogcm93KQogICAgIH0KIAogICAgIC8vIG1h
a2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCByb3dzCi0gICAgaWYgKCFlbnN1cmVSb3dzKG1fY1JvdyAr
IHJTcGFuKSkKKyAgICBpZiAoIWVuc3VyZVJvd3MoaW5zZXJ0aW9uUm93ICsgclNwYW4pKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX2dyaWRbbV9jUm93XS5yb3dSZW5kZXJlciA9IHJvdzsKKyAg
ICBtX2dyaWRbaW5zZXJ0aW9uUm93XS5yb3dSZW5kZXJlciA9IHJvdzsKIAotICAgIGludCBjb2wg
PSBtX2NDb2w7CisgICAgdW5zaWduZWQgY29sID0gbV9jQ29sOwogICAgIC8vIHRlbGwgdGhlIGNl
bGwgd2hlcmUgaXQgaXMKICAgICBib29sIGluQ29sU3BhbiA9IGZhbHNlOwogICAgIHdoaWxlIChj
U3BhbikgewpAQCAtMjU1LDcgKzI1OSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRD
ZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyVGFibGVSb3cqIHJvdykKICAgICAgICAg
ICAgIGN1cnJlbnRTcGFuID0gY29sdW1uc1ttX2NDb2xdLnNwYW47CiAgICAgICAgIH0KICAgICAg
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByU3BhbjsgcisrKSB7Ci0gICAgICAgICAgICBDZWxsU3Ry
dWN0JiBjID0gY2VsbEF0KG1fY1JvdyArIHIsIG1fY0NvbCk7CisgICAgICAgICAgICBDZWxsU3Ry
dWN0JiBjID0gY2VsbEF0KGluc2VydGlvblJvdyArIHIsIG1fY0NvbCk7CiAgICAgICAgICAgICBB
U1NFUlQoY2VsbCk7CiAgICAgICAgICAgICBjLmNlbGxzLmFwcGVuZChjZWxsKTsKICAgICAgICAg
ICAgIC8vIElmIGNlbGxzIG92ZXJsYXAgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGggZm9yIHBh
aW50aW5nLgpAQCAtMjY4LDcgKzI3Miw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRD
ZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyVGFibGVSb3cqIHJvdykKICAgICAgICAg
Y1NwYW4gLT0gY3VycmVudFNwYW47CiAgICAgICAgIGluQ29sU3BhbiA9IHRydWU7CiAgICAgfQot
ICAgIGNlbGwtPnNldFJvdyhtX2NSb3cpOworICAgIGNlbGwtPnNldFJvdyhpbnNlcnRpb25Sb3cp
OwogICAgIGNlbGwtPnNldENvbCh0YWJsZSgpLT5lZmZDb2xUb0NvbChjb2wpKTsKIH0KIApAQCAt
MjgwLDE2ICsyODQsMTYgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNldENlbGxMb2dpY2Fs
V2lkdGhzKCkKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyaWQuc2l6ZSgpOyBp
KyspIHsKICAgICAgICAgUm93JiByb3cgPSAqbV9ncmlkW2ldLnJvdzsKLSAgICAgICAgaW50IGNv
bHMgPSByb3cuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNvbHM7IGorKykg
eworICAgICAgICB1bnNpZ25lZCBjb2xzID0gcm93LnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGNvbHM7IGorKykgewogICAgICAgICAgICAgQ2VsbFN0cnVjdCYgY3Vy
cmVudCA9IHJvd1tqXTsKICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGN1cnJl
bnQucHJpbWFyeUNlbGwoKTsKICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjdXJyZW50LmluQ29s
U3BhbikKICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnQgZW5kQ29sID0g
ajsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVuZENvbCA9IGo7CiAgICAgICAgICAgICBpbnQgY3Nw
YW4gPSBjZWxsLT5jb2xTcGFuKCk7CiAgICAgICAgICAgICB3aGlsZSAoY3NwYW4gJiYgZW5kQ29s
IDwgY29scykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbmRDb2wgPCAoaW50KXRhYmxlKCkt
PmNvbHVtbnMoKS5zaXplKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChlbmRDb2wgPCB0YWJs
ZSgpLT5jb2x1bW5zKCkuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBjc3BhbiAtPSB0YWJsZSgp
LT5jb2x1bW5zKClbZW5kQ29sXS5zcGFuOwogICAgICAgICAgICAgICAgIGVuZENvbCsrOwogICAg
ICAgICAgICAgfQpAQCAtMzQxLDE2ICszNDUsMTYgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNl
Y3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KCkKICAgICAgICAgbV9yb3dQb3NbciArIDFdID0g
bWF4KG1fcm93UG9zW3IgKyAxXSwgcG9zKTsKIAogICAgICAgICBSb3cqIHJvdyA9IG1fZ3JpZFty
XS5yb3c7Ci0gICAgICAgIGludCB0b3RhbENvbHMgPSByb3ctPnNpemUoKTsKKyAgICAgICAgdW5z
aWduZWQgdG90YWxDb2xzID0gcm93LT5zaXplKCk7CiAKLSAgICAgICAgZm9yIChpbnQgYyA9IDA7
IGMgPCB0b3RhbENvbHM7IGMrKykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwg
dG90YWxDb2xzOyBjKyspIHsKICAgICAgICAgICAgIENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxs
QXQociwgYyk7CiAgICAgICAgICAgICBjZWxsID0gY3VycmVudC5wcmltYXJ5Q2VsbCgpOwogCiAg
ICAgICAgICAgICBpZiAoIWNlbGwgfHwgY3VycmVudC5pbkNvbFNwYW4pCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmICgoY2VsbC0+cm93KCkgKyBjZWxsLT5yb3dT
cGFuKCkgLSAxKSA+IHN0YXRpY19jYXN0PGludD4ocikpCisgICAgICAgICAgICBpZiAoKGNlbGwt
PnJvdygpICsgY2VsbC0+cm93U3BhbigpIC0gMSkgPiByKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgICAgICB1bnNpZ25lZCBpbmR4ID0gbWF4KHIgLSBjZWxsLT5yb3dTcGFu
KCkgKyAxLCAwdSk7CkBAIC00MzksOCArNDQzLDggQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNl
Y3Rpb246OmxheW91dFJvd3MoTGF5b3V0VW5pdCB0b0FkZCkKIAogICAgIExheW91dFVuaXQgckhl
aWdodDsKICAgICBpbnQgcmluZHg7Ci0gICAgaW50IHRvdGFsUm93cyA9IG1fZ3JpZC5zaXplKCk7
Ci0gICAgCisgICAgdW5zaWduZWQgdG90YWxSb3dzID0gbV9ncmlkLnNpemUoKTsKKwogICAgIC8v
IFNldCB0aGUgd2lkdGggb2Ygb3VyIHNlY3Rpb24gbm93LiAgVGhlIHJvd3Mgd2lsbCBhbHNvIGJl
IHRoaXMgd2lkdGguCiAgICAgc2V0TG9naWNhbFdpZHRoKHRhYmxlKCktPmNvbnRlbnRMb2dpY2Fs
V2lkdGgoKSk7CiAgICAgbV9vdmVyZmxvdy5jbGVhcigpOwpAQCAtNDUzLDcgKzQ1Nyw3IEBAIExh
eW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKExheW91dFVuaXQgdG9BZGQp
CiAgICAgICAgIExheW91dFVuaXQgZGggPSB0b0FkZDsKICAgICAgICAgaW50IHRvdGFsUGVyY2Vu
dCA9IDA7CiAgICAgICAgIGludCBudW1BdXRvID0gMDsKLSAgICAgICAgZm9yIChpbnQgciA9IDA7
IHIgPCB0b3RhbFJvd3M7IHIrKykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwg
dG90YWxSb3dzOyByKyspIHsKICAgICAgICAgICAgIGlmIChtX2dyaWRbcl0ubG9naWNhbEhlaWdo
dC5pc0F1dG8oKSkKICAgICAgICAgICAgICAgICBudW1BdXRvKys7CiAgICAgICAgICAgICBlbHNl
IGlmIChtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5pc1BlcmNlbnQoKSkKQEAgLTQ2NCw3ICs0Njgs
NyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0
IHRvQWRkKQogICAgICAgICAgICAgTGF5b3V0VW5pdCBhZGQgPSAwOwogICAgICAgICAgICAgdG90
YWxQZXJjZW50ID0gbWluKHRvdGFsUGVyY2VudCwgMTAwKTsKICAgICAgICAgICAgIGludCByaCA9
IG1fcm93UG9zWzFdIC0gbV9yb3dQb3NbMF07Ci0gICAgICAgICAgICBmb3IgKGludCByID0gMDsg
ciA8IHRvdGFsUm93czsgcisrKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyBy
IDwgdG90YWxSb3dzOyByKyspIHsKICAgICAgICAgICAgICAgICBpZiAodG90YWxQZXJjZW50ID4g
MCAmJiBtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5pc1BlcmNlbnQoKSkgewogICAgICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IHRvQWRkID0gbWluKGRoLCBzdGF0aWNfY2FzdDxMYXlvdXRVbml0
PigodG90YWxIZWlnaHQgKiBtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5wZXJjZW50KCkgLyAxMDAp
IC0gcmgpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdG9BZGQgaXMgbmVnYXRpdmUsIHRo
ZW4gd2UgZG9uJ3Qgd2FudCB0byBzaHJpbmsgdGhlIHJvdyAodGhpcyBidWcKQEAgLTQ3NCw2ICs0
NzgsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRV
bml0IHRvQWRkKQogICAgICAgICAgICAgICAgICAgICBkaCAtPSB0b0FkZDsKICAgICAgICAgICAg
ICAgICAgICAgdG90YWxQZXJjZW50IC09IG1fZ3JpZFtyXS5sb2dpY2FsSGVpZ2h0LnBlcmNlbnQo
KTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKHRvdGFsUm93cyA+
PSAxKTsKICAgICAgICAgICAgICAgICBpZiAociA8IHRvdGFsUm93cyAtIDEpCiAgICAgICAgICAg
ICAgICAgICAgIHJoID0gbV9yb3dQb3NbciArIDJdIC0gbV9yb3dQb3NbciArIDFdOwogICAgICAg
ICAgICAgICAgIG1fcm93UG9zW3IgKyAxXSArPSBhZGQ7CkBAIC00ODIsNyArNDg3LDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoTGF5b3V0VW5pdCB0b0FkZCkK
ICAgICAgICAgaWYgKG51bUF1dG8pIHsKICAgICAgICAgICAgIC8vIGRpc3RyaWJ1dGUgb3ZlciB2
YXJpYWJsZSBjb2xzCiAgICAgICAgICAgICBMYXlvdXRVbml0IGFkZCA9IDA7Ci0gICAgICAgICAg
ICBmb3IgKGludCByID0gMDsgciA8IHRvdGFsUm93czsgcisrKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKICAgICAgICAgICAgICAgICBp
ZiAobnVtQXV0byA+IDAgJiYgbV9ncmlkW3JdLmxvZ2ljYWxIZWlnaHQuaXNBdXRvKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b0FkZCA9IGRoIC8gbnVtQXV0bzsKICAgICAg
ICAgICAgICAgICAgICAgYWRkICs9IHRvQWRkOwpAQCAtNDk3LDcgKzUwMiw3IEBAIExheW91dFVu
aXQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKExheW91dFVuaXQgdG9BZGQpCiAgICAg
ICAgICAgICBMYXlvdXRVbml0IHRvdCA9IG1fcm93UG9zW3RvdGFsUm93c107CiAgICAgICAgICAg
ICBMYXlvdXRVbml0IGFkZCA9IDA7CiAgICAgICAgICAgICBMYXlvdXRVbml0IHByZXYgPSBtX3Jv
d1Bvc1swXTsKLSAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKysp
IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykg
ewogICAgICAgICAgICAgICAgIC8vIHdlaWdodCB3aXRoIHRoZSBvcmlnaW5hbCBoZWlnaHQKICAg
ICAgICAgICAgICAgICBhZGQgKz0gZGggKiAobV9yb3dQb3NbciArIDFdIC0gcHJldikgLyB0b3Q7
CiAgICAgICAgICAgICAgICAgcHJldiA9IG1fcm93UG9zW3IgKyAxXTsKQEAgLTUxMiw3ICs1MTcs
NyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0
IHRvQWRkKQogCiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwg
dGhpcywgTGF5b3V0U2l6ZSh4KCksIHkoKSksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKCkpOwogCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewor
ICAgIGZvciAodW5zaWduZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAgICAgICAv
LyBTZXQgdGhlIHJvdydzIHgveSBwb3NpdGlvbiBhbmQgd2lkdGgvaGVpZ2h0LgogICAgICAgICBp
ZiAoUmVuZGVyVGFibGVSb3cqIHJvd1JlbmRlcmVyID0gbV9ncmlkW3JdLnJvd1JlbmRlcmVyKSB7
CiAgICAgICAgICAgICByb3dSZW5kZXJlci0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQoMCwgbV9y
b3dQb3Nbcl0pKTsKQEAgLTY3Nyw3ICs2ODIsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2Vj
dGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0IHRvQWRkKQogICAgIGJvb2wgaGFzT3ZlcmZsb3dp
bmdDZWxsID0gZmFsc2U7CiAjZW5kaWYKICAgICAvLyBOb3cgdGhhdCBvdXIgaGVpZ2h0IGhhcyBi
ZWVuIGRldGVybWluZWQsIGFkZCBpbiBvdmVyZmxvdyBmcm9tIGNlbGxzLgotICAgIGZvciAoaW50
IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyBy
IDwgdG90YWxSb3dzOyByKyspIHsKICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBuRWZmQ29s
czsgYysrKSB7CiAgICAgICAgICAgICBDZWxsU3RydWN0JiBjcyA9IGNlbGxBdChyLCBjKTsKICAg
ICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGNzLnByaW1hcnlDZWxsKCk7CkBAIC0x
MTIyLDcgKzExMjcsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6aW1hZ2VDaGFuZ2VkKFdy
YXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCopCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6
cmVjYWxjQ2VsbHMoKQogewogICAgIG1fY0NvbCA9IDA7Ci0gICAgbV9jUm93ID0gLTE7CisgICAg
bV9jUm93ID0gMDsKICAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG1fZ3JpZC5zaXplKCk7CiAgICAg
Y2xlYXJHcmlkKCk7CiAgICAgLy8gQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgZm9yIG91ciByb3cg
Y291bnQgdG8gc2hyaW5rIChkdWUgdG8gcmVtb3ZlQ2hpbGQgYmVpbmcgY2FsbGVkKSwKQEAgLTEx
MzIsMTQgKzExMzcsMTUgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2FsY0NlbGxzKCkK
IAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0g
cm93LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChyb3ctPmlzVGFibGVSb3coKSkgewor
ICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uUm93ID0gbV9jUm93OwogICAgICAgICAgICAg
bV9jUm93Kys7CiAgICAgICAgICAgICBtX2NDb2wgPSAwOwotICAgICAgICAgICAgaWYgKCFlbnN1
cmVSb3dzKG1fY1JvdyArIDEpKQorICAgICAgICAgICAgaWYgKCFlbnN1cmVSb3dzKG1fY1Jvdykp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlbmRl
clRhYmxlUm93KiB0YWJsZVJvdyA9IHRvUmVuZGVyVGFibGVSb3cocm93KTsKLSAgICAgICAgICAg
IG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRlcmVyID0gdGFibGVSb3c7Ci0gICAgICAgICAgICBzZXRS
b3dMb2dpY2FsSGVpZ2h0VG9Sb3dTdHlsZUxvZ2ljYWxIZWlnaHRJZk5vdFJlbGF0aXZlKCZtX2dy
aWRbbV9jUm93XSk7CisgICAgICAgICAgICBtX2dyaWRbaW5zZXJ0aW9uUm93XS5yb3dSZW5kZXJl
ciA9IHRhYmxlUm93OworICAgICAgICAgICAgc2V0Um93TG9naWNhbEhlaWdodFRvUm93U3R5bGVM
b2dpY2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZSgmbV9ncmlkW2luc2VydGlvblJvd10pOwogCiAgICAg
ICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGlsZCgpOyBjZWxs
OyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgIGlmIChjZWxs
LT5pc1RhYmxlQ2VsbCgpKQpAQCAtMTE2NiwxMiArMTE3MiwxMiBAQCB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6Y2xlYXJHcmlkKCkKICAgICBtX2dyaWQuY2xlYXIoKTsKIH0KIAotaW50IFJlbmRl
clRhYmxlU2VjdGlvbjo6bnVtQ29sdW1ucygpIGNvbnN0Cit1bnNpZ25lZCBSZW5kZXJUYWJsZVNl
Y3Rpb246Om51bUNvbHVtbnMoKSBjb25zdAogewotICAgIGludCByZXN1bHQgPSAwOworICAgIHVu
c2lnbmVkIHJlc3VsdCA9IDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCByID0gMDsgciA8IG1f
Z3JpZC5zaXplKCk7ICsrcikgewotICAgICAgICBmb3IgKGludCBjID0gcmVzdWx0OyBjIDwgdGFi
bGUoKS0+bnVtRWZmQ29scygpOyArK2MpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gcmVz
dWx0OyBjIDwgdGFibGUoKS0+bnVtRWZmQ29scygpOyArK2MpIHsKICAgICAgICAgICAgIGNvbnN0
IENlbGxTdHJ1Y3QmIGNlbGwgPSBjZWxsQXQociwgYyk7CiAgICAgICAgICAgICBpZiAoY2VsbC5o
YXNDZWxscygpIHx8IGNlbGwuaW5Db2xTcGFuKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGM7
CkBAIC0xMTg3LDcgKzExOTMsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YXBwZW5kQ29s
dW1uKGludCBwb3MpCiAgICAgICAgIG1fZ3JpZFtyb3ddLnJvdy0+cmVzaXplKHBvcyArIDEpOwog
fQogCi12b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZp
cnN0KQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKHVuc2lnbmVkIHBvcywg
aW50IGZpcnN0KQogewogICAgIEFTU0VSVCghbV9uZWVkc0NlbGxSZWNhbGMpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKaW5kZXggNDI2MWNhZWI4
NjZkNTFhOWEwYTNlOWY5NDU3NTFhOTRmZTNiMGYzNC4uMWY1NDNmYTA3Y2RmMmZkZWI3ZTZjMzMz
ZjFiOWMzMWY4N2ExNWRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uaApAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9p
ZCBhcHBlbmRDb2x1bW4oaW50IHBvcyk7Ci0gICAgdm9pZCBzcGxpdENvbHVtbihpbnQgcG9zLCBp
bnQgZmlyc3QpOworICAgIHZvaWQgc3BsaXRDb2x1bW4odW5zaWduZWQgcG9zLCBpbnQgZmlyc3Qp
OwogCiAgICAgTGF5b3V0VW5pdCBjYWxjT3V0ZXJCb3JkZXJCZWZvcmUoKSBjb25zdDsKICAgICBM
YXlvdXRVbml0IGNhbGNPdXRlckJvcmRlckFmdGVyKCkgY29uc3Q7CkBAIC0xMDUsOCArMTA1LDgg
QEAgcHVibGljOgogICAgIExheW91dFVuaXQgb3V0ZXJCb3JkZXJTdGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1fb3V0ZXJCb3JkZXJTdGFydDsgfQogICAgIExheW91dFVuaXQgb3V0ZXJCb3JkZXJFbmQo
KSBjb25zdCB7IHJldHVybiBtX291dGVyQm9yZGVyRW5kOyB9CiAKLSAgICBpbnQgbnVtUm93cygp
IGNvbnN0IHsgcmV0dXJuIG1fZ3JpZC5zaXplKCk7IH0KLSAgICBpbnQgbnVtQ29sdW1ucygpIGNv
bnN0OworICAgIHVuc2lnbmVkIG51bVJvd3MoKSBjb25zdCB7IHJldHVybiBtX2dyaWQuc2l6ZSgp
OyB9CisgICAgdW5zaWduZWQgbnVtQ29sdW1ucygpIGNvbnN0OwogICAgIHZvaWQgcmVjYWxjQ2Vs
bHMoKTsKICAgICB2b2lkIHJlY2FsY0NlbGxzSWZOZWVkZWQoKQogICAgIHsKQEAgLTE0NCw3ICsx
NDQsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24pOwogCi0gICAgYm9vbCBlbnN1cmVSb3dzKGludCk7CisgICAgYm9vbCBlbnN1cmVSb3dz
KHVuc2lnbmVkKTsKICAgICB2b2lkIGNsZWFyR3JpZCgpOwogCiAgICAgYm9vbCBoYXNPdmVyZmxv
d2luZ0NlbGwoKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93aW5nQ2VsbHMuc2l6ZSgpIHx8IG1f
Zm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbDsgfQpAQCAtMTU1LDggKzE1NSw4
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPExheW91dFVuaXQ+IG1fcm93UG9zOwogCiAgICAgLy8g
dGhlIGN1cnJlbnQgaW5zZXJ0aW9uIHBvc2l0aW9uCi0gICAgaW50IG1fY0NvbDsKLSAgICBpbnQg
bV9jUm93OworICAgIHVuc2lnbmVkIG1fY0NvbDsKKyAgICB1bnNpZ25lZCBtX2NSb3c7CiAKICAg
ICBMYXlvdXRVbml0IG1fb3V0ZXJCb3JkZXJTdGFydDsKICAgICBMYXlvdXRVbml0IG1fb3V0ZXJC
b3JkZXJFbmQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112798</attachid>
            <date>2011-10-27 18:12:22 -0700</date>
            <delta_ts>2011-10-27 18:29:14 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-70369-20111027181221.patch</filename>
            <type>text/plain</type>
            <size>30120</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg2NjkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiZDg0ODkzZGMxYTFiMGFk
NDg4YTJlNmU1MzgyYzk1NjRkZmE3MDQ1Li4wNWRhNTEwODE3NTkyOGIxZGVmOWUzYTEyOTRhMWIy
NzRiY2M4ZGQwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUgQEAKKzIwMTEtMTAtMjcgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVuZGVyVGFi
bGVDZWxsIG1fcm93IGFuZCBtX2NvbHVtbiBzaG91bGQgbm90IGJlIHNpZ25lZCB2YWx1ZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzY5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBy
ZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgIFRoZSBnaXN0IG9mIHRoZSBjaGFuZ2UgaXMgdG8g
dXBkYXRlIHJvdyAvIGNvbHVtbiBoYW5kbGluZyBpbiB0aGUgdGFibGUncworICAgICAgICByZW5k
ZXJpbmcgY29kZSB0byB1c2UgdW5zaWduZWQgdmFsdWVzLiBOb3QgYWxsIHRoZSBjb2RlIGlzIHN3
aXRjaGVkIG92ZXIKKyAgICAgICAgdG8gdW5zaWduZWQgYnV0IHRoaXMgaXMgYSBnb29kIHN0YXJ0
LgorCisgICAgICAgIFVzaW5nIHVuc2lnbmVkIG1ha2VzIGEgbG90IG1vcmUgc2Vuc2UgdGhhdCBh
bGxvd2luZyBzb21lIG5lZ2F0aXZlIGluZGV4ZXMKKyAgICAgICAgdG8gY3JlZXAgaW4gdGhlIGFs
Z29yaXRobXMuIEFsc28gaXQgZW5hYmxlcyB1cyB0byAiZnJlZSIgdGhlIHVudXNlZCBzaWduZWQK
KyAgICAgICAgYml0IG9uIHRoZSAyIFJlbmRlclRhYmxlQ2VsbCBmaWVsZHMgdGhhdCBjYW4gYmUg
dXNlZCB0byBwYWNrIDIgYml0cyBpbiBhCisgICAgICAgIGZvbGxvdy11cCBwYXRjaC4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbEZvckNvbHVtbkFuZFJvdyk6CisgICAgICAg
IFJlbW92ZWQgMiBjYXN0cyB0byBpbnQgYXMgdGhlIGxlZnQgc2lkZSBub3cgY29tcHV0ZXMgdG8g
YW4gdW5zaWduZWQgdG9vLgorICAgICAgICBBZGRlZCBzb21lIEFTU0VSVCB0byBtYWtlIHN1cmUg
d2UgZG9uJ3QgZ2V0IG5lZ2F0aXZlIHZhbHVlcyAoY29sU3BhbiAvIHJvd1NwYW4KKyAgICAgICAg
YXJlIGFsd2F5cyA+PSAxIGJ5IGRlZmluaXRpb24gYnV0IGJldHRlciB0byBiZSBzYWZlKS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbjo6aGVhZGVyT2JqZWN0Rm9y
U2VjdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1
bW4uaDoKKyAgICAgICAgU3dpdGNoZWQgbV9jb2x1bW5JbmRleCB0byB1bnNpZ25lZCB0byByZW1v
dmUgYW55IHNpZ25lZCAvIHVuc2lnbmVkIGNvbXBhcmlzb25zLgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzcGxp
dENvbHVtbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlckVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlOjpjZWxsQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGU6OmNlbGxCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNlbGxB
ZnRlcik6CisgICAgICAgIE1vc3RseSBtZWNoYW5pY2FsIGNoYW5nZXMgdG8gYXZvaWQgc2lnbmVk
IC8gdW5zaWduZWQgY29tcGFyaXNvbnMgb3IgY2FzdHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpudW1FZmZDb2xz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjb2xUb0VmZkNvbCk6CisgICAgICAg
IFVwZGF0ZWQgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIHRvIHVzZSBhbiB1bnNpZ25lZC4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVDZWxsOjpSZW5kZXJUYWJsZUNlbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29s
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2V0Q29sKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6cm93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlQ2VsbDo6c2V0Um93KToKKyAgICAgICAgVXBkYXRlZCBhZnRlciBzd2l0Y2hpbmcgdGhl
IGZpZWxkcyB0byB1bnNpZ25lZC4gQWxzbyBhZGRlZCAyIGNvbnN0YW50cworICAgICAgICB0byBj
b3ZlciB0aGUgbm90LWluaXRpYWxpemVkLXlldCB2YWx1ZSBmb3Igcm93IGFuZCBjb2x1bW4gaW5k
ZXhlcy4KKyAgICAgICAgTm90ZTogd2UgZG9uJ3QgZW5mb3JjZSB0aGF0IHlvdSBjYW4ndCByZWFj
aCB0aG9zZSBpbmRleGVzIGJ1dCBuZWl0aGVyCisgICAgICAgIGRpZCB0aGUgcHJldmlvdXMgY29k
ZSEKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmVuc3VyZVJvd3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzZXRDZWxsTG9naWNhbFdpZHRocyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyRW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVjYWxjQ2VsbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjbGVhckdyaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlU2VjdGlvbjo6YXBwZW5kQ29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4pOgorICAgICAgICBMb3RzIG9mIG1lY2hhbmlj
YWw6IHNpZ25lZCAtPiB1bnNpZ25lZCBjaGFuZ2VzLiBIb3dldmVyIHdlIGhhZAorICAgICAgICB0
byBjaGFuZ2UgdGhlIGxvZ2ljIGEgYml0IGFzIGl0IGFzc3VtZWQgdGhhdCBtX2NSb3cgc3RhcnRl
ZCBhdAorICAgICAgICAtMSBhbmQgaW5jcmVhc2VkIGZyb20gdGhlcmUuIFRoZSBuZXcgbWVhbmlu
ZyBvZiBtX2NSb3cgaXMgdGhlCisgICAgICAgIG51bWJlciBvZiByb3dzIHNlZW4gYW5kIG1fY1Jv
dyAtIDEgaXMgd2hlcmUgdG8gaW5zZXJ0IHlvdXIgbmV3CisgICAgICAgIGNlbGxzLgorCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwpOgorICAgICAgICBDaGVj
a2VkIHRoZSBjYWxsZXJzIGFuZCBhbGwgaW5jcmVhc2UgbV9jUm93IGJlZm9yZSBjYWxsaW5nIHRo
ZSBmdW5jdGlvbi4KKyAgICAgICAgQWRkZWQgYW4gQVNTRVJUIHRvIGNhdGNoIHVwIHdyb25nIHVz
YWdlIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om51bVJvd3MpOiBT
d2l0Y2hlZCB0byB1bnNpZ25lZC4KKwogMjAxMS0xMC0yNyAgU2hhd24gU2luZ2ggIDxzaGF3bnNp
bmdoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFRyYWNrIHdoZW4gQ0NMYXll
ckltcGwgcHJvcGVydGllcyBoYXZlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKaW5kZXggNjU2MTlkMDk3MWQ1MDZi
MDUxYzZjYTdjMzM0YTkxZjc4NDEyOTZmNy4uYzgzNjkzNmY0YTQwOTNkMzgzZGExNThiZWNjYzNj
ZGI5ZWYwNTgwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5VGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlLmNwcApAQCAtNDkxLDIwICs0OTEsMjIgQEAgQWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbCogQWNjZXNzaWJpbGl0eVRhYmxlOjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVk
IGNvbHVtbiwKICAgICAgICAgICAgIGlmICghY2VsbCkgewogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIGZpcnN0IHRyeSByb3dzCi0gICAgICAgICAgICAgICAgZm9yIChpbnQg
dGVzdFJvdyA9IHNlY3Rpb25TcGVjaWZpY1Jvdy0xOyB0ZXN0Um93ID49IDA7IC0tdGVzdFJvdykg
eworICAgICAgICAgICAgICAgIGZvciAoaW50IHRlc3RSb3cgPSBzZWN0aW9uU3BlY2lmaWNSb3cg
LSAxOyB0ZXN0Um93ID49IDA7IC0tdGVzdFJvdykgewogICAgICAgICAgICAgICAgICAgICBjZWxs
ID0gdGFibGVTZWN0aW9uLT5wcmltYXJ5Q2VsbEF0KHRlc3RSb3csIGNvbHVtbik7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGNlbGwgb3ZlcmxhcHBlZC4gdXNlIHRoaXMgb25lCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChjZWxsICYmICgoY2VsbC0+cm93KCkgKyAoY2VsbC0+cm93U3BhbigpLTEp
KSA+PSAoaW50KXNlY3Rpb25TcGVjaWZpY1JvdykpCisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChjZWxsLT5yb3dTcGFuKCkgPj0gMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsICYm
ICgoY2VsbC0+cm93KCkgKyAoY2VsbC0+cm93U3BhbigpIC0gMSkpID49IHNlY3Rpb25TcGVjaWZp
Y1JvdykpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgY2VsbCA9IDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmICghY2VsbCkgewogICAgICAgICAgICAgICAgICAgICAvLyB0cnkgY29scwot
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB0ZXN0Q29sID0gY29sdW1uLTE7IHRlc3RDb2wg
Pj0gMDsgLS10ZXN0Q29sKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHRlc3RDb2wg
PSBjb2x1bW4gLSAxOyB0ZXN0Q29sID49IDA7IC0tdGVzdENvbCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgY2VsbCA9IHRhYmxlU2VjdGlvbi0+cHJpbWFyeUNlbGxBdChzZWN0aW9uU3BlY2lm
aWNSb3csIHRlc3RDb2wpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2VsbCBvdmVybGFw
cGVkLiB1c2UgdGhpcyBvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsICYmICgo
Y2VsbC0+Y29sKCkgKyAoY2VsbC0+Y29sU3BhbigpLTEpKSA+PSAoaW50KWNvbHVtbikpCisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2VsbC0+cm93U3BhbigpID49IDEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNlbGwgJiYgKChjZWxsLT5jb2woKSArIChjZWxsLT5jb2xT
cGFuKCkgLSAxKSkgPj0gY29sdW1uKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSAwOwogICAgICAgICAgICAgICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZUNvbHVtbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZUNvbHVtbi5jcHAKaW5kZXggNTgxY2RhNWQ1MmY0YTUyNmQzODUxMzgwMmI2N2Fh
NzgxYTBlYjA2MS4uYzk0NTIxYjFlNzk3MDQxOWIwZmNkZjMzMThmNjFiZGNkMDY3MmE3ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVD
b2x1bW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlQ29sdW1uLmNwcApAQCAtMTIyLDcgKzEyMiw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbjo6aGVhZGVyT2JqZWN0Rm9yU2VjdGlvbihSZW5kZXJU
YWJsCiAgICAgaWYgKCFzZWN0aW9uKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBpbnQg
bnVtQ29scyA9IHNlY3Rpb24tPm51bUNvbHVtbnMoKTsKKyAgICB1bnNpZ25lZCBudW1Db2xzID0g
c2VjdGlvbi0+bnVtQ29sdW1ucygpOwogICAgIGlmIChtX2NvbHVtbkluZGV4ID49IG51bUNvbHMp
CiAgICAgICAgIHJldHVybiAwOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmgKaW5kZXggYTkxNDY1N2E1ZDZi
YjRiZDU3NTY0OTA0ZDgwNTVmMGVkZDMxZDUwZC4uMDE0ZjMyZDg0MDNhYmUzNDI4MTQxODhhMzAy
MmMxYzYzMWUyYjM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIExheW91dFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdDsKICAgICAKIHByaXZh
dGU6ICAgIAotICAgIGludCBtX2NvbHVtbkluZGV4OworICAgIHVuc2lnbmVkIG1fY29sdW1uSW5k
ZXg7CiAgICAgTGF5b3V0UmVjdCBtX2NvbHVtblJlY3Q7CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogaGVhZGVyT2JqZWN0Rm9yU2VjdGlvbihSZW5kZXJUYWJsZVNlY3Rpb24qLCBib29s
IHRoVGFnUmVxdWlyZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAK
aW5kZXggNWM0ZGZiMWE2MWUzNTdmNGYxNjZkMDUxZTA2ZjZlYzVkY2JkMjJhYi4uY2Q4NDVjOTE1
NTRkOGNjNDNlM2I2ZDc5NmYyNmQ4ZjJjMGYzZGY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCkBAIC02MzQsMjEgKzYzNCwyMSBAQCBSZW5kZXJUYWJsZVNlY3Rp
b24qIFJlbmRlclRhYmxlOjp0b3BOb25FbXB0eVNlY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBz
ZWN0aW9uOwogfQogCi12b2lkIFJlbmRlclRhYmxlOjpzcGxpdENvbHVtbihpbnQgcG9zLCBpbnQg
Zmlyc3RTcGFuKQordm9pZCBSZW5kZXJUYWJsZTo6c3BsaXRDb2x1bW4odW5zaWduZWQgcG9zaXRp
b24sIGludCBmaXJzdFNwYW4pCiB7CiAgICAgLy8gd2UgbmVlZCB0byBhZGQgYSBuZXcgY29sdW1u
U3RydWN0Ci0gICAgaW50IG9sZFNpemUgPSBtX2NvbHVtbnMuc2l6ZSgpOworICAgIHVuc2lnbmVk
IG9sZFNpemUgPSBtX2NvbHVtbnMuc2l6ZSgpOwogICAgIG1fY29sdW1ucy5ncm93KG9sZFNpemUg
KyAxKTsKLSAgICBpbnQgb2xkU3BhbiA9IG1fY29sdW1uc1twb3NdLnNwYW47CisgICAgaW50IG9s
ZFNwYW4gPSBtX2NvbHVtbnNbcG9zaXRpb25dLnNwYW47CiAgICAgQVNTRVJUKG9sZFNwYW4gPiBm
aXJzdFNwYW4pOwotICAgIG1fY29sdW1uc1twb3NdLnNwYW4gPSBmaXJzdFNwYW47Ci0gICAgbWVt
bW92ZShtX2NvbHVtbnMuZGF0YSgpICsgcG9zICsgMSwgbV9jb2x1bW5zLmRhdGEoKSArIHBvcywg
KG9sZFNpemUgLSBwb3MpICogc2l6ZW9mKENvbHVtblN0cnVjdCkpOwotICAgIG1fY29sdW1uc1tw
b3MgKyAxXS5zcGFuID0gb2xkU3BhbiAtIGZpcnN0U3BhbjsKKyAgICBtX2NvbHVtbnNbcG9zaXRp
b25dLnNwYW4gPSBmaXJzdFNwYW47CisgICAgbWVtbW92ZShtX2NvbHVtbnMuZGF0YSgpICsgcG9z
aXRpb24gKyAxLCBtX2NvbHVtbnMuZGF0YSgpICsgcG9zaXRpb24sIChvbGRTaXplIC0gcG9zaXRp
b24pICogc2l6ZW9mKENvbHVtblN0cnVjdCkpOworICAgIG1fY29sdW1uc1twb3NpdGlvbiArIDFd
LnNwYW4gPSBvbGRTcGFuIC0gZmlyc3RTcGFuOwogCiAgICAgLy8gY2hhbmdlIHdpZHRoIG9mIGFs
bCByb3dzLgogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5p
c1RhYmxlU2VjdGlvbigpKQotICAgICAgICAgICAgdG9SZW5kZXJUYWJsZVNlY3Rpb24oY2hpbGQp
LT5zcGxpdENvbHVtbihwb3MsIGZpcnN0U3Bhbik7CisgICAgICAgICAgICB0b1JlbmRlclRhYmxl
U2VjdGlvbihjaGlsZCktPnNwbGl0Q29sdW1uKHBvc2l0aW9uLCBmaXJzdFNwYW4pOwogICAgIH0K
IAogICAgIG1fY29sdW1uUG9zLmdyb3cobnVtRWZmQ29scygpICsgMSk7CkBAIC04ODYsNyArODg2
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlckVuZCgpIGNvbnN0CiAgICAg
ICAgIGlmICh0Yi5zdHlsZSgpID4gQkhJRERFTikKICAgICAgICAgICAgIGJvcmRlcldpZHRoID0g
dGIud2lkdGgoKTsKIAotICAgICAgICBpbnQgZW5kQ29sdW1uID0gbnVtRWZmQ29scygpIC0gMTsK
KyAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gbnVtRWZmQ29scygpIC0gMTsKICAgICAgICAg
aWYgKFJlbmRlclRhYmxlQ29sKiBjb2xHcm91cCA9IGNvbEVsZW1lbnQoZW5kQ29sdW1uKSkgewog
ICAgICAgICAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGdiID0gY29sR3JvdXAtPnN0eWxlKCktPmJv
cmRlckVuZCgpOwogICAgICAgICAgICAgaWYgKGdiLnN0eWxlKCkgPT0gQkhJRERFTikKQEAgLTEx
MDMsNyArMTEwMyw3IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNlbGxBYm92ZShj
b25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpIGNvbnN0CiAKICAgICAvLyBMb29rIHVwIHRoZSBj
ZWxsIGluIHRoZSBzZWN0aW9uJ3MgZ3JpZCwgd2hpY2ggcmVxdWlyZXMgZWZmZWN0aXZlIGNvbCBp
bmRleAogICAgIGlmIChzZWN0aW9uKSB7Ci0gICAgICAgIGludCBlZmZDb2wgPSBjb2xUb0VmZkNv
bChjZWxsLT5jb2woKSk7CisgICAgICAgIHVuc2lnbmVkIGVmZkNvbCA9IGNvbFRvRWZmQ29sKGNl
bGwtPmNvbCgpKTsKICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0JiBhYm92
ZUNlbGwgPSBzZWN0aW9uLT5jZWxsQXQockFib3ZlLCBlZmZDb2wpOwogICAgICAgICByZXR1cm4g
YWJvdmVDZWxsLnByaW1hcnlDZWxsKCk7CiAgICAgfSBlbHNlCkBAIC0xMTE1LDkgKzExMTUsOSBA
QCBSZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQmVsb3coY29uc3QgUmVuZGVyVGFi
bGVDZWxsKiBjZWxsKSBjb25zdAogICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVkZWQoKTsKIAogICAg
IC8vIEZpbmQgdGhlIHNlY3Rpb24gYW5kIHJvdyB0byBsb29rIGluCi0gICAgaW50IHIgPSBjZWxs
LT5yb3coKSArIGNlbGwtPnJvd1NwYW4oKSAtIDE7CisgICAgdW5zaWduZWQgciA9IGNlbGwtPnJv
dygpICsgY2VsbC0+cm93U3BhbigpIC0gMTsKICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rp
b24gPSAwOwotICAgIGludCByQmVsb3cgPSAwOworICAgIHVuc2lnbmVkIHJCZWxvdyA9IDA7CiAg
ICAgaWYgKHIgPCBjZWxsLT5zZWN0aW9uKCktPm51bVJvd3MoKSAtIDEpIHsKICAgICAgICAgLy8g
VGhlIGNlbGwgaXMgbm90IGluIHRoZSBsYXN0IHJvdywgc28gdXNlIHRoZSBuZXh0IHJvdyBpbiB0
aGUgc2VjdGlvbi4KICAgICAgICAgc2VjdGlvbiA9IGNlbGwtPnNlY3Rpb24oKTsKQEAgLTExMzAs
NyArMTEzMCw3IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNlbGxCZWxvdyhjb25z
dCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpIGNvbnN0CiAKICAgICAvLyBMb29rIHVwIHRoZSBjZWxs
IGluIHRoZSBzZWN0aW9uJ3MgZ3JpZCwgd2hpY2ggcmVxdWlyZXMgZWZmZWN0aXZlIGNvbCBpbmRl
eAogICAgIGlmIChzZWN0aW9uKSB7Ci0gICAgICAgIGludCBlZmZDb2wgPSBjb2xUb0VmZkNvbChj
ZWxsLT5jb2woKSk7CisgICAgICAgIHVuc2lnbmVkIGVmZkNvbCA9IGNvbFRvRWZmQ29sKGNlbGwt
PmNvbCgpKTsKICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0JiBiZWxvd0Nl
bGwgPSBzZWN0aW9uLT5jZWxsQXQockJlbG93LCBlZmZDb2wpOwogICAgICAgICByZXR1cm4gYmVs
b3dDZWxsLnByaW1hcnlDZWxsKCk7CiAgICAgfSBlbHNlCkBAIC0xMTQyLDcgKzExNDIsNyBAQCBS
ZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQmVmb3JlKGNvbnN0IFJlbmRlclRhYmxl
Q2VsbCogY2VsbCkgY29uc3QKICAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAKICAgICBS
ZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBjZWxsLT5zZWN0aW9uKCk7Ci0gICAgaW50IGVm
ZkNvbCA9IGNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpKTsKKyAgICB1bnNpZ25lZCBlZmZDb2wgPSBj
b2xUb0VmZkNvbChjZWxsLT5jb2woKSk7CiAgICAgaWYgKCFlZmZDb2wpCiAgICAgICAgIHJldHVy
biAwOwogICAgIApAQCAtMTE1NSw3ICsxMTU1LDcgQEAgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJU
YWJsZTo6Y2VsbEFmdGVyKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCkgY29uc3QKIHsKICAg
ICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAKLSAgICBpbnQgZWZmQ29sID0gY29sVG9FZmZD
b2woY2VsbC0+Y29sKCkgKyBjZWxsLT5jb2xTcGFuKCkpOworICAgIHVuc2lnbmVkIGVmZkNvbCA9
IGNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpICsgY2VsbC0+Y29sU3BhbigpKTsKICAgICBpZiAoZWZm
Q29sID49IG51bUVmZkNvbHMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGNlbGwt
PnNlY3Rpb24oKS0+cHJpbWFyeUNlbGxBdChjZWxsLT5yb3coKSwgZWZmQ29sKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKaW5kZXggOGE2NDMzY2RiOTM1YmE4NDE0M2M4YzQ5
YzA5ZDhmYjZlYjRkZDViMi4uYzE5ZDYzNWEyMzBhNjc4MTE4MDlhNjkzNDAxYTBhNmVmYmNlM2Ni
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTE0NiwxOCArMTQ2
LDE4IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgdGFi
bGUgaGFzIG5vIG5vbi1lbXB0eSBzZWN0aW9ucy4KICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHRv
cE5vbkVtcHR5U2VjdGlvbigpIGNvbnN0OwogCi0gICAgdm9pZCBzcGxpdENvbHVtbihpbnQgcG9z
LCBpbnQgZmlyc3RTcGFuKTsKKyAgICB2b2lkIHNwbGl0Q29sdW1uKHVuc2lnbmVkIHBvc2l0aW9u
LCBpbnQgZmlyc3RTcGFuKTsKICAgICB2b2lkIGFwcGVuZENvbHVtbihpbnQgc3Bhbik7Ci0gICAg
aW50IG51bUVmZkNvbHMoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnMuc2l6ZSgpOyB9CisgICAg
dW5zaWduZWQgbnVtRWZmQ29scygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1ucy5zaXplKCk7IH0K
ICAgICBpbnQgc3Bhbk9mRWZmQ29sKGludCBlZmZDb2wpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1u
c1tlZmZDb2xdLnNwYW47IH0KICAgICAKLSAgICBpbnQgY29sVG9FZmZDb2wodW5zaWduZWQgY29s
KSBjb25zdAorICAgIHVuc2lnbmVkIGNvbFRvRWZmQ29sKHVuc2lnbmVkIGNvbHVtbikgY29uc3QK
ICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGVmZkNvbCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG51
bUNvbHMgPSBudW1FZmZDb2xzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYyA9IDA7IGVmZkNv
bCA8IG51bUNvbHMgJiYgYyArIG1fY29sdW1uc1tlZmZDb2xdLnNwYW4gLSAxIDwgY29sOyArK2Vm
ZkNvbCkKLSAgICAgICAgICAgIGMgKz0gbV9jb2x1bW5zW2VmZkNvbF0uc3BhbjsKLSAgICAgICAg
cmV0dXJuIGVmZkNvbDsKKyAgICAgICAgdW5zaWduZWQgZWZmQ29sdW1uID0gMDsKKyAgICAgICAg
dW5zaWduZWQgbnVtQ29sdW1ucyA9IG51bUVmZkNvbHMoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBjID0gMDsgZWZmQ29sdW1uIDwgbnVtQ29sdW1ucyAmJiBjICsgbV9jb2x1bW5zW2VmZkNvbHVt
bl0uc3BhbiAtIDEgPCBjb2x1bW47ICsrZWZmQ29sdW1uKQorICAgICAgICAgICAgYyArPSBtX2Nv
bHVtbnNbZWZmQ29sdW1uXS5zcGFuOworICAgICAgICByZXR1cm4gZWZmQ29sdW1uOwogICAgIH0K
ICAgICAKICAgICBpbnQgZWZmQ29sVG9Db2woaW50IGVmZkNvbCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKaW5kZXggZmRiNDVkYjY5ZmVhNjEy
MWI4MTkzN2JmNWEzMjBjNWJhZjFlYTIyMi4uNjFlNDc4ODQ2NjA5NTVhMjgzMWZmNzkzMWQ5YTQ5
ZmZiYmM2MjUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5jcHAKQEAgLTQzLDggKzQzLDggQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUmVu
ZGVyVGFibGVDZWxsOjpSZW5kZXJUYWJsZUNlbGwoTm9kZSogbm9kZSkKICAgICA6IFJlbmRlckJs
b2NrKG5vZGUpCi0gICAgLCBtX3JvdygtMSkKLSAgICAsIG1fY29sdW1uKC0xKQorICAgICwgbV9y
b3codW5zZXRSb3dJbmRleCkKKyAgICAsIG1fY29sdW1uKHVuc2V0Q29sdW1uSW5kZXgpCiAgICAg
LCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmUoMCkKICAgICAsIG1faW50cmluc2ljUGFkZGluZ0Fm
dGVyKDApCiAgICAgLCBtX2NlbGxXaWR0aENoYW5nZWQoZmFsc2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKaW5kZXggNzU1YTg1NGU0ZWFkN2Y4NzA0MzgxNWY2
ODY3NjEyMjk3ZDRmYzk2MC4uZTcxNDJkZjM3NzI0NzI2ZTQ3NjU3YmMwNzM0OGJjNmZjMTQ2MzRk
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaApAQCAtMjks
NiArMjksMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogSXQgaXMgcG9z
c2libGUgZm9yIHRoZXNlIGluZGV4ZXMgdG8gYmUgcmVhY2hlZCBmb3IgYSB0YWJsZSBiaWcgZW5v
dWdoLgorLy8gV2Ugd291bGQgbmVlZCB0byBlbmZvcmNlIGEgbWF4aW1hbCBpbmRleCBvbiBib3Ro
IHJvd3MgYW5kIGNvbHVtbnMuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5zZXRDb2x1bW5JbmRl
eCA9IDB4RkZGRkZGRkY7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5zZXRSb3dJbmRleCA9IDB4
RkZGRkZGRkY7CisKIGNsYXNzIFJlbmRlclRhYmxlQ2VsbCA6IHB1YmxpYyBSZW5kZXJCbG9jayB7
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmVuZGVyVGFibGVDZWxsKE5vZGUqKTsKQEAgLTQzLDEw
ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIGZyb20gSFRNTFRhYmxlQ2VsbEVsZW1l
bnQuCiAgICAgdm9pZCBjb2xTcGFuT3JSb3dTcGFuQ2hhbmdlZCgpOwogCi0gICAgaW50IGNvbCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uOyB9Ci0gICAgdm9pZCBzZXRDb2woaW50IGNvbCkgeyBt
X2NvbHVtbiA9IGNvbDsgfQotICAgIGludCByb3coKSBjb25zdCB7IHJldHVybiBtX3JvdzsgfQot
ICAgIHZvaWQgc2V0Um93KGludCByb3cpIHsgbV9yb3cgPSByb3c7IH0KKyAgICB2b2lkIHNldENv
bCh1bnNpZ25lZCBjb2x1bW4pIHsgbV9jb2x1bW4gPSBjb2x1bW47IH0KKyAgICB1bnNpZ25lZCBj
b2woKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY29sdW1uICE9IHVuc2V0Q29sdW1u
SW5kZXgpOworICAgICAgICByZXR1cm4gbV9jb2x1bW47CisgICAgfQorCisgICAgdm9pZCBzZXRS
b3codW5zaWduZWQgcm93KSB7IG1fcm93ID0gcm93OyB9CisgICAgdW5zaWduZWQgcm93KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3JvdyAhPSB1bnNldFJvd0luZGV4KTsKKyAgICAg
ICAgcmV0dXJuIG1fcm93OworICAgIH0KIAogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIHRvUmVuZGVyVGFibGVTZWN0aW9uKHBhcmVudCgpLT5wYXJlbnQo
KSk7IH0KICAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBjb25zdCB7IHJldHVybiB0b1JlbmRlclRh
YmxlKHBhcmVudCgpLT5wYXJlbnQoKS0+cGFyZW50KCkpOyB9CkBAIC0xNDUsOCArMTU5LDggQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgcGFpbnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgTGF5b3V0UmVjdCYpOwogCi0gICAgaW50IG1fcm93OwotICAgIGludCBtX2NvbHVt
bjsKKyAgICB1bnNpZ25lZCBtX3JvdzsKKyAgICB1bnNpZ25lZCBtX2NvbHVtbjsKICAgICBpbnQg
bV9pbnRyaW5zaWNQYWRkaW5nQmVmb3JlOwogICAgIGludCBtX2ludHJpbnNpY1BhZGRpbmdBZnRl
cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAppbmRleCAwNzVmODdkZmQ3N2JlYTVjNjRhYWJjZTU0ZTVhYzQ2NGFlZDU4NjNmLi4wZjg0MzRl
YzE1NWE5MTI1MjQxYjRjY2Q4NDhlN2MzYTBmMDY3YmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtNTksNyArNTksNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc2V0Um93TG9naWNhbEhlaWdodFRvUm93U3R5bGVMb2dpY2FsSGVpZ2h0
SWZOb3RSZWxhdGl2ZShSZW5kZQogUmVuZGVyVGFibGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rp
b24oTm9kZSogbm9kZSkKICAgICA6IFJlbmRlckJveChub2RlKQogICAgICwgbV9jQ29sKDApCi0g
ICAgLCBtX2NSb3coLTEpCisgICAgLCBtX2NSb3coMCkKICAgICAsIG1fb3V0ZXJCb3JkZXJTdGFy
dCgwKQogICAgICwgbV9vdXRlckJvcmRlckVuZCgwKQogICAgICwgbV9vdXRlckJvcmRlckJlZm9y
ZSgwKQpAQCAtMTQ3LDE3ICsxNDcsMTggQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENo
aWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQKICAgICBp
ZiAoYmVmb3JlQ2hpbGQpCiAgICAgICAgIHNldE5lZWRzQ2VsbFJlY2FsYygpOwogCisgICAgdW5z
aWduZWQgaW5zZXJ0aW9uUm93ID0gbV9jUm93OwogICAgICsrbV9jUm93OwogICAgIG1fY0NvbCA9
IDA7CiAKICAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggcm93cwotICAgIGlmICghZW5z
dXJlUm93cyhtX2NSb3cgKyAxKSkKKyAgICBpZiAoIWVuc3VyZVJvd3MobV9jUm93KSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9ncmlkW21fY1Jvd10ucm93UmVuZGVyZXIgPSB0b1JlbmRlclRh
YmxlUm93KGNoaWxkKTsKKyAgICBtX2dyaWRbaW5zZXJ0aW9uUm93XS5yb3dSZW5kZXJlciA9IHRv
UmVuZGVyVGFibGVSb3coY2hpbGQpOwogCiAgICAgaWYgKCFiZWZvcmVDaGlsZCkKLSAgICAgICAg
c2V0Um93TG9naWNhbEhlaWdodFRvUm93U3R5bGVMb2dpY2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZSgm
bV9ncmlkW21fY1Jvd10pOworICAgICAgICBzZXRSb3dMb2dpY2FsSGVpZ2h0VG9Sb3dTdHlsZUxv
Z2ljYWxIZWlnaHRJZk5vdFJlbGF0aXZlKCZtX2dyaWRbaW5zZXJ0aW9uUm93XSk7CiAKICAgICAv
LyBJZiB0aGUgbmV4dCByZW5kZXJlciBpcyBhY3R1YWxseSB3cmFwcGVkIGluIGFuIGFub255bW91
cyB0YWJsZSByb3csIHdlIG5lZWQgdG8gZ28gdXAgYW5kIGZpbmQgdGhhdC4KICAgICB3aGlsZSAo
YmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpCkBAIC0xNzQsOSAr
MTc1LDkgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlbW92ZUNoaWxkKFJlbmRlck9iamVj
dCogb2xkQ2hpbGQpCiAgICAgUmVuZGVyQm94OjpyZW1vdmVDaGlsZChvbGRDaGlsZCk7CiB9CiAK
LWJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGludCBudW1Sb3dzKQorYm9vbCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmVuc3VyZVJvd3ModW5zaWduZWQgbnVtUm93cykKIHsKLSAgICBp
ZiAobnVtUm93cyA+IHN0YXRpY19jYXN0PGludD4obV9ncmlkLnNpemUoKSkpIHsKKyAgICBpZiAo
bnVtUm93cyA+IG1fZ3JpZC5zaXplKCkpIHsKICAgICAgICAgc2l6ZV90IG1heFNpemUgPSBudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihSb3dTdHJ1Y3QpOwogICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1Sb3dzKSA+IG1heFNpemUpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xODQsOCArMTg1LDggQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246
OmVuc3VyZVJvd3MoaW50IG51bVJvd3MpCiAgICAgICAgIHVuc2lnbmVkIG9sZFNpemUgPSBtX2dy
aWQuc2l6ZSgpOwogICAgICAgICBtX2dyaWQuZ3JvdyhudW1Sb3dzKTsKIAotICAgICAgICBpbnQg
bkNvbHMgPSBtYXgoMSwgdGFibGUoKS0+bnVtRWZmQ29scygpKTsKLSAgICAgICAgZm9yIChpbnQg
ciA9IG9sZFNpemU7IHIgPCBudW1Sb3dzOyByKyspIHsKKyAgICAgICAgdW5zaWduZWQgbkNvbHMg
PSBtYXgoMXUsIHRhYmxlKCktPm51bUVmZkNvbHMoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
ciA9IG9sZFNpemU7IHIgPCBudW1Sb3dzOyByKyspIHsKICAgICAgICAgICAgIG1fZ3JpZFtyXS5y
b3cgPSBuZXcgUm93KG5Db2xzKTsKICAgICAgICAgICAgIG1fZ3JpZFtyXS5yb3dSZW5kZXJlciA9
IDA7CiAgICAgICAgICAgICBtX2dyaWRbcl0uYmFzZWxpbmUgPSAwOwpAQCAtMjAxLDcgKzIwMiwx
MCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqIGNl
bGwsIFJlbmRlclRhYmxlUm93KiByb3cpCiAgICAgaW50IHJTcGFuID0gY2VsbC0+cm93U3Bhbigp
OwogICAgIGludCBjU3BhbiA9IGNlbGwtPmNvbFNwYW4oKTsKICAgICBWZWN0b3I8UmVuZGVyVGFi
bGU6OkNvbHVtblN0cnVjdD4mIGNvbHVtbnMgPSB0YWJsZSgpLT5jb2x1bW5zKCk7Ci0gICAgaW50
IG5Db2xzID0gY29sdW1ucy5zaXplKCk7CisgICAgdW5zaWduZWQgbkNvbHMgPSBjb2x1bW5zLnNp
emUoKTsKKyAgICAvLyBhZGRDZWxsIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBtX2NSb3cg
aGFzIGJlZW4gaW5jcmVtZW50ZWQuCisgICAgQVNTRVJUKG1fY1Jvdyk7CisgICAgdW5zaWduZWQg
aW5zZXJ0aW9uUm93ID0gbV9jUm93IC0gMTsKIAogICAgIC8vICMjIyBtb3ppbGxhIHN0aWxsIHNl
ZW1zIHRvIGRvIHRoZSBvbGQgSFRNTCB3YXksIGV2ZW4gZm9yIHN0cmljdCBEVEQKICAgICAvLyAo
c2VlIHRoZSBhbm5vdGF0aW9uIG9uIHRhYmxlIGNlbGwgbGF5b3V0aW5nIGluIHRoZSBDU1Mgc3Bl
Y3MgYW5kIHRoZSB0ZXN0Y2FzZSBiZWxvdzoKQEAgLTIwOSwyNCArMjEzLDI0IEBAIHZvaWQgUmVu
ZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyVGFi
bGVSb3cqIHJvdykKICAgICAvLyA8VFI+PFREPjEgPFREIHJvd3NwYW49IjIiPjIgPFREPjMgPFRE
PjQKICAgICAvLyA8VFI+PFREIGNvbHNwYW49IjIiPjUKICAgICAvLyA8L1RBQkxFPgotICAgIHdo
aWxlIChtX2NDb2wgPCBuQ29scyAmJiAoY2VsbEF0KG1fY1JvdywgbV9jQ29sKS5oYXNDZWxscygp
IHx8IGNlbGxBdChtX2NSb3csIG1fY0NvbCkuaW5Db2xTcGFuKSkKKyAgICB3aGlsZSAobV9jQ29s
IDwgbkNvbHMgJiYgKGNlbGxBdChpbnNlcnRpb25Sb3csIG1fY0NvbCkuaGFzQ2VsbHMoKSB8fCBj
ZWxsQXQoaW5zZXJ0aW9uUm93LCBtX2NDb2wpLmluQ29sU3BhbikpCiAgICAgICAgIG1fY0NvbCsr
OwogCiAgICAgaWYgKHJTcGFuID09IDEpIHsKICAgICAgICAgLy8gd2UgaWdub3JlIGhlaWdodCBz
ZXR0aW5ncyBvbiByb3dzcGFuIGNlbGxzCiAgICAgICAgIExlbmd0aCBsb2dpY2FsSGVpZ2h0ID0g
Y2VsbC0+c3R5bGUoKS0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBpZiAobG9naWNhbEhlaWdo
dC5pc1Bvc2l0aXZlKCkgfHwgKGxvZ2ljYWxIZWlnaHQuaXNSZWxhdGl2ZSgpICYmIGxvZ2ljYWxI
ZWlnaHQudmFsdWUoKSA+PSAwKSkgewotICAgICAgICAgICAgTGVuZ3RoIGNSb3dMb2dpY2FsSGVp
Z2h0ID0gbV9ncmlkW21fY1Jvd10ubG9naWNhbEhlaWdodDsKKyAgICAgICAgICAgIExlbmd0aCBj
Um93TG9naWNhbEhlaWdodCA9IG1fZ3JpZFtpbnNlcnRpb25Sb3ddLmxvZ2ljYWxIZWlnaHQ7CiAg
ICAgICAgICAgICBzd2l0Y2ggKGxvZ2ljYWxIZWlnaHQudHlwZSgpKSB7CiAgICAgICAgICAgICAg
ICAgY2FzZSBQZXJjZW50OgogICAgICAgICAgICAgICAgICAgICBpZiAoIShjUm93TG9naWNhbEhl
aWdodC5pc1BlcmNlbnQoKSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIChjUm93TG9naWNh
bEhlaWdodC5pc1BlcmNlbnQoKSAmJiBjUm93TG9naWNhbEhlaWdodC5wZXJjZW50KCkgPCBsb2dp
Y2FsSGVpZ2h0LnBlcmNlbnQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyaWRbbV9j
Um93XS5sb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JpZFtpbnNlcnRpb25Sb3ddLmxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0Owog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBGaXhl
ZDoKICAgICAgICAgICAgICAgICAgICAgaWYgKGNSb3dMb2dpY2FsSGVpZ2h0LnR5cGUoKSA8IFBl
cmNlbnQgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIChjUm93TG9naWNhbEhlaWdodC5pc0Zp
eGVkKCkgJiYgY1Jvd0xvZ2ljYWxIZWlnaHQudmFsdWUoKSA8IGxvZ2ljYWxIZWlnaHQudmFsdWUo
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyaWRbbV9jUm93XS5sb2dpY2FsSGVpZ2h0
ID0gbG9naWNhbEhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JpZFtpbnNlcnRp
b25Sb3ddLmxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0OwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFJlbGF0aXZlOgogICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0yMzYsMTIgKzI0MCwxMiBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6
YWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFJlbmRlclRhYmxlUm93KiByb3cpCiAgICAg
fQogCiAgICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvd3MKLSAgICBpZiAoIWVuc3Vy
ZVJvd3MobV9jUm93ICsgclNwYW4pKQorICAgIGlmICghZW5zdXJlUm93cyhpbnNlcnRpb25Sb3cg
KyByU3BhbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRl
cmVyID0gcm93OworICAgIG1fZ3JpZFtpbnNlcnRpb25Sb3ddLnJvd1JlbmRlcmVyID0gcm93Owog
Ci0gICAgaW50IGNvbCA9IG1fY0NvbDsKKyAgICB1bnNpZ25lZCBjb2wgPSBtX2NDb2w7CiAgICAg
Ly8gdGVsbCB0aGUgY2VsbCB3aGVyZSBpdCBpcwogICAgIGJvb2wgaW5Db2xTcGFuID0gZmFsc2U7
CiAgICAgd2hpbGUgKGNTcGFuKSB7CkBAIC0yNTUsNyArMjU5LDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBSZW5kZXJUYWJsZVJvdyog
cm93KQogICAgICAgICAgICAgY3VycmVudFNwYW4gPSBjb2x1bW5zW21fY0NvbF0uc3BhbjsKICAg
ICAgICAgfQogICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJTcGFuOyByKyspIHsKLSAgICAg
ICAgICAgIENlbGxTdHJ1Y3QmIGMgPSBjZWxsQXQobV9jUm93ICsgciwgbV9jQ29sKTsKKyAgICAg
ICAgICAgIENlbGxTdHJ1Y3QmIGMgPSBjZWxsQXQoaW5zZXJ0aW9uUm93ICsgciwgbV9jQ29sKTsK
ICAgICAgICAgICAgIEFTU0VSVChjZWxsKTsKICAgICAgICAgICAgIGMuY2VsbHMuYXBwZW5kKGNl
bGwpOwogICAgICAgICAgICAgLy8gSWYgY2VsbHMgb3ZlcmxhcCB0aGVuIHdlIHRha2UgdGhlIHNs
b3cgcGF0aCBmb3IgcGFpbnRpbmcuCkBAIC0yNjgsNyArMjcyLDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBSZW5kZXJUYWJsZVJvdyog
cm93KQogICAgICAgICBjU3BhbiAtPSBjdXJyZW50U3BhbjsKICAgICAgICAgaW5Db2xTcGFuID0g
dHJ1ZTsKICAgICB9Ci0gICAgY2VsbC0+c2V0Um93KG1fY1Jvdyk7CisgICAgY2VsbC0+c2V0Um93
KGluc2VydGlvblJvdyk7CiAgICAgY2VsbC0+c2V0Q29sKHRhYmxlKCktPmVmZkNvbFRvQ29sKGNv
bCkpOwogfQogCkBAIC0yODAsMTYgKzI4NCwxNiBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6
c2V0Q2VsbExvZ2ljYWxXaWR0aHMoKQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Z3JpZC5zaXplKCk7IGkrKykgewogICAgICAgICBSb3cmIHJvdyA9ICptX2dyaWRbaV0ucm93Owot
ICAgICAgICBpbnQgY29scyA9IHJvdy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgY29sczsgaisrKSB7CisgICAgICAgIHVuc2lnbmVkIGNvbHMgPSByb3cuc2l6ZSgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgY29sczsgaisrKSB7CiAgICAgICAgICAgICBD
ZWxsU3RydWN0JiBjdXJyZW50ID0gcm93W2pdOwogICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxs
KiBjZWxsID0gY3VycmVudC5wcmltYXJ5Q2VsbCgpOwogICAgICAgICAgICAgaWYgKCFjZWxsIHx8
IGN1cnJlbnQuaW5Db2xTcGFuKQogICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGludCBlbmRDb2wgPSBqOworICAgICAgICAgICAgdW5zaWduZWQgZW5kQ29sID0gajsKICAgICAg
ICAgICAgIGludCBjc3BhbiA9IGNlbGwtPmNvbFNwYW4oKTsKICAgICAgICAgICAgIHdoaWxlIChj
c3BhbiAmJiBlbmRDb2wgPCBjb2xzKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVuZENvbCA8
IChpbnQpdGFibGUoKS0+Y29sdW1ucygpLnNpemUoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGVuZENvbCA8IHRhYmxlKCktPmNvbHVtbnMoKS5zaXplKCkpOwogICAgICAgICAgICAgICAgIGNz
cGFuIC09IHRhYmxlKCktPmNvbHVtbnMoKVtlbmRDb2xdLnNwYW47CiAgICAgICAgICAgICAgICAg
ZW5kQ29sKys7CiAgICAgICAgICAgICB9CkBAIC0zNDEsMTYgKzM0NSwxNiBAQCBMYXlvdXRVbml0
IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jvd0xvZ2ljYWxIZWlnaHQoKQogICAgICAgICBtX3Jv
d1Bvc1tyICsgMV0gPSBtYXgobV9yb3dQb3NbciArIDFdLCBwb3MpOwogCiAgICAgICAgIFJvdyog
cm93ID0gbV9ncmlkW3JdLnJvdzsKLSAgICAgICAgaW50IHRvdGFsQ29scyA9IHJvdy0+c2l6ZSgp
OworICAgICAgICB1bnNpZ25lZCB0b3RhbENvbHMgPSByb3ctPnNpemUoKTsKIAotICAgICAgICBm
b3IgKGludCBjID0gMDsgYyA8IHRvdGFsQ29sczsgYysrKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgYyA9IDA7IGMgPCB0b3RhbENvbHM7IGMrKykgewogICAgICAgICAgICAgQ2VsbFN0cnVjdCYg
Y3VycmVudCA9IGNlbGxBdChyLCBjKTsKICAgICAgICAgICAgIGNlbGwgPSBjdXJyZW50LnByaW1h
cnlDZWxsKCk7CiAKICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjdXJyZW50LmluQ29sU3BhbikK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKChjZWxsLT5yb3co
KSArIGNlbGwtPnJvd1NwYW4oKSAtIDEpID4gc3RhdGljX2Nhc3Q8aW50PihyKSkKKyAgICAgICAg
ICAgIGlmICgoY2VsbC0+cm93KCkgKyBjZWxsLT5yb3dTcGFuKCkgLSAxKSA+IHIpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIGluZHggPSBtYXgociAt
IGNlbGwtPnJvd1NwYW4oKSArIDEsIDB1KTsKQEAgLTQzOSw4ICs0NDMsOCBAQCBMYXlvdXRVbml0
IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0IHRvQWRkKQogCiAgICAg
TGF5b3V0VW5pdCBySGVpZ2h0OwogICAgIGludCByaW5keDsKLSAgICBpbnQgdG90YWxSb3dzID0g
bV9ncmlkLnNpemUoKTsKLSAgICAKKyAgICB1bnNpZ25lZCB0b3RhbFJvd3MgPSBtX2dyaWQuc2l6
ZSgpOworCiAgICAgLy8gU2V0IHRoZSB3aWR0aCBvZiBvdXIgc2VjdGlvbiBub3cuICBUaGUgcm93
cyB3aWxsIGFsc28gYmUgdGhpcyB3aWR0aC4KICAgICBzZXRMb2dpY2FsV2lkdGgodGFibGUoKS0+
Y29udGVudExvZ2ljYWxXaWR0aCgpKTsKICAgICBtX292ZXJmbG93LmNsZWFyKCk7CkBAIC00NTMs
NyArNDU3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoTGF5
b3V0VW5pdCB0b0FkZCkKICAgICAgICAgTGF5b3V0VW5pdCBkaCA9IHRvQWRkOwogICAgICAgICBp
bnQgdG90YWxQZXJjZW50ID0gMDsKICAgICAgICAgaW50IG51bUF1dG8gPSAwOwotICAgICAgICBm
b3IgKGludCByID0gMDsgciA8IHRvdGFsUm93czsgcisrKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAgICAgICAgICAgaWYgKG1fZ3JpZFty
XS5sb2dpY2FsSGVpZ2h0LmlzQXV0bygpKQogICAgICAgICAgICAgICAgIG51bUF1dG8rKzsKICAg
ICAgICAgICAgIGVsc2UgaWYgKG1fZ3JpZFtyXS5sb2dpY2FsSGVpZ2h0LmlzUGVyY2VudCgpKQpA
QCAtNDY0LDcgKzQ2OCw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRS
b3dzKExheW91dFVuaXQgdG9BZGQpCiAgICAgICAgICAgICBMYXlvdXRVbml0IGFkZCA9IDA7CiAg
ICAgICAgICAgICB0b3RhbFBlcmNlbnQgPSBtaW4odG90YWxQZXJjZW50LCAxMDApOwogICAgICAg
ICAgICAgaW50IHJoID0gbV9yb3dQb3NbMV0gLSBtX3Jvd1Bvc1swXTsKLSAgICAgICAgICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAgICAgICAgICAgICAgIGlmICh0
b3RhbFBlcmNlbnQgPiAwICYmIG1fZ3JpZFtyXS5sb2dpY2FsSGVpZ2h0LmlzUGVyY2VudCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9BZGQgPSBtaW4oZGgsIHN0YXRpY19j
YXN0PExheW91dFVuaXQ+KCh0b3RhbEhlaWdodCAqIG1fZ3JpZFtyXS5sb2dpY2FsSGVpZ2h0LnBl
cmNlbnQoKSAvIDEwMCkgLSByaCkpOwogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0b0FkZCBp
cyBuZWdhdGl2ZSwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIHNocmluayB0aGUgcm93ICh0aGlzIGJ1
ZwpAQCAtNDc0LDYgKzQ3OCw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlv
dXRSb3dzKExheW91dFVuaXQgdG9BZGQpCiAgICAgICAgICAgICAgICAgICAgIGRoIC09IHRvQWRk
OwogICAgICAgICAgICAgICAgICAgICB0b3RhbFBlcmNlbnQgLT0gbV9ncmlkW3JdLmxvZ2ljYWxI
ZWlnaHQucGVyY2VudCgpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NF
UlQodG90YWxSb3dzID49IDEpOwogICAgICAgICAgICAgICAgIGlmIChyIDwgdG90YWxSb3dzIC0g
MSkKICAgICAgICAgICAgICAgICAgICAgcmggPSBtX3Jvd1Bvc1tyICsgMl0gLSBtX3Jvd1Bvc1ty
ICsgMV07CiAgICAgICAgICAgICAgICAgbV9yb3dQb3NbciArIDFdICs9IGFkZDsKQEAgLTQ4Miw3
ICs0ODcsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlv
dXRVbml0IHRvQWRkKQogICAgICAgICBpZiAobnVtQXV0bykgewogICAgICAgICAgICAgLy8gZGlz
dHJpYnV0ZSBvdmVyIHZhcmlhYmxlIGNvbHMKICAgICAgICAgICAgIExheW91dFVuaXQgYWRkID0g
MDsKLSAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAg
ICAgICAgICAgICAgIGlmIChudW1BdXRvID4gMCAmJiBtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5p
c0F1dG8oKSkgewogICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvQWRkID0gZGggLyBu
dW1BdXRvOwogICAgICAgICAgICAgICAgICAgICBhZGQgKz0gdG9BZGQ7CkBAIC00OTcsNyArNTAy
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoTGF5b3V0VW5p
dCB0b0FkZCkKICAgICAgICAgICAgIExheW91dFVuaXQgdG90ID0gbV9yb3dQb3NbdG90YWxSb3dz
XTsKICAgICAgICAgICAgIExheW91dFVuaXQgYWRkID0gMDsKICAgICAgICAgICAgIExheW91dFVu
aXQgcHJldiA9IG1fcm93UG9zWzBdOwotICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCB0
b3RhbFJvd3M7IHIrKykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCByID0gMDsgciA8IHRv
dGFsUm93czsgcisrKSB7CiAgICAgICAgICAgICAgICAgLy8gd2VpZ2h0IHdpdGggdGhlIG9yaWdp
bmFsIGhlaWdodAogICAgICAgICAgICAgICAgIGFkZCArPSBkaCAqIChtX3Jvd1Bvc1tyICsgMV0g
LSBwcmV2KSAvIHRvdDsKICAgICAgICAgICAgICAgICBwcmV2ID0gbV9yb3dQb3NbciArIDFdOwpA
QCAtNTEyLDcgKzUxNyw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRS
b3dzKExheW91dFVuaXQgdG9BZGQpCiAKICAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQ
dXNoZXIodmlldygpLCB0aGlzLCBMYXlvdXRTaXplKHgoKSwgeSgpKSwgc3R5bGUoKS0+aXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CiAKLSAgICBmb3IgKGludCByID0gMDsgciA8IHRvdGFs
Um93czsgcisrKSB7CisgICAgZm9yICh1bnNpZ25lZCByID0gMDsgciA8IHRvdGFsUm93czsgcisr
KSB7CiAgICAgICAgIC8vIFNldCB0aGUgcm93J3MgeC95IHBvc2l0aW9uIGFuZCB3aWR0aC9oZWln
aHQuCiAgICAgICAgIGlmIChSZW5kZXJUYWJsZVJvdyogcm93UmVuZGVyZXIgPSBtX2dyaWRbcl0u
cm93UmVuZGVyZXIpIHsKICAgICAgICAgICAgIHJvd1JlbmRlcmVyLT5zZXRMb2NhdGlvbihMYXlv
dXRQb2ludCgwLCBtX3Jvd1Bvc1tyXSkpOwpAQCAtNjc3LDcgKzY4Miw3IEBAIExheW91dFVuaXQg
UmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKExheW91dFVuaXQgdG9BZGQpCiAgICAgYm9v
bCBoYXNPdmVyZmxvd2luZ0NlbGwgPSBmYWxzZTsKICNlbmRpZgogICAgIC8vIE5vdyB0aGF0IG91
ciBoZWlnaHQgaGFzIGJlZW4gZGV0ZXJtaW5lZCwgYWRkIGluIG92ZXJmbG93IGZyb20gY2VsbHMu
Ci0gICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgeworICAgIGZvciAodW5z
aWduZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAgICAgICBmb3IgKGludCBjID0g
MDsgYyA8IG5FZmZDb2xzOyBjKyspIHsKICAgICAgICAgICAgIENlbGxTdHJ1Y3QmIGNzID0gY2Vs
bEF0KHIsIGMpOwogICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3MucHJpbWFy
eUNlbGwoKTsKQEAgLTExMjIsNyArMTEyNyw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpp
bWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KikKIHZvaWQgUmVuZGVy
VGFibGVTZWN0aW9uOjpyZWNhbGNDZWxscygpCiB7CiAgICAgbV9jQ29sID0gMDsKLSAgICBtX2NS
b3cgPSAtMTsKKyAgICBtX2NSb3cgPSAwOwogICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gbV9ncmlk
LnNpemUoKTsKICAgICBjbGVhckdyaWQoKTsKICAgICAvLyBBbHRob3VnaCBpdCBpcyBwb3NzaWJs
ZSBmb3Igb3VyIHJvdyBjb3VudCB0byBzaHJpbmsgKGR1ZSB0byByZW1vdmVDaGlsZCBiZWluZyBj
YWxsZWQpLApAQCAtMTEzMiwxNCArMTEzNywxNSBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6
cmVjYWxjQ2VsbHMoKQogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHJvdyA9IGZpcnN0Q2hpbGQo
KTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKHJvdy0+aXNU
YWJsZVJvdygpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnNlcnRpb25Sb3cgPSBtX2NSb3c7
CiAgICAgICAgICAgICBtX2NSb3crKzsKICAgICAgICAgICAgIG1fY0NvbCA9IDA7Ci0gICAgICAg
ICAgICBpZiAoIWVuc3VyZVJvd3MobV9jUm93ICsgMSkpCisgICAgICAgICAgICBpZiAoIWVuc3Vy
ZVJvd3MobV9jUm93KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgUmVuZGVyVGFibGVSb3cqIHRhYmxlUm93ID0gdG9SZW5kZXJUYWJsZVJvdyhyb3cp
OwotICAgICAgICAgICAgbV9ncmlkW21fY1Jvd10ucm93UmVuZGVyZXIgPSB0YWJsZVJvdzsKLSAg
ICAgICAgICAgIHNldFJvd0xvZ2ljYWxIZWlnaHRUb1Jvd1N0eWxlTG9naWNhbEhlaWdodElmTm90
UmVsYXRpdmUoJm1fZ3JpZFttX2NSb3ddKTsKKyAgICAgICAgICAgIG1fZ3JpZFtpbnNlcnRpb25S
b3ddLnJvd1JlbmRlcmVyID0gdGFibGVSb3c7CisgICAgICAgICAgICBzZXRSb3dMb2dpY2FsSGVp
Z2h0VG9Sb3dTdHlsZUxvZ2ljYWxIZWlnaHRJZk5vdFJlbGF0aXZlKCZtX2dyaWRbaW5zZXJ0aW9u
Um93XSk7CiAKICAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0gcm93LT5maXJz
dENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGNlbGwtPmlzVGFibGVDZWxsKCkpCkBAIC0xMTY2LDEyICsxMTcyLDEyIEBAIHZv
aWQgUmVuZGVyVGFibGVTZWN0aW9uOjpjbGVhckdyaWQoKQogICAgIG1fZ3JpZC5jbGVhcigpOwog
fQogCi1pbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKCkgY29uc3QKK3Vuc2lnbmVk
IFJlbmRlclRhYmxlU2VjdGlvbjo6bnVtQ29sdW1ucygpIGNvbnN0CiB7Ci0gICAgaW50IHJlc3Vs
dCA9IDA7CisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVk
IHIgPSAwOyByIDwgbV9ncmlkLnNpemUoKTsgKytyKSB7Ci0gICAgICAgIGZvciAoaW50IGMgPSBy
ZXN1bHQ7IGMgPCB0YWJsZSgpLT5udW1FZmZDb2xzKCk7ICsrYykgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGMgPSByZXN1bHQ7IGMgPCB0YWJsZSgpLT5udW1FZmZDb2xzKCk7ICsrYykgewogICAg
ICAgICAgICAgY29uc3QgQ2VsbFN0cnVjdCYgY2VsbCA9IGNlbGxBdChyLCBjKTsKICAgICAgICAg
ICAgIGlmIChjZWxsLmhhc0NlbGxzKCkgfHwgY2VsbC5pbkNvbFNwYW4pCiAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gYzsKQEAgLTExODcsNyArMTE5Myw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0
aW9uOjphcHBlbmRDb2x1bW4oaW50IHBvcykKICAgICAgICAgbV9ncmlkW3Jvd10ucm93LT5yZXNp
emUocG9zICsgMSk7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbihp
bnQgcG9zLCBpbnQgZmlyc3QpCit2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4o
dW5zaWduZWQgcG9zLCBpbnQgZmlyc3QpCiB7CiAgICAgQVNTRVJUKCFtX25lZWRzQ2VsbFJlY2Fs
Yyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaApp
bmRleCA0MjYxY2FlYjg2NmQ1MWE5YTBhM2U5Zjk0NTc1MWE5NGZlM2IwZjM0Li4xZjU0M2ZhMDdj
ZGYyZmRlYjdlNmMzMzNmMWI5YzMxZjg3YTE1ZGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICB2b2lkIGFwcGVuZENvbHVtbihpbnQgcG9zKTsKLSAgICB2b2lkIHNwbGl0Q29s
dW1uKGludCBwb3MsIGludCBmaXJzdCk7CisgICAgdm9pZCBzcGxpdENvbHVtbih1bnNpZ25lZCBw
b3MsIGludCBmaXJzdCk7CiAKICAgICBMYXlvdXRVbml0IGNhbGNPdXRlckJvcmRlckJlZm9yZSgp
IGNvbnN0OwogICAgIExheW91dFVuaXQgY2FsY091dGVyQm9yZGVyQWZ0ZXIoKSBjb25zdDsKQEAg
LTEwNSw4ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBvdXRlckJvcmRlclN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9vdXRlckJvcmRlclN0YXJ0OyB9CiAgICAgTGF5b3V0VW5pdCBv
dXRlckJvcmRlckVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJCb3JkZXJFbmQ7IH0KIAotICAg
IGludCBudW1Sb3dzKCkgY29uc3QgeyByZXR1cm4gbV9ncmlkLnNpemUoKTsgfQotICAgIGludCBu
dW1Db2x1bW5zKCkgY29uc3Q7CisgICAgdW5zaWduZWQgbnVtUm93cygpIGNvbnN0IHsgcmV0dXJu
IG1fZ3JpZC5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBudW1Db2x1bW5zKCkgY29uc3Q7CiAgICAg
dm9pZCByZWNhbGNDZWxscygpOwogICAgIHZvaWQgcmVjYWxjQ2VsbHNJZk5lZWRlZCgpCiAgICAg
ewpAQCAtMTQ0LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKLSAgICBib29sIGVuc3VyZVJvd3MoaW50KTsKKyAgICBi
b29sIGVuc3VyZVJvd3ModW5zaWduZWQpOwogICAgIHZvaWQgY2xlYXJHcmlkKCk7CiAKICAgICBi
b29sIGhhc092ZXJmbG93aW5nQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dpbmdDZWxs
cy5zaXplKCkgfHwgbV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsOyB9CkBA
IC0xNTUsOCArMTU1LDggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8TGF5b3V0VW5pdD4gbV9yb3dQ
b3M7CiAKICAgICAvLyB0aGUgY3VycmVudCBpbnNlcnRpb24gcG9zaXRpb24KLSAgICBpbnQgbV9j
Q29sOwotICAgIGludCBtX2NSb3c7CisgICAgdW5zaWduZWQgbV9jQ29sOworICAgIHVuc2lnbmVk
IG1fY1JvdzsKIAogICAgIExheW91dFVuaXQgbV9vdXRlckJvcmRlclN0YXJ0OwogICAgIExheW91
dFVuaXQgbV9vdXRlckJvcmRlckVuZDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>