<?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>71500</bug_id>
          
          <creation_ts>2011-11-03 13:23:10 -0700</creation_ts>
          <short_desc>Correct usage of LayoutUnits and integers in Table rendering classes</short_desc>
          <delta_ts>2011-11-03 17:57:21 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>darin</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>495744</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-03 13:23:10 -0700</bug_when>
    <thetext>Table layout still needs to be done with integers to preserve rules from the spec. There were also a few places missing LayoutUnits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495769</commentid>
    <comment_count>1</comment_count>
      <attachid>113552</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-03 13:45:51 -0700</bug_when>
    <thetext>Created attachment 113552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495820</commentid>
    <comment_count>2</comment_count>
      <attachid>113552</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-03 15:28:32 -0700</bug_when>
    <thetext>Comment on attachment 113552
Patch

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

Are all those max&lt;int&gt; needed? If both arguments are already int, I would expect you could leave out the &lt;int&gt;.

Lets not leave things behind that show the churn from when we converted to LayoutUnit and back. We should only have things like &lt;int&gt; if they are actually needed.

&gt; Source/WebCore/rendering/AutoTableLayout.cpp:255
&gt; +        maxWidth = max&lt;int&gt;(maxWidth, static_cast&lt;int&gt;(min(maxNonPercent, numeric_limits&lt;LayoutUnit&gt;::max() / 2.0f)));
&gt; +        maxWidth = max&lt;int&gt;(maxWidth, static_cast&lt;int&gt;(min(maxPercent, numeric_limits&lt;LayoutUnit&gt;::max() / 2.0f)));

It seems unfortunate to convert from LayoutUnit to int using static_cast. Isn’t there a better way? For example, could you just leave out the cast entirely, since the argument to max&lt;int&gt; is an int?

&gt; Source/WebCore/rendering/AutoTableLayout.cpp:392
&gt; +                    int cellLogicalWidth = max&lt;int&gt;(m_layoutStruct[pos].effectiveMinLogicalWidth, static_cast&lt;int&gt;(cellMinLogicalWidth * m_layoutStruct[pos].logicalWidth.value() / fixedWidth));

Same comment here about static_cast&lt;int&gt;. I think it can be omitted.

&gt; Source/WebCore/rendering/AutoTableLayout.cpp:428
&gt; +                    int colMaxLogicalWidth = max&lt;int&gt;(m_layoutStruct[pos].effectiveMaxLogicalWidth, static_cast&lt;int&gt;(spanMaxLogicalWidth ? cellMaxLogicalWidth * static_cast&lt;float&gt;(m_layoutStruct[pos].effectiveMaxLogicalWidth) / spanMaxLogicalWidth : cellMaxLogicalWidth));

And here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495887</commentid>
    <comment_count>3</comment_count>
      <attachid>113581</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-03 16:54:27 -0700</bug_when>
    <thetext>Created attachment 113581
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495951</commentid>
    <comment_count>4</comment_count>
      <attachid>113581</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-03 17:57:16 -0700</bug_when>
    <thetext>Comment on attachment 113581
Patch for landing

Clearing flags on attachment: 113581

Committed r99254: &lt;http://trac.webkit.org/changeset/99254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495952</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-03 17:57:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113552</attachid>
            <date>2011-11-03 13:45:51 -0700</date>
            <delta_ts>2011-11-03 16:54:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71500-20111103134549.patch</filename>
            <type>text/plain</type>
            <size>35986</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MjMyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTEtMDMgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENvcnJlY3QgdXNhZ2Ugb2Yg
TGF5b3V0VW5pdHMgYW5kIGludGVnZXJzIGluIFRhYmxlIHJlbmRlcmluZyBjbGFzc2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUwMAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGluZyB0aGUgVGFi
bGUgbGF5b3V0IGNsYXNzZXMgdG8gb3BlcmF0ZSBvbiBpbnRlZ2VycyAtLSBzdWItcGl4ZWwgdGFi
bGUgbGF5b3V0IGJyZWFrcworICAgICAgICB0aGUgc3BlYy4gTWVhbndoaWxlIGNvcnJlY3Rpbmcg
dGhlIFRhYmxlIHJlbmRlcmluZyBjbGFzc2VzIHRoZW1zZWx2ZXMgdG8gc3RpbGwgdXNlCisgICAg
ICAgIExheW91dFVuaXRzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBubyBjaGFuZ2UgaW4g
YmVoYXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcDogUmV2
ZXJ0aW5nIHRvIG9wZXJhdGluZyBvbiBpbnRlZ2Vycy4KKyAgICAgICAgKFdlYkNvcmU6OkF1dG9U
YWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9UYWJsZUxh
eW91dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6
QXV0b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1dG9UYWJsZUxheW91dDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0
b1RhYmxlTGF5b3V0Lmg6IFJldmVydGluZyB0byBvcGVyYXRpbmcgb24gaW50ZWdlcnMuCisgICAg
ICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmxheW91dCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6IFN3aXRjaGluZyB0byBMYXlvdXRVbml0cy4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpnZXRDb2x1bW5Qb3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGU6OmJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDogU3dpdGNoaW5nIHRvIExh
eW91dFVuaXRzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjp1cGRhdGVMb2dp
Y2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpzZXRPdmVycmlk
ZUhlaWdodEZyb21Sb3dIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxs
Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
ZWxsOjpjZWxsQmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZUNlbGw6OnNjcm9sbGJhcnNDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmg6IFN3aXRjaGluZyB0byBMYXlvdXRVbml0cworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlU2VjdGlvbjo6c2V0Q2VsbExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKToKKwogMjAxMS0xMS0wMyAgSm9zaHVhIEJlbGwg
IDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWREQiByZXN1bHQgb2YgZGVs
ZXRpbmcgYSByZWNvcmQgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiA5OTAwNikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OSwxMSArNjksMTEgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVt
bihpbnQgZQogICAgICAgICAgICAgICAgIGlmIChjZWxsLT5jb2xTcGFuKCkgPT0gMSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBBIGNlbGwgb3JpZ2luYXRlcyBpbiB0aGlzIGNvbHVtbi4gIEVu
c3VyZSB3ZSBoYXZlCiAgICAgICAgICAgICAgICAgICAgIC8vIGEgbWluL21heCB3aWR0aCBvZiBh
dCBsZWFzdCAxcHggZm9yIHRoaXMgY29sdW1uIG5vdy4KLSAgICAgICAgICAgICAgICAgICAgY29s
dW1uTGF5b3V0Lm1pbkxvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0Pihjb2x1bW5MYXlvdXQu
bWluTG9naWNhbFdpZHRoLCBjZWxsSGFzQ29udGVudCA/IDEgOiAwKTsKLSAgICAgICAgICAgICAg
ICAgICAgY29sdW1uTGF5b3V0Lm1heExvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0Pihjb2x1
bW5MYXlvdXQubWF4TG9naWNhbFdpZHRoLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1u
TGF5b3V0Lm1pbkxvZ2ljYWxXaWR0aCA9IG1heDxpbnQ+KGNvbHVtbkxheW91dC5taW5Mb2dpY2Fs
V2lkdGgsIGNlbGxIYXNDb250ZW50ID8gMSA6IDApOworICAgICAgICAgICAgICAgICAgICBjb2x1
bW5MYXlvdXQubWF4TG9naWNhbFdpZHRoID0gbWF4PGludD4oY29sdW1uTGF5b3V0Lm1heExvZ2lj
YWxXaWR0aCwgMSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLT5wcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91
dC5taW5Mb2dpY2FsV2lkdGggPSBtYXgoY2VsbC0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCks
IGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgICAgICAgICBjb2x1
bW5MYXlvdXQubWluTG9naWNhbFdpZHRoID0gbWF4PGludD4oY2VsbC0+bWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoKCksIGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoY2VsbC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgPiBjb2x1bW5MYXlv
dXQubWF4TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5MYXlv
dXQubWF4TG9naWNhbFdpZHRoID0gY2VsbC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXhDb250cmlidXRvciA9IGNlbGw7CkBAIC0xMTksOCAr
MTE5LDggQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbihpbnQgZQogICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIWVmZkNvbCB8fCBzZWN0aW9uLT5wcmltYXJ5Q2VsbEF0KGks
IGVmZkNvbCAtIDEpICE9IGNlbGwpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzcGFu
bmluZyBjZWxsIG9yaWdpbmF0ZXMgaW4gdGhpcyBjb2x1bW4uICBFbnN1cmUgd2UgaGF2ZQogICAg
ICAgICAgICAgICAgICAgICAvLyBhIG1pbi9tYXggd2lkdGggb2YgYXQgbGVhc3QgMXB4IGZvciB0
aGlzIGNvbHVtbiBub3cuCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91dC5taW5Mb2dp
Y2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oY29sdW1uTGF5b3V0Lm1pbkxvZ2ljYWxXaWR0aCwg
Y2VsbEhhc0NvbnRlbnQgPyAxIDogMCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91
dC5tYXhMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oY29sdW1uTGF5b3V0Lm1heExvZ2lj
YWxXaWR0aCwgMSk7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91dC5taW5Mb2dpY2Fs
V2lkdGggPSBtYXg8aW50Pihjb2x1bW5MYXlvdXQubWluTG9naWNhbFdpZHRoLCBjZWxsSGFzQ29u
dGVudCA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uTGF5b3V0Lm1heExvZ2lj
YWxXaWR0aCA9IG1heDxpbnQ+KGNvbHVtbkxheW91dC5tYXhMb2dpY2FsV2lkdGgsIDEpOwogICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRTcGFuQ2VsbChjZWxsKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6
OmNvbXB1dGVQcmVmZXJyZWRMbwogewogICAgIGZ1bGxSZWNhbGMoKTsKIAotICAgIExheW91dFVu
aXQgc3Bhbk1heExvZ2ljYWxXaWR0aCA9IGNhbGNFZmZlY3RpdmVMb2dpY2FsV2lkdGgoKTsKKyAg
ICBpbnQgc3Bhbk1heExvZ2ljYWxXaWR0aCA9IGNhbGNFZmZlY3RpdmVMb2dpY2FsV2lkdGgoKTsK
ICAgICBtaW5XaWR0aCA9IDA7CiAgICAgbWF4V2lkdGggPSAwOwogICAgIGZsb2F0IG1heFBlcmNl
bnQgPSAwOwpAQCAtMjUxLDIwICsyNTEsMTkgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmNvbXB1
dGVQcmVmZXJyZWRMbwogCiAgICAgaWYgKHNjYWxlQ29sdW1ucykgewogICAgICAgICBtYXhOb25Q
ZXJjZW50ID0gbWF4Tm9uUGVyY2VudCAqIDEwMCAvIG1heChyZW1haW5pbmdQZXJjZW50LCBlcHNp
bG9uKTsKLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB1bm5lY2Vzc2FyeSByb3VuZGluZyB3aGVu
IGxheW91dCBpcyBvZmYgaW50czogd2Via2l0Lm9yZy9iLzYzNjU2Ci0gICAgICAgIG1heFdpZHRo
ID0gbWF4PExheW91dFVuaXQ+KG1heFdpZHRoLCBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihtaW4o
bWF4Tm9uUGVyY2VudCwgbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpIC8gMi4wZikp
KTsKLSAgICAgICAgbWF4V2lkdGggPSBtYXg8TGF5b3V0VW5pdD4obWF4V2lkdGgsIHN0YXRpY19j
YXN0PExheW91dFVuaXQ+KG1pbihtYXhQZXJjZW50LCBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0
Pjo6bWF4KCkgLyAyLjBmKSkpOworICAgICAgICBtYXhXaWR0aCA9IG1heDxpbnQ+KG1heFdpZHRo
LCBzdGF0aWNfY2FzdDxpbnQ+KG1pbihtYXhOb25QZXJjZW50LCBudW1lcmljX2xpbWl0czxMYXlv
dXRVbml0Pjo6bWF4KCkgLyAyLjBmKSkpOworICAgICAgICBtYXhXaWR0aCA9IG1heDxpbnQ+KG1h
eFdpZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KG1pbihtYXhQZXJjZW50LCBudW1lcmljX2xpbWl0czxM
YXlvdXRVbml0Pjo6bWF4KCkgLyAyLjBmKSkpOwogICAgIH0KIAotICAgIG1heFdpZHRoID0gbWF4
KG1heFdpZHRoLCBzcGFuTWF4TG9naWNhbFdpZHRoKTsKKyAgICBtYXhXaWR0aCA9IG1heDxpbnQ+
KG1heFdpZHRoLCBzcGFuTWF4TG9naWNhbFdpZHRoKTsKIAotICAgIExheW91dFVuaXQgYm9yZGVy
c1BhZGRpbmdBbmRTcGFjaW5nID0gbV90YWJsZS0+Ym9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nSW5S
b3dEaXJlY3Rpb24oKTsKKyAgICBpbnQgYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nID0gbV90YWJs
ZS0+Ym9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKTsKICAgICBtaW5XaWR0
aCArPSBib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmc7CiAgICAgbWF4V2lkdGggKz0gYm9yZGVyc1Bh
ZGRpbmdBbmRTcGFjaW5nOwogCiAgICAgTGVuZ3RoIHRhYmxlTG9naWNhbFdpZHRoID0gbV90YWJs
ZS0+c3R5bGUoKS0+bG9naWNhbFdpZHRoKCk7CiAgICAgaWYgKHRhYmxlTG9naWNhbFdpZHRoLmlz
Rml4ZWQoKSAmJiB0YWJsZUxvZ2ljYWxXaWR0aC52YWx1ZSgpID4gMCkgewotICAgICAgICBtaW5X
aWR0aCA9IG1heDxMYXlvdXRVbml0PihtaW5XaWR0aCwgdGFibGVMb2dpY2FsV2lkdGgudmFsdWUo
KSk7CisgICAgICAgIG1pbldpZHRoID0gbWF4PGludD4obWluV2lkdGgsIHRhYmxlTG9naWNhbFdp
ZHRoLnZhbHVlKCkpOwogICAgICAgICBtYXhXaWR0aCA9IG1pbldpZHRoOwogICAgIH0gZWxzZSBp
ZiAoIXJlbWFpbmluZ1BlcmNlbnQgJiYgbWF4Tm9uUGVyY2VudCkgewogICAgICAgICAvLyBpZiB0
aGVyZSB3YXMgbm8gcmVtYWluaW5nIHBlcmNlbnQsIG1heFdpZHRoIGlzIGludmFsaWQuCkBAIC0z
MDUsMTMgKzMwNCwxMyBAQCBpbnQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlTG9naWNh
CiAgICAgICAgIGludCBjZWxsTWluTG9naWNhbFdpZHRoID0gY2VsbC0+bWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoKCkgKyBzcGFjaW5nSW5Sb3dEaXJlY3Rpb247CiAgICAgICAgIGZsb2F0IGNlbGxN
YXhMb2dpY2FsV2lkdGggPSBjZWxsLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIHNwYWNp
bmdJblJvd0RpcmVjdGlvbjsKICAgICAgICAgZmxvYXQgdG90YWxQZXJjZW50ID0gMDsKLSAgICAg
ICAgTGF5b3V0VW5pdCBzcGFuTWluTG9naWNhbFdpZHRoID0gMDsKKyAgICAgICAgaW50IHNwYW5N
aW5Mb2dpY2FsV2lkdGggPSAwOwogICAgICAgICBmbG9hdCBzcGFuTWF4TG9naWNhbFdpZHRoID0g
MDsKICAgICAgICAgYm9vbCBhbGxDb2xzQXJlUGVyY2VudCA9IHRydWU7CiAgICAgICAgIGJvb2wg
YWxsQ29sc0FyZUZpeGVkID0gdHJ1ZTsKICAgICAgICAgYm9vbCBoYXZlQXV0byA9IGZhbHNlOwog
ICAgICAgICBib29sIHNwYW5IYXNFbXB0eUNlbGxzT25seSA9IHRydWU7Ci0gICAgICAgIExheW91
dFVuaXQgZml4ZWRXaWR0aCA9IDA7CisgICAgICAgIGludCBmaXhlZFdpZHRoID0gMDsKICAgICAg
ICAgd2hpbGUgKGxhc3RDb2wgPCBuRWZmQ29scyAmJiBzcGFuID4gMCkgewogICAgICAgICAgICAg
TGF5b3V0JiBjb2x1bW5MYXlvdXQgPSBtX2xheW91dFN0cnVjdFtsYXN0Q29sXTsKICAgICAgICAg
ICAgIHN3aXRjaCAoY29sdW1uTGF5b3V0LmxvZ2ljYWxXaWR0aC50eXBlKCkpIHsKQEAgLTM5MCwx
OSArMzg5LDE5IEBAIGludCBBdXRvVGFibGVMYXlvdXQ6OmNhbGNFZmZlY3RpdmVMb2dpY2EKICAg
ICAgICAgaWYgKGNlbGxNaW5Mb2dpY2FsV2lkdGggPiBzcGFuTWluTG9naWNhbFdpZHRoKSB7CiAg
ICAgICAgICAgICBpZiAoYWxsQ29sc0FyZUZpeGVkKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBwb3MgPSBlZmZDb2w7IGZpeGVkV2lkdGggPiAwICYmIHBvcyA8IGxhc3RDb2w7ICsr
cG9zKSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2VsbExvZ2ljYWxXaWR0aCA9
IG1heChtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aCwgY2VsbE1p
bkxvZ2ljYWxXaWR0aCAqIG1fbGF5b3V0U3RydWN0W3Bvc10ubG9naWNhbFdpZHRoLnZhbHVlKCkg
LyBmaXhlZFdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNlbGxMb2dpY2FsV2lkdGgg
PSBtYXg8aW50PihtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aCwg
c3RhdGljX2Nhc3Q8aW50PihjZWxsTWluTG9naWNhbFdpZHRoICogbV9sYXlvdXRTdHJ1Y3RbcG9z
XS5sb2dpY2FsV2lkdGgudmFsdWUoKSAvIGZpeGVkV2lkdGgpKTsKICAgICAgICAgICAgICAgICAg
ICAgZml4ZWRXaWR0aCAtPSBtX2xheW91dFN0cnVjdFtwb3NdLmxvZ2ljYWxXaWR0aC52YWx1ZSgp
OwogICAgICAgICAgICAgICAgICAgICBjZWxsTWluTG9naWNhbFdpZHRoIC09IGNlbGxMb2dpY2Fs
V2lkdGg7CiAgICAgICAgICAgICAgICAgICAgIG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZl
TWluTG9naWNhbFdpZHRoID0gY2VsbExvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZsb2F0IHJlbWFpbmluZ01heExv
Z2ljYWxXaWR0aCA9IHNwYW5NYXhMb2dpY2FsV2lkdGg7Ci0gICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCByZW1haW5pbmdNaW5Mb2dpY2FsV2lkdGggPSBzcGFuTWluTG9naWNhbFdpZHRoOworICAg
ICAgICAgICAgICAgIGludCByZW1haW5pbmdNaW5Mb2dpY2FsV2lkdGggPSBzcGFuTWluTG9naWNh
bFdpZHRoOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEdpdmUgbWluIHRv
IHZhcmlhYmxlIGZpcnN0LCB0byBmaXhlZCBzZWNvbmQsIGFuZCB0byBvdGhlcnMgdGhpcmQuCiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3MgPSBlZmZDb2w7IHJlbWFpbmluZ01heExv
Z2ljYWxXaWR0aCA+PSAwICYmIHBvcyA8IGxhc3RDb2w7ICsrcG9zKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2xheW91dFN0cnVjdFtwb3NdLmxvZ2ljYWxXaWR0aC5pc0ZpeGVkKCkgJiYg
aGF2ZUF1dG8gJiYgZml4ZWRXaWR0aCA8PSBjZWxsTWluTG9naWNhbFdpZHRoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgY29sTWluTG9naWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+
KG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoLCBtX2xheW91dFN0
cnVjdFtwb3NdLmxvZ2ljYWxXaWR0aC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjb2xNaW5Mb2dpY2FsV2lkdGggPSBtYXg8aW50PihtX2xheW91dFN0cnVjdFtwb3NdLmVm
ZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aCwgbV9sYXlvdXRTdHJ1Y3RbcG9zXS5sb2dpY2FsV2lkdGgu
dmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZFdpZHRoIC09IG1fbGF5b3V0
U3RydWN0W3Bvc10ubG9naWNhbFdpZHRoLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZW1haW5pbmdNaW5Mb2dpY2FsV2lkdGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3Rp
dmVNaW5Mb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdNYXhM
b2dpY2FsV2lkdGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lk
dGg7CkBAIC00MTMsOCArNDEyLDggQEAgaW50IEF1dG9UYWJsZUxheW91dDo6Y2FsY0VmZmVjdGl2
ZUxvZ2ljYQogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3MgPSBlZmZDb2w7IHJl
bWFpbmluZ01heExvZ2ljYWxXaWR0aCA+PSAwICYmIHBvcyA8IGxhc3RDb2wgJiYgcmVtYWluaW5n
TWluTG9naWNhbFdpZHRoIDwgY2VsbE1pbkxvZ2ljYWxXaWR0aDsgKytwb3MpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCEobV9sYXlvdXRTdHJ1Y3RbcG9zXS5sb2dpY2FsV2lkdGguaXNGaXhl
ZCgpICYmIGhhdmVBdXRvICYmIGZpeGVkV2lkdGggPD0gY2VsbE1pbkxvZ2ljYWxXaWR0aCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2xNaW5Mb2dpY2FsV2lkdGggPSBtYXg8TGF5
b3V0VW5pdD4obV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIHN0
YXRpY19jYXN0PGludD4ocmVtYWluaW5nTWF4TG9naWNhbFdpZHRoID8gY2VsbE1pbkxvZ2ljYWxX
aWR0aCAqIHN0YXRpY19jYXN0PGZsb2F0PihtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1h
eExvZ2ljYWxXaWR0aCkgLyByZW1haW5pbmdNYXhMb2dpY2FsV2lkdGggOiBjZWxsTWluTG9naWNh
bFdpZHRoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2xNaW5Mb2dpY2FsV2lkdGggPSBt
aW48TGF5b3V0VW5pdD4obV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lk
dGggKyAoY2VsbE1pbkxvZ2ljYWxXaWR0aCAtIHJlbWFpbmluZ01pbkxvZ2ljYWxXaWR0aCksIGNv
bE1pbkxvZ2ljYWxXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sTWluTG9n
aWNhbFdpZHRoID0gbWF4PGludD4obV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dp
Y2FsV2lkdGgsIHN0YXRpY19jYXN0PGludD4ocmVtYWluaW5nTWF4TG9naWNhbFdpZHRoID8gY2Vs
bE1pbkxvZ2ljYWxXaWR0aCAqIHN0YXRpY19jYXN0PGZsb2F0PihtX2xheW91dFN0cnVjdFtwb3Nd
LmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aCkgLyByZW1haW5pbmdNYXhMb2dpY2FsV2lkdGggOiBj
ZWxsTWluTG9naWNhbFdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2xNaW5Mb2dp
Y2FsV2lkdGggPSBtaW48aW50PihtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1pbkxvZ2lj
YWxXaWR0aCArIChjZWxsTWluTG9naWNhbFdpZHRoIC0gcmVtYWluaW5nTWluTG9naWNhbFdpZHRo
KSwgY29sTWluTG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmlu
Z01heExvZ2ljYWxXaWR0aCAtPSBtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1heExvZ2lj
YWxXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ01pbkxvZ2ljYWxXaWR0
aCAtPSBtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNlbGxNaW5Mb2dpY2FsV2lkdGggLT0gY29sTWluTG9naWNhbFdp
ZHRoOwpAQCAtNDI2LDcgKzQyNSw3IEBAIGludCBBdXRvVGFibGVMYXlvdXQ6OmNhbGNFZmZlY3Rp
dmVMb2dpY2EKICAgICAgICAgaWYgKCFjZWxsTG9naWNhbFdpZHRoLmlzUGVyY2VudCgpKSB7CiAg
ICAgICAgICAgICBpZiAoY2VsbE1heExvZ2ljYWxXaWR0aCA+IHNwYW5NYXhMb2dpY2FsV2lkdGgp
IHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvcyA9IGVmZkNvbDsgc3Bhbk1heExv
Z2ljYWxXaWR0aCA+PSAwICYmIHBvcyA8IGxhc3RDb2w7ICsrcG9zKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGludCBjb2xNYXhMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4obV9sYXlvdXRT
dHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgsIHN0YXRpY19jYXN0PGludD4oc3Bh
bk1heExvZ2ljYWxXaWR0aCA/IGNlbGxNYXhMb2dpY2FsV2lkdGggKiBzdGF0aWNfY2FzdDxmbG9h
dD4obV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgpIC8gc3Bhbk1h
eExvZ2ljYWxXaWR0aCA6IGNlbGxNYXhMb2dpY2FsV2lkdGgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaW50IGNvbE1heExvZ2ljYWxXaWR0aCA9IG1heDxpbnQ+KG1fbGF5b3V0U3RydWN0W3Bvc10u
ZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KHNwYW5NYXhMb2dpY2Fs
V2lkdGggPyBjZWxsTWF4TG9naWNhbFdpZHRoICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbGF5b3V0
U3RydWN0W3Bvc10uZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoKSAvIHNwYW5NYXhMb2dpY2FsV2lk
dGggOiBjZWxsTWF4TG9naWNhbFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgICAgIHNwYW5NYXhM
b2dpY2FsV2lkdGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lk
dGg7CiAgICAgICAgICAgICAgICAgICAgIGNlbGxNYXhMb2dpY2FsV2lkdGggLT0gY29sTWF4TG9n
aWNhbFdpZHRoOwogICAgICAgICAgICAgICAgICAgICBtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVj
dGl2ZU1heExvZ2ljYWxXaWR0aCA9IGNvbE1heExvZ2ljYWxXaWR0aDsKQEAgLTQ3Nyw4ICs0NzYs
OCBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6aW5zZXJ0U3BhbkNlbGwoUmVuCiB2b2lkIEF1dG9U
YWJsZUxheW91dDo6bGF5b3V0KCkKIHsKICAgICAvLyB0YWJsZSBsYXlvdXQgYmFzZWQgb24gdGhl
IHZhbHVlcyBjb2xsZWN0ZWQgaW4gdGhlIGxheW91dCBzdHJ1Y3R1cmUuCi0gICAgTGF5b3V0VW5p
dCB0YWJsZUxvZ2ljYWxXaWR0aCA9IG1fdGFibGUtPmxvZ2ljYWxXaWR0aCgpIC0gbV90YWJsZS0+
Ym9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKTsKLSAgICBMYXlvdXRVbml0
IGF2YWlsYWJsZSA9IHRhYmxlTG9naWNhbFdpZHRoOworICAgIGludCB0YWJsZUxvZ2ljYWxXaWR0
aCA9IG1fdGFibGUtPmxvZ2ljYWxXaWR0aCgpIC0gbV90YWJsZS0+Ym9yZGVyc1BhZGRpbmdBbmRT
cGFjaW5nSW5Sb3dEaXJlY3Rpb24oKTsKKyAgICBpbnQgYXZhaWxhYmxlID0gdGFibGVMb2dpY2Fs
V2lkdGg7CiAgICAgc2l6ZV90IG5FZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29scygpOwogCiAg
ICAgaWYgKG5FZmZDb2xzICE9IG1fbGF5b3V0U3RydWN0LnNpemUoKSkgewpAQCAtNTAxLDcgKzUw
MCw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogCiAgICAgLy8gZmlsbCB1cCBl
dmVyeSBjZWxsIHdpdGggaXRzIG1pbldpZHRoCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
RWZmQ29sczsgKytpKSB7Ci0gICAgICAgIExheW91dFVuaXQgY2VsbExvZ2ljYWxXaWR0aCA9IG1f
bGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKKyAgICAgICAgaW50IGNl
bGxMb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lk
dGg7CiAgICAgICAgIG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoID0gY2Vs
bExvZ2ljYWxXaWR0aDsKICAgICAgICAgYXZhaWxhYmxlIC09IGNlbGxMb2dpY2FsV2lkdGg7CiAg
ICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZl
TG9naWNhbFdpZHRoOwpAQCAtNTM3LDIxICs1MzYsMjEgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6
OmxheW91dCgpCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbkVmZkNvbHM7ICsraSkg
ewogICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5l
ZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzUGVy
Y2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjZWxsTG9naWNhbFdpZHRoID0g
bWF4PExheW91dFVuaXQ+KG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0
aCwgbG9naWNhbFdpZHRoLmNhbGNNaW5WYWx1ZSh0YWJsZUxvZ2ljYWxXaWR0aCkpOworICAgICAg
ICAgICAgICAgIGludCBjZWxsTG9naWNhbFdpZHRoID0gbWF4PGludD4obV9sYXlvdXRTdHJ1Y3Rb
aV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoLCBsb2dpY2FsV2lkdGguY2FsY01pblZhbHVlKHRh
YmxlTG9naWNhbFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmxlICs9IG1fbGF5b3V0
U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoIC0gY2VsbExvZ2ljYWxXaWR0aDsKICAgICAg
ICAgICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCA9IGNlbGxM
b2dpY2FsV2lkdGg7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRvdGFs
UGVyY2VudCA+IDEwMCkgewogICAgICAgICAgICAgLy8gcmVtb3ZlIG92ZXJhbGxvY2F0ZWQgc3Bh
Y2UgZnJvbSB0aGUgbGFzdCBjb2x1bW5zCi0gICAgICAgICAgICBMYXlvdXRVbml0IGV4Y2VzcyA9
IHRhYmxlTG9naWNhbFdpZHRoICogKHRvdGFsUGVyY2VudCAtIDEwMCkgLyAxMDA7CisgICAgICAg
ICAgICBpbnQgZXhjZXNzID0gdGFibGVMb2dpY2FsV2lkdGggKiAodG90YWxQZXJjZW50IC0gMTAw
KSAvIDEwMDsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkgPj0gMDsg
LS1pKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxv
Z2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IGNlbGxMb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0
aDsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByZWR1Y3Rpb24gPSBtaW4oY2VsbExv
Z2ljYWxXaWR0aCwgIGV4Y2Vzcyk7CisgICAgICAgICAgICAgICAgICAgIGludCBjZWxsTG9naWNh
bFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGg7CisgICAgICAg
ICAgICAgICAgICAgIGludCByZWR1Y3Rpb24gPSBtaW4oY2VsbExvZ2ljYWxXaWR0aCwgIGV4Y2Vz
cyk7CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsaW5lcyBiZWxvdyBtaWdodCBsb29rIGlu
Y29uc2lzdGVudCwgYnV0IHRoYXQncyB0aGUgd2F5IGl0J3MgaGFuZGxlZCBpbiBtb3ppbGxhCiAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VzcyAtPSByZWR1Y3Rpb247Ci0gICAgICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgbmV3TG9naWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KG1fbGF5b3V0
U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aCwgY2VsbExvZ2ljYWxXaWR0aCAtIHJl
ZHVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGludCBuZXdMb2dpY2FsV2lkdGggPSBtYXg8
aW50PihtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIGNlbGxMb2dp
Y2FsV2lkdGggLSByZWR1Y3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgKz0g
Y2VsbExvZ2ljYWxXaWR0aCAtIG5ld0xvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICAgICAg
bV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggPSBuZXdMb2dpY2FsV2lkdGg7
CiAgICAgICAgICAgICAgICAgfQpAQCAtNTc2LDcgKzU3NSw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5
b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91
dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICBpZiAobG9naWNh
bFdpZHRoLmlzUmVsYXRpdmUoKSAmJiBsb2dpY2FsV2lkdGgudmFsdWUoKSAhPSAwKSB7CiAgICAg
ICAgICAgICAgICAgLy8gd2lkdGg9MCogZ2V0cyBlZmZNaW5XaWR0aC4KLSAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IGNlbGxMb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGgudmFsdWUoKSAqIHRh
YmxlTG9naWNhbFdpZHRoIC8gdG90YWxSZWxhdGl2ZTsKKyAgICAgICAgICAgICAgICBpbnQgY2Vs
bExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aC52YWx1ZSgpICogdGFibGVMb2dpY2FsV2lkdGgg
LyB0b3RhbFJlbGF0aXZlOwogICAgICAgICAgICAgICAgIGF2YWlsYWJsZSArPSBtX2xheW91dFN0
cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAtIGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAg
ICAgICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggPSBjZWxsTG9n
aWNhbFdpZHRoOwogICAgICAgICAgICAgfQpAQCAtNTg5LDcgKzU4OCw3IEBAIHZvaWQgQXV0b1Rh
YmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5FZmZD
b2xzOyArK2kpIHsKICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRT
dHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgaWYgKGxvZ2ljYWxX
aWR0aC5pc0F1dG8oKSAmJiB0b3RhbEF1dG8gJiYgIW1fbGF5b3V0U3RydWN0W2ldLmVtcHR5Q2Vs
bHNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjZWxsTG9naWNhbFdpZHRoID0g
bWF4PExheW91dFVuaXQ+KG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoLCBz
dGF0aWNfY2FzdDxMYXlvdXRVbml0PihhdmFpbGFibGUgKiBzdGF0aWNfY2FzdDxmbG9hdD4obV9s
YXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoKSAvIHRvdGFsQXV0bykpOwor
ICAgICAgICAgICAgICAgIGludCBjZWxsTG9naWNhbFdpZHRoID0gbWF4PGludD4obV9sYXlvdXRT
dHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGgsIHN0YXRpY19jYXN0PGludD4oYXZhaWxhYmxl
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1heExvZ2lj
YWxXaWR0aCkgLyB0b3RhbEF1dG8pKTsKICAgICAgICAgICAgICAgICBhdmFpbGFibGUgLT0gY2Vs
bExvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICB0b3RhbEF1dG8gLT0gbV9sYXlvdXRTdHJ1
Y3RbaV0uZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIG1fbGF5b3V0
U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoID0gY2VsbExvZ2ljYWxXaWR0aDsKQEAgLTYw
Miw3ICs2MDEsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBuRWZmQ29sczsgKytpKSB7CiAgICAgICAgICAgICBMZW5ndGgm
IGxvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsK
ICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNGaXhlZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBjZWxsTG9naWNhbFdpZHRoID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4o
YXZhaWxhYmxlICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2
ZU1heExvZ2ljYWxXaWR0aCkgLyB0b3RhbEZpeGVkKTsKKyAgICAgICAgICAgICAgICBpbnQgY2Vs
bExvZ2ljYWxXaWR0aCA9IHN0YXRpY19jYXN0PGludD4oYXZhaWxhYmxlICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aCkgLyB0b3Rh
bEZpeGVkKTsKICAgICAgICAgICAgICAgICBhdmFpbGFibGUgLT0gY2VsbExvZ2ljYWxXaWR0aDsK
ICAgICAgICAgICAgICAgICB0b3RhbEZpeGVkIC09IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2
ZU1heExvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21w
dXRlZExvZ2ljYWxXaWR0aCArPSBjZWxsTG9naWNhbFdpZHRoOwpAQCAtNjE1LDcgKzYxNCw3IEBA
IHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5FZmZDb2xzOyArK2kpIHsKICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRo
ID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAg
aWYgKGxvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkgewotICAgICAgICAgICAgICAgIExheW91dFVu
aXQgY2VsbExvZ2ljYWxXaWR0aCA9IGF2YWlsYWJsZSAqIGxvZ2ljYWxXaWR0aC5wZXJjZW50KCkg
LyB0b3RhbFBlcmNlbnQ7CisgICAgICAgICAgICAgICAgaW50IGNlbGxMb2dpY2FsV2lkdGggPSBh
dmFpbGFibGUgKiBsb2dpY2FsV2lkdGgucGVyY2VudCgpIC8gdG90YWxQZXJjZW50OwogICAgICAg
ICAgICAgICAgIGF2YWlsYWJsZSAtPSBjZWxsTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAg
IHRvdGFsUGVyY2VudCAtPSBsb2dpY2FsV2lkdGgucGVyY2VudCgpOwogICAgICAgICAgICAgICAg
IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoICs9IGNlbGxMb2dpY2FsV2lk
dGg7CkBAIC02MzMsNyArNjMyLDcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiAg
ICAgICAgICAgICAvLyB2YXJpYWJsZSBjb2x1bW5zIHdpdGggZW1wdHkgY2VsbHMgb25seSBkb24n
dCBnZXQgYW55IHdpZHRoCiAgICAgICAgICAgICBpZiAobV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0
aXZlTG9naWNhbFdpZHRoLmlzQXV0bygpICYmIG1fbGF5b3V0U3RydWN0W2ldLmVtcHR5Q2VsbHNP
bmx5KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgTGF5b3V0VW5pdCBj
ZWxsTG9naWNhbFdpZHRoID0gYXZhaWxhYmxlIC8gdG90YWw7CisgICAgICAgICAgICBpbnQgY2Vs
bExvZ2ljYWxXaWR0aCA9IGF2YWlsYWJsZSAvIHRvdGFsOwogICAgICAgICAgICAgYXZhaWxhYmxl
IC09IGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICB0b3RhbC0tOwogICAgICAgICAgICAg
bV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggKz0gY2VsbExvZ2ljYWxXaWR0
aDsKQEAgLTY1MCw3ICs2NDksNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKICAg
ICAgICAgLy8gKDQpIFBlcmNlbnQKICAgICAgICAgLy8gVGhpcyBpcyBiYXNpY2FsbHkgdGhlIHJl
dmVyc2Ugb2YgaG93IHdlIGdyZXcgdGhlIGNlbGxzLgogICAgICAgICBpZiAoYXZhaWxhYmxlIDwg
MCkgewotICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gPSAwOwor
ICAgICAgICAgICAgaW50IGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA9IDA7CiAgICAgICAgICAgICBm
b3IgKGludCBpID0gbkVmZkNvbHMgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgICAg
IExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNh
bFdpZHRoOwogICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNBdXRvKCkpCkBAIC02
NjAsOCArNjU5LDggQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgICAg
ICBmb3IgKGludCBpID0gbkVmZkNvbHMgLSAxOyBpID49IDAgJiYgbG9naWNhbFdpZHRoQmV5b25k
TWluID4gMDsgLS1pKSB7CiAgICAgICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBt
X2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAg
aWYgKGxvZ2ljYWxXaWR0aC5pc0F1dG8oKSkgewotICAgICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IG1pbk1heERpZmYgPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAt
IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKLSAgICAgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCByZWR1Y2UgPSBhdmFpbGFibGUgKiBtaW5NYXhEaWZmIC8gbG9n
aWNhbFdpZHRoQmV5b25kTWluOworICAgICAgICAgICAgICAgICAgICBpbnQgbWluTWF4RGlmZiA9
IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoIC0gbV9sYXlvdXRTdHJ1Y3Rb
aV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOworICAgICAgICAgICAgICAgICAgICBpbnQgcmVk
dWNlID0gYXZhaWxhYmxlICogbWluTWF4RGlmZiAvIGxvZ2ljYWxXaWR0aEJleW9uZE1pbjsKICAg
ICAgICAgICAgICAgICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGgg
Kz0gcmVkdWNlOwogICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgLT0gcmVkdWNlOwogICAg
ICAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gLT0gbWluTWF4RGlmZjsKQEAg
LTY3Miw3ICs2NzEsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChhdmFpbGFibGUgPCAwKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA9IDA7CisgICAgICAgICAgICBpbnQgbG9naWNhbFdpZHRo
QmV5b25kTWluID0gMDsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkg
Pj0gMDsgLS1pKSB7CiAgICAgICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xh
eW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgaWYg
KGxvZ2ljYWxXaWR0aC5pc1JlbGF0aXZlKCkpCkBAIC02ODIsOCArNjgxLDggQEAgdm9pZCBBdXRv
VGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgICAgICBmb3IgKGludCBpID0gbkVmZkNvbHMg
LSAxOyBpID49IDAgJiYgbG9naWNhbFdpZHRoQmV5b25kTWluID4gMDsgLS1pKSB7CiAgICAgICAg
ICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3Rp
dmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc1JlbGF0
aXZlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXhEaWZmID0gbV9s
YXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggLSBtX2xheW91dFN0cnVjdFtpXS5l
ZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQg
cmVkdWNlID0gYXZhaWxhYmxlICogbWluTWF4RGlmZiAvIGxvZ2ljYWxXaWR0aEJleW9uZE1pbjsK
KyAgICAgICAgICAgICAgICAgICAgaW50IG1pbk1heERpZmYgPSBtX2xheW91dFN0cnVjdFtpXS5j
b21wdXRlZExvZ2ljYWxXaWR0aCAtIG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2lj
YWxXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlZHVjZSA9IGF2YWlsYWJsZSAqIG1p
bk1heERpZmYgLyBsb2dpY2FsV2lkdGhCZXlvbmRNaW47CiAgICAgICAgICAgICAgICAgICAgIG1f
bGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoICs9IHJlZHVjZTsKICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmxlIC09IHJlZHVjZTsKICAgICAgICAgICAgICAgICAgICAgbG9n
aWNhbFdpZHRoQmV5b25kTWluIC09IG1pbk1heERpZmY7CkBAIC02OTQsNyArNjkzLDcgQEAgdm9p
ZCBBdXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYXZh
aWxhYmxlIDwgMCkgewotICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhCZXlvbmRN
aW4gPSAwOworICAgICAgICAgICAgaW50IGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA9IDA7CiAgICAg
ICAgICAgICBmb3IgKGludCBpID0gbkVmZkNvbHMgLSAxOyBpID49IDA7IC0taSkgewogICAgICAg
ICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0
aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNGaXhl
ZCgpKQpAQCAtNzA0LDggKzcwMyw4IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwICYmIGxvZ2ljYWxX
aWR0aEJleW9uZE1pbiA+IDA7IC0taSkgewogICAgICAgICAgICAgICAgIExlbmd0aCYgbG9naWNh
bFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAg
ICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNGaXhlZCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgbWluTWF4RGlmZiA9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9n
aWNhbFdpZHRoIC0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOwot
ICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJlZHVjZSA9IGF2YWlsYWJsZSAqIG1pbk1h
eERpZmYgLyBsb2dpY2FsV2lkdGhCZXlvbmRNaW47CisgICAgICAgICAgICAgICAgICAgIGludCBt
aW5NYXhEaWZmID0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggLSBtX2xh
eW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CisgICAgICAgICAgICAgICAg
ICAgIGludCByZWR1Y2UgPSBhdmFpbGFibGUgKiBtaW5NYXhEaWZmIC8gbG9naWNhbFdpZHRoQmV5
b25kTWluOwogICAgICAgICAgICAgICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExv
Z2ljYWxXaWR0aCArPSByZWR1Y2U7CiAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSAtPSBy
ZWR1Y2U7CiAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiAtPSBtaW5N
YXhEaWZmOwpAQCAtNzE2LDcgKzcxNSw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQo
KQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGF2YWlsYWJsZSA8IDApIHsKLSAgICAgICAgICAg
IExheW91dFVuaXQgbG9naWNhbFdpZHRoQmV5b25kTWluID0gMDsKKyAgICAgICAgICAgIGludCBs
b2dpY2FsV2lkdGhCZXlvbmRNaW4gPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZD
b2xzIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2ljYWxX
aWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAg
ICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzUGVyY2VudCgpKQpAQCAtNzI2LDggKzcyNSw4IEBA
IHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgZm9yIChpbnQgaSA9
IG5FZmZDb2xzLTE7IGkgPj0gMCAmJiBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gPiAwOyBpLS0pIHsK
ICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ld
LmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICBpZiAobG9naWNhbFdpZHRo
LmlzUGVyY2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgbWluTWF4RGlm
ZiA9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoIC0gbV9sYXlvdXRTdHJ1
Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOwotICAgICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IHJlZHVjZSA9IGF2YWlsYWJsZSAqIG1pbk1heERpZmYgLyBsb2dpY2FsV2lkdGhCZXlv
bmRNaW47CisgICAgICAgICAgICAgICAgICAgIGludCBtaW5NYXhEaWZmID0gbV9sYXlvdXRTdHJ1
Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggLSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVN
aW5Mb2dpY2FsV2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGludCByZWR1Y2UgPSBhdmFpbGFi
bGUgKiBtaW5NYXhEaWZmIC8gbG9naWNhbFdpZHRoQmV5b25kTWluOwogICAgICAgICAgICAgICAg
ICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCArPSByZWR1Y2U7CiAg
ICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSAtPSByZWR1Y2U7CiAgICAgICAgICAgICAgICAg
ICAgIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiAtPSBtaW5NYXhEaWZmOwpAQCAtNzM4LDcgKzczNyw3
IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgTGF5b3V0VW5pdCBwb3MgPSAwOworICAgIGludCBwb3MgPSAwOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbkVmZkNvbHM7ICsraSkgewogICAgICAgICBtX3RhYmxlLT5jb2x1bW5Qb3Np
dGlvbnMoKVtpXSA9IHBvczsKICAgICAgICAgcG9zICs9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1
dGVkTG9naWNhbFdpZHRoICsgbV90YWJsZS0+aEJvcmRlclNwYWNpbmcoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHJldmlzaW9uIDk5MDA2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MCwxMSArNjAsMTEgQEAgcHJpdmF0ZToKIAogICAgICAgICBMZW5ndGggbG9naWNh
bFdpZHRoOwogICAgICAgICBMZW5ndGggZWZmZWN0aXZlTG9naWNhbFdpZHRoOwotICAgICAgICBM
YXlvdXRVbml0IG1pbkxvZ2ljYWxXaWR0aDsKLSAgICAgICAgTGF5b3V0VW5pdCBtYXhMb2dpY2Fs
V2lkdGg7Ci0gICAgICAgIExheW91dFVuaXQgZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOwotICAg
ICAgICBMYXlvdXRVbml0IGVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aDsKLSAgICAgICAgTGF5b3V0
VW5pdCBjb21wdXRlZExvZ2ljYWxXaWR0aDsKKyAgICAgICAgaW50IG1pbkxvZ2ljYWxXaWR0aDsK
KyAgICAgICAgaW50IG1heExvZ2ljYWxXaWR0aDsKKyAgICAgICAgaW50IGVmZmVjdGl2ZU1pbkxv
Z2ljYWxXaWR0aDsKKyAgICAgICAgaW50IGVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aDsKKyAgICAg
ICAgaW50IGNvbXB1dGVkTG9naWNhbFdpZHRoOwogICAgICAgICBib29sIGVtcHR5Q2VsbHNPbmx5
OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5
b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJs
ZUxheW91dC5jcHAJKHJldmlzaW9uIDk5MDA2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0ZpeGVkVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMTAgKzE5NCwxMCBA
QCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmZXJyZWRMCiAgICAgLy8gY29scy9j
ZWxscyB3aXRoIGEgZml4ZWQgd2lkdGguCiAgICAgLy8KICAgICAvLyBUaGUgbWF4aW11bSB3aWR0
aCBpcyBtYXgobWluV2lkdGgsIHRhYmxlV2lkdGgpLgotICAgIExheW91dFVuaXQgYm9yZGVyc1Bh
ZGRpbmdBbmRTcGFjaW5nID0gbV90YWJsZS0+Ym9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nSW5Sb3dE
aXJlY3Rpb24oKTsKKyAgICBpbnQgYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nID0gbV90YWJsZS0+
Ym9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKTsKIAotICAgIExheW91dFVu
aXQgdGFibGVMb2dpY2FsV2lkdGggPSBtX3RhYmxlLT5zdHlsZSgpLT5sb2dpY2FsV2lkdGgoKS5p
c0ZpeGVkKCkgPyBtX3RhYmxlLT5zdHlsZSgpLT5sb2dpY2FsV2lkdGgoKS52YWx1ZSgpIC0gYm9y
ZGVyc1BhZGRpbmdBbmRTcGFjaW5nIDogMDsKLSAgICBMYXlvdXRVbml0IG13ID0gY2FsY1dpZHRo
QXJyYXkodGFibGVMb2dpY2FsV2lkdGgpICsgYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nOworICAg
IGludCB0YWJsZUxvZ2ljYWxXaWR0aCA9IG1fdGFibGUtPnN0eWxlKCktPmxvZ2ljYWxXaWR0aCgp
LmlzRml4ZWQoKSA/IG1fdGFibGUtPnN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpLnZhbHVlKCkgLSBi
b3JkZXJzUGFkZGluZ0FuZFNwYWNpbmcgOiAwOworICAgIGludCBtdyA9IGNhbGNXaWR0aEFycmF5
KHRhYmxlTG9naWNhbFdpZHRoKSArIGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZzsKIAogICAgIG1p
bldpZHRoID0gbWF4KG13LCB0YWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgbWF4V2lkdGggPSBtaW5X
aWR0aDsKQEAgLTIyMiwxNCArMjIyLDE0IEBAIHZvaWQgRml4ZWRUYWJsZUxheW91dDo6Y29tcHV0
ZVByZWZlcnJlZEwKIAogdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogewotICAgIExh
eW91dFVuaXQgdGFibGVMb2dpY2FsV2lkdGggPSBtX3RhYmxlLT5sb2dpY2FsV2lkdGgoKSAtIG1f
dGFibGUtPmJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9uKCk7CisgICAgaW50
IHRhYmxlTG9naWNhbFdpZHRoID0gbV90YWJsZS0+bG9naWNhbFdpZHRoKCkgLSBtX3RhYmxlLT5i
b3JkZXJzUGFkZGluZ0FuZFNwYWNpbmdJblJvd0RpcmVjdGlvbigpOwogICAgIGludCBuRWZmQ29s
cyA9IG1fdGFibGUtPm51bUVmZkNvbHMoKTsKICAgICBWZWN0b3I8aW50PiBjYWxjV2lkdGgobkVm
ZkNvbHMsIDApOwogCiAgICAgaW50IG51bUF1dG8gPSAwOwotICAgIExheW91dFVuaXQgYXV0b1Nw
YW4gPSAwOwotICAgIExheW91dFVuaXQgdG90YWxGaXhlZFdpZHRoID0gMDsKLSAgICBMYXlvdXRV
bml0IHRvdGFsUGVyY2VudFdpZHRoID0gMDsKKyAgICBpbnQgYXV0b1NwYW4gPSAwOworICAgIGlu
dCB0b3RhbEZpeGVkV2lkdGggPSAwOworICAgIGludCB0b3RhbFBlcmNlbnRXaWR0aCA9IDA7CiAg
ICAgZmxvYXQgdG90YWxQZXJjZW50ID0gMDsKIAogICAgIC8vIENvbXB1dGUgcmVxdWlyZW1lbnRz
IGFuZCB0cnkgdG8gc2F0aXNmeSBmaXhlZCBhbmQgcGVyY2VudCB3aWR0aHMuCkBAIC0yNTAsOCAr
MjUwLDggQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICB9CiAgICAg
fQogCi0gICAgTGF5b3V0VW5pdCBoc3BhY2luZyA9IG1fdGFibGUtPmhCb3JkZXJTcGFjaW5nKCk7
Ci0gICAgTGF5b3V0VW5pdCB0b3RhbFdpZHRoID0gdG90YWxGaXhlZFdpZHRoICsgdG90YWxQZXJj
ZW50V2lkdGg7CisgICAgaW50IGhzcGFjaW5nID0gbV90YWJsZS0+aEJvcmRlclNwYWNpbmcoKTsK
KyAgICBpbnQgdG90YWxXaWR0aCA9IHRvdGFsRml4ZWRXaWR0aCArIHRvdGFsUGVyY2VudFdpZHRo
OwogICAgIGlmICghbnVtQXV0byB8fCB0b3RhbFdpZHRoID4gdGFibGVMb2dpY2FsV2lkdGgpIHsK
ICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGF1dG8gY29sdW1ucywgb3IgaWYgdGhlIHRvdGFs
IGlzIHRvbyB3aWRlLCB0YWtlCiAgICAgICAgIC8vIHdoYXQgd2UgaGF2ZSBhbmQgc2NhbGUgaXQg
dG8gZml0IGFzIG5lY2Vzc2FyeS4KQEAgLTI3OSwxMiArMjc5LDEyIEBAIHZvaWQgRml4ZWRUYWJs
ZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIERp
dmlkZSB0aGUgcmVtYWluaW5nIHdpZHRoIGFtb25nIHRoZSBhdXRvIGNvbHVtbnMuCi0gICAgICAg
IExheW91dFVuaXQgcmVtYWluaW5nV2lkdGggPSB0YWJsZUxvZ2ljYWxXaWR0aCAtIHRvdGFsRml4
ZWRXaWR0aCAtIHRvdGFsUGVyY2VudFdpZHRoIC0gaHNwYWNpbmcgKiAoYXV0b1NwYW4gLSBudW1B
dXRvKTsKKyAgICAgICAgaW50IHJlbWFpbmluZ1dpZHRoID0gdGFibGVMb2dpY2FsV2lkdGggLSB0
b3RhbEZpeGVkV2lkdGggLSB0b3RhbFBlcmNlbnRXaWR0aCAtIGhzcGFjaW5nICogKGF1dG9TcGFu
IC0gbnVtQXV0byk7CiAgICAgICAgIGludCBsYXN0QXV0byA9IDA7CiAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkrKykgewogICAgICAgICAgICAgaWYgKG1fd2lkdGhbaV0u
aXNBdXRvKCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHNwYW4gPSBtX3RhYmxlLT5z
cGFuT2ZFZmZDb2woaSk7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB3ID0gcmVtYWluaW5n
V2lkdGggKiBzcGFuIC8gYXV0b1NwYW47CisgICAgICAgICAgICAgICAgaW50IHNwYW4gPSBtX3Rh
YmxlLT5zcGFuT2ZFZmZDb2woaSk7CisgICAgICAgICAgICAgICAgaW50IHcgPSByZW1haW5pbmdX
aWR0aCAqIHNwYW4gLyBhdXRvU3BhbjsKICAgICAgICAgICAgICAgICBjYWxjV2lkdGhbaV0gPSB3
ICsgaHNwYWNpbmcgKiAoc3BhbiAtIDEpOwogICAgICAgICAgICAgICAgIHJlbWFpbmluZ1dpZHRo
IC09IHc7CiAgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdXaWR0aCkKQEAgLTMwMiwxMCAr
MzAyLDEwIEBAIHZvaWQgRml4ZWRUYWJsZUxheW91dDo6bGF5b3V0KCkKIAogICAgIGlmICh0b3Rh
bFdpZHRoIDwgdGFibGVMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgLy8gU3ByZWFkIGV4dHJhIHNw
YWNlIG92ZXIgY29sdW1ucy4KLSAgICAgICAgTGF5b3V0VW5pdCByZW1haW5pbmdXaWR0aCA9IHRh
YmxlTG9naWNhbFdpZHRoIC0gdG90YWxXaWR0aDsKKyAgICAgICAgaW50IHJlbWFpbmluZ1dpZHRo
ID0gdGFibGVMb2dpY2FsV2lkdGggLSB0b3RhbFdpZHRoOwogICAgICAgICBpbnQgdG90YWwgPSBu
RWZmQ29sczsKICAgICAgICAgd2hpbGUgKHRvdGFsKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0
IHcgPSByZW1haW5pbmdXaWR0aCAvIHRvdGFsOworICAgICAgICAgICAgaW50IHcgPSByZW1haW5p
bmdXaWR0aCAvIHRvdGFsOwogICAgICAgICAgICAgcmVtYWluaW5nV2lkdGggLT0gdzsKICAgICAg
ICAgICAgIGNhbGNXaWR0aFstLXRvdGFsXSArPSB3OwogICAgICAgICB9CkBAIC0zMTMsMTIgKzMx
MywxMiBAQCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgICAgICBjYWxj
V2lkdGhbbkVmZkNvbHMgLSAxXSArPSByZW1haW5pbmdXaWR0aDsKICAgICB9CiAgICAgCi0gICAg
TGF5b3V0VW5pdCBwb3MgPSAwOworICAgIGludCBwb3MgPSAwOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbkVmZkNvbHM7IGkrKykgewogICAgICAgICBtX3RhYmxlLT5jb2x1bW5Qb3NpdGlvbnMo
KVtpXSA9IHBvczsKICAgICAgICAgcG9zICs9IGNhbGNXaWR0aFtpXSArIGhzcGFjaW5nOwogICAg
IH0KLSAgICBMYXlvdXRVbml0IGNvbFBvc2l0aW9uc1NpemUgPSBtX3RhYmxlLT5jb2x1bW5Qb3Np
dGlvbnMoKS5zaXplKCk7CisgICAgaW50IGNvbFBvc2l0aW9uc1NpemUgPSBtX3RhYmxlLT5jb2x1
bW5Qb3NpdGlvbnMoKS5zaXplKCk7CiAgICAgaWYgKGNvbFBvc2l0aW9uc1NpemUgPiAwKQogICAg
ICAgICBtX3RhYmxlLT5jb2x1bW5Qb3NpdGlvbnMoKVtjb2xQb3NpdGlvbnNTaXplIC0gMV0gPSBw
b3M7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNp
b24gOTkwMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmVuZGVy
VGFibGUoTm9kZSopOwogICAgIHZpcnR1YWwgflJlbmRlclRhYmxlKCk7CiAKLSAgICBpbnQgZ2V0
Q29sdW1uUG9zKGludCBjb2wpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUG9zW2NvbF07IH0KKyAg
ICBMYXlvdXRVbml0IGdldENvbHVtblBvcyhpbnQgY29sKSBjb25zdCB7IHJldHVybiBtX2NvbHVt
blBvc1tjb2xdOyB9CiAKICAgICBpbnQgaEJvcmRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBt
X2hTcGFjaW5nOyB9CiAgICAgaW50IHZCb3JkZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV92
U3BhY2luZzsgfQpAQCAtMTY4LDcgKzE2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGM7
CiAgICAgfQogCi0gICAgaW50IGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9u
KCkgY29uc3QKKyAgICBMYXlvdXRVbml0IGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGly
ZWN0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBib3JkZXJTdGFydCgpICsgYm9y
ZGVyRW5kKCkgKwogICAgICAgICAgICAgICAgKGNvbGxhcHNlQm9yZGVycygpID8gMCA6IChwYWRk
aW5nU3RhcnQoKSArIHBhZGRpbmdFbmQoKSArIChudW1FZmZDb2xzKCkgKyAxKSAqIGhCb3JkZXJT
cGFjaW5nKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNlbGwuY3BwCShyZXZpc2lvbiA5OTIyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9p
ZCBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVMb2dpY2FsV2lkdAogewogfQogCi12b2lkIFJlbmRl
clRhYmxlQ2VsbDo6dXBkYXRlTG9naWNhbFdpZHRoKGludCB3KQordm9pZCBSZW5kZXJUYWJsZUNl
bGw6OnVwZGF0ZUxvZ2ljYWxXaWR0aChMYXlvdXRVbml0IHcpCiB7CiAgICAgaWYgKHcgPT0gbG9n
aWNhbFdpZHRoKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIxOSw3ICsyMTksNyBAQCBMYXlvdXRV
bml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0FmdGVyCiAgICAgcmV0dXJuIHJlc3VsdCArIGlu
dHJpbnNpY1BhZGRpbmdBZnRlcigpOwogfQogCi12b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0T3Zl
cnJpZGVIZWlnaHRGcm9tUm93SGVpZ2h0KGludCByb3dIZWlnaHQpCit2b2lkIFJlbmRlclRhYmxl
Q2VsbDo6c2V0T3ZlcnJpZGVIZWlnaHRGcm9tUm93SGVpZ2h0KExheW91dFVuaXQgcm93SGVpZ2h0
KQogewogICAgIGNsZWFySW50cmluc2ljUGFkZGluZygpOwogICAgIFJlbmRlckJsb2NrOjpzZXRP
dmVycmlkZUhlaWdodChtYXg8TGF5b3V0VW5pdD4oMCwgcm93SGVpZ2h0IC0gYm9yZGVyQmVmb3Jl
KCkgLSBwYWRkaW5nQmVmb3JlKCkgLSBib3JkZXJBZnRlcigpIC0gcGFkZGluZ0FmdGVyKCkpKTsK
QEAgLTI4OCw3ICsyODgsNyBAQCBMYXlvdXRSZWN0IFJlbmRlclRhYmxlQ2VsbDo6Y2xpcHBlZE92
ZXJmCiAgICAgcmV0dXJuIHI7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlUmVj
dEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJl
Y3QmIHIsIGJvb2wgZml4ZWQpIGNvbnN0Cit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZVJl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlv
dXRSZWN0JiByLCBib29sIGZpeGVkKSBjb25zdAogewogICAgIGlmIChyZXBhaW50Q29udGFpbmVy
ID09IHRoaXMpCiAgICAgICAgIHJldHVybjsKQEAgLTI5OSwxMiArMjk5LDEyIEBAIHZvaWQgUmVu
ZGVyVGFibGVDZWxsOjpjb21wdXRlUmVjdEZvclJlcGEKICAgICBSZW5kZXJCbG9jazo6Y29tcHV0
ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHIsIGZpeGVkKTsKIH0KIAotaW50IFJl
bmRlclRhYmxlQ2VsbDo6Y2VsbEJhc2VsaW5lUG9zaXRpb24oKSBjb25zdAorTGF5b3V0VW5pdCBS
ZW5kZXJUYWJsZUNlbGw6OmNlbGxCYXNlbGluZVBvc2l0aW9uKCkgY29uc3QKIHsKICAgICAvLyA8
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwNy9DUi1DU1MyMS0yMDA3MDcxOS90YWJsZXMuaHRtbCNo
ZWlnaHQtbGF5b3V0PjogVGhlIGJhc2VsaW5lIG9mIGEgY2VsbCBpcyB0aGUgYmFzZWxpbmUgb2YK
ICAgICAvLyB0aGUgZmlyc3QgaW4tZmxvdyBsaW5lIGJveCBpbiB0aGUgY2VsbCwgb3IgdGhlIGZp
cnN0IGluLWZsb3cgdGFibGUtcm93IGluIHRoZSBjZWxsLCB3aGljaGV2ZXIgY29tZXMgZmlyc3Qu
IElmIHRoZXJlCiAgICAgLy8gaXMgbm8gc3VjaCBsaW5lIGJveCBvciB0YWJsZS1yb3csIHRoZSBi
YXNlbGluZSBpcyB0aGUgYm90dG9tIG9mIGNvbnRlbnQgZWRnZSBvZiB0aGUgY2VsbCBib3guCi0g
ICAgaW50IGZpcnN0TGluZUJhc2VsaW5lID0gZmlyc3RMaW5lQm94QmFzZWxpbmUoKTsKKyAgICBM
YXlvdXRVbml0IGZpcnN0TGluZUJhc2VsaW5lID0gZmlyc3RMaW5lQm94QmFzZWxpbmUoKTsKICAg
ICBpZiAoZmlyc3RMaW5lQmFzZWxpbmUgIT0gLTEpCiAgICAgICAgIHJldHVybiBmaXJzdExpbmVC
YXNlbGluZTsKICAgICByZXR1cm4gcGFkZGluZ0JlZm9yZSgpICsgYm9yZGVyQmVmb3JlKCkgKyBj
b250ZW50TG9naWNhbEhlaWdodCgpOwpAQCAtMTAzNiw3ICsxMDM2LDcgQEAgdm9pZCBSZW5kZXJU
YWJsZUNlbGw6OnBhaW50TWFzayhQYWludEluZgogCiB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2Ny
b2xsYmFyc0NoYW5nZWQoYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFyQ2hhbmdlZCwgYm9vbCB2ZXJ0
aWNhbFNjcm9sbGJhckNoYW5nZWQpCiB7Ci0gICAgaW50IHNjcm9sbGJhckhlaWdodCA9IHNjcm9s
bGJhckxvZ2ljYWxIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IHNjcm9sbGJhckhlaWdodCA9IHNj
cm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKICAgICBpZiAoIXNjcm9sbGJhckhlaWdodCkKICAgICAg
ICAgcmV0dXJuOyAvLyBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgYmUgZG9pbmcgc29tZXRoaW5nIHdo
ZW4gYSBzY3JvbGxiYXIgZ29lcyBhd2F5IG9yIG5vdC4KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgJKHJldmlzaW9uIDk5MjIzKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocygpOwogCi0gICAgdm9pZCB1cGRhdGVMb2dpY2FsV2lkdGgoaW50KTsK
KyAgICB2b2lkIHVwZGF0ZUxvZ2ljYWxXaWR0aChMYXlvdXRVbml0KTsKIAogICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBib3JkZXJMZWZ0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGJv
cmRlclJpZ2h0KCkgY29uc3Q7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYsIFJlbmRlck9iamVjdCogYmFja2dyb3VuZE9iamVjdCk7CiAKLSAgICBpbnQgY2VsbEJhc2Vs
aW5lUG9zaXRpb24oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNlbGxCYXNlbGluZVBvc2l0aW9u
KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEludHJpbnNpY1BhZGRpbmdCZWZvcmUoaW50IHApIHsg
bV9pbnRyaW5zaWNQYWRkaW5nQmVmb3JlID0gcDsgfQogICAgIHZvaWQgc2V0SW50cmluc2ljUGFk
ZGluZ0FmdGVyKGludCBwKSB7IG1faW50cmluc2ljUGFkZGluZ0FmdGVyID0gcDsgfQpAQCAtMTQ1
LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFkZGluZ0JlZm9y
ZShib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVh
bCBMYXlvdXRVbml0IHBhZGRpbmdBZnRlcihib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nID0g
dHJ1ZSkgY29uc3Q7CiAKLSAgICB2b2lkIHNldE92ZXJyaWRlSGVpZ2h0RnJvbVJvd0hlaWdodChp
bnQpOworICAgIHZvaWQgc2V0T3ZlcnJpZGVIZWlnaHRGcm9tUm93SGVpZ2h0KExheW91dFVuaXQp
OwogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNDaGFuZ2VkKGJvb2wgaG9yaXpvbnRhbFNj
cm9sbGJhckNoYW5nZWQsIGJvb2wgdmVydGljYWxTY3JvbGxiYXJDaGFuZ2VkKTsKIApAQCAtMTY5
LDcgKzE2OSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIExheW91dFNpemUgb2Zmc2V0RnJv
bUNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogICAg
IHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgTGF5b3V0UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CiAKICAgICB2
b2lkIHBhaW50Q29sbGFwc2VkQm9yZGVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJl
Y3QmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAJKHJldmlzaW9uIDk5MjIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OSwxNSArMjg5LDE1
IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzZXRDZWxsTG9naWNhbFcKICAgICAgICAgICAg
ICAgICBjc3BhbiAtPSB0YWJsZSgpLT5jb2x1bW5zKClbZW5kQ29sXS5zcGFuOwogICAgICAgICAg
ICAgICAgIGVuZENvbCsrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IHcgPSBjb2x1
bW5Qb3NbZW5kQ29sXSAtIGNvbHVtblBvc1tqXSAtIHRhYmxlKCktPmhCb3JkZXJTcGFjaW5nKCk7
Ci0gICAgICAgICAgICBpbnQgb2xkTG9naWNhbFdpZHRoID0gY2VsbC0+bG9naWNhbFdpZHRoKCk7
CisgICAgICAgICAgICBMYXlvdXRVbml0IHcgPSBjb2x1bW5Qb3NbZW5kQ29sXSAtIGNvbHVtblBv
c1tqXSAtIHRhYmxlKCktPmhCb3JkZXJTcGFjaW5nKCk7CisgICAgICAgICAgICBMYXlvdXRVbml0
IG9sZExvZ2ljYWxXaWR0aCA9IGNlbGwtPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgaWYg
KHcgIT0gb2xkTG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgY2VsbC0+c2V0TmVlZHNM
YXlvdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZSgpLT5zZWxmTmVlZHNMYXlv
dXQoKSAmJiBjZWxsLT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoIXN0YXRlUHVzaGVyLmRpZFB1c2goKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGVjaG5pY2FsbHksIHdlIHNob3VsZCBhbHNvIHB1c2ggc3RhdGUgZm9yIHRo
ZSByb3csIGJ1dCBzaW5jZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm93cyBkb24ndCBw
dXNoIGEgY29vcmRpbmF0ZSB0cmFuc2Zvcm0sIHRoYXQncyBub3QgbmVjZXNzYXJ5LgotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVQdXNoZXIucHVzaCh0aGlzLCBJbnRTaXplKHgoKSwgeSgp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVB1c2hlci5wdXNoKHRoaXMsIExheW91
dFNpemUoeCgpLCB5KCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICBjZWxsLT5yZXBhaW50KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDYzLDEwICs0NjMs
MTAgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvdwogICAgICAgICAg
ICAgLy8gdHJ5IHRvIHNhdGlzZnkgcGVyY2VudAogICAgICAgICAgICAgTGF5b3V0VW5pdCBhZGQg
PSAwOwogICAgICAgICAgICAgdG90YWxQZXJjZW50ID0gbWluKHRvdGFsUGVyY2VudCwgMTAwKTsK
LSAgICAgICAgICAgIGludCByaCA9IG1fcm93UG9zWzFdIC0gbV9yb3dQb3NbMF07CisgICAgICAg
ICAgICBMYXlvdXRVbml0IHJoID0gbV9yb3dQb3NbMV0gLSBtX3Jvd1Bvc1swXTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAgICAgICAg
ICAgICAgIGlmICh0b3RhbFBlcmNlbnQgPiAwICYmIG1fZ3JpZFtyXS5sb2dpY2FsSGVpZ2h0Lmlz
UGVyY2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9BZGQgPSBtaW4o
ZGgsIHN0YXRpY19jYXN0PExheW91dFVuaXQ+KCh0b3RhbEhlaWdodCAqIG1fZ3JpZFtyXS5sb2dp
Y2FsSGVpZ2h0LnBlcmNlbnQoKSAvIDEwMCkgLSByaCkpOworICAgICAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IHRvQWRkID0gbWluPExheW91dFVuaXQ+KGRoLCAodG90YWxIZWlnaHQgKiBtX2dy
aWRbcl0ubG9naWNhbEhlaWdodC5wZXJjZW50KCkgLyAxMDApIC0gcmgpOwogICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB0b0FkZCBpcyBuZWdhdGl2ZSwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIHNo
cmluayB0aGUgcm93ICh0aGlzIGJ1ZwogICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBP
dXRsb29rIFdlYiBBY2Nlc3MpLgogICAgICAgICAgICAgICAgICAgICB0b0FkZCA9IG1heDxMYXlv
dXRVbml0PigwLCB0b0FkZCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113581</attachid>
            <date>2011-11-03 16:54:27 -0700</date>
            <delta_ts>2011-11-03 17:57:16 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-71500-20111103165426.patch</filename>
            <type>text/plain</type>
            <size>35963</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MjMyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTEtMDMgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENvcnJlY3QgdXNhZ2Ugb2Yg
TGF5b3V0VW5pdHMgYW5kIGludGVnZXJzIGluIFRhYmxlIHJlbmRlcmluZyBjbGFzc2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUwMAorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEZpeGluZyB0aGUgVGFibGUg
bGF5b3V0IGNsYXNzZXMgdG8gb3BlcmF0ZSBvbiBpbnRlZ2VycyAtLSBzdWItcGl4ZWwgdGFibGUg
bGF5b3V0IGJyZWFrcworICAgICAgICB0aGUgc3BlYy4gTWVhbndoaWxlIGNvcnJlY3RpbmcgdGhl
IFRhYmxlIHJlbmRlcmluZyBjbGFzc2VzIHRoZW1zZWx2ZXMgdG8gc3RpbGwgdXNlCisgICAgICAg
IExheW91dFVuaXRzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBubyBjaGFuZ2UgaW4gYmVo
YXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcDogUmV2ZXJ0
aW5nIHRvIG9wZXJhdGluZyBvbiBpbnRlZ2Vycy4KKyAgICAgICAgKFdlYkNvcmU6OkF1dG9UYWJs
ZUxheW91dDo6cmVjYWxjQ29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9UYWJsZUxheW91
dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6QXV0
b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1dG9UYWJsZUxheW91dDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1Rh
YmxlTGF5b3V0Lmg6IFJldmVydGluZyB0byBvcGVyYXRpbmcgb24gaW50ZWdlcnMuCisgICAgICAg
ICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmxheW91dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmg6IFN3aXRjaGluZyB0byBMYXlvdXRVbml0cy4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjpnZXRDb2x1bW5Qb3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGU6OmJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDogU3dpdGNoaW5nIHRvIExheW91
dFVuaXRzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjp1cGRhdGVMb2dpY2Fs
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpzZXRPdmVycmlkZUhl
aWdodEZyb21Sb3dIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpj
b21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxs
OjpjZWxsQmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNl
bGw6OnNjcm9sbGJhcnNDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmg6IFN3aXRjaGluZyB0byBMYXlvdXRVbml0cworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
U2VjdGlvbjo6c2V0Q2VsbExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKToKKwogMjAxMS0xMS0wMyAgSm9zaHVhIEJlbGwgIDxq
c2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWREQiByZXN1bHQgb2YgZGVsZXRp
bmcgYSByZWNvcmQgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiA5OTAwNikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSwxMSArNjksMTEgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbihp
bnQgZQogICAgICAgICAgICAgICAgIGlmIChjZWxsLT5jb2xTcGFuKCkgPT0gMSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBBIGNlbGwgb3JpZ2luYXRlcyBpbiB0aGlzIGNvbHVtbi4gIEVuc3Vy
ZSB3ZSBoYXZlCiAgICAgICAgICAgICAgICAgICAgIC8vIGEgbWluL21heCB3aWR0aCBvZiBhdCBs
ZWFzdCAxcHggZm9yIHRoaXMgY29sdW1uIG5vdy4KLSAgICAgICAgICAgICAgICAgICAgY29sdW1u
TGF5b3V0Lm1pbkxvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0Pihjb2x1bW5MYXlvdXQubWlu
TG9naWNhbFdpZHRoLCBjZWxsSGFzQ29udGVudCA/IDEgOiAwKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29sdW1uTGF5b3V0Lm1heExvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0Pihjb2x1bW5M
YXlvdXQubWF4TG9naWNhbFdpZHRoLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uTGF5
b3V0Lm1pbkxvZ2ljYWxXaWR0aCA9IG1heDxpbnQ+KGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lk
dGgsIGNlbGxIYXNDb250ZW50ID8gMSA6IDApOworICAgICAgICAgICAgICAgICAgICBjb2x1bW5M
YXlvdXQubWF4TG9naWNhbFdpZHRoID0gbWF4PGludD4oY29sdW1uTGF5b3V0Lm1heExvZ2ljYWxX
aWR0aCwgMSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLT5wcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzRGlydHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPmNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91dC5t
aW5Mb2dpY2FsV2lkdGggPSBtYXgoY2VsbC0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCksIGNv
bHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgICAgICAgICBjb2x1bW5M
YXlvdXQubWluTG9naWNhbFdpZHRoID0gbWF4PGludD4oY2VsbC0+bWluUHJlZmVycmVkTG9naWNh
bFdpZHRoKCksIGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoY2VsbC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgPiBjb2x1bW5MYXlvdXQu
bWF4TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5MYXlvdXQu
bWF4TG9naWNhbFdpZHRoID0gY2VsbC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXhDb250cmlidXRvciA9IGNlbGw7CkBAIC0xMTksOCArMTE5
LDggQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbihpbnQgZQogICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIWVmZkNvbCB8fCBzZWN0aW9uLT5wcmltYXJ5Q2VsbEF0KGksIGVm
ZkNvbCAtIDEpICE9IGNlbGwpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzcGFubmlu
ZyBjZWxsIG9yaWdpbmF0ZXMgaW4gdGhpcyBjb2x1bW4uICBFbnN1cmUgd2UgaGF2ZQogICAgICAg
ICAgICAgICAgICAgICAvLyBhIG1pbi9tYXggd2lkdGggb2YgYXQgbGVhc3QgMXB4IGZvciB0aGlz
IGNvbHVtbiBub3cuCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91dC5taW5Mb2dpY2Fs
V2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oY29sdW1uTGF5b3V0Lm1pbkxvZ2ljYWxXaWR0aCwgY2Vs
bEhhc0NvbnRlbnQgPyAxIDogMCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91dC5t
YXhMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oY29sdW1uTGF5b3V0Lm1heExvZ2ljYWxX
aWR0aCwgMSk7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lk
dGggPSBtYXg8aW50Pihjb2x1bW5MYXlvdXQubWluTG9naWNhbFdpZHRoLCBjZWxsSGFzQ29udGVu
dCA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uTGF5b3V0Lm1heExvZ2ljYWxX
aWR0aCA9IG1heDxpbnQ+KGNvbHVtbkxheW91dC5tYXhMb2dpY2FsV2lkdGgsIDEpOwogICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRTcGFuQ2VsbChjZWxsKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmNv
bXB1dGVQcmVmZXJyZWRMbwogewogICAgIGZ1bGxSZWNhbGMoKTsKIAotICAgIExheW91dFVuaXQg
c3Bhbk1heExvZ2ljYWxXaWR0aCA9IGNhbGNFZmZlY3RpdmVMb2dpY2FsV2lkdGgoKTsKKyAgICBp
bnQgc3Bhbk1heExvZ2ljYWxXaWR0aCA9IGNhbGNFZmZlY3RpdmVMb2dpY2FsV2lkdGgoKTsKICAg
ICBtaW5XaWR0aCA9IDA7CiAgICAgbWF4V2lkdGggPSAwOwogICAgIGZsb2F0IG1heFBlcmNlbnQg
PSAwOwpAQCAtMjUxLDIwICsyNTEsMTkgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmNvbXB1dGVQ
cmVmZXJyZWRMbwogCiAgICAgaWYgKHNjYWxlQ29sdW1ucykgewogICAgICAgICBtYXhOb25QZXJj
ZW50ID0gbWF4Tm9uUGVyY2VudCAqIDEwMCAvIG1heChyZW1haW5pbmdQZXJjZW50LCBlcHNpbG9u
KTsKLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB1bm5lY2Vzc2FyeSByb3VuZGluZyB3aGVuIGxh
eW91dCBpcyBvZmYgaW50czogd2Via2l0Lm9yZy9iLzYzNjU2Ci0gICAgICAgIG1heFdpZHRoID0g
bWF4PExheW91dFVuaXQ+KG1heFdpZHRoLCBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihtaW4obWF4
Tm9uUGVyY2VudCwgbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpIC8gMi4wZikpKTsK
LSAgICAgICAgbWF4V2lkdGggPSBtYXg8TGF5b3V0VW5pdD4obWF4V2lkdGgsIHN0YXRpY19jYXN0
PExheW91dFVuaXQ+KG1pbihtYXhQZXJjZW50LCBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6
bWF4KCkgLyAyLjBmKSkpOworICAgICAgICBtYXhXaWR0aCA9IG1heChtYXhXaWR0aCwgc3RhdGlj
X2Nhc3Q8aW50PihtaW4obWF4Tm9uUGVyY2VudCwgbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46
Om1heCgpIC8gMi4wZikpKTsKKyAgICAgICAgbWF4V2lkdGggPSBtYXgobWF4V2lkdGgsIHN0YXRp
Y19jYXN0PGludD4obWluKG1heFBlcmNlbnQsIG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+Ojpt
YXgoKSAvIDIuMGYpKSk7CiAgICAgfQogCi0gICAgbWF4V2lkdGggPSBtYXgobWF4V2lkdGgsIHNw
YW5NYXhMb2dpY2FsV2lkdGgpOworICAgIG1heFdpZHRoID0gbWF4PGludD4obWF4V2lkdGgsIHNw
YW5NYXhMb2dpY2FsV2lkdGgpOwogCi0gICAgTGF5b3V0VW5pdCBib3JkZXJzUGFkZGluZ0FuZFNw
YWNpbmcgPSBtX3RhYmxlLT5ib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmdJblJvd0RpcmVjdGlvbigp
OworICAgIGludCBib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmcgPSBtX3RhYmxlLT5ib3JkZXJzUGFk
ZGluZ0FuZFNwYWNpbmdJblJvd0RpcmVjdGlvbigpOwogICAgIG1pbldpZHRoICs9IGJvcmRlcnNQ
YWRkaW5nQW5kU3BhY2luZzsKICAgICBtYXhXaWR0aCArPSBib3JkZXJzUGFkZGluZ0FuZFNwYWNp
bmc7CiAKICAgICBMZW5ndGggdGFibGVMb2dpY2FsV2lkdGggPSBtX3RhYmxlLT5zdHlsZSgpLT5s
b2dpY2FsV2lkdGgoKTsKICAgICBpZiAodGFibGVMb2dpY2FsV2lkdGguaXNGaXhlZCgpICYmIHRh
YmxlTG9naWNhbFdpZHRoLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgIG1pbldpZHRoID0gbWF4PExh
eW91dFVuaXQ+KG1pbldpZHRoLCB0YWJsZUxvZ2ljYWxXaWR0aC52YWx1ZSgpKTsKKyAgICAgICAg
bWluV2lkdGggPSBtYXg8aW50PihtaW5XaWR0aCwgdGFibGVMb2dpY2FsV2lkdGgudmFsdWUoKSk7
CiAgICAgICAgIG1heFdpZHRoID0gbWluV2lkdGg7CiAgICAgfSBlbHNlIGlmICghcmVtYWluaW5n
UGVyY2VudCAmJiBtYXhOb25QZXJjZW50KSB7CiAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBubyBy
ZW1haW5pbmcgcGVyY2VudCwgbWF4V2lkdGggaXMgaW52YWxpZC4KQEAgLTMwNSwxMyArMzA0LDEz
IEBAIGludCBBdXRvVGFibGVMYXlvdXQ6OmNhbGNFZmZlY3RpdmVMb2dpY2EKICAgICAgICAgaW50
IGNlbGxNaW5Mb2dpY2FsV2lkdGggPSBjZWxsLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAr
IHNwYWNpbmdJblJvd0RpcmVjdGlvbjsKICAgICAgICAgZmxvYXQgY2VsbE1heExvZ2ljYWxXaWR0
aCA9IGNlbGwtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgc3BhY2luZ0luUm93RGlyZWN0
aW9uOwogICAgICAgICBmbG9hdCB0b3RhbFBlcmNlbnQgPSAwOwotICAgICAgICBMYXlvdXRVbml0
IHNwYW5NaW5Mb2dpY2FsV2lkdGggPSAwOworICAgICAgICBpbnQgc3Bhbk1pbkxvZ2ljYWxXaWR0
aCA9IDA7CiAgICAgICAgIGZsb2F0IHNwYW5NYXhMb2dpY2FsV2lkdGggPSAwOwogICAgICAgICBi
b29sIGFsbENvbHNBcmVQZXJjZW50ID0gdHJ1ZTsKICAgICAgICAgYm9vbCBhbGxDb2xzQXJlRml4
ZWQgPSB0cnVlOwogICAgICAgICBib29sIGhhdmVBdXRvID0gZmFsc2U7CiAgICAgICAgIGJvb2wg
c3Bhbkhhc0VtcHR5Q2VsbHNPbmx5ID0gdHJ1ZTsKLSAgICAgICAgTGF5b3V0VW5pdCBmaXhlZFdp
ZHRoID0gMDsKKyAgICAgICAgaW50IGZpeGVkV2lkdGggPSAwOwogICAgICAgICB3aGlsZSAobGFz
dENvbCA8IG5FZmZDb2xzICYmIHNwYW4gPiAwKSB7CiAgICAgICAgICAgICBMYXlvdXQmIGNvbHVt
bkxheW91dCA9IG1fbGF5b3V0U3RydWN0W2xhc3RDb2xdOwogICAgICAgICAgICAgc3dpdGNoIChj
b2x1bW5MYXlvdXQubG9naWNhbFdpZHRoLnR5cGUoKSkgewpAQCAtMzkwLDE5ICszODksMTkgQEAg
aW50IEF1dG9UYWJsZUxheW91dDo6Y2FsY0VmZmVjdGl2ZUxvZ2ljYQogICAgICAgICBpZiAoY2Vs
bE1pbkxvZ2ljYWxXaWR0aCA+IHNwYW5NaW5Mb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgIGlm
IChhbGxDb2xzQXJlRml4ZWQpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvcyA9
IGVmZkNvbDsgZml4ZWRXaWR0aCA+IDAgJiYgcG9zIDwgbGFzdENvbDsgKytwb3MpIHsKLSAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjZWxsTG9naWNhbFdpZHRoID0gbWF4KG1fbGF5b3V0
U3RydWN0W3Bvc10uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoLCBjZWxsTWluTG9naWNhbFdpZHRo
ICogbV9sYXlvdXRTdHJ1Y3RbcG9zXS5sb2dpY2FsV2lkdGgudmFsdWUoKSAvIGZpeGVkV2lkdGgp
OworICAgICAgICAgICAgICAgICAgICBpbnQgY2VsbExvZ2ljYWxXaWR0aCA9IG1heChtX2xheW91
dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aCwgc3RhdGljX2Nhc3Q8aW50Pihj
ZWxsTWluTG9naWNhbFdpZHRoICogbV9sYXlvdXRTdHJ1Y3RbcG9zXS5sb2dpY2FsV2lkdGgudmFs
dWUoKSAvIGZpeGVkV2lkdGgpKTsKICAgICAgICAgICAgICAgICAgICAgZml4ZWRXaWR0aCAtPSBt
X2xheW91dFN0cnVjdFtwb3NdLmxvZ2ljYWxXaWR0aC52YWx1ZSgpOwogICAgICAgICAgICAgICAg
ICAgICBjZWxsTWluTG9naWNhbFdpZHRoIC09IGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAgICAg
ICAgICAgICAgIG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoID0g
Y2VsbExvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIGZsb2F0IHJlbWFpbmluZ01heExvZ2ljYWxXaWR0aCA9IHNwYW5N
YXhMb2dpY2FsV2lkdGg7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByZW1haW5pbmdNaW5M
b2dpY2FsV2lkdGggPSBzcGFuTWluTG9naWNhbFdpZHRoOworICAgICAgICAgICAgICAgIGludCBy
ZW1haW5pbmdNaW5Mb2dpY2FsV2lkdGggPSBzcGFuTWluTG9naWNhbFdpZHRoOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEdpdmUgbWluIHRvIHZhcmlhYmxlIGZpcnN0LCB0
byBmaXhlZCBzZWNvbmQsIGFuZCB0byBvdGhlcnMgdGhpcmQuCiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBwb3MgPSBlZmZDb2w7IHJlbWFpbmluZ01heExvZ2ljYWxXaWR0aCA+PSAwICYm
IHBvcyA8IGxhc3RDb2w7ICsrcG9zKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2xheW91
dFN0cnVjdFtwb3NdLmxvZ2ljYWxXaWR0aC5pc0ZpeGVkKCkgJiYgaGF2ZUF1dG8gJiYgZml4ZWRX
aWR0aCA8PSBjZWxsTWluTG9naWNhbFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
bnQgY29sTWluTG9naWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KG1fbGF5b3V0U3RydWN0W3Bv
c10uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoLCBtX2xheW91dFN0cnVjdFtwb3NdLmxvZ2ljYWxX
aWR0aC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2xNaW5Mb2dpY2Fs
V2lkdGggPSBtYXg8aW50PihtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1pbkxvZ2ljYWxX
aWR0aCwgbV9sYXlvdXRTdHJ1Y3RbcG9zXS5sb2dpY2FsV2lkdGgudmFsdWUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBmaXhlZFdpZHRoIC09IG1fbGF5b3V0U3RydWN0W3Bvc10ubG9naWNh
bFdpZHRoLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdNaW5Mb2dp
Y2FsV2lkdGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdNYXhMb2dpY2FsV2lkdGggLT0gbV9s
YXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGg7CkBAIC00MTMsOCArNDEy
LDggQEAgaW50IEF1dG9UYWJsZUxheW91dDo6Y2FsY0VmZmVjdGl2ZUxvZ2ljYQogCiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3MgPSBlZmZDb2w7IHJlbWFpbmluZ01heExvZ2ljYWxX
aWR0aCA+PSAwICYmIHBvcyA8IGxhc3RDb2wgJiYgcmVtYWluaW5nTWluTG9naWNhbFdpZHRoIDwg
Y2VsbE1pbkxvZ2ljYWxXaWR0aDsgKytwb3MpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEo
bV9sYXlvdXRTdHJ1Y3RbcG9zXS5sb2dpY2FsV2lkdGguaXNGaXhlZCgpICYmIGhhdmVBdXRvICYm
IGZpeGVkV2lkdGggPD0gY2VsbE1pbkxvZ2ljYWxXaWR0aCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBjb2xNaW5Mb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4obV9sYXlvdXRT
dHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIHN0YXRpY19jYXN0PGludD4ocmVt
YWluaW5nTWF4TG9naWNhbFdpZHRoID8gY2VsbE1pbkxvZ2ljYWxXaWR0aCAqIHN0YXRpY19jYXN0
PGZsb2F0PihtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aCkgLyBy
ZW1haW5pbmdNYXhMb2dpY2FsV2lkdGggOiBjZWxsTWluTG9naWNhbFdpZHRoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjb2xNaW5Mb2dpY2FsV2lkdGggPSBtaW48TGF5b3V0VW5pdD4obV9s
YXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGggKyAoY2VsbE1pbkxvZ2lj
YWxXaWR0aCAtIHJlbWFpbmluZ01pbkxvZ2ljYWxXaWR0aCksIGNvbE1pbkxvZ2ljYWxXaWR0aCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sTWluTG9naWNhbFdpZHRoID0gbWF4PGlu
dD4obV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIHN0YXRpY19j
YXN0PGludD4ocmVtYWluaW5nTWF4TG9naWNhbFdpZHRoID8gY2VsbE1pbkxvZ2ljYWxXaWR0aCAq
IHN0YXRpY19jYXN0PGZsb2F0PihtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1heExvZ2lj
YWxXaWR0aCkgLyByZW1haW5pbmdNYXhMb2dpY2FsV2lkdGggOiBjZWxsTWluTG9naWNhbFdpZHRo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2xNaW5Mb2dpY2FsV2lkdGggPSBtaW48aW50
PihtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aCArIChjZWxsTWlu
TG9naWNhbFdpZHRoIC0gcmVtYWluaW5nTWluTG9naWNhbFdpZHRoKSwgY29sTWluTG9naWNhbFdp
ZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ01heExvZ2ljYWxXaWR0aCAt
PSBtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aDsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbWFpbmluZ01pbkxvZ2ljYWxXaWR0aCAtPSBtX2xheW91dFN0cnVj
dFtwb3NdLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNlbGxNaW5Mb2dpY2FsV2lkdGggLT0gY29sTWluTG9naWNhbFdpZHRoOwpAQCAtNDI2LDcgKzQy
NSw3IEBAIGludCBBdXRvVGFibGVMYXlvdXQ6OmNhbGNFZmZlY3RpdmVMb2dpY2EKICAgICAgICAg
aWYgKCFjZWxsTG9naWNhbFdpZHRoLmlzUGVyY2VudCgpKSB7CiAgICAgICAgICAgICBpZiAoY2Vs
bE1heExvZ2ljYWxXaWR0aCA+IHNwYW5NYXhMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHBvcyA9IGVmZkNvbDsgc3Bhbk1heExvZ2ljYWxXaWR0aCA+PSAwICYm
IHBvcyA8IGxhc3RDb2w7ICsrcG9zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjb2xNYXhM
b2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4obV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3Rp
dmVNYXhMb2dpY2FsV2lkdGgsIHN0YXRpY19jYXN0PGludD4oc3Bhbk1heExvZ2ljYWxXaWR0aCA/
IGNlbGxNYXhMb2dpY2FsV2lkdGggKiBzdGF0aWNfY2FzdDxmbG9hdD4obV9sYXlvdXRTdHJ1Y3Rb
cG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgpIC8gc3Bhbk1heExvZ2ljYWxXaWR0aCA6IGNl
bGxNYXhMb2dpY2FsV2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNvbE1heExvZ2lj
YWxXaWR0aCA9IG1heChtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0
aCwgc3RhdGljX2Nhc3Q8aW50PihzcGFuTWF4TG9naWNhbFdpZHRoID8gY2VsbE1heExvZ2ljYWxX
aWR0aCAqIHN0YXRpY19jYXN0PGZsb2F0PihtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1h
eExvZ2ljYWxXaWR0aCkgLyBzcGFuTWF4TG9naWNhbFdpZHRoIDogY2VsbE1heExvZ2ljYWxXaWR0
aCkpOwogICAgICAgICAgICAgICAgICAgICBzcGFuTWF4TG9naWNhbFdpZHRoIC09IG1fbGF5b3V0
U3RydWN0W3Bvc10uZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgICAg
ICBjZWxsTWF4TG9naWNhbFdpZHRoIC09IGNvbE1heExvZ2ljYWxXaWR0aDsKICAgICAgICAgICAg
ICAgICAgICAgbV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGggPSBj
b2xNYXhMb2dpY2FsV2lkdGg7CkBAIC00NzcsOCArNDc2LDggQEAgdm9pZCBBdXRvVGFibGVMYXlv
dXQ6Omluc2VydFNwYW5DZWxsKFJlbgogdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiB7
CiAgICAgLy8gdGFibGUgbGF5b3V0IGJhc2VkIG9uIHRoZSB2YWx1ZXMgY29sbGVjdGVkIGluIHRo
ZSBsYXlvdXQgc3RydWN0dXJlLgotICAgIExheW91dFVuaXQgdGFibGVMb2dpY2FsV2lkdGggPSBt
X3RhYmxlLT5sb2dpY2FsV2lkdGgoKSAtIG1fdGFibGUtPmJvcmRlcnNQYWRkaW5nQW5kU3BhY2lu
Z0luUm93RGlyZWN0aW9uKCk7Ci0gICAgTGF5b3V0VW5pdCBhdmFpbGFibGUgPSB0YWJsZUxvZ2lj
YWxXaWR0aDsKKyAgICBpbnQgdGFibGVMb2dpY2FsV2lkdGggPSBtX3RhYmxlLT5sb2dpY2FsV2lk
dGgoKSAtIG1fdGFibGUtPmJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9uKCk7
CisgICAgaW50IGF2YWlsYWJsZSA9IHRhYmxlTG9naWNhbFdpZHRoOwogICAgIHNpemVfdCBuRWZm
Q29scyA9IG1fdGFibGUtPm51bUVmZkNvbHMoKTsKIAogICAgIGlmIChuRWZmQ29scyAhPSBtX2xh
eW91dFN0cnVjdC5zaXplKCkpIHsKQEAgLTUwMSw3ICs1MDAsNyBAQCB2b2lkIEF1dG9UYWJsZUxh
eW91dDo6bGF5b3V0KCkKIAogICAgIC8vIGZpbGwgdXAgZXZlcnkgY2VsbCB3aXRoIGl0cyBtaW5X
aWR0aAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbkVmZkNvbHM7ICsraSkgewotICAgICAg
ICBMYXlvdXRVbml0IGNlbGxMb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3Rp
dmVNaW5Mb2dpY2FsV2lkdGg7CisgICAgICAgIGludCBjZWxsTG9naWNhbFdpZHRoID0gbV9sYXlv
dXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOwogICAgICAgICBtX2xheW91dFN0
cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCA9IGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAg
IGF2YWlsYWJsZSAtPSBjZWxsTG9naWNhbFdpZHRoOwogICAgICAgICBMZW5ndGgmIGxvZ2ljYWxX
aWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKQEAgLTUzNywy
MSArNTM2LDIxIEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG5FZmZDb2xzOyArK2kpIHsKICAgICAgICAgICAgIExlbmd0aCYg
bG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwog
ICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkgewotICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgY2VsbExvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0PihtX2xheW91
dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIGxvZ2ljYWxXaWR0aC5jYWxjTWlu
VmFsdWUodGFibGVMb2dpY2FsV2lkdGgpKTsKKyAgICAgICAgICAgICAgICBpbnQgY2VsbExvZ2lj
YWxXaWR0aCA9IG1heDxpbnQ+KG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxX
aWR0aCwgbG9naWNhbFdpZHRoLmNhbGNNaW5WYWx1ZSh0YWJsZUxvZ2ljYWxXaWR0aCkpOwogICAg
ICAgICAgICAgICAgIGF2YWlsYWJsZSArPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2lj
YWxXaWR0aCAtIGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgbV9sYXlvdXRTdHJ1
Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggPSBjZWxsTG9naWNhbFdpZHRoOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICh0b3RhbFBlcmNlbnQgPiAxMDApIHsKICAgICAg
ICAgICAgIC8vIHJlbW92ZSBvdmVyYWxsb2NhdGVkIHNwYWNlIGZyb20gdGhlIGxhc3QgY29sdW1u
cwotICAgICAgICAgICAgTGF5b3V0VW5pdCBleGNlc3MgPSB0YWJsZUxvZ2ljYWxXaWR0aCAqICh0
b3RhbFBlcmNlbnQgLSAxMDApIC8gMTAwOworICAgICAgICAgICAgaW50IGV4Y2VzcyA9IHRhYmxl
TG9naWNhbFdpZHRoICogKHRvdGFsUGVyY2VudCAtIDEwMCkgLyAxMDA7CiAgICAgICAgICAgICBm
b3IgKGludCBpID0gbkVmZkNvbHMgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgICAg
IGlmIChtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGguaXNQZXJjZW50KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjZWxsTG9naWNhbFdpZHRoID0gbV9s
YXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAg
IExheW91dFVuaXQgcmVkdWN0aW9uID0gbWluKGNlbGxMb2dpY2FsV2lkdGgsICBleGNlc3MpOwor
ICAgICAgICAgICAgICAgICAgICBpbnQgY2VsbExvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0
W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoOworICAgICAgICAgICAgICAgICAgICBpbnQgcmVkdWN0
aW9uID0gbWluKGNlbGxMb2dpY2FsV2lkdGgsICBleGNlc3MpOwogICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgbGluZXMgYmVsb3cgbWlnaHQgbG9vayBpbmNvbnNpc3RlbnQsIGJ1dCB0aGF0J3Mg
dGhlIHdheSBpdCdzIGhhbmRsZWQgaW4gbW96aWxsYQogICAgICAgICAgICAgICAgICAgICBleGNl
c3MgLT0gcmVkdWN0aW9uOwotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG5ld0xvZ2lj
YWxXaWR0aCA9IG1heDxMYXlvdXRVbml0PihtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5M
b2dpY2FsV2lkdGgsIGNlbGxMb2dpY2FsV2lkdGggLSByZWR1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpbnQgbmV3TG9naWNhbFdpZHRoID0gbWF4PGludD4obV9sYXlvdXRTdHJ1Y3RbaV0u
ZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoLCBjZWxsTG9naWNhbFdpZHRoIC0gcmVkdWN0aW9uKTsK
ICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlICs9IGNlbGxMb2dpY2FsV2lkdGggLSBuZXdM
b2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgICAgIG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1
dGVkTG9naWNhbFdpZHRoID0gbmV3TG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIH0KQEAg
LTU3Niw3ICs1NzUsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAg
ICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9n
aWNhbFdpZHRoOwogICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc1JlbGF0aXZlKCkgJiYg
bG9naWNhbFdpZHRoLnZhbHVlKCkgIT0gMCkgewogICAgICAgICAgICAgICAgIC8vIHdpZHRoPTAq
IGdldHMgZWZmTWluV2lkdGguCi0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjZWxsTG9naWNh
bFdpZHRoID0gbG9naWNhbFdpZHRoLnZhbHVlKCkgKiB0YWJsZUxvZ2ljYWxXaWR0aCAvIHRvdGFs
UmVsYXRpdmU7CisgICAgICAgICAgICAgICAgaW50IGNlbGxMb2dpY2FsV2lkdGggPSBsb2dpY2Fs
V2lkdGgudmFsdWUoKSAqIHRhYmxlTG9naWNhbFdpZHRoIC8gdG90YWxSZWxhdGl2ZTsKICAgICAg
ICAgICAgICAgICBhdmFpbGFibGUgKz0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2Fs
V2lkdGggLSBjZWxsTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIG1fbGF5b3V0U3RydWN0
W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoID0gY2VsbExvZ2ljYWxXaWR0aDsKICAgICAgICAgICAg
IH0KQEAgLTU4OSw3ICs1ODgsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuRWZmQ29sczsgKytpKSB7CiAgICAgICAgICAg
ICBMZW5ndGgmIGxvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2lj
YWxXaWR0aDsKICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNBdXRvKCkgJiYgdG90YWxB
dXRvICYmICFtX2xheW91dFN0cnVjdFtpXS5lbXB0eUNlbGxzT25seSkgewotICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgY2VsbExvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0PihtX2xheW91
dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCwgc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4o
YXZhaWxhYmxlICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2
ZU1heExvZ2ljYWxXaWR0aCkgLyB0b3RhbEF1dG8pKTsKKyAgICAgICAgICAgICAgICBpbnQgY2Vs
bExvZ2ljYWxXaWR0aCA9IG1heDxpbnQ+KG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNh
bFdpZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KGF2YWlsYWJsZSAqIHN0YXRpY19jYXN0PGZsb2F0Piht
X2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgpIC8gdG90YWxBdXRvKSk7
CiAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIC09IGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAg
ICAgICAgICAgdG90YWxBdXRvIC09IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1heExvZ2lj
YWxXaWR0aDsKICAgICAgICAgICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2lj
YWxXaWR0aCA9IGNlbGxMb2dpY2FsV2lkdGg7CkBAIC02MDIsNyArNjAxLDcgQEAgdm9pZCBBdXRv
VGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbkVm
ZkNvbHM7ICsraSkgewogICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91
dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICBpZiAobG9naWNh
bFdpZHRoLmlzRml4ZWQoKSkgewotICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2VsbExvZ2lj
YWxXaWR0aCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGF2YWlsYWJsZSAqIHN0YXRpY19jYXN0
PGZsb2F0PihtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgpIC8gdG90
YWxGaXhlZCk7CisgICAgICAgICAgICAgICAgaW50IGNlbGxMb2dpY2FsV2lkdGggPSBzdGF0aWNf
Y2FzdDxpbnQ+KGF2YWlsYWJsZSAqIHN0YXRpY19jYXN0PGZsb2F0PihtX2xheW91dFN0cnVjdFtp
XS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgpIC8gdG90YWxGaXhlZCk7CiAgICAgICAgICAgICAg
ICAgYXZhaWxhYmxlIC09IGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgdG90YWxG
aXhlZCAtPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGg7CiAgICAg
ICAgICAgICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggKz0gY2Vs
bExvZ2ljYWxXaWR0aDsKQEAgLTYxNSw3ICs2MTQsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6
bGF5b3V0KCkKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuRWZmQ29sczsgKytpKSB7
CiAgICAgICAgICAgICBMZW5ndGgmIGxvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVm
ZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNQZXJj
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNlbGxMb2dpY2FsV2lkdGggPSBh
dmFpbGFibGUgKiBsb2dpY2FsV2lkdGgucGVyY2VudCgpIC8gdG90YWxQZXJjZW50OworICAgICAg
ICAgICAgICAgIGludCBjZWxsTG9naWNhbFdpZHRoID0gYXZhaWxhYmxlICogbG9naWNhbFdpZHRo
LnBlcmNlbnQoKSAvIHRvdGFsUGVyY2VudDsKICAgICAgICAgICAgICAgICBhdmFpbGFibGUgLT0g
Y2VsbExvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICB0b3RhbFBlcmNlbnQgLT0gbG9naWNh
bFdpZHRoLnBlcmNlbnQoKTsKICAgICAgICAgICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21w
dXRlZExvZ2ljYWxXaWR0aCArPSBjZWxsTG9naWNhbFdpZHRoOwpAQCAtNjMzLDcgKzYzMiw3IEBA
IHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgLy8gdmFyaWFibGUg
Y29sdW1ucyB3aXRoIGVtcHR5IGNlbGxzIG9ubHkgZG9uJ3QgZ2V0IGFueSB3aWR0aAogICAgICAg
ICAgICAgaWYgKG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aC5pc0F1dG8o
KSAmJiBtX2xheW91dFN0cnVjdFtpXS5lbXB0eUNlbGxzT25seSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIExheW91dFVuaXQgY2VsbExvZ2ljYWxXaWR0aCA9IGF2YWls
YWJsZSAvIHRvdGFsOworICAgICAgICAgICAgaW50IGNlbGxMb2dpY2FsV2lkdGggPSBhdmFpbGFi
bGUgLyB0b3RhbDsKICAgICAgICAgICAgIGF2YWlsYWJsZSAtPSBjZWxsTG9naWNhbFdpZHRoOwog
ICAgICAgICAgICAgdG90YWwtLTsKICAgICAgICAgICAgIG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1
dGVkTG9naWNhbFdpZHRoICs9IGNlbGxMb2dpY2FsV2lkdGg7CkBAIC02NTAsNyArNjQ5LDcgQEAg
dm9pZCBBdXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgIC8vICg0KSBQZXJjZW50CiAg
ICAgICAgIC8vIFRoaXMgaXMgYmFzaWNhbGx5IHRoZSByZXZlcnNlIG9mIGhvdyB3ZSBncmV3IHRo
ZSBjZWxscy4KICAgICAgICAgaWYgKGF2YWlsYWJsZSA8IDApIHsKLSAgICAgICAgICAgIExheW91
dFVuaXQgbG9naWNhbFdpZHRoQmV5b25kTWluID0gMDsKKyAgICAgICAgICAgIGludCBsb2dpY2Fs
V2lkdGhCZXlvbmRNaW4gPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0g
MTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2ljYWxXaWR0aCA9
IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAg
ICBpZiAobG9naWNhbFdpZHRoLmlzQXV0bygpKQpAQCAtNjYwLDggKzY1OSw4IEBAIHZvaWQgQXV0
b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xz
IC0gMTsgaSA+PSAwICYmIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA+IDA7IC0taSkgewogICAgICAg
ICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0
aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNBdXRv
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXhEaWZmID0gbV9sYXlv
dXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggLSBtX2xheW91dFN0cnVjdFtpXS5lZmZl
Y3RpdmVNaW5Mb2dpY2FsV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcmVk
dWNlID0gYXZhaWxhYmxlICogbWluTWF4RGlmZiAvIGxvZ2ljYWxXaWR0aEJleW9uZE1pbjsKKyAg
ICAgICAgICAgICAgICAgICAgaW50IG1pbk1heERpZmYgPSBtX2xheW91dFN0cnVjdFtpXS5jb21w
dXRlZExvZ2ljYWxXaWR0aCAtIG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxX
aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlZHVjZSA9IGF2YWlsYWJsZSAqIG1pbk1h
eERpZmYgLyBsb2dpY2FsV2lkdGhCZXlvbmRNaW47CiAgICAgICAgICAgICAgICAgICAgIG1fbGF5
b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoICs9IHJlZHVjZTsKICAgICAgICAgICAg
ICAgICAgICAgYXZhaWxhYmxlIC09IHJlZHVjZTsKICAgICAgICAgICAgICAgICAgICAgbG9naWNh
bFdpZHRoQmV5b25kTWluIC09IG1pbk1heERpZmY7CkBAIC02NzIsNyArNjcxLDcgQEAgdm9pZCBB
dXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYXZhaWxh
YmxlIDwgMCkgewotICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhCZXlvbmRNaW4g
PSAwOworICAgICAgICAgICAgaW50IGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA9IDA7CiAgICAgICAg
ICAgICBmb3IgKGludCBpID0gbkVmZkNvbHMgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAg
ICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZl
TG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNSZWxhdGl2
ZSgpKQpAQCAtNjgyLDggKzY4MSw4IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwICYmIGxvZ2ljYWxX
aWR0aEJleW9uZE1pbiA+IDA7IC0taSkgewogICAgICAgICAgICAgICAgIExlbmd0aCYgbG9naWNh
bFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAg
ICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNSZWxhdGl2ZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgbWluTWF4RGlmZiA9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVk
TG9naWNhbFdpZHRoIC0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRo
OwotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJlZHVjZSA9IGF2YWlsYWJsZSAqIG1p
bk1heERpZmYgLyBsb2dpY2FsV2lkdGhCZXlvbmRNaW47CisgICAgICAgICAgICAgICAgICAgIGlu
dCBtaW5NYXhEaWZmID0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggLSBt
X2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CisgICAgICAgICAgICAg
ICAgICAgIGludCByZWR1Y2UgPSBhdmFpbGFibGUgKiBtaW5NYXhEaWZmIC8gbG9naWNhbFdpZHRo
QmV5b25kTWluOwogICAgICAgICAgICAgICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRl
ZExvZ2ljYWxXaWR0aCArPSByZWR1Y2U7CiAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSAt
PSByZWR1Y2U7CiAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiAtPSBt
aW5NYXhEaWZmOwpAQCAtNjk0LDcgKzY5Myw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlv
dXQoKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGF2YWlsYWJsZSA8IDApIHsKLSAgICAgICAg
ICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoQmV5b25kTWluID0gMDsKKyAgICAgICAgICAgIGlu
dCBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5F
ZmZDb2xzIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2lj
YWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAg
ICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzRml4ZWQoKSkKQEAgLTcwNCw4ICs3MDMsOCBA
QCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAgICAgIGZvciAoaW50IGkg
PSBuRWZmQ29scyAtIDE7IGkgPj0gMCAmJiBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gPiAwOyAtLWkp
IHsKICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0
W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICBpZiAobG9naWNhbFdp
ZHRoLmlzRml4ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG1pbk1heERp
ZmYgPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAtIG1fbGF5b3V0U3Ry
dWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKLSAgICAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCByZWR1Y2UgPSBhdmFpbGFibGUgKiBtaW5NYXhEaWZmIC8gbG9naWNhbFdpZHRoQmV5
b25kTWluOworICAgICAgICAgICAgICAgICAgICBpbnQgbWluTWF4RGlmZiA9IG1fbGF5b3V0U3Ry
dWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoIC0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZl
TWluTG9naWNhbFdpZHRoOworICAgICAgICAgICAgICAgICAgICBpbnQgcmVkdWNlID0gYXZhaWxh
YmxlICogbWluTWF4RGlmZiAvIGxvZ2ljYWxXaWR0aEJleW9uZE1pbjsKICAgICAgICAgICAgICAg
ICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggKz0gcmVkdWNlOwog
ICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgLT0gcmVkdWNlOwogICAgICAgICAgICAgICAg
ICAgICBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gLT0gbWluTWF4RGlmZjsKQEAgLTcxNiw3ICs3MTUs
NyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChhdmFpbGFibGUgPCAwKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aEJleW9uZE1pbiA9IDA7CisgICAgICAgICAgICBpbnQgbG9naWNhbFdpZHRoQmV5b25kTWluID0g
MDsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkgPj0gMDsgLS1pKSB7
CiAgICAgICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtp
XS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0
aC5pc1BlcmNlbnQoKSkKQEAgLTcyNiw4ICs3MjUsOCBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6
bGF5b3V0KCkKICAgICAgICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scy0xOyBpID49IDAgJiYg
bG9naWNhbFdpZHRoQmV5b25kTWluID4gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICAgTGVuZ3Ro
JiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7
CiAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkgewotICAgICAg
ICAgICAgICAgICAgICBMYXlvdXRVbml0IG1pbk1heERpZmYgPSBtX2xheW91dFN0cnVjdFtpXS5j
b21wdXRlZExvZ2ljYWxXaWR0aCAtIG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2lj
YWxXaWR0aDsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByZWR1Y2UgPSBhdmFpbGFi
bGUgKiBtaW5NYXhEaWZmIC8gbG9naWNhbFdpZHRoQmV5b25kTWluOworICAgICAgICAgICAgICAg
ICAgICBpbnQgbWluTWF4RGlmZiA9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdp
ZHRoIC0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOworICAgICAg
ICAgICAgICAgICAgICBpbnQgcmVkdWNlID0gYXZhaWxhYmxlICogbWluTWF4RGlmZiAvIGxvZ2lj
YWxXaWR0aEJleW9uZE1pbjsKICAgICAgICAgICAgICAgICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0u
Y29tcHV0ZWRMb2dpY2FsV2lkdGggKz0gcmVkdWNlOwogICAgICAgICAgICAgICAgICAgICBhdmFp
bGFibGUgLT0gcmVkdWNlOwogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGhCZXlvbmRN
aW4gLT0gbWluTWF4RGlmZjsKQEAgLTczOCw3ICs3MzcsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91
dDo6bGF5b3V0KCkKICAgICAgICAgfQogICAgIH0KIAotICAgIExheW91dFVuaXQgcG9zID0gMDsK
KyAgICBpbnQgcG9zID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5FZmZDb2xzOyAr
K2kpIHsKICAgICAgICAgbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKClbaV0gPSBwb3M7CiAgICAg
ICAgIHBvcyArPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCArIG1fdGFi
bGUtPmhCb3JkZXJTcGFjaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0
b1RhYmxlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1
dG9UYWJsZUxheW91dC5oCShyZXZpc2lvbiA5OTAwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9BdXRvVGFibGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTEgKzYwLDExIEBA
IHByaXZhdGU6CiAKICAgICAgICAgTGVuZ3RoIGxvZ2ljYWxXaWR0aDsKICAgICAgICAgTGVuZ3Ro
IGVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKLSAgICAgICAgTGF5b3V0VW5pdCBtaW5Mb2dpY2FsV2lk
dGg7Ci0gICAgICAgIExheW91dFVuaXQgbWF4TG9naWNhbFdpZHRoOwotICAgICAgICBMYXlvdXRV
bml0IGVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKLSAgICAgICAgTGF5b3V0VW5pdCBlZmZlY3Rp
dmVNYXhMb2dpY2FsV2lkdGg7Ci0gICAgICAgIExheW91dFVuaXQgY29tcHV0ZWRMb2dpY2FsV2lk
dGg7CisgICAgICAgIGludCBtaW5Mb2dpY2FsV2lkdGg7CisgICAgICAgIGludCBtYXhMb2dpY2Fs
V2lkdGg7CisgICAgICAgIGludCBlZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CisgICAgICAgIGlu
dCBlZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGg7CisgICAgICAgIGludCBjb21wdXRlZExvZ2ljYWxX
aWR0aDsKICAgICAgICAgYm9vbCBlbXB0eUNlbGxzT25seTsKICAgICB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiA5
OTAwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk0LDEwICsxOTQsMTAgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0
Ojpjb21wdXRlUHJlZmVycmVkTAogICAgIC8vIGNvbHMvY2VsbHMgd2l0aCBhIGZpeGVkIHdpZHRo
LgogICAgIC8vCiAgICAgLy8gVGhlIG1heGltdW0gd2lkdGggaXMgbWF4KG1pbldpZHRoLCB0YWJs
ZVdpZHRoKS4KLSAgICBMYXlvdXRVbml0IGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZyA9IG1fdGFi
bGUtPmJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9uKCk7CisgICAgaW50IGJv
cmRlcnNQYWRkaW5nQW5kU3BhY2luZyA9IG1fdGFibGUtPmJvcmRlcnNQYWRkaW5nQW5kU3BhY2lu
Z0luUm93RGlyZWN0aW9uKCk7CiAKLSAgICBMYXlvdXRVbml0IHRhYmxlTG9naWNhbFdpZHRoID0g
bV90YWJsZS0+c3R5bGUoKS0+bG9naWNhbFdpZHRoKCkuaXNGaXhlZCgpID8gbV90YWJsZS0+c3R5
bGUoKS0+bG9naWNhbFdpZHRoKCkudmFsdWUoKSAtIGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZyA6
IDA7Ci0gICAgTGF5b3V0VW5pdCBtdyA9IGNhbGNXaWR0aEFycmF5KHRhYmxlTG9naWNhbFdpZHRo
KSArIGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZzsKKyAgICBpbnQgdGFibGVMb2dpY2FsV2lkdGgg
PSBtX3RhYmxlLT5zdHlsZSgpLT5sb2dpY2FsV2lkdGgoKS5pc0ZpeGVkKCkgPyBtX3RhYmxlLT5z
dHlsZSgpLT5sb2dpY2FsV2lkdGgoKS52YWx1ZSgpIC0gYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5n
IDogMDsKKyAgICBpbnQgbXcgPSBjYWxjV2lkdGhBcnJheSh0YWJsZUxvZ2ljYWxXaWR0aCkgKyBi
b3JkZXJzUGFkZGluZ0FuZFNwYWNpbmc7CiAKICAgICBtaW5XaWR0aCA9IG1heChtdywgdGFibGVM
b2dpY2FsV2lkdGgpOwogICAgIG1heFdpZHRoID0gbWluV2lkdGg7CkBAIC0yMjIsMTQgKzIyMiwx
NCBAQCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmZXJyZWRMCiAKIHZvaWQgRml4
ZWRUYWJsZUxheW91dDo6bGF5b3V0KCkKIHsKLSAgICBMYXlvdXRVbml0IHRhYmxlTG9naWNhbFdp
ZHRoID0gbV90YWJsZS0+bG9naWNhbFdpZHRoKCkgLSBtX3RhYmxlLT5ib3JkZXJzUGFkZGluZ0Fu
ZFNwYWNpbmdJblJvd0RpcmVjdGlvbigpOworICAgIGludCB0YWJsZUxvZ2ljYWxXaWR0aCA9IG1f
dGFibGUtPmxvZ2ljYWxXaWR0aCgpIC0gbV90YWJsZS0+Ym9yZGVyc1BhZGRpbmdBbmRTcGFjaW5n
SW5Sb3dEaXJlY3Rpb24oKTsKICAgICBpbnQgbkVmZkNvbHMgPSBtX3RhYmxlLT5udW1FZmZDb2xz
KCk7CiAgICAgVmVjdG9yPGludD4gY2FsY1dpZHRoKG5FZmZDb2xzLCAwKTsKIAogICAgIGludCBu
dW1BdXRvID0gMDsKLSAgICBMYXlvdXRVbml0IGF1dG9TcGFuID0gMDsKLSAgICBMYXlvdXRVbml0
IHRvdGFsRml4ZWRXaWR0aCA9IDA7Ci0gICAgTGF5b3V0VW5pdCB0b3RhbFBlcmNlbnRXaWR0aCA9
IDA7CisgICAgaW50IGF1dG9TcGFuID0gMDsKKyAgICBpbnQgdG90YWxGaXhlZFdpZHRoID0gMDsK
KyAgICBpbnQgdG90YWxQZXJjZW50V2lkdGggPSAwOwogICAgIGZsb2F0IHRvdGFsUGVyY2VudCA9
IDA7CiAKICAgICAvLyBDb21wdXRlIHJlcXVpcmVtZW50cyBhbmQgdHJ5IHRvIHNhdGlzZnkgZml4
ZWQgYW5kIHBlcmNlbnQgd2lkdGhzLgpAQCAtMjUwLDggKzI1MCw4IEBAIHZvaWQgRml4ZWRUYWJs
ZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAgfQogICAgIH0KIAotICAgIExheW91dFVuaXQgaHNw
YWNpbmcgPSBtX3RhYmxlLT5oQm9yZGVyU3BhY2luZygpOwotICAgIExheW91dFVuaXQgdG90YWxX
aWR0aCA9IHRvdGFsRml4ZWRXaWR0aCArIHRvdGFsUGVyY2VudFdpZHRoOworICAgIGludCBoc3Bh
Y2luZyA9IG1fdGFibGUtPmhCb3JkZXJTcGFjaW5nKCk7CisgICAgaW50IHRvdGFsV2lkdGggPSB0
b3RhbEZpeGVkV2lkdGggKyB0b3RhbFBlcmNlbnRXaWR0aDsKICAgICBpZiAoIW51bUF1dG8gfHwg
dG90YWxXaWR0aCA+IHRhYmxlTG9naWNhbFdpZHRoKSB7CiAgICAgICAgIC8vIElmIHRoZXJlIGFy
ZSBubyBhdXRvIGNvbHVtbnMsIG9yIGlmIHRoZSB0b3RhbCBpcyB0b28gd2lkZSwgdGFrZQogICAg
ICAgICAvLyB3aGF0IHdlIGhhdmUgYW5kIHNjYWxlIGl0IHRvIGZpdCBhcyBuZWNlc3NhcnkuCkBA
IC0yNzksMTIgKzI3OSwxMiBAQCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBEaXZpZGUgdGhlIHJlbWFpbmluZyB3aWR0
aCBhbW9uZyB0aGUgYXV0byBjb2x1bW5zLgotICAgICAgICBMYXlvdXRVbml0IHJlbWFpbmluZ1dp
ZHRoID0gdGFibGVMb2dpY2FsV2lkdGggLSB0b3RhbEZpeGVkV2lkdGggLSB0b3RhbFBlcmNlbnRX
aWR0aCAtIGhzcGFjaW5nICogKGF1dG9TcGFuIC0gbnVtQXV0byk7CisgICAgICAgIGludCByZW1h
aW5pbmdXaWR0aCA9IHRhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxGaXhlZFdpZHRoIC0gdG90YWxQ
ZXJjZW50V2lkdGggLSBoc3BhY2luZyAqIChhdXRvU3BhbiAtIG51bUF1dG8pOwogICAgICAgICBp
bnQgbGFzdEF1dG8gPSAwOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5FZmZDb2xzOyBp
KyspIHsKICAgICAgICAgICAgIGlmIChtX3dpZHRoW2ldLmlzQXV0bygpKSB7Ci0gICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCBzcGFuID0gbV90YWJsZS0+c3Bhbk9mRWZmQ29sKGkpOwotICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgdyA9IHJlbWFpbmluZ1dpZHRoICogc3BhbiAvIGF1dG9TcGFu
OworICAgICAgICAgICAgICAgIGludCBzcGFuID0gbV90YWJsZS0+c3Bhbk9mRWZmQ29sKGkpOwor
ICAgICAgICAgICAgICAgIGludCB3ID0gcmVtYWluaW5nV2lkdGggKiBzcGFuIC8gYXV0b1NwYW47
CiAgICAgICAgICAgICAgICAgY2FsY1dpZHRoW2ldID0gdyArIGhzcGFjaW5nICogKHNwYW4gLSAx
KTsKICAgICAgICAgICAgICAgICByZW1haW5pbmdXaWR0aCAtPSB3OwogICAgICAgICAgICAgICAg
IGlmICghcmVtYWluaW5nV2lkdGgpCkBAIC0zMDIsMTAgKzMwMiwxMCBAQCB2b2lkIEZpeGVkVGFi
bGVMYXlvdXQ6OmxheW91dCgpCiAKICAgICBpZiAodG90YWxXaWR0aCA8IHRhYmxlTG9naWNhbFdp
ZHRoKSB7CiAgICAgICAgIC8vIFNwcmVhZCBleHRyYSBzcGFjZSBvdmVyIGNvbHVtbnMuCi0gICAg
ICAgIExheW91dFVuaXQgcmVtYWluaW5nV2lkdGggPSB0YWJsZUxvZ2ljYWxXaWR0aCAtIHRvdGFs
V2lkdGg7CisgICAgICAgIGludCByZW1haW5pbmdXaWR0aCA9IHRhYmxlTG9naWNhbFdpZHRoIC0g
dG90YWxXaWR0aDsKICAgICAgICAgaW50IHRvdGFsID0gbkVmZkNvbHM7CiAgICAgICAgIHdoaWxl
ICh0b3RhbCkgewotICAgICAgICAgICAgTGF5b3V0VW5pdCB3ID0gcmVtYWluaW5nV2lkdGggLyB0
b3RhbDsKKyAgICAgICAgICAgIGludCB3ID0gcmVtYWluaW5nV2lkdGggLyB0b3RhbDsKICAgICAg
ICAgICAgIHJlbWFpbmluZ1dpZHRoIC09IHc7CiAgICAgICAgICAgICBjYWxjV2lkdGhbLS10b3Rh
bF0gKz0gdzsKICAgICAgICAgfQpAQCAtMzEzLDEyICszMTMsMTIgQEAgdm9pZCBGaXhlZFRhYmxl
TGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgY2FsY1dpZHRoW25FZmZDb2xzIC0gMV0gKz0g
cmVtYWluaW5nV2lkdGg7CiAgICAgfQogICAgIAotICAgIExheW91dFVuaXQgcG9zID0gMDsKKyAg
ICBpbnQgcG9zID0gMDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5FZmZDb2xzOyBpKyspIHsK
ICAgICAgICAgbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKClbaV0gPSBwb3M7CiAgICAgICAgIHBv
cyArPSBjYWxjV2lkdGhbaV0gKyBoc3BhY2luZzsKICAgICB9Ci0gICAgTGF5b3V0VW5pdCBjb2xQ
b3NpdGlvbnNTaXplID0gbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKCkuc2l6ZSgpOworICAgIGlu
dCBjb2xQb3NpdGlvbnNTaXplID0gbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKCkuc2l6ZSgpOwog
ICAgIGlmIChjb2xQb3NpdGlvbnNTaXplID4gMCkKICAgICAgICAgbV90YWJsZS0+Y29sdW1uUG9z
aXRpb25zKClbY29sUG9zaXRpb25zU2l6ZSAtIDFdID0gcG9zOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDk5MDA2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFJlbmRlclRhYmxlKE5vZGUqKTsKICAgICB2aXJ0
dWFsIH5SZW5kZXJUYWJsZSgpOwogCi0gICAgaW50IGdldENvbHVtblBvcyhpbnQgY29sKSBjb25z
dCB7IHJldHVybiBtX2NvbHVtblBvc1tjb2xdOyB9CisgICAgTGF5b3V0VW5pdCBnZXRDb2x1bW5Q
b3MoaW50IGNvbCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5Qb3NbY29sXTsgfQogCiAgICAgaW50
IGhCb3JkZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9oU3BhY2luZzsgfQogICAgIGludCB2
Qm9yZGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fdlNwYWNpbmc7IH0KQEAgLTE2OCw3ICsx
NjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjOwogICAgIH0KIAotICAgIGludCBib3Jk
ZXJzUGFkZGluZ0FuZFNwYWNpbmdJblJvd0RpcmVjdGlvbigpIGNvbnN0CisgICAgTGF5b3V0VW5p
dCBib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmdJblJvd0RpcmVjdGlvbigpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gYm9yZGVyU3RhcnQoKSArIGJvcmRlckVuZCgpICsKICAgICAgICAgICAg
ICAgIChjb2xsYXBzZUJvcmRlcnMoKSA/IDAgOiAocGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5k
KCkgKyAobnVtRWZmQ29scygpICsgMSkgKiBoQm9yZGVyU3BhY2luZygpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkocmV2aXNpb24gOTky
MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21w
dXRlTG9naWNhbFdpZHQKIHsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUxvZ2lj
YWxXaWR0aChpbnQgdykKK3ZvaWQgUmVuZGVyVGFibGVDZWxsOjp1cGRhdGVMb2dpY2FsV2lkdGgo
TGF5b3V0VW5pdCB3KQogewogICAgIGlmICh3ID09IGxvZ2ljYWxXaWR0aCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMTksNyArMjE5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBh
ZGRpbmdBZnRlcgogICAgIHJldHVybiByZXN1bHQgKyBpbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKTsK
IH0KIAotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnNldE92ZXJyaWRlSGVpZ2h0RnJvbVJvd0hlaWdo
dChpbnQgcm93SGVpZ2h0KQordm9pZCBSZW5kZXJUYWJsZUNlbGw6OnNldE92ZXJyaWRlSGVpZ2h0
RnJvbVJvd0hlaWdodChMYXlvdXRVbml0IHJvd0hlaWdodCkKIHsKICAgICBjbGVhckludHJpbnNp
Y1BhZGRpbmcoKTsKICAgICBSZW5kZXJCbG9jazo6c2V0T3ZlcnJpZGVIZWlnaHQobWF4PExheW91
dFVuaXQ+KDAsIHJvd0hlaWdodCAtIGJvcmRlckJlZm9yZSgpIC0gcGFkZGluZ0JlZm9yZSgpIC0g
Ym9yZGVyQWZ0ZXIoKSAtIHBhZGRpbmdBZnRlcigpKSk7CkBAIC0yODgsNyArMjg4LDcgQEAgTGF5
b3V0UmVjdCBSZW5kZXJUYWJsZUNlbGw6OmNsaXBwZWRPdmVyZgogICAgIHJldHVybiByOwogfQog
Ci12b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByLCBib29sIGZpeGVkKSBjb25z
dAordm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdCYgciwgYm9vbCBmaXhlZCkg
Y29uc3QKIHsKICAgICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0aGlzKQogICAgICAgICByZXR1
cm47CkBAIC0yOTksMTIgKzI5OSwxMiBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZVJl
Y3RGb3JSZXBhCiAgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50
Q29udGFpbmVyLCByLCBmaXhlZCk7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OmNlbGxCYXNl
bGluZVBvc2l0aW9uKCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyVGFibGVDZWxsOjpjZWxsQmFz
ZWxpbmVQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MDcvQ1ItQ1NTMjEtMjAwNzA3MTkvdGFibGVzLmh0bWwjaGVpZ2h0LWxheW91dD46IFRoZSBiYXNl
bGluZSBvZiBhIGNlbGwgaXMgdGhlIGJhc2VsaW5lIG9mCiAgICAgLy8gdGhlIGZpcnN0IGluLWZs
b3cgbGluZSBib3ggaW4gdGhlIGNlbGwsIG9yIHRoZSBmaXJzdCBpbi1mbG93IHRhYmxlLXJvdyBp
biB0aGUgY2VsbCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiBJZiB0aGVyZQogICAgIC8vIGlzIG5v
IHN1Y2ggbGluZSBib3ggb3IgdGFibGUtcm93LCB0aGUgYmFzZWxpbmUgaXMgdGhlIGJvdHRvbSBv
ZiBjb250ZW50IGVkZ2Ugb2YgdGhlIGNlbGwgYm94LgotICAgIGludCBmaXJzdExpbmVCYXNlbGlu
ZSA9IGZpcnN0TGluZUJveEJhc2VsaW5lKCk7CisgICAgTGF5b3V0VW5pdCBmaXJzdExpbmVCYXNl
bGluZSA9IGZpcnN0TGluZUJveEJhc2VsaW5lKCk7CiAgICAgaWYgKGZpcnN0TGluZUJhc2VsaW5l
ICE9IC0xKQogICAgICAgICByZXR1cm4gZmlyc3RMaW5lQmFzZWxpbmU7CiAgICAgcmV0dXJuIHBh
ZGRpbmdCZWZvcmUoKSArIGJvcmRlckJlZm9yZSgpICsgY29udGVudExvZ2ljYWxIZWlnaHQoKTsK
QEAgLTEwMzYsNyArMTAzNiw3IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludE1hc2soUGFp
bnRJbmYKIAogdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnNjcm9sbGJhcnNDaGFuZ2VkKGJvb2wgaG9y
aXpvbnRhbFNjcm9sbGJhckNoYW5nZWQsIGJvb2wgdmVydGljYWxTY3JvbGxiYXJDaGFuZ2VkKQog
ewotICAgIGludCBzY3JvbGxiYXJIZWlnaHQgPSBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7Cisg
ICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJIZWlnaHQgPSBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7
CiAgICAgaWYgKCFzY3JvbGxiYXJIZWlnaHQpCiAgICAgICAgIHJldHVybjsgLy8gTm90IHN1cmUg
aWYgd2Ugc2hvdWxkIGJlIGRvaW5nIHNvbWV0aGluZyB3aGVuIGEgc2Nyb2xsYmFyIGdvZXMgYXdh
eSBvciBub3QuCiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5oCShyZXZpc2lvbiA5OTIyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIAot
ICAgIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoKGludCk7CisgICAgdm9pZCB1cGRhdGVMb2dpY2Fs
V2lkdGgoTGF5b3V0VW5pdCk7CiAKICAgICB2aXJ0dWFsIExheW91dFVuaXQgYm9yZGVyTGVmdCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBib3JkZXJSaWdodCgpIGNvbnN0OwpAQCAt
MTI0LDcgKzEyNCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kc0JlaGlu
ZENlbGwoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBSZW5kZXJPYmplY3QqIGJhY2tn
cm91bmRPYmplY3QpOwogCi0gICAgaW50IGNlbGxCYXNlbGluZVBvc2l0aW9uKCkgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBjZWxsQmFzZWxpbmVQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRJbnRyaW5zaWNQYWRkaW5nQmVmb3JlKGludCBwKSB7IG1faW50cmluc2ljUGFkZGluZ0JlZm9y
ZSA9IHA7IH0KICAgICB2b2lkIHNldEludHJpbnNpY1BhZGRpbmdBZnRlcihpbnQgcCkgeyBtX2lu
dHJpbnNpY1BhZGRpbmdBZnRlciA9IHA7IH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZGRpbmdCZWZvcmUoYm9vbCBpbmNsdWRlSW50cmluc2lj
UGFkZGluZyA9IHRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nQWZ0
ZXIoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0OwogCi0gICAgdm9p
ZCBzZXRPdmVycmlkZUhlaWdodEZyb21Sb3dIZWlnaHQoaW50KTsKKyAgICB2b2lkIHNldE92ZXJy
aWRlSGVpZ2h0RnJvbVJvd0hlaWdodChMYXlvdXRVbml0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxiYXJzQ2hhbmdlZChib29sIGhvcml6b250YWxTY3JvbGxiYXJDaGFuZ2VkLCBib29sIHZl
cnRpY2FsU2Nyb2xsYmFyQ2hhbmdlZCk7CiAKQEAgLTE2OSw3ICsxNjksNyBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCBMYXlvdXRTaXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0
KiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xp
cHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZp
eGVkID0gZmFsc2UpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3QmLCBi
b29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwogCiAgICAgdm9pZCBwYWludENvbGxhcHNlZEJvcmRl
cihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiA5
OTIyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yODksMTUgKzI4OSwxNSBAQCB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6c2V0Q2VsbExvZ2ljYWxXCiAgICAgICAgICAgICAgICAgY3NwYW4gLT0gdGFibGUoKS0+
Y29sdW1ucygpW2VuZENvbF0uc3BhbjsKICAgICAgICAgICAgICAgICBlbmRDb2wrKzsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGludCB3ID0gY29sdW1uUG9zW2VuZENvbF0gLSBjb2x1bW5Q
b3Nbal0gLSB0YWJsZSgpLT5oQm9yZGVyU3BhY2luZygpOwotICAgICAgICAgICAgaW50IG9sZExv
Z2ljYWxXaWR0aCA9IGNlbGwtPmxvZ2ljYWxXaWR0aCgpOworICAgICAgICAgICAgTGF5b3V0VW5p
dCB3ID0gY29sdW1uUG9zW2VuZENvbF0gLSBjb2x1bW5Qb3Nbal0gLSB0YWJsZSgpLT5oQm9yZGVy
U3BhY2luZygpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsV2lkdGggPSBjZWxs
LT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgIGlmICh3ICE9IG9sZExvZ2ljYWxXaWR0aCkg
ewogICAgICAgICAgICAgICAgIGNlbGwtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogICAgICAgICAg
ICAgICAgIGlmICghdGFibGUoKS0+c2VsZk5lZWRzTGF5b3V0KCkgJiYgY2VsbC0+Y2hlY2tGb3JS
ZXBhaW50RHVyaW5nTGF5b3V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZVB1
c2hlci5kaWRQdXNoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlY2huaWNhbGx5
LCB3ZSBzaG91bGQgYWxzbyBwdXNoIHN0YXRlIGZvciB0aGUgcm93LCBidXQgc2luY2UKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHJvd3MgZG9uJ3QgcHVzaCBhIGNvb3JkaW5hdGUgdHJhbnNm
b3JtLCB0aGF0J3Mgbm90IG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
UHVzaGVyLnB1c2godGhpcywgSW50U2l6ZSh4KCksIHkoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVQdXNoZXIucHVzaCh0aGlzLCBMYXlvdXRTaXplKHgoKSwgeSgpKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2VsbC0+cmVwYWludCgpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTQ2MywxMCArNDYzLDEwIEBAIExheW91dFVuaXQgUmVuZGVy
VGFibGVTZWN0aW9uOjpsYXlvdXRSb3cKICAgICAgICAgICAgIC8vIHRyeSB0byBzYXRpc2Z5IHBl
cmNlbnQKICAgICAgICAgICAgIExheW91dFVuaXQgYWRkID0gMDsKICAgICAgICAgICAgIHRvdGFs
UGVyY2VudCA9IG1pbih0b3RhbFBlcmNlbnQsIDEwMCk7Ci0gICAgICAgICAgICBpbnQgcmggPSBt
X3Jvd1Bvc1sxXSAtIG1fcm93UG9zWzBdOworICAgICAgICAgICAgTGF5b3V0VW5pdCByaCA9IG1f
cm93UG9zWzFdIC0gbV9yb3dQb3NbMF07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAw
OyByIDwgdG90YWxSb3dzOyByKyspIHsKICAgICAgICAgICAgICAgICBpZiAodG90YWxQZXJjZW50
ID4gMCAmJiBtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5pc1BlcmNlbnQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IHRvQWRkID0gbWluKGRoLCBzdGF0aWNfY2FzdDxMYXlvdXRV
bml0PigodG90YWxIZWlnaHQgKiBtX2dyaWRbcl0ubG9naWNhbEhlaWdodC5wZXJjZW50KCkgLyAx
MDApIC0gcmgpKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b0FkZCA9IG1pbjxM
YXlvdXRVbml0PihkaCwgKHRvdGFsSGVpZ2h0ICogbV9ncmlkW3JdLmxvZ2ljYWxIZWlnaHQucGVy
Y2VudCgpIC8gMTAwKSAtIHJoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdG9BZGQgaXMg
bmVnYXRpdmUsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBzaHJpbmsgdGhlIHJvdyAodGhpcyBidWcK
ICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgT3V0bG9vayBXZWIgQWNjZXNzKS4KICAg
ICAgICAgICAgICAgICAgICAgdG9BZGQgPSBtYXg8TGF5b3V0VW5pdD4oMCwgdG9BZGQpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>