<?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>210369</bug_id>
          
          <creation_ts>2020-04-10 19:43:08 -0700</creation_ts>
          <short_desc>Move more from live range to SimpleRange: callers of absoluteTextRects</short_desc>
          <delta_ts>2020-04-11 12:37:16 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1640469</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-10 19:43:08 -0700</bug_when>
    <thetext>Move more from live range to SimpleRange: callers of absoluteTextRects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640548</commentid>
    <comment_count>1</comment_count>
      <attachid>396164</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 08:39:35 -0700</bug_when>
    <thetext>Created attachment 396164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640551</commentid>
    <comment_count>2</comment_count>
      <attachid>396164</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2020-04-11 08:48:52 -0700</bug_when>
    <thetext>Comment on attachment 396164
Patch

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

&gt; Source/WebCore/dom/Range.cpp:-1183
&gt; -void Range::absoluteTextRects(Vector&lt;IntRect&gt;&amp; rects, bool useSelectionHeight, RangeInFixedPosition* inFixed, OptionSet&lt;BoundingRectBehavior&gt; rectOptions) const

I would change this to return the rects instead of using an out parameter.

&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:463
&gt; +        return { { { *innerText, 0 }, { *innerText, 0 } } };

Maybe specify SimpleRange here to cut down on some of the curly braces.

&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:488
&gt; +    return { { { *startNode, start }, { *endNode, end } } };

Maybe specify SimpleRange here to cut down on some of the curly braces.

&gt; Source/WebCore/rendering/RenderObject.cpp:1904
&gt; +        else if (is&lt;RenderText&gt;(renderer)) {

I assume is&lt;RenderText&gt; will return false here if renderer is null?

&gt; Source/WebKitLegacy/mac/WebView/WebFrame.mm:1114
&gt; +    return range ? [range textRects] : @[];

range.textRects?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640556</commentid>
    <comment_count>3</comment_count>
      <attachid>396164</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 10:01:26 -0700</bug_when>
    <thetext>Comment on attachment 396164
Patch

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

Looks like build failures are because WebFrame.mm needs to include DOM.h.

&gt;&gt; Source/WebCore/dom/Range.cpp:-1183
&gt;&gt; -void Range::absoluteTextRects(Vector&lt;IntRect&gt;&amp; rects, bool useSelectionHeight, RangeInFixedPosition* inFixed, OptionSet&lt;BoundingRectBehavior&gt; rectOptions) const
&gt; 
&gt; I would change this to return the rects instead of using an out parameter.

Yes, agreed. I would do that if I was planning to keep this. But I am planning to delete it. I only removed the argument as a prelude to removing the entire function soon.

&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:463
&gt;&gt; +        return { { { *innerText, 0 }, { *innerText, 0 } } };
&gt; 
&gt; Maybe specify SimpleRange here to cut down on some of the curly braces.

I’d be willing to do that. Not sure it’s better. If you are sure, I will do it. It allows me to remove the outer set.

&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:488
&gt;&gt; +    return { { { *startNode, start }, { *endNode, end } } };
&gt; 
&gt; Maybe specify SimpleRange here to cut down on some of the curly braces.

Ditto.

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:1904
&gt;&gt; +        else if (is&lt;RenderText&gt;(renderer)) {
&gt; 
&gt; I assume is&lt;RenderText&gt; will return false here if renderer is null?

Yes.

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebFrame.mm:1114
&gt;&gt; +    return range ? [range textRects] : @[];
&gt; 
&gt; range.textRects?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640566</commentid>
    <comment_count>4</comment_count>
      <attachid>396174</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 10:44:38 -0700</bug_when>
    <thetext>Created attachment 396174
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640567</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 10:44:54 -0700</bug_when>
    <thetext>Anders, you didn’t set review+. Did you mean to?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640587</commentid>
    <comment_count>6</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2020-04-11 12:12:23 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Anders, you didn’t set review+. Did you mean to?

I wanted to wait until everything was green!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640589</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 12:36:50 -0700</bug_when>
    <thetext>Committed r259933: &lt;https://trac.webkit.org/changeset/259933&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640590</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-11 12:37:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/61644860&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396164</attachid>
            <date>2020-04-11 08:39:35 -0700</date>
            <delta_ts>2020-04-11 10:44:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210369-20200411083933.patch</filename>
            <type>text/plain</type>
            <size>37453</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWE2MDFlMjY2YTkxZTYx
ODdjODIxZDI1MjQ3NWQzMzg0YjIyNzE5OC4uMGNiYTAyNDdlMWIwYTc0MTc0ZjYzMGJkM2JlZGI5
Y2I1MGY5MmU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA0LTEwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIG1vcmUgZnJvbSBsaXZl
IHJhbmdlIHRvIFNpbXBsZVJhbmdlOiBjYWxsZXJzIG9mIGFic29sdXRlVGV4dFJlY3RzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAzNjkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9Ob2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnRleHRSZWN0cyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogZG9tL05vZGUuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICog
ZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZUJvdW5kaW5n
Qm94IGNvbnN0KTogVXBkYXRlZCBzaW5jZSBhYnNvbHV0ZVRleHRSZWN0cworICAgICAgICBubyBs
b25nZXIgaGFzIGEgUmFuZ2VJbkZpeGVkUG9zaXRpb24qIGFyZ3VtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzIGNvbnN0KTogUmVtb3ZlZCB0aGUgdW51c2Vk
IFJhbmdlSW5GaXhlZFBvc2l0aW9uKgorICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgKiBkb20v
UmFuZ2UuaDogR290IHJpZCBvZiB1bnVzZWQgUmFuZ2VJbkZpeGVkUG9zaXRpb24gdHlwZSBhbmQg
YWxzbyByZW1vdmVkCisgICAgICAgIFJhbmdlSW5GaXhlZFBvc2l0aW9uKiBhcmd1bWVudCBmcm9t
IHRoZSBhYnNvbHV0ZVRleHRSZWN0cyBmdW5jdGlvbi4gTGF0ZXIgd2lsbAorICAgICAgICByZW1v
dmUgYWJzb2x1dGVUZXh0UmVjdHMgZW50aXJlbHkuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlIGNvbnN0
KTogVXNlIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMKKyAgICAgICAgYW5kIHVuaXRl
ZEJvdW5kaW5nQm94ZXMgcmF0aGVyIHRoYW4gdXNpbmcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdEZvclJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0
ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVu
dEluUmFuZ2UpOiBVc2UgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4KKyAgICAgICAgbGl2ZSByYW5n
ZXMuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKTogTW92ZWQgZnJv
bSBpbnQgdG8gdW5zaWduZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6c2VsZWN0aW9uIGNvbnN0KTogUmV0dXJuIE9wdGlvbmFsPFNpbXBsZVJhbmdlPgor
ICAgICAgICByYXRoZXIgdGhhbiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3ZlLgorCisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRp
YWxpemVJbmRpY2F0b3IpOiBVcGRhdGVkIHNpbmNlIGFic29sdXRlVGV4dFJlY3RzIG5vIGxvbmdl
ciB0YWtlcworICAgICAgICBhIFJhbmdlSW5GaXhlZFBvc2l0aW9uKiBhcmd1bWVudC4KKworICAg
ICAgICAqIHJlbmRlcmluZy9IaWdobGlnaHREYXRhLmg6IFJlbW92ZWQgc3RyYXkgb2Jzb2xldGUg
ZGVjbGFyYXRpb24uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RGb3JS
YW5nZSk6IERlbGV0ZWQuIENhbGxlcnMgY2FuCisgICAgICAgIHVzZSBhYnNvbHV0ZVRleHRRdWFk
cyBkaXJlY3RseS4gV2UgbmVlZCB0byBjdXQgZG93biBvbiB0aGUgbnVtYmVyIG9mIHNlcGFyYXRl
CisgICAgICAgIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgcmVhbGx5IHNlcGFyYXRlIGNvbmNlcHRz
LCBhbmQgdGhpcyB3YXMgdXNlZCBpbiBvbmx5IG9uZSBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMpOiBBZGRlZC4gUmVwbGFjZXMgUmFuZ2U6
OmFic29sdXRlVGV4dFJlY3RzCisgICAgICAgIGZvciBhbGwgY2FsbGVycyBvdXRzaWRlIHRoZSBs
aXZlIHJhbmdlIGNsYXNzIGFuZCB3aWxsIGV2ZW50dWFsbHkgcmVwbGFjZSBpdCBlbnRpcmVseS4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92
ZS4KKwogMjAyMC0wNC0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgVXNlIE5vZGU6Omxlbmd0aCB0byByZXBsYWNlIE5vZGU6Om1heENoYXJhY3Rlck9mZnNldCBh
bmQgbGFzdE9mZnNldEluTm9kZTsgc3dpdGNoIG1vcmUgb2Zmc2V0cyBmcm9tIGludCB0byB1bnNp
Z25lZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCBhYjAzMjE1NzEwMWYyMWE4MTc4MzMzNTQxZThlZDg3Yzc5ODIzOTdk
Li45NmMzODM2N2Q2ODA5NDkyY2IxMmRlY2U4NDQwMzc2ODI0OWVmNTQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI0IEBACisyMDIwLTA0LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIG1vcmUgZnJvbSBsaXZlIHJhbmdlIHRvIFNpbXBsZVJhbmdlOiBjYWxs
ZXJzIG9mIGFic29sdXRlVGV4dFJlY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTAzNjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TU5vZGUubW06CisgICAgICAgICgtW1dLRE9NTm9kZSB0ZXh0UmVjdHNdKTogTW92ZWQgaW1wbGVt
ZW50YXRpb24gaGVyZS4gVGhlcmUncyBubyByZWFzb24gZm9yIE5vZGUKKyAgICAgICAgdG8gaGF2
ZSBhIHRleHRSZWN0cyBmdW5jdGlvbiwgc2luY2UgaXQncyBhIGxheW91dC9yZW5kZXJpbmcgb3Bl
cmF0aW9uIGFuZCBhCisgICAgICAgIHNpbmdsZSBub2RlIGlzIGFsc28gYW4gdW51c3VhbCBzcGVj
aWFsIGNhc2UsIGJ1dCBmb3Igbm93IGF0IGxlYXN0IHdlIHdpbGwga2VlcAorICAgICAgICB0aGlz
IGxlZ2FjeSBtZXRob2QuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLRE9NUmFuZ2UubW06CisgICAgICAgICgtW1dLRE9NUmFuZ2UgdGV4dFJlY3RzXSk6IENo
YW5nZWQgdG8gY2FsbCBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzCisgICAgICAgIGlu
c3RlYWQgb2YgUmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRy
b2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVyUGFnZVNjcm9sbCk6IFVzZQorICAgICAgICBSZW5kZXJP
YmplY3Q6OmFic29sdXRlVGV4dFJlY3RzIGluc3RlYWQgb2YgUmFuZ2U6OmFic29sdXRlUmVjdFJl
Y3RzLgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01hdGNoZXMp
OiBEaXR0by4KKwogMjAyMC0wNC0xMCAgUGFibG8gU2FhdmVkcmEgIDxwc2FhdmVkcmFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIFJlcGxhY2UgZm9wZW4vZmNsb3NlIGJ5IGZvcGVu
L2ZzZWVrIGZ1bmN0aW9ucyBpbiBNZW1vcnlQcmVzc3VyZU1vbml0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9z
L0NoYW5nZUxvZwppbmRleCBmYTIxYjk2ZDIzM2NhZTgyOWRmOGE4ZDI1MGZhNzczZTcwZTA5MDI5
Li4wYTQ5NDdkM2MzMzI3MzkzMjk3YzI4MDM0NzQ4ODA2ODE5M2U0MmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDQtMTAgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgbW9yZSBmcm9tIGxpdmUgcmFuZ2Ug
dG8gU2ltcGxlUmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM2OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVJT1MubW06CisgICAgICAgICgtW1dlYkZyYW1lIGNsb3Nlc3RDYXJldFJlY3RJbk1hcmtl
ZFRleHRSYW5nZUZvclBvaW50Ol0pOiBVc2UKKyAgICAgICAgUmVuZGVyT2JqZWN0OjphYnNvbHV0
ZVRleHRSZWN0cyBpbnN0ZWFkIG9mIFJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cy4KKyAgICAgICAg
QWxzbyBhZGRlZCBzb21lIG1pc3NpbmcgbnVsbCBjaGVja3MgYW5kIHJlb3JnYW5pemVkIHRoZSBm
dW5jdGlvbiBhCisgICAgICAgIGJpdCB0byBtYWtlIGl0IG1vcmUgZGlyZWN0IGFuZCBzbGlnaHRs
eSBjbGVhZXJlci4KKwogMjAyMC0wNC0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW0NvY29hXSBTaW1wbGlmeSBOU0FycmF5LCBOU0RpY3Rpb25hcnksIGFuZCBO
U051bWJlciBpZGlvbXMgdGhyb3VnaG91dCBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwppbmRleCA3NGRlZDk2Njg3Yzk2NDliMmMxYTU0ODM5MWQ0MWNjZGIzMTAzMTVlLi4xODM2NzJh
NzBmMmFjZjk5M2MyMzI3MTYwMjRhODE3MGQ4YzJkZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjAtMDQtMTAgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgbW9yZSBmcm9tIGxpdmUgcmFuZ2UgdG8gU2ltcGxl
UmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM2OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTS5tbToKKyAgICAgICAgKC1bRE9N
Tm9kZSB0ZXh0UmVjdHNdKTogTW92ZWQgaW1wbGVtZW50YXRpb24gaGVyZS4gVGhlcmUncyBubyBy
ZWFzb24gZm9yIE5vZGUKKyAgICAgICAgdG8gaGF2ZSBhIHRleHRSZWN0cyBmdW5jdGlvbiwgc2lu
Y2UgaXQncyBhIGxheW91dC9yZW5kZXJpbmcgb3BlcmF0aW9uIGFuZCBhCisgICAgICAgIHNpbmds
ZSBub2RlIGlzIGFsc28gYW4gdW51c3VhbCBzcGVjaWFsIGNhc2UsIGJ1dCBmb3Igbm93IHdlIHdp
bGwga2VlcCB0aGlzCisgICAgICAgIGxlZ2FjeSBtZXRob2QgZm9yIGNvbXBhdGliaWxpdHkgd2l0
aCBvbGQgY2xpZW50cy4KKyAgICAgICAgKC1bRE9NUmFuZ2UgdGV4dFJlY3RzXSk6IENoYW5nZWQg
dG8gY2FsbCBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzCisgICAgICAgIGluc3RlYWQg
b2YgUmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFt
ZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3JlY3RzRm9yUmFuZ2U6XSk6IENoYW5nZWQgdG8g
Y2FsbCAtW0RPTVJhbmdlIHRleHRSZWN0c10gaW5zdGVhZAorICAgICAgICBvZiBSYW5nZTo6YWJz
b2x1dGVUZXh0UmVjdHMuIERvbid0IHJlYWxseSBuZWVkIHR3byBpZGVudGljYWwgbWV0aG9kcyBi
dXQKKyAgICAgICAgcHJvYmFibHkgbmVlZCB0byBrZWVwIHRoaXMgYXJvdW5kIGZvciBjb21wYXRp
YmxpdGl5LgorCiAyMDIwLTA0LTA4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbQ29jb2FdIFNpbXBsaWZ5IE5TQXJyYXksIE5TRGljdGlvbmFyeSwgYW5kIE5TTnVt
YmVyIGlkaW9tcyB0aHJvdWdob3V0IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDI3M2E1Mzk4
ODgyYmJiMWFhYjRjMWYxY2VjOGJjODJjZmI4ZDE1NWIuLjhlNThkMGVkZDg2ZjJhYjkyNjZiNTcw
ZGYxNzlmMWNlMTRkZDQwOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTI1NTQsMTMgKzI1NTQsNiBA
QCB2b2lkIE5vZGU6OnJlbW92ZWRMYXN0UmVmKCkKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9p
ZCBOb2RlOjp0ZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cykgY29uc3QKLXsKLSAgICBh
dXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICByYW5nZS0+c2VsZWN0
Tm9kZUNvbnRlbnRzKGNvbnN0X2Nhc3Q8Tm9kZSY+KCp0aGlzKSk7Ci0gICAgcmFuZ2UtPmFic29s
dXRlVGV4dFJlY3RzKHJlY3RzKTsKLX0KLQogdW5zaWduZWQgTm9kZTo6Y29ubmVjdGVkU3ViZnJh
bWVDb3VudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgp
LT5jb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgOiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggMTgyMmFmNzM2
NDczOTc2OWIzNzFlMTljMzUxNTg5MzJkZjc5NGZlOS4uZTJiMzA2MTcyNjJhNDI1MDlhMjFiZmRk
NzRhNTM3NDhjYWRjZDY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC00OTMsOCArNDkzLDYgQEAgcHVibGlj
OgogICAgIHZvaWQgdW5yZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbiYpOwogICAgIHZvaWQgbm90aWZ5TXV0YXRpb25PYnNlcnZlcnNO
b2RlV2lsbERldGFjaCgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0ZXh0UmVjdHMoVmVj
dG9yPEludFJlY3Q+JikgY29uc3Q7Ci0KICAgICB1bnNpZ25lZCBjb25uZWN0ZWRTdWJmcmFtZUNv
dW50KCkgY29uc3Q7CiAgICAgdm9pZCBpbmNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KHVu
c2lnbmVkIGFtb3VudCA9IDEpOwogICAgIHZvaWQgZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVD
b3VudCh1bnNpZ25lZCBhbW91bnQgPSAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDBmYzMyNmMy
OWM0YzFmNDViZTE4N2Y5MDIyNGY4YzM0MjhiYmZhMTYuLjY0YThhYTgyNjdkZDI1NDE3YTY1YTAz
YmViMGYxNjI1OTBlMDcxMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTE0NSwxMSArMTE0NSw5
IEBAIE5vZGUqIFJhbmdlOjpwYXN0TGFzdE5vZGUoKSBjb25zdAogCiBJbnRSZWN0IFJhbmdlOjph
YnNvbHV0ZUJvdW5kaW5nQm94KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9w
dGlvbnMpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCByZXN1bHQ7CiAgICAgVmVjdG9yPEludFJlY3Q+
IHJlY3RzOwotICAgIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2U7Ci0gICAgUmFuZ2VJ
bkZpeGVkUG9zaXRpb24qIGluRml4ZWQgPSBudWxscHRyOwotICAgIGFic29sdXRlVGV4dFJlY3Rz
KHJlY3RzLCB1c2VTZWxlY3Rpb25IZWlnaHQsIGluRml4ZWQsIHJlY3RPcHRpb25zKTsKKyAgICBh
YnNvbHV0ZVRleHRSZWN0cyhyZWN0cywgZmFsc2UsIHJlY3RPcHRpb25zKTsKKyAgICBJbnRSZWN0
IHJlc3VsdDsKICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgcmVzdWx0LnVu
aXRlKHJlY3QpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMTgwLDcgKzExNzgsNyBAQCBWZWN0
b3I8RmxvYXRSZWN0PiBSYW5nZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KE5vZGUqIG5v
ZGUsIFJlbmRlclRleHQmIHJlbgogICAgIHJldHVybiBib3VuZGluZ0JveGVzKHRleHRRdWFkcyk7
CiB9CiAKLXZvaWQgUmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0LCBSYW5nZUluRml4ZWRQb3NpdGlvbiogaW5GaXhl
ZCwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9ucykgY29uc3QKK3Zv
aWQgUmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGJvb2wg
dXNlU2VsZWN0aW9uSGVpZ2h0LCBPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVoYXZpb3I+IHJlY3RP
cHRpb25zKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBwcm9i
YWJseSByZXR1cm4gRmxvYXRSZWN0cy4KIApAQCAtMTIwNCw5ICsxMjAyLDYgQEAgdm9pZCBSYW5n
ZTo6YWJzb2x1dGVUZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgYm9vbCB1c2VTZWxl
Y3Rpb25IZWlnaHQsIFIKICAgICAgICAgYWxsRml4ZWQgJj0gaXNGaXhlZDsKICAgICAgICAgc29t
ZUZpeGVkIHw9IGlzRml4ZWQ7CiAgICAgfQotCi0gICAgaWYgKGluRml4ZWQpCi0gICAgICAgICpp
bkZpeGVkID0gYWxsRml4ZWQgPyBFbnRpcmVseUZpeGVkUG9zaXRpb24gOiAoc29tZUZpeGVkID8g
UGFydGlhbGx5Rml4ZWRQb3NpdGlvbiA6IE5vdEZpeGVkUG9zaXRpb24pOwogfQogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggMDJjYTEzMDg0Yzk4MGQxMDgwYWFm
MjA5NDA5YTBmZWFkODk0MjFmYy4uODJjMzI2NTM1OTYzYWE2ZmQ4ZWQ3NWU2M2NkODIyYzM3MmYx
MjNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAgLTEwNywxMiArMTA3LDYgQEAgcHVibGljOgogCiAgICAg
U2hhZG93Um9vdCogc2hhZG93Um9vdCgpIGNvbnN0OwogCi0gICAgZW51bSBSYW5nZUluRml4ZWRQ
b3NpdGlvbiB7Ci0gICAgICAgIE5vdEZpeGVkUG9zaXRpb24sCi0gICAgICAgIFBhcnRpYWxseUZp
eGVkUG9zaXRpb24sCi0gICAgICAgIEVudGlyZWx5Rml4ZWRQb3NpdGlvbgotICAgIH07Ci0gICAg
CiAgICAgZW51bSBjbGFzcyBCb3VuZGluZ1JlY3RCZWhhdmlvciA6IHVpbnQ4X3QgewogICAgICAg
ICBSZXNwZWN0Q2xpcHBpbmcgPSAxIDw8IDAsCiAgICAgICAgIFVzZVZpc2libGVCb3VuZHMgPSAx
IDw8IDEsCkBAIC0xMjEsNyArMTE1LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICAvLyBOb3Qg
dHJhbnNmb3JtLWZyaWVuZGx5Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhYnNvbHV0ZVRleHRS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlLCBS
YW5nZUluRml4ZWRQb3NpdGlvbiogPSBudWxscHRyLCBPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVo
YXZpb3I+ID0geyB9KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFic29sdXRlVGV4
dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2Us
IE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gPSB7IH0pIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIEludFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveChPcHRpb25TZXQ8Qm91bmRpbmdS
ZWN0QmVoYXZpb3I+ID0geyB9KSBjb25zdDsKIAogICAgIC8vIFRyYW5zZm9ybS1mcmllbmRseQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDg0YjM2ZTA3NTI3NTJiNzMxNzAxNWYxYTI5
NGY0ZGU4Nzc4MGI1MjcuLjExNDM5MzFiOGIyNGJmNjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTMzNjUsNiArMzM2NSw4IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBjb2xsYXBzZUNhcmV0V2lkdGgoSW50UmVjdCYgcmVjdCkKIAogSW50UmVj
dCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKIHsKKyAgICBy
YW5nZS0+b3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworCiAgICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJF
QU0pOwogCiAgICAgaWYgKHJhbmdlLT5jb2xsYXBzZWQoKSkgewpAQCAtMzM3OCw3ICszMzgwLDcg
QEAgSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QK
ICAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5lbmRQb3NpdGlv
bigpLCBVUFNUUkVBTSk7CiAKICAgICBpZiAoaW5TYW1lTGluZShzdGFydFZpc2libGVQb3NpdGlv
biwgZW5kVmlzaWJsZVBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEZvclJhbmdlKHJhbmdlKSk7Cisg
ICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UpKSk7CiAKICAgICBMYXlvdXRVbml0IGV4
dHJhV2lkdGhUb0VuZE9mTGluZTsKICAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gUmVuZGVy
ZWRQb3NpdGlvbihzdGFydFZpc2libGVQb3NpdGlvbikuYWJzb2x1dGVSZWN0KCZleHRyYVdpZHRo
VG9FbmRPZkxpbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCmluZGV4IGNkMzA3MzdiZmFhZDQ2YjI0NDQxYjk5ODQ0M2M1ZjgzYjQyMmI3ZmEuLjQz
OWMwMzNjZTIyYTM4NTE3ZmNiNzViNzAwNmI1NmY2M2Y3NmYyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTQ5MCw3ICs0OTAsNyBAQCBO
U0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiBjb250ZXh0UmFuZ2UsIERhdGFEZQogICAgICAgICBjdXJyZW50VG9wTGV2ZWxJbmRleCsrOwog
ICAgIH0KIAotICAgIFZlY3RvcjxWZWN0b3I8UmVmUHRyPFJhbmdlPj4+IGFsbFJlc3VsdFJhbmdl
czsKKyAgICBWZWN0b3I8VmVjdG9yPFNpbXBsZVJhbmdlPj4gYWxsUmVzdWx0UmFuZ2VzOwogICAg
IFRleHRJdGVyYXRvciBpdGVyYXRvcigqY29udGV4dFJhbmdlKTsKICAgICBDRkluZGV4IGl0ZXJh
dG9yQ291bnQgPSAwOwogCkBAIC01MDMsMTkgKzUwMywxNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0
aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERh
dGFEZQogICAgICAgICBmb3IgKDsgaXRlcmF0b3JDb3VudCA8IGl0ZXJhdG9yVGFyZ2V0QWR2YW5j
ZUNvdW50OyArK2l0ZXJhdG9yQ291bnQpCiAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7
CiAKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IGZyYWdtZW50UmFuZ2VzOwotICAgICAg
ICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShpdGVyYXRvci5y
YW5nZSgpKTsKKyAgICAgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiBmcmFnbWVudFJhbmdlczsKICAg
ICAgICAgQ0ZJbmRleCBmcmFnbWVudEluZGV4ID0gcXVlcnlSYW5nZS5zdGFydC5xdWVyeUluZGV4
OwogICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCA9PSBxdWVyeVJhbmdlLmVuZC5xdWVyeUluZGV4
KSB7CiAgICAgICAgICAgICBDaGFyYWN0ZXJSYW5nZSBmcmFnbWVudFJhbmdlOwogICAgICAgICAg
ICAgZnJhZ21lbnRSYW5nZS5sb2NhdGlvbiA9IHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0OwogICAg
ICAgICAgICAgZnJhZ21lbnRSYW5nZS5sZW5ndGggPSBxdWVyeVJhbmdlLmVuZC5vZmZzZXQgLSBx
dWVyeVJhbmdlLnN0YXJ0Lm9mZnNldDsKLSAgICAgICAgICAgIGZyYWdtZW50UmFuZ2VzLmFwcGVu
ZChjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpjdXJyZW50UmFuZ2UsIGZy
YWdtZW50UmFuZ2UpKSk7CisgICAgICAgICAgICBmcmFnbWVudFJhbmdlcy5hcHBlbmQocmVzb2x2
ZUNoYXJhY3RlclJhbmdlKGl0ZXJhdG9yLnJhbmdlKCksIGZyYWdtZW50UmFuZ2UpKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghcXVlcnlSYW5nZS5zdGFydC5vZmZzZXQpCi0g
ICAgICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMuYXBwZW5kKGN1cnJlbnRSYW5nZSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMuYXBwZW5kKFJhbmdl
OjpjcmVhdGUoY3VycmVudFJhbmdlLT5vd25lckRvY3VtZW50KCksICZjdXJyZW50UmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCksIGN1cnJlbnRSYW5nZS0+c3RhcnRPZmZzZXQoKSArIHF1ZXJ5UmFuZ2Uu
c3RhcnQub2Zmc2V0LCAmY3VycmVudFJhbmdlLT5lbmRDb250YWluZXIoKSwgY3VycmVudFJhbmdl
LT5lbmRPZmZzZXQoKSkpOworICAgICAgICAgICAgYXV0byByYW5nZSA9IGl0ZXJhdG9yLnJhbmdl
KCk7CisgICAgICAgICAgICByYW5nZS5zdGFydC5vZmZzZXQgKz0gcXVlcnlSYW5nZS5zdGFydC5v
ZmZzZXQ7CisgICAgICAgICAgICBmcmFnbWVudFJhbmdlcy5hcHBlbmQocmFuZ2UpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICB3aGlsZSAoZnJhZ21lbnRJbmRleCA8IHF1ZXJ5UmFuZ2Uu
ZW5kLnF1ZXJ5SW5kZXgpIHsKQEAgLTUyNCwxOCArNTIyLDE4IEBAIE5TQXJyYXkgKkRhdGFEZXRl
Y3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwg
RGF0YURlCiAgICAgICAgICAgICBmb3IgKDsgaXRlcmF0b3JDb3VudCA8IGl0ZXJhdG9yVGFyZ2V0
QWR2YW5jZUNvdW50OyArK2l0ZXJhdG9yQ291bnQpCiAgICAgICAgICAgICAgICAgaXRlcmF0b3Iu
YWR2YW5jZSgpOwogCi0gICAgICAgICAgICBjdXJyZW50UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uo
aXRlcmF0b3IucmFuZ2UoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGZyYWdtZW50UmFu
Z2UgPSAoZnJhZ21lbnRJbmRleCA9PSBxdWVyeVJhbmdlLmVuZC5xdWVyeUluZGV4KSA/ICBSYW5n
ZTo6Y3JlYXRlKGN1cnJlbnRSYW5nZS0+b3duZXJEb2N1bWVudCgpLCAmY3VycmVudFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLCBjdXJyZW50UmFuZ2UtPnN0YXJ0T2Zmc2V0KCksICZjdXJyZW50UmFu
Z2UtPmVuZENvbnRhaW5lcigpLCBjdXJyZW50UmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgKyBxdWVyeVJh
bmdlLmVuZC5vZmZzZXQpIDogY3VycmVudFJhbmdlOwotICAgICAgICAgICAgUmVmUHRyPFJhbmdl
PiBwcmV2aW91c1JhbmdlID0gZnJhZ21lbnRSYW5nZXMubGFzdCgpOwotICAgICAgICAgICAgaWYg
KCZwcmV2aW91c1JhbmdlLT5zdGFydENvbnRhaW5lcigpID09ICZmcmFnbWVudFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpKSB7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoY3VycmVudFJhbmdlLT5vd25lckRvY3VtZW50KCksICZwcmV2aW91c1JhbmdlLT5zdGFy
dENvbnRhaW5lcigpLCBwcmV2aW91c1JhbmdlLT5zdGFydE9mZnNldCgpLCAmZnJhZ21lbnRSYW5n
ZS0+ZW5kQ29udGFpbmVyKCksIGZyYWdtZW50UmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICAgICAg
ICAgICAgICBmcmFnbWVudFJhbmdlcy5sYXN0KCkgPSBmcmFnbWVudFJhbmdlOwotICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBhdXRvIGZyYWdtZW50UmFuZ2UgPSBpdGVyYXRvci5yYW5n
ZSgpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50SW5kZXggPT0gcXVlcnlSYW5nZS5lbmQucXVl
cnlJbmRleCkKKyAgICAgICAgICAgICAgICBmcmFnbWVudFJhbmdlLmVuZC5vZmZzZXQgPSBmcmFn
bWVudFJhbmdlLnN0YXJ0Lm9mZnNldCArIHF1ZXJ5UmFuZ2UuZW5kLm9mZnNldDsKKyAgICAgICAg
ICAgIGF1dG8mIHByZXZpb3VzUmFuZ2UgPSBmcmFnbWVudFJhbmdlcy5sYXN0KCk7CisgICAgICAg
ICAgICBpZiAocHJldmlvdXNSYW5nZS5zdGFydC5jb250YWluZXIucHRyKCkgPT0gZnJhZ21lbnRS
YW5nZS5zdGFydC5jb250YWluZXIucHRyKCkpCisgICAgICAgICAgICAgICAgcHJldmlvdXNSYW5n
ZS5lbmQgPSBmcmFnbWVudFJhbmdlLmVuZDsKKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBmcmFnbWVudFJhbmdlcy5hcHBlbmQoZnJhZ21lbnRSYW5nZSk7CiAgICAgICAgIH0KICAg
ICAgICAgYWxsUmVzdWx0UmFuZ2VzLmFwcGVuZChXVEZNb3ZlKGZyYWdtZW50UmFuZ2VzKSk7CiAg
ICAgfQotICAgIAorCiAgICAgYXV0byB0eiA9IGFkb3B0Q0YoQ0ZUaW1lWm9uZUNvcHlEZWZhdWx0
KCkpOwogICAgIE5TRGF0ZSAqcmVmZXJlbmNlRGF0ZSA9IFtjb250ZXh0IG9iamVjdEZvcktleTpn
ZXRrRGF0YURldGVjdG9yc1JlZmVyZW5jZURhdGVLZXkoKV0gPzogW05TRGF0ZSBkYXRlXTsKICAg
ICBUZXh0KiBsYXN0VGV4dE5vZGVUb1VwZGF0ZSA9IG51bGxwdHI7CkBAIC01NjUsMTMgKzU2Mywx
MyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8
UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZQogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFBv
c2l0aW9uLCBQb3NpdGlvbj4+IHJhbmdlQm91bmRhcmllczsKICAgICAgICAgcmFuZ2VCb3VuZGFy
aWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVzdWx0UmFuZ2VzLnNpemUoKSk7CiAgICAgICAg
IGZvciAoYXV0byYgcmFuZ2UgOiByZXN1bHRSYW5nZXMpCi0gICAgICAgICAgICByYW5nZUJvdW5k
YXJpZXMudW5jaGVja2VkQXBwZW5kKHsgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVu
ZFBvc2l0aW9uKCkgfSk7CisgICAgICAgICAgICByYW5nZUJvdW5kYXJpZXMudW5jaGVja2VkQXBw
ZW5kKHsgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSwgY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCkgfSk7CiAKICAgICAgICAgTlNTdHJpbmcgKmlk
ZW50aWZpZXIgPSBkYXRhRGV0ZWN0b3JTdHJpbmdGb3JQYXRoKGluZGV4UGF0aHNbcmVzdWx0SW5k
ZXhdLmdldCgpKTsKICAgICAgICAgTlNTdHJpbmcgKmNvcnJlc3BvbmRpbmdVUkwgPSBjb25zdHJ1
Y3RVUkxTdHJpbmdGb3JSZXN1bHQoY29yZVJlc3VsdCwgaWRlbnRpZmllciwgcmVmZXJlbmNlRGF0
ZSwgKE5TVGltZVpvbmUgKil0ei5nZXQoKSwgdHlwZXMpOwogICAgICAgICBib29sIGRpZE1vZGlm
eURPTSA9IGZhbHNlOwogCi0gICAgICAgIGlmICghY29ycmVzcG9uZGluZ1VSTCB8fCBzZWFyY2hG
b3JMaW5rUmVtb3ZpbmdFeGlzdGluZ0RETGlua3MocmVzdWx0UmFuZ2VzLmZpcnN0KCktPnN0YXJ0
Q29udGFpbmVyKCksIHJlc3VsdFJhbmdlcy5sYXN0KCktPmVuZENvbnRhaW5lcigpLCBkaWRNb2Rp
ZnlET00pKQorICAgICAgICBpZiAoIWNvcnJlc3BvbmRpbmdVUkwgfHwgc2VhcmNoRm9yTGlua1Jl
bW92aW5nRXhpc3RpbmdERExpbmtzKHJlc3VsdFJhbmdlcy5maXJzdCgpLnN0YXJ0LmNvbnRhaW5l
ciwgcmVzdWx0UmFuZ2VzLmxhc3QoKS5lbmQuY29udGFpbmVyLCBkaWRNb2RpZnlET00pKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAoZGlkTW9kaWZ5RE9NKSB7
CkBAIC01ODcsMTQgKzU4NSwxNCBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250
ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZQogICAgICAgICBC
T09MIHNob3VsZFVzZUxpZ2h0TGlua3MgPSBzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFNo
b3VsZFVzZUxpZ2h0TGlua3NGb3JSZXN1bHQoY29yZVJlc3VsdCwgW2luZGV4UGF0aHNbcmVzdWx0
SW5kZXhdIGxlbmd0aF0gPiAxKTsKIAogICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogcmVzdWx0
UmFuZ2VzKSB7Ci0gICAgICAgICAgICBhdXRvKiBwYXJlbnROb2RlID0gcmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCkucGFyZW50Tm9kZSgpOworICAgICAgICAgICAgYXV0byogcGFyZW50Tm9kZSA9IHJh
bmdlLnN0YXJ0LmNvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFwYXJl
bnROb2RlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAoIWlz
PFRleHQ+KHJhbmdlLT5zdGFydENvbnRhaW5lcigpKSkKKyAgICAgICAgICAgIGlmICghaXM8VGV4
dD4ocmFuZ2Uuc3RhcnQuY29udGFpbmVyKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgYXV0byYgY3VycmVudFRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4ocmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCkpOworICAgICAgICAgICAgYXV0byYgY3VycmVudFRleHROb2RlID0g
ZG93bmNhc3Q8VGV4dD4ocmFuZ2Uuc3RhcnQuY29udGFpbmVyLmdldCgpKTsKICAgICAgICAgICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGN1cnJlbnRUZXh0Tm9kZS5kb2N1bWVudCgpOwogICAgICAg
ICAgICAgU3RyaW5nIHRleHROb2RlRGF0YTsKIApAQCAtNjAyLDE4ICs2MDAsMTggQEAgTlNBcnJh
eSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29u
dGV4dFJhbmdlLCBEYXRhRGUKICAgICAgICAgICAgICAgICBpZiAobGFzdFRleHROb2RlVG9VcGRh
dGUpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5zZXREYXRhKGxh
c3ROb2RlQ29udGVudCk7CiAgICAgICAgICAgICAgICAgY29udGVudE9mZnNldCA9IDA7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJhbmdlLT5zdGFydE9mZnNldCgpID4gMCkKLSAgICAgICAgICAgICAg
ICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLmRhdGEoKS5zdWJzdHJpbmcoMCwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5v
ZmZzZXQgPiAwKQorICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZURhdGEgPSBjdXJyZW50VGV4
dE5vZGUuZGF0YSgpLnN1YnN0cmluZygwLCByYW5nZS5zdGFydC5vZmZzZXQpOwogICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2Rl
LmRhdGEoKS5zdWJzdHJpbmcoY29udGVudE9mZnNldCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgLSBj
b250ZW50T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB0ZXh0Tm9kZURhdGEgPSBjdXJyZW50VGV4
dE5vZGUuZGF0YSgpLnN1YnN0cmluZyhjb250ZW50T2Zmc2V0LCByYW5nZS5zdGFydC5vZmZzZXQg
LSBjb250ZW50T2Zmc2V0KTsKIAogICAgICAgICAgICAgaWYgKCF0ZXh0Tm9kZURhdGEuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCwgdGV4dE5vZGVEYXRhKSwgJmN1cnJlbnRUZXh0Tm9kZSk7Ci0gICAgICAg
ICAgICAgICAgY29udGVudE9mZnNldCA9IHJhbmdlLT5zdGFydE9mZnNldCgpOworICAgICAgICAg
ICAgICAgIGNvbnRlbnRPZmZzZXQgPSByYW5nZS5zdGFydC5vZmZzZXQ7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0dWFsIGFuY2hvciBub2RlIGFuZCBpbnNl
cnQgaXQgYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUuCi0gICAgICAgICAgICB0ZXh0Tm9kZURhdGEg
PSBjdXJyZW50VGV4dE5vZGUuZGF0YSgpLnN1YnN0cmluZyhyYW5nZS0+c3RhcnRPZmZzZXQoKSwg
cmFuZ2UtPmVuZE9mZnNldCgpIC0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgICAgICAgICAg
dGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLmRhdGEoKS5zdWJzdHJpbmcocmFuZ2Uuc3Rh
cnQub2Zmc2V0LCByYW5nZS5lbmQub2Zmc2V0IC0gcmFuZ2Uuc3RhcnQub2Zmc2V0KTsKICAgICAg
ICAgICAgIFJlZjxUZXh0PiBuZXdUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgdGV4
dE5vZGVEYXRhKTsKICAgICAgICAgICAgIHBhcmVudE5vZGUtPmluc2VydEJlZm9yZShuZXdUZXh0
Tm9kZS5jb3B5UmVmKCksICZjdXJyZW50VGV4dE5vZGUpOwogICAgICAgICAgICAgCkBAIC02NTIs
OSArNjUwLDkgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2Uo
UmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGUKIAogICAgICAgICAgICAgcGFyZW50
Tm9kZS0+aW5zZXJ0QmVmb3JlKFdURk1vdmUoYW5jaG9yRWxlbWVudCksICZjdXJyZW50VGV4dE5v
ZGUpOwogCi0gICAgICAgICAgICBjb250ZW50T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOwor
ICAgICAgICAgICAgY29udGVudE9mZnNldCA9IHJhbmdlLmVuZC5vZmZzZXQ7CiAKLSAgICAgICAg
ICAgIGxhc3ROb2RlQ29udGVudCA9IGN1cnJlbnRUZXh0Tm9kZS5kYXRhKCkuc3Vic3RyaW5nKHJh
bmdlLT5lbmRPZmZzZXQoKSwgY3VycmVudFRleHROb2RlLmxlbmd0aCgpIC0gcmFuZ2UtPmVuZE9m
ZnNldCgpKTsKKyAgICAgICAgICAgIGxhc3ROb2RlQ29udGVudCA9IGN1cnJlbnRUZXh0Tm9kZS5k
YXRhKCkuc3Vic3RyaW5nKHJhbmdlLmVuZC5vZmZzZXQsIGN1cnJlbnRUZXh0Tm9kZS5sZW5ndGgo
KSAtIHJhbmdlLmVuZC5vZmZzZXQpOwogICAgICAgICAgICAgbGFzdFRleHROb2RlVG9VcGRhdGUg
PSAmY3VycmVudFRleHROb2RlOwogICAgICAgICB9ICAgICAgICAKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDEx
Zjc2ZTkzYTAwYzFjNTRkMWFiMDYzOGE5MTA2YTBmODhhZTkxN2IuLjk4MzM1MjYzMDJlNWMzNDQ5
MDQ5OTkzNWI0MGVjODNmYmMyMTFmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC00MzUsNyArNDM1LDcgQEAgVGV4dEZp
ZWxkU2VsZWN0aW9uRGlyZWN0aW9uIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRl
U2VsZWN0aW9uRGlyZWN0aW8KICAgICByZXR1cm4gc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKSA/
IChzZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IFNlbGVjdGlvbkhhc0ZvcndhcmREaXJlY3Rpb24g
OiBTZWxlY3Rpb25IYXNCYWNrd2FyZERpcmVjdGlvbikgOiBTZWxlY3Rpb25IYXNOb0RpcmVjdGlv
bjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdl
KE5vZGUqIG5vZGUsIGludCBvZmZzZXQsIE5vZGUqJiBjb250YWluZXJOb2RlLCBpbnQmIG9mZnNl
dEluQ29udGFpbmVyKQorc3RhdGljIHZvaWQgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2Uo
Tm9kZSogbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBOb2RlKiYgY29udGFpbmVyTm9kZSwgdW5zaWdu
ZWQmIG9mZnNldEluQ29udGFpbmVyKQogewogICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsK
ICAgICAgICAgY29udGFpbmVyTm9kZSA9IG5vZGU7CkBAIC00NDYsMjkgKzQ0NiwzMCBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2UoTm9kZSogbm9kZSwg
aW50IG9mZnNldCwgTm9kZSomCiAgICAgfQogfQogCi1SZWZQdHI8UmFuZ2U+IEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb24oKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb24oKSBjb25zdAogewogICAgIGlm
ICghcmVuZGVyZXIoKSB8fCAhaXNUZXh0RmllbGQoKSB8fCAhaGFzQ2FjaGVkU2VsZWN0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgaW50IHN0YXJ0ID0gbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKLSAgICBpbnQgZW5kID0g
bV9jYWNoZWRTZWxlY3Rpb25FbmQ7CisgICAgdW5zaWduZWQgc3RhcnQgPSBtX2NhY2hlZFNlbGVj
dGlvblN0YXJ0OworICAgIHVuc2lnbmVkIGVuZCA9IG1fY2FjaGVkU2VsZWN0aW9uRW5kOwogCiAg
ICAgQVNTRVJUKHN0YXJ0IDw9IGVuZCk7CiAgICAgYXV0byBpbm5lclRleHQgPSBpbm5lclRleHRF
bGVtZW50KCk7CiAgICAgaWYgKCFpbm5lclRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCFpbm5lclRleHQtPmZpcnN0
Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgaW5uZXJU
ZXh0LCAwLCBpbm5lclRleHQsIDApOworICAgICAgICByZXR1cm4geyB7IHsgKmlubmVyVGV4dCwg
MCB9LCB7ICppbm5lclRleHQsIDAgfSB9IH07CiAKLSAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICB1
bnNpZ25lZCBvZmZzZXQgPSAwOwogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG51bGxwdHI7CiAgICAg
Tm9kZSogZW5kTm9kZSA9IG51bGxwdHI7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IGlu
bmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgq
bm9kZSwgaW5uZXJUZXh0LmdldCgpKSkgewogICAgICAgICBBU1NFUlQoIW5vZGUtPmZpcnN0Q2hp
bGQoKSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5pc1RleHROb2RlKCkgfHwgbm9kZS0+aGFzVGFn
TmFtZShiclRhZykpOwotICAgICAgICBpbnQgbGVuZ3RoID0gaXM8VGV4dD4oKm5vZGUpID8gZG93
bmNhc3Q8VGV4dD4oKm5vZGUpLmxlbmd0aCgpIDogMTsKKworICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBpczxUZXh0Pigqbm9kZSkgPyBkb3duY2FzdDxUZXh0Pigqbm9kZSkubGVuZ3RoKCkgOiAx
OwogCiAgICAgICAgIGlmIChvZmZzZXQgPD0gc3RhcnQgJiYgc3RhcnQgPD0gb2Zmc2V0ICsgbGVu
Z3RoKQogICAgICAgICAgICAgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2Uobm9kZS5nZXQo
KSwgc3RhcnQgLSBvZmZzZXQsIHN0YXJ0Tm9kZSwgc3RhcnQpOwpAQCAtNDgyLDkgKzQ4Myw5IEBA
IFJlZlB0cjxSYW5nZT4gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvbigpIGNv
bnN0CiAgICAgfQogCiAgICAgaWYgKCFzdGFydE5vZGUgfHwgIWVuZE5vZGUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnROb2RlLCBzdGFydCwgZW5kTm9kZSwgZW5k
KTsKKyAgICByZXR1cm4geyB7IHsgKnN0YXJ0Tm9kZSwgc3RhcnQgfSwgeyAqZW5kTm9kZSwgZW5k
IH0gfSB9OwogfQogCiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpyZXN0b3JlQ2Fj
aGVkU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3QgQVhUZXh0
U3RhdGVDaGFuZ2VJbnRlbnQmIGludGVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCA0MDc4OTRmNWVjY2U2YTEyMjhlNzliZGI4
ZjNjOTU3ODlhYzI5ZmJlLi4wNGNhOTllYTZhMjIyN2IzODE4YmI5YjRmNjM0ODA3MmM5M2Q4NGU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5oCkBAIC0zMyw2ICszMyw4IEBAIGNsYXNzIFJlbmRlclRleHRDb250cm9sOwogY2xhc3MgVGV4
dENvbnRyb2xJbm5lclRleHRFbGVtZW50OwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCitzdHJ1
Y3QgU2ltcGxlUmFuZ2U7CisKIGVudW0gY2xhc3MgQXV0b0ZpbGxCdXR0b25UeXBlIDogdWludDhf
dCB7IE5vbmUsIENyZWRlbnRpYWxzLCBDb250YWN0cywgU3Ryb25nUGFzc3dvcmQsIENyZWRpdENh
cmQgfTsKIGVudW0gVGV4dEZpZWxkU2VsZWN0aW9uRGlyZWN0aW9uIHsgU2VsZWN0aW9uSGFzTm9E
aXJlY3Rpb24sIFNlbGVjdGlvbkhhc0ZvcndhcmREaXJlY3Rpb24sIFNlbGVjdGlvbkhhc0JhY2t3
YXJkRGlyZWN0aW9uIH07CiBlbnVtIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgeyBEaXNwYXRjaE5v
RXZlbnQsIERpc3BhdGNoQ2hhbmdlRXZlbnQsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCB9
OwpAQCAtNzgsNyArODAsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBF
eGNlcHRpb25Pcjx2b2lkPiBzZXRSYW5nZVRleHQoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rpb25Nb2Rl
KTsKICAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgY29uc3Qg
U3RyaW5nJiBkaXJlY3Rpb24sIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiA9IEFYVGV4
dFN0YXRlQ2hhbmdlSW50ZW50KCkpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2VsZWN0
aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBUZXh0RmllbGRTZWxlY3Rpb25EaXJlY3Rpb24g
PSBTZWxlY3Rpb25IYXNOb0RpcmVjdGlvbiwgU2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlv
blJldmVhbE1vZGU6OkRvTm90UmV2ZWFsLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYg
PSBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlv
bigpIGNvbnN0OworCisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlbGVjdGlvbigpIGNvbnN0
OwogICAgIFN0cmluZyBzZWxlY3RlZFRleHQoKSBjb25zdDsKIAogICAgIHZvaWQgZGlzcGF0Y2hG
b3JtQ29udHJvbENoYW5nZUV2ZW50KCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNh
dG9yLmNwcAppbmRleCA0MmVmZWFkYjBkMWE2ODM2NWM1YzM0MzA4MGU1ZmZiMjY4MDY4YmI4Li5l
YjAyZjhlYzQ0ZDkzYWQ3YTZjYjk1MWY2OTcwNmZjNGQ2ZjgwZTBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgYm9vbCBpbml0
aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNv
bnN0IFJhbgogI2VuZGlmCiAgICAgZWxzZSB7CiAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBhYnNv
bHV0ZVRleHRSZWN0czsKLSAgICAgICAgcmFuZ2UuYWJzb2x1dGVUZXh0UmVjdHMoYWJzb2x1dGVU
ZXh0UmVjdHMsIHRleHRSZWN0SGVpZ2h0ID09IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xl
SGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQsIG51bGxwdHIsIFJhbmdlOjpCb3VuZGluZ1JlY3RCZWhh
dmlvcjo6UmVzcGVjdENsaXBwaW5nKTsKKyAgICAgICAgcmFuZ2UuYWJzb2x1dGVUZXh0UmVjdHMo
YWJzb2x1dGVUZXh0UmVjdHMsIHRleHRSZWN0SGVpZ2h0ID09IEZyYW1lU2VsZWN0aW9uOjpUZXh0
UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQsIFJhbmdlOjpCb3VuZGluZ1JlY3RCZWhh
dmlvcjo6UmVzcGVjdENsaXBwaW5nKTsKIAogICAgICAgICB0ZXh0UmVjdHMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShhYnNvbHV0ZVRleHRSZWN0cy5zaXplKCkpOwogICAgICAgICBmb3IgKGF1dG8m
IHJlY3QgOiBhYnNvbHV0ZVRleHRSZWN0cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaWdobGlnaHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxp
Z2h0RGF0YS5oCmluZGV4IGE3ZTg0OTRkZmJkNDNhYWM2ODU5MWIwNmRjZmQ5NGEzZTczOTQyNTEu
LjY1NGFkYTAxMjVmODBjZjgxZWYyNzE4MjQzZTc5MGNhZDgwNzExNjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaApAQCAtMzcsOCArMzcsNiBAQAogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IE9sZFNlbGVjdGlvbkRhdGE7CiAgICAgCiBj
bGFzcyBIaWdobGlnaHREYXRhIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKaW5kZXggOGMxNDRkNjUxZjIyNTVmYTFhZDRiMDdmNTkwMmY2OGY0NmQ2
ODU3NC4uY2QyYjg0Y2U2MWFkM2Y1YjJjNTY1NDQ1NGI4ODM5ODg5ZDg0YjhhMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTc0NiwxNCArNzQ2LDYgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlRm9jdXNSaW5nUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mIHF1YWRzKQogICAgIH0KIH0KIAotRmxvYXRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3RGb3JSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpCi17Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByYW5nZS0+b3duZXJEb2N1bWVudCgpLnVw
ZGF0ZUxheW91dCgpOwotICAgIHJldHVybiB1bml0ZWRCb3VuZGluZ0JveGVzKGFic29sdXRlVGV4
dFF1YWRzKCpyYW5nZSkpOwotfQotCiB2b2lkIFJlbmRlck9iamVjdDo6YWRkQWJzb2x1dGVSZWN0
Rm9yTGF5ZXIoTGF5b3V0UmVjdCYgcmVzdWx0KQogewogICAgIGlmIChoYXNMYXllcigpKQpAQCAt
MTkwMiw2ICsxODk0LDIyIEBAIFZlY3RvcjxGbG9hdFF1YWQ+IFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UXVhZHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sCiAgICAgcmV0dXJuIHF1
YWRzOwogfQogCitWZWN0b3I8SW50UmVjdD4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0
cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQorewor
ICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNl
Y3RpbmdOb2RlcyhyYW5nZSkpIHsKKyAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVy
ZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JSKCkpCisgICAgICAg
ICAgICByZW5kZXJlci0+YWJzb2x1dGVSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHJl
bmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoKSkpOworICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJU
ZXh0PihyZW5kZXJlcikpIHsKKyAgICAgICAgICAgIGF1dG8gb2Zmc2V0UmFuZ2UgPSBjaGFyYWN0
ZXJEYXRhT2Zmc2V0UmFuZ2UocmFuZ2UsIGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpKTsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgcXVhZCA6IGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5k
ZXJlcikuYWJzb2x1dGVRdWFkc0ZvclJhbmdlKG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5n
ZS5lbmQsIHVzZVNlbGVjdGlvbkhlaWdodCkpCisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5k
KHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHJlY3RzOworfQorCiBTdHJpbmcgUmVuZGVyT2JqZWN0OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkg
Y29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggODUzODQ1NTg0ZGEyNjViNzkxMzRjM2E2MDcyMTNlNjEy
NTE4ZDk4Yy4uZWI4YjQyY2NlYjVmZTQ0YzhkNDAwODlhNzAwZDc4Mzg2MmMwZjkzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNTU4LDcgKzU1OCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVGb2N1c1JpbmdRdWFkcyhWZWN0b3I8Rmxv
YXRRdWFkPiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxGbG9hdFF1YWQ+
IGFic29sdXRlVGV4dFF1YWRzKGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCB1c2VTZWxlY3Rpb25I
ZWlnaHQgPSBmYWxzZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZl
Y3RvcjxJbnRSZWN0PiBhYnNvbHV0ZVRleHRSZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wg
dXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwogCiAgICAgLy8gdGhlIHJlY3QgdGhhdCB3aWxs
IGJlIHBhaW50ZWQgaWYgdGhpcyBvYmplY3QgaXMgcGFzc2VkIGFzIHRoZSBwYWludGluZ1Jvb3QK
ICAgICBXRUJDT1JFX0VYUE9SVCBMYXlvdXRSZWN0IHBhaW50aW5nUm9vdFJlY3QoTGF5b3V0UmVj
dCYgdG9wTGV2ZWxSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NTm9kZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NTm9kZS5tbQppbmRleCBjZDgwNjFlYzFi
MjAzZjAzMzQ2N2Y1NDBiOTM3ZDBjMWI3MWI4NDZiLi41OTAxNjFmMDA5MjRiMWQyMmZhOWY1YmQ0
MWU5ZmQzMDQyMGNmYTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTU5vZGUubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01Ob2RlLm1tCkBAIC0zMCw2ICszMCw4
IEBACiAjaW1wb3J0ICJXS0J1bmRsZUFQSUNhc3QuaCIKICNpbXBvcnQgIldLRE9NSW50ZXJuYWxz
LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
ck9iamVjdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9ydCA8d3Rm
L2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBXS0RPTU5vZGUKQEAgLTEx
MSw5ICsxMTMsNyBAQCAtIChOU0FycmF5ICopdGV4dFJlY3RzCiAgICAgX2ltcGwtPmRvY3VtZW50
KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKCFfaW1w
bC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBWZWN0b3I8V2ViQ29yZTo6
SW50UmVjdD4gcmVjdHM7Ci0gICAgX2ltcGwtPnRleHRSZWN0cyhyZWN0cyk7Ci0gICAgcmV0dXJu
IGNyZWF0ZU5TQXJyYXkocmVjdHMpLmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5T
QXJyYXkoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhXZWJDb3JlOjpt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKl9pbXBsKSkpLmF1dG9yZWxlYXNlKCk7CiB9
CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCmluZGV4IGFjNmZmYjFlOTc4YzgzODgx
MmE4YjExYjM3MjI0OTE4ZWVlMjhlNGIuLmVlMjk2NWIwMDlkMmRjNjU5NTFhMjQ3OTRjYzdmYjYz
NzU4Nzk5ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAtMTI5LDkgKzEyOSw3IEBA
IC0gKEJPT0wpaXNDb2xsYXBzZWQKIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIHsKICAgICBfaW1w
bC0+b3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwotICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiByZWN0czsKLSAgICBfaW1wbC0+YWJzb2x1
dGVUZXh0UmVjdHMocmVjdHMpOwotICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzKS5hdXRv
cmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6YWJzb2x1dGVUZXh0UmVjdHMoKl9pbXBsKSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoV0tE
T01SYW5nZSAqKXJhbmdlQnlFeHBhbmRpbmdUb1dvcmRCb3VuZGFyeUJ5Q2hhcmFjdGVyczooTlNV
SW50ZWdlciljaGFyYWN0ZXJzIGluRGlyZWN0aW9uOihXS0RPTVJhbmdlRGlyZWN0aW9uKWRpcmVj
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCmluZGV4IGM1MmFmNjU5YjEwYTkwNjQ4OWRkOGExOTM2MDcyMDI2ZThjYmMzNmQu
LmZhMWZhYzQ4YWNjNzA0OWFiMTg5M2ZmYTBhYzc0MGZlZmViYTU2NGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTIw
MiwxMCArMjAyLDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdl
U2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KICAgICAgICAgICAgIG1fZmlu
ZE1hdGNoZXMuY2xlYXIoKTsKICAgICAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtYXRjaFJlY3Rz
OwogICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewotICAgICAgICAgICAgICAgIHJhbmdlLT5hYnNvbHV0
ZVRleHRSZWN0cyhtYXRjaFJlY3RzKTsKLSAgICAgICAgICAgICAgICBtX2ZpbmRNYXRjaGVzLmFw
cGVuZChyYW5nZSk7CisgICAgICAgICAgICAgICAgbWF0Y2hSZWN0cyA9IFJlbmRlck9iamVjdDo6
YWJzb2x1dGVUZXh0UmVjdHMoKnJhbmdlKTsKKyAgICAgICAgICAgICAgICBtX2ZpbmRNYXRjaGVz
LmFwcGVuZChXVEZNb3ZlKHJhbmdlKSk7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0cmlu
ZywgbWF0Y2hSZWN0cywgbWF0Y2hDb3VudCwgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXgsIGRpZFdy
YXAgPT0gRGlkV3JhcDo6WWVzKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yOTIsMTEgKzI5MSw4
IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zCiAgICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5m
aW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRjaENv
dW50LCBtX2ZpbmRNYXRjaGVzLCBpbmRleEZvclNlbGVjdGlvbik7CiAKICAgICBWZWN0b3I8VmVj
dG9yPEludFJlY3Q+PiBtYXRjaFJlY3RzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9m
aW5kTWF0Y2hlcy5zaXplKCk7ICsraSkgewotICAgICAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7
Ci0gICAgICAgIG1fZmluZE1hdGNoZXNbaV0tPmFic29sdXRlVGV4dFJlY3RzKHJlY3RzKTsKLSAg
ICAgICAgbWF0Y2hSZWN0cy5hcHBlbmQoV1RGTW92ZShyZWN0cykpOwotICAgIH0KKyAgICBmb3Ig
KGF1dG8mIHJhbmdlIDogbV9maW5kTWF0Y2hlcykKKyAgICAgICAgbWF0Y2hSZWN0cy5hcHBlbmQo
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cygqcmFuZ2UpKTsKIAogICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nTWF0Y2hlcyhzdHJp
bmcsIG1hdGNoUmVjdHMsIGluZGV4Rm9yU2VsZWN0aW9uKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggNWQ2
OTRlNGUyNWIyYmY5N2MyOThmZDFmYzI4ZTYzNTFmZGQ2MWMyZi4uZTQzOGYwMTUxNzYxYTYwY2Jm
YjhlMWRiYTczMjJhNTZiMTQwMWU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9p
b3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTEzMyw1MiArMTMzLDUyIEBA
IC0gKENHUmVjdCljYXJldFJlY3RGb3JQb3NpdGlvbjooV2ViVmlzaWJsZVBvc2l0aW9uICopcG9z
aXRpb24KIAogLSAoQ0dSZWN0KWNsb3Nlc3RDYXJldFJlY3RJbk1hcmtlZFRleHRSYW5nZUZvclBv
aW50OihDR1BvaW50KXBvaW50CiB7Ci0gICAgRnJhbWUgKmZyYW1lID0gW3NlbGYgY29yZUZyYW1l
XTsKLSAgICBSYW5nZSAqbWFya2VkVGV4dFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0
aW9uUmFuZ2UoKS5nZXQoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIG1hcmtlZFRleHRSYW5nZVNl
bGVjdGlvbiA9IG1hcmtlZFRleHRSYW5nZSA/IFZpc2libGVTZWxlY3Rpb24oKm1hcmtlZFRleHRS
YW5nZSkgOiBWaXNpYmxlU2VsZWN0aW9uKCk7Ci0KLSAgICBJbnRSZWN0IHJlc3VsdDsKLQotICAg
IGlmIChtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24uaXNSYW5nZSgpKSB7Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydChtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24uc3RhcnQoKSk7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiBlbmQobWFya2VkVGV4dFJhbmdlU2VsZWN0aW9uLmVuZCgpKTsK
LQotICAgICAgICAvLyBBZGp1c3QgcG9zIGFuZCBnaXZlIGl0IGFuIGFwcHJvcHJpYXRlIGFmZmlu
aXR5LgotICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zOwotICAgICAgICBWZWN0b3I8SW50UmVj
dD4gaW50UmVjdHM7Ci0gICAgICAgIG1hcmtlZFRleHRSYW5nZS0+YWJzb2x1dGVUZXh0UmVjdHMo
aW50UmVjdHMsIE5PKTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IGludFJlY3RzLnNpemUoKTsK
LSAgICAgICAgQ0dSZWN0IGZpcnN0UmVjdCA9IGludFJlY3RzWzBdOwotICAgICAgICBDR1JlY3Qg
bGFzdFJlY3QgID0gaW50UmVjdHNbc2l6ZS0xXTsKLSAgICAgICAgaWYgKHBvaW50LnkgPCBmaXJz
dFJlY3Qub3JpZ2luLnkpIHsKLSAgICAgICAgICAgIHBvaW50LnkgPSBmaXJzdFJlY3Qub3JpZ2lu
Lnk7Ci0gICAgICAgICAgICBwb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2lu
dF07Ci0gICAgICAgICAgICBwb3Muc2V0QWZmaW5pdHkoVVBTVFJFQU0pOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKHBvaW50LnkgPj0gbGFzdFJlY3Qub3JpZ2luLnkpIHsKLSAgICAgICAg
ICAgIHBvaW50LnkgPSBsYXN0UmVjdC5vcmlnaW4ueTsKLSAgICAgICAgICAgIHBvcyA9IFtzZWxm
IHZpc2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XTsKLSAgICAgICAgICAgIHBvcy5zZXRBZmZp
bml0eShET1dOU1RSRUFNKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKHBvcyA9PSBzdGFydCB8fCBwb3MgPCBzdGFydCkgewotICAg
ICAgICAgICAgc3RhcnQuc2V0QWZmaW5pdHkoVVBTVFJFQU0pOwotICAgICAgICAgICAgcmVzdWx0
ID0gc3RhcnQuYWJzb2x1dGVDYXJldEJvdW5kcygpOwotICAgICAgICB9IGVsc2UgaWYgKHBvcyA+
IGVuZCkgewotICAgICAgICAgICAgZW5kLnNldEFmZmluaXR5KERPV05TVFJFQU0pOwotICAgICAg
ICAgICAgcmVzdWx0ID0gZW5kLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHBvcy5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7Ci0gICAg
ICAgIH0KKyAgICBhdXRvIGZyYW1lID0gW3NlbGYgY29yZUZyYW1lXTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBk
b2N1bWVudC0+dXBkYXRlTGF5b3V0KCk7CisKKyAgICBhdXRvIG1hcmtlZFRleHRSYW5nZSA9IGZy
YW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCk7CisgICAgYXV0byBtYXJrZWRU
ZXh0UmFuZ2VTZWxlY3Rpb24gPSBtYXJrZWRUZXh0UmFuZ2UgPyBWaXNpYmxlU2VsZWN0aW9uKCpt
YXJrZWRUZXh0UmFuZ2UpIDogVmlzaWJsZVNlbGVjdGlvbigpOworCisgICAgaWYgKCFtYXJrZWRU
ZXh0UmFuZ2VTZWxlY3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByZXR1cm4gW3NlbGYgdmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKworICAgIGF1
dG8gaW50UmVjdHMgPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKCptYXJrZWRUZXh0
UmFuZ2UpOworICAgIENHUmVjdCBmaXJzdFJlY3QgPSBpbnRSZWN0cy5maXJzdCgpOworICAgIENH
UmVjdCBsYXN0UmVjdCA9IGludFJlY3RzLmxhc3QoKTsKKworICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydCA9IG1hcmtlZFRleHRSYW5nZVNlbGVjdGlvbi5zdGFydCgpOworICAgIFZpc2libGVQb3Np
dGlvbiBlbmQgPSBtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24uZW5kKCk7CisgICAgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uOworCisgICAgLy8gQWRqdXN0IHBvc2l0aW9uIGFuZCBnaXZlIGl0IGFu
IGFwcHJvcHJpYXRlIGFmZmluaXR5LgorICAgIGlmIChwb2ludC55IDwgZmlyc3RSZWN0Lm9yaWdp
bi55KSB7CisgICAgICAgIHBvaW50LnkgPSBmaXJzdFJlY3Qub3JpZ2luLnk7CisgICAgICAgIHBv
c2l0aW9uID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdOworICAgICAgICBw
b3NpdGlvbi5zZXRBZmZpbml0eShVUFNUUkVBTSk7CisgICAgfSBlbHNlIGlmIChwb2ludC55ID49
IGxhc3RSZWN0Lm9yaWdpbi55KSB7CisgICAgICAgIHBvaW50LnkgPSBsYXN0UmVjdC5vcmlnaW4u
eTsKKyAgICAgICAgcG9zaXRpb24gPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2lu
dF07CisgICAgICAgIHBvc2l0aW9uLnNldEFmZmluaXR5KERPV05TVFJFQU0pOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25G
b3JQb2ludDpwb2ludF07Ci0gICAgICAgIHJlc3VsdCA9IHBvcy5hYnNvbHV0ZUNhcmV0Qm91bmRz
KCk7CisgICAgICAgIHBvc2l0aW9uID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9p
bnRdOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gKENHUmVjdCkgcmVzdWx0OyAgICAKKworICAg
IGlmIChwb3NpdGlvbiA9PSBzdGFydCB8fCBwb3NpdGlvbiA8IHN0YXJ0KSB7CisgICAgICAgIHN0
YXJ0LnNldEFmZmluaXR5KFVQU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIHN0YXJ0LmFic29sdXRl
Q2FyZXRCb3VuZHMoKTsKKyAgICB9CisgICAgaWYgKHBvc2l0aW9uID4gZW5kKSB7CisgICAgICAg
IGVuZC5zZXRBZmZpbml0eShET1dOU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIGVuZC5hYnNvbHV0
ZUNhcmV0Qm91bmRzKCk7CisgICAgfQorICAgIHJldHVybiBwb3NpdGlvbi5hYnNvbHV0ZUNhcmV0
Qm91bmRzKCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KaW5kZXggOWUxMjg5
NmQ3N2ZlMDhiZTdmMGI2MDZkYzExYTdmYTE2ZTQ3NmY0Mi4uZDhhZjY3OGRhZjA4ODgyODRhYmRk
YzFjZGIxMGFkZWIxNGI3Njc0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCkBAIC03
NCw5ICs3NCw2IEBACiB1c2luZyBuYW1lc3BhY2UgSlNDOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLS8vIEZJWE1FOiBUaGVzZSBtZXRob2RzIHNob3VsZCBtb3ZlIGludG8gdGhlIGltcGxl
bWVudGF0aW9uIGZpbGVzIG9mIHRoZSBET00gY2xhc3NlcwotLy8gYW5kIHRoaXMgZmlsZSBzaG91
bGQgYmUgZWxpbWluYXRlZC4KLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IC8vIERPTU5vZGUKIApAQCAtNTA1LDkgKzUwMiw3IEBAIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMK
ICAgICBub2RlLmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAgICAgaWYgKCFub2RlLnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHJlY3RzOwotICAgIG5vZGUudGV4dFJlY3RzKHJlY3Rz
KTsKLSAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyZWN0cykuYXV0b3JlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlTlNBcnJheShSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhub2RlKSkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKIEBl
bmQKQEAgLTYyNSwxMCArNjIwLDggQEAgLSAoQ0dJbWFnZVJlZilyZW5kZXJlZEltYWdlRm9yY2lu
Z0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNrVGV4dAogLSAoTlNBcnJheSAqKXRleHRSZWN0cwog
ewogICAgIGF1dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7Ci0gICAgVmVjdG9yPFdlYkNvcmU6Oklu
dFJlY3Q+IHJlY3RzOwogICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByYW5nZS5hYnNvbHV0ZVRleHRSZWN0cyhyZWN0
cyk7Ci0gICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocmVjdHMpLmF1dG9yZWxlYXNlKCk7CisgICAg
cmV0dXJuIGNyZWF0ZU5TQXJyYXkoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5n
ZSkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXJyYXkgKilsaW5lQm94UmVjdHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDJhYmJkOTI0Yjdl
YTAwZGEzMDM5ODJlMTBkNDYwYzUxYWJjODIzMWEuLjc2NzRlMTQ5YmQ5OWE5YjhiNzdiOTVkMGI5
YTg0Njc1NjhlOTAzMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQpAQCAtMTEwOSwxNCArMTEwOSw5IEBAIC0gKEJPT0wpX2xvYWRzU3luY2hyb25vdXNs
eQogICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5sb2FkZXIoKS5sb2Fkc1N5bmNocm9u
b3VzbHkoKTsKIH0KIAotLSAoTlNBcnJheSAqKV9yZWN0c0ZvclJhbmdlOihET01SYW5nZSAqKWRv
bVJhbmdlCistIChOU0FycmF5ICopX3JlY3RzRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsK
LSAgICBhdXRvKiByYW5nZSA9IGNvcmUoZG9tUmFuZ2UpOwotICAgIGlmICghcmFuZ2UpCi0gICAg
ICAgIHJldHVybiBAW107Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IGludFJlY3RzOwot
ICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRSZWN0cyhpbnRSZWN0cywgTk8pOwotICAgIHJldHVybiBj
cmVhdGVOU0FycmF5KGludFJlY3RzKS5hdXRvcmVsZWFzZSgpOworICAgIHJldHVybiByYW5nZSA/
IFtyYW5nZSB0ZXh0UmVjdHNdIDogQFtdOwogfQogCiAtIChET01SYW5nZSAqKV9zZWxlY3Rpb25S
YW5nZUZvckZpcnN0UG9pbnQ6KENHUG9pbnQpZmlyc3Qgc2Vjb25kUG9pbnQ6KENHUG9pbnQpc2Vj
b25kCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396174</attachid>
            <date>2020-04-11 10:44:38 -0700</date>
            <delta_ts>2020-04-11 12:12:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210369-20200411104437.patch</filename>
            <type>text/plain</type>
            <size>37697</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWE2MDFlMjY2YTkxZTYx
ODdjODIxZDI1MjQ3NWQzMzg0YjIyNzE5OC4uMGNiYTAyNDdlMWIwYTc0MTc0ZjYzMGJkM2JlZGI5
Y2I1MGY5MmU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA0LTEwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIG1vcmUgZnJvbSBsaXZl
IHJhbmdlIHRvIFNpbXBsZVJhbmdlOiBjYWxsZXJzIG9mIGFic29sdXRlVGV4dFJlY3RzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAzNjkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9Ob2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnRleHRSZWN0cyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogZG9tL05vZGUuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICog
ZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZUJvdW5kaW5n
Qm94IGNvbnN0KTogVXBkYXRlZCBzaW5jZSBhYnNvbHV0ZVRleHRSZWN0cworICAgICAgICBubyBs
b25nZXIgaGFzIGEgUmFuZ2VJbkZpeGVkUG9zaXRpb24qIGFyZ3VtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzIGNvbnN0KTogUmVtb3ZlZCB0aGUgdW51c2Vk
IFJhbmdlSW5GaXhlZFBvc2l0aW9uKgorICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgKiBkb20v
UmFuZ2UuaDogR290IHJpZCBvZiB1bnVzZWQgUmFuZ2VJbkZpeGVkUG9zaXRpb24gdHlwZSBhbmQg
YWxzbyByZW1vdmVkCisgICAgICAgIFJhbmdlSW5GaXhlZFBvc2l0aW9uKiBhcmd1bWVudCBmcm9t
IHRoZSBhYnNvbHV0ZVRleHRSZWN0cyBmdW5jdGlvbi4gTGF0ZXIgd2lsbAorICAgICAgICByZW1v
dmUgYWJzb2x1dGVUZXh0UmVjdHMgZW50aXJlbHkuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlIGNvbnN0
KTogVXNlIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMKKyAgICAgICAgYW5kIHVuaXRl
ZEJvdW5kaW5nQm94ZXMgcmF0aGVyIHRoYW4gdXNpbmcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdEZvclJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0
ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVu
dEluUmFuZ2UpOiBVc2UgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4KKyAgICAgICAgbGl2ZSByYW5n
ZXMuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKTogTW92ZWQgZnJv
bSBpbnQgdG8gdW5zaWduZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6c2VsZWN0aW9uIGNvbnN0KTogUmV0dXJuIE9wdGlvbmFsPFNpbXBsZVJhbmdlPgor
ICAgICAgICByYXRoZXIgdGhhbiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3ZlLgorCisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRp
YWxpemVJbmRpY2F0b3IpOiBVcGRhdGVkIHNpbmNlIGFic29sdXRlVGV4dFJlY3RzIG5vIGxvbmdl
ciB0YWtlcworICAgICAgICBhIFJhbmdlSW5GaXhlZFBvc2l0aW9uKiBhcmd1bWVudC4KKworICAg
ICAgICAqIHJlbmRlcmluZy9IaWdobGlnaHREYXRhLmg6IFJlbW92ZWQgc3RyYXkgb2Jzb2xldGUg
ZGVjbGFyYXRpb24uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RGb3JS
YW5nZSk6IERlbGV0ZWQuIENhbGxlcnMgY2FuCisgICAgICAgIHVzZSBhYnNvbHV0ZVRleHRRdWFk
cyBkaXJlY3RseS4gV2UgbmVlZCB0byBjdXQgZG93biBvbiB0aGUgbnVtYmVyIG9mIHNlcGFyYXRl
CisgICAgICAgIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgcmVhbGx5IHNlcGFyYXRlIGNvbmNlcHRz
LCBhbmQgdGhpcyB3YXMgdXNlZCBpbiBvbmx5IG9uZSBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMpOiBBZGRlZC4gUmVwbGFjZXMgUmFuZ2U6
OmFic29sdXRlVGV4dFJlY3RzCisgICAgICAgIGZvciBhbGwgY2FsbGVycyBvdXRzaWRlIHRoZSBs
aXZlIHJhbmdlIGNsYXNzIGFuZCB3aWxsIGV2ZW50dWFsbHkgcmVwbGFjZSBpdCBlbnRpcmVseS4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92
ZS4KKwogMjAyMC0wNC0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgVXNlIE5vZGU6Omxlbmd0aCB0byByZXBsYWNlIE5vZGU6Om1heENoYXJhY3Rlck9mZnNldCBh
bmQgbGFzdE9mZnNldEluTm9kZTsgc3dpdGNoIG1vcmUgb2Zmc2V0cyBmcm9tIGludCB0byB1bnNp
Z25lZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCBhYjAzMjE1NzEwMWYyMWE4MTc4MzMzNTQxZThlZDg3Yzc5ODIzOTdk
Li45NmMzODM2N2Q2ODA5NDkyY2IxMmRlY2U4NDQwMzc2ODI0OWVmNTQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI0IEBACisyMDIwLTA0LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIG1vcmUgZnJvbSBsaXZlIHJhbmdlIHRvIFNpbXBsZVJhbmdlOiBjYWxs
ZXJzIG9mIGFic29sdXRlVGV4dFJlY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTAzNjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TU5vZGUubW06CisgICAgICAgICgtW1dLRE9NTm9kZSB0ZXh0UmVjdHNdKTogTW92ZWQgaW1wbGVt
ZW50YXRpb24gaGVyZS4gVGhlcmUncyBubyByZWFzb24gZm9yIE5vZGUKKyAgICAgICAgdG8gaGF2
ZSBhIHRleHRSZWN0cyBmdW5jdGlvbiwgc2luY2UgaXQncyBhIGxheW91dC9yZW5kZXJpbmcgb3Bl
cmF0aW9uIGFuZCBhCisgICAgICAgIHNpbmdsZSBub2RlIGlzIGFsc28gYW4gdW51c3VhbCBzcGVj
aWFsIGNhc2UsIGJ1dCBmb3Igbm93IGF0IGxlYXN0IHdlIHdpbGwga2VlcAorICAgICAgICB0aGlz
IGxlZ2FjeSBtZXRob2QuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLRE9NUmFuZ2UubW06CisgICAgICAgICgtW1dLRE9NUmFuZ2UgdGV4dFJlY3RzXSk6IENo
YW5nZWQgdG8gY2FsbCBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzCisgICAgICAgIGlu
c3RlYWQgb2YgUmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRy
b2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVyUGFnZVNjcm9sbCk6IFVzZQorICAgICAgICBSZW5kZXJP
YmplY3Q6OmFic29sdXRlVGV4dFJlY3RzIGluc3RlYWQgb2YgUmFuZ2U6OmFic29sdXRlUmVjdFJl
Y3RzLgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01hdGNoZXMp
OiBEaXR0by4KKwogMjAyMC0wNC0xMCAgUGFibG8gU2FhdmVkcmEgIDxwc2FhdmVkcmFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIFJlcGxhY2UgZm9wZW4vZmNsb3NlIGJ5IGZvcGVu
L2ZzZWVrIGZ1bmN0aW9ucyBpbiBNZW1vcnlQcmVzc3VyZU1vbml0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9z
L0NoYW5nZUxvZwppbmRleCBmYTIxYjk2ZDIzM2NhZTgyOWRmOGE4ZDI1MGZhNzczZTcwZTA5MDI5
Li4wYTQ5NDdkM2MzMzI3MzkzMjk3YzI4MDM0NzQ4ODA2ODE5M2U0MmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDQtMTAgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgbW9yZSBmcm9tIGxpdmUgcmFuZ2Ug
dG8gU2ltcGxlUmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM2OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVJT1MubW06CisgICAgICAgICgtW1dlYkZyYW1lIGNsb3Nlc3RDYXJldFJlY3RJbk1hcmtl
ZFRleHRSYW5nZUZvclBvaW50Ol0pOiBVc2UKKyAgICAgICAgUmVuZGVyT2JqZWN0OjphYnNvbHV0
ZVRleHRSZWN0cyBpbnN0ZWFkIG9mIFJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cy4KKyAgICAgICAg
QWxzbyBhZGRlZCBzb21lIG1pc3NpbmcgbnVsbCBjaGVja3MgYW5kIHJlb3JnYW5pemVkIHRoZSBm
dW5jdGlvbiBhCisgICAgICAgIGJpdCB0byBtYWtlIGl0IG1vcmUgZGlyZWN0IGFuZCBzbGlnaHRs
eSBjbGVhZXJlci4KKwogMjAyMC0wNC0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW0NvY29hXSBTaW1wbGlmeSBOU0FycmF5LCBOU0RpY3Rpb25hcnksIGFuZCBO
U051bWJlciBpZGlvbXMgdGhyb3VnaG91dCBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwppbmRleCA3NGRlZDk2Njg3Yzk2NDliMmMxYTU0ODM5MWQ0MWNjZGIzMTAzMTVlLi4xODM2NzJh
NzBmMmFjZjk5M2MyMzI3MTYwMjRhODE3MGQ4YzJkZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjAtMDQtMTAgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgbW9yZSBmcm9tIGxpdmUgcmFuZ2UgdG8gU2ltcGxl
UmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM2OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTS5tbToKKyAgICAgICAgKC1bRE9N
Tm9kZSB0ZXh0UmVjdHNdKTogTW92ZWQgaW1wbGVtZW50YXRpb24gaGVyZS4gVGhlcmUncyBubyBy
ZWFzb24gZm9yIE5vZGUKKyAgICAgICAgdG8gaGF2ZSBhIHRleHRSZWN0cyBmdW5jdGlvbiwgc2lu
Y2UgaXQncyBhIGxheW91dC9yZW5kZXJpbmcgb3BlcmF0aW9uIGFuZCBhCisgICAgICAgIHNpbmds
ZSBub2RlIGlzIGFsc28gYW4gdW51c3VhbCBzcGVjaWFsIGNhc2UsIGJ1dCBmb3Igbm93IHdlIHdp
bGwga2VlcCB0aGlzCisgICAgICAgIGxlZ2FjeSBtZXRob2QgZm9yIGNvbXBhdGliaWxpdHkgd2l0
aCBvbGQgY2xpZW50cy4KKyAgICAgICAgKC1bRE9NUmFuZ2UgdGV4dFJlY3RzXSk6IENoYW5nZWQg
dG8gY2FsbCBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzCisgICAgICAgIGluc3RlYWQg
b2YgUmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFt
ZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3JlY3RzRm9yUmFuZ2U6XSk6IENoYW5nZWQgdG8g
Y2FsbCAtW0RPTVJhbmdlIHRleHRSZWN0c10gaW5zdGVhZAorICAgICAgICBvZiBSYW5nZTo6YWJz
b2x1dGVUZXh0UmVjdHMuIERvbid0IHJlYWxseSBuZWVkIHR3byBpZGVudGljYWwgbWV0aG9kcyBi
dXQKKyAgICAgICAgcHJvYmFibHkgbmVlZCB0byBrZWVwIHRoaXMgYXJvdW5kIGZvciBjb21wYXRp
YmxpdGl5LgorCiAyMDIwLTA0LTA4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbQ29jb2FdIFNpbXBsaWZ5IE5TQXJyYXksIE5TRGljdGlvbmFyeSwgYW5kIE5TTnVt
YmVyIGlkaW9tcyB0aHJvdWdob3V0IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDI3M2E1Mzk4
ODgyYmJiMWFhYjRjMWYxY2VjOGJjODJjZmI4ZDE1NWIuLjhlNThkMGVkZDg2ZjJhYjkyNjZiNTcw
ZGYxNzlmMWNlMTRkZDQwOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTI1NTQsMTMgKzI1NTQsNiBA
QCB2b2lkIE5vZGU6OnJlbW92ZWRMYXN0UmVmKCkKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9p
ZCBOb2RlOjp0ZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cykgY29uc3QKLXsKLSAgICBh
dXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICByYW5nZS0+c2VsZWN0
Tm9kZUNvbnRlbnRzKGNvbnN0X2Nhc3Q8Tm9kZSY+KCp0aGlzKSk7Ci0gICAgcmFuZ2UtPmFic29s
dXRlVGV4dFJlY3RzKHJlY3RzKTsKLX0KLQogdW5zaWduZWQgTm9kZTo6Y29ubmVjdGVkU3ViZnJh
bWVDb3VudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgp
LT5jb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgOiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggMTgyMmFmNzM2
NDczOTc2OWIzNzFlMTljMzUxNTg5MzJkZjc5NGZlOS4uZTJiMzA2MTcyNjJhNDI1MDlhMjFiZmRk
NzRhNTM3NDhjYWRjZDY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC00OTMsOCArNDkzLDYgQEAgcHVibGlj
OgogICAgIHZvaWQgdW5yZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbiYpOwogICAgIHZvaWQgbm90aWZ5TXV0YXRpb25PYnNlcnZlcnNO
b2RlV2lsbERldGFjaCgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0ZXh0UmVjdHMoVmVj
dG9yPEludFJlY3Q+JikgY29uc3Q7Ci0KICAgICB1bnNpZ25lZCBjb25uZWN0ZWRTdWJmcmFtZUNv
dW50KCkgY29uc3Q7CiAgICAgdm9pZCBpbmNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KHVu
c2lnbmVkIGFtb3VudCA9IDEpOwogICAgIHZvaWQgZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVD
b3VudCh1bnNpZ25lZCBhbW91bnQgPSAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDBmYzMyNmMy
OWM0YzFmNDViZTE4N2Y5MDIyNGY4YzM0MjhiYmZhMTYuLjY0YThhYTgyNjdkZDI1NDE3YTY1YTAz
YmViMGYxNjI1OTBlMDcxMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTE0NSwxMSArMTE0NSw5
IEBAIE5vZGUqIFJhbmdlOjpwYXN0TGFzdE5vZGUoKSBjb25zdAogCiBJbnRSZWN0IFJhbmdlOjph
YnNvbHV0ZUJvdW5kaW5nQm94KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9w
dGlvbnMpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCByZXN1bHQ7CiAgICAgVmVjdG9yPEludFJlY3Q+
IHJlY3RzOwotICAgIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2U7Ci0gICAgUmFuZ2VJ
bkZpeGVkUG9zaXRpb24qIGluRml4ZWQgPSBudWxscHRyOwotICAgIGFic29sdXRlVGV4dFJlY3Rz
KHJlY3RzLCB1c2VTZWxlY3Rpb25IZWlnaHQsIGluRml4ZWQsIHJlY3RPcHRpb25zKTsKKyAgICBh
YnNvbHV0ZVRleHRSZWN0cyhyZWN0cywgZmFsc2UsIHJlY3RPcHRpb25zKTsKKyAgICBJbnRSZWN0
IHJlc3VsdDsKICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgcmVzdWx0LnVu
aXRlKHJlY3QpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMTgwLDcgKzExNzgsNyBAQCBWZWN0
b3I8RmxvYXRSZWN0PiBSYW5nZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KE5vZGUqIG5v
ZGUsIFJlbmRlclRleHQmIHJlbgogICAgIHJldHVybiBib3VuZGluZ0JveGVzKHRleHRRdWFkcyk7
CiB9CiAKLXZvaWQgUmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0LCBSYW5nZUluRml4ZWRQb3NpdGlvbiogaW5GaXhl
ZCwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9ucykgY29uc3QKK3Zv
aWQgUmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGJvb2wg
dXNlU2VsZWN0aW9uSGVpZ2h0LCBPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVoYXZpb3I+IHJlY3RP
cHRpb25zKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBwcm9i
YWJseSByZXR1cm4gRmxvYXRSZWN0cy4KIApAQCAtMTIwNCw5ICsxMjAyLDYgQEAgdm9pZCBSYW5n
ZTo6YWJzb2x1dGVUZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgYm9vbCB1c2VTZWxl
Y3Rpb25IZWlnaHQsIFIKICAgICAgICAgYWxsRml4ZWQgJj0gaXNGaXhlZDsKICAgICAgICAgc29t
ZUZpeGVkIHw9IGlzRml4ZWQ7CiAgICAgfQotCi0gICAgaWYgKGluRml4ZWQpCi0gICAgICAgICpp
bkZpeGVkID0gYWxsRml4ZWQgPyBFbnRpcmVseUZpeGVkUG9zaXRpb24gOiAoc29tZUZpeGVkID8g
UGFydGlhbGx5Rml4ZWRQb3NpdGlvbiA6IE5vdEZpeGVkUG9zaXRpb24pOwogfQogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggMDJjYTEzMDg0Yzk4MGQxMDgwYWFm
MjA5NDA5YTBmZWFkODk0MjFmYy4uODJjMzI2NTM1OTYzYWE2ZmQ4ZWQ3NWU2M2NkODIyYzM3MmYx
MjNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAgLTEwNywxMiArMTA3LDYgQEAgcHVibGljOgogCiAgICAg
U2hhZG93Um9vdCogc2hhZG93Um9vdCgpIGNvbnN0OwogCi0gICAgZW51bSBSYW5nZUluRml4ZWRQ
b3NpdGlvbiB7Ci0gICAgICAgIE5vdEZpeGVkUG9zaXRpb24sCi0gICAgICAgIFBhcnRpYWxseUZp
eGVkUG9zaXRpb24sCi0gICAgICAgIEVudGlyZWx5Rml4ZWRQb3NpdGlvbgotICAgIH07Ci0gICAg
CiAgICAgZW51bSBjbGFzcyBCb3VuZGluZ1JlY3RCZWhhdmlvciA6IHVpbnQ4X3QgewogICAgICAg
ICBSZXNwZWN0Q2xpcHBpbmcgPSAxIDw8IDAsCiAgICAgICAgIFVzZVZpc2libGVCb3VuZHMgPSAx
IDw8IDEsCkBAIC0xMjEsNyArMTE1LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICAvLyBOb3Qg
dHJhbnNmb3JtLWZyaWVuZGx5Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhYnNvbHV0ZVRleHRS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlLCBS
YW5nZUluRml4ZWRQb3NpdGlvbiogPSBudWxscHRyLCBPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVo
YXZpb3I+ID0geyB9KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFic29sdXRlVGV4
dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2Us
IE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gPSB7IH0pIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIEludFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveChPcHRpb25TZXQ8Qm91bmRpbmdS
ZWN0QmVoYXZpb3I+ID0geyB9KSBjb25zdDsKIAogICAgIC8vIFRyYW5zZm9ybS1mcmllbmRseQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDg0YjM2ZTA3NTI3NTJiNzMxNzAxNWYxYTI5
NGY0ZGU4Nzc4MGI1MjcuLjExNDM5MzFiOGIyNGJmNjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTMzNjUsNiArMzM2NSw4IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBjb2xsYXBzZUNhcmV0V2lkdGgoSW50UmVjdCYgcmVjdCkKIAogSW50UmVj
dCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKIHsKKyAgICBy
YW5nZS0+b3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworCiAgICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJF
QU0pOwogCiAgICAgaWYgKHJhbmdlLT5jb2xsYXBzZWQoKSkgewpAQCAtMzM3OCw3ICszMzgwLDcg
QEAgSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QK
ICAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5lbmRQb3NpdGlv
bigpLCBVUFNUUkVBTSk7CiAKICAgICBpZiAoaW5TYW1lTGluZShzdGFydFZpc2libGVQb3NpdGlv
biwgZW5kVmlzaWJsZVBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEZvclJhbmdlKHJhbmdlKSk7Cisg
ICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UpKSk7CiAKICAgICBMYXlvdXRVbml0IGV4
dHJhV2lkdGhUb0VuZE9mTGluZTsKICAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gUmVuZGVy
ZWRQb3NpdGlvbihzdGFydFZpc2libGVQb3NpdGlvbikuYWJzb2x1dGVSZWN0KCZleHRyYVdpZHRo
VG9FbmRPZkxpbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCmluZGV4IGNkMzA3MzdiZmFhZDQ2YjI0NDQxYjk5ODQ0M2M1ZjgzYjQyMmI3ZmEuLjQz
OWMwMzNjZTIyYTM4NTE3ZmNiNzViNzAwNmI1NmY2M2Y3NmYyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTQ5MCw3ICs0OTAsNyBAQCBO
U0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+
JiBjb250ZXh0UmFuZ2UsIERhdGFEZQogICAgICAgICBjdXJyZW50VG9wTGV2ZWxJbmRleCsrOwog
ICAgIH0KIAotICAgIFZlY3RvcjxWZWN0b3I8UmVmUHRyPFJhbmdlPj4+IGFsbFJlc3VsdFJhbmdl
czsKKyAgICBWZWN0b3I8VmVjdG9yPFNpbXBsZVJhbmdlPj4gYWxsUmVzdWx0UmFuZ2VzOwogICAg
IFRleHRJdGVyYXRvciBpdGVyYXRvcigqY29udGV4dFJhbmdlKTsKICAgICBDRkluZGV4IGl0ZXJh
dG9yQ291bnQgPSAwOwogCkBAIC01MDMsMTkgKzUwMywxNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0
aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERh
dGFEZQogICAgICAgICBmb3IgKDsgaXRlcmF0b3JDb3VudCA8IGl0ZXJhdG9yVGFyZ2V0QWR2YW5j
ZUNvdW50OyArK2l0ZXJhdG9yQ291bnQpCiAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7
CiAKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IGZyYWdtZW50UmFuZ2VzOwotICAgICAg
ICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShpdGVyYXRvci5y
YW5nZSgpKTsKKyAgICAgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiBmcmFnbWVudFJhbmdlczsKICAg
ICAgICAgQ0ZJbmRleCBmcmFnbWVudEluZGV4ID0gcXVlcnlSYW5nZS5zdGFydC5xdWVyeUluZGV4
OwogICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCA9PSBxdWVyeVJhbmdlLmVuZC5xdWVyeUluZGV4
KSB7CiAgICAgICAgICAgICBDaGFyYWN0ZXJSYW5nZSBmcmFnbWVudFJhbmdlOwogICAgICAgICAg
ICAgZnJhZ21lbnRSYW5nZS5sb2NhdGlvbiA9IHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0OwogICAg
ICAgICAgICAgZnJhZ21lbnRSYW5nZS5sZW5ndGggPSBxdWVyeVJhbmdlLmVuZC5vZmZzZXQgLSBx
dWVyeVJhbmdlLnN0YXJ0Lm9mZnNldDsKLSAgICAgICAgICAgIGZyYWdtZW50UmFuZ2VzLmFwcGVu
ZChjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpjdXJyZW50UmFuZ2UsIGZy
YWdtZW50UmFuZ2UpKSk7CisgICAgICAgICAgICBmcmFnbWVudFJhbmdlcy5hcHBlbmQocmVzb2x2
ZUNoYXJhY3RlclJhbmdlKGl0ZXJhdG9yLnJhbmdlKCksIGZyYWdtZW50UmFuZ2UpKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghcXVlcnlSYW5nZS5zdGFydC5vZmZzZXQpCi0g
ICAgICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMuYXBwZW5kKGN1cnJlbnRSYW5nZSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnJhZ21lbnRSYW5nZXMuYXBwZW5kKFJhbmdl
OjpjcmVhdGUoY3VycmVudFJhbmdlLT5vd25lckRvY3VtZW50KCksICZjdXJyZW50UmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCksIGN1cnJlbnRSYW5nZS0+c3RhcnRPZmZzZXQoKSArIHF1ZXJ5UmFuZ2Uu
c3RhcnQub2Zmc2V0LCAmY3VycmVudFJhbmdlLT5lbmRDb250YWluZXIoKSwgY3VycmVudFJhbmdl
LT5lbmRPZmZzZXQoKSkpOworICAgICAgICAgICAgYXV0byByYW5nZSA9IGl0ZXJhdG9yLnJhbmdl
KCk7CisgICAgICAgICAgICByYW5nZS5zdGFydC5vZmZzZXQgKz0gcXVlcnlSYW5nZS5zdGFydC5v
ZmZzZXQ7CisgICAgICAgICAgICBmcmFnbWVudFJhbmdlcy5hcHBlbmQocmFuZ2UpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICB3aGlsZSAoZnJhZ21lbnRJbmRleCA8IHF1ZXJ5UmFuZ2Uu
ZW5kLnF1ZXJ5SW5kZXgpIHsKQEAgLTUyNCwxOCArNTIyLDE4IEBAIE5TQXJyYXkgKkRhdGFEZXRl
Y3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwg
RGF0YURlCiAgICAgICAgICAgICBmb3IgKDsgaXRlcmF0b3JDb3VudCA8IGl0ZXJhdG9yVGFyZ2V0
QWR2YW5jZUNvdW50OyArK2l0ZXJhdG9yQ291bnQpCiAgICAgICAgICAgICAgICAgaXRlcmF0b3Iu
YWR2YW5jZSgpOwogCi0gICAgICAgICAgICBjdXJyZW50UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uo
aXRlcmF0b3IucmFuZ2UoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGZyYWdtZW50UmFu
Z2UgPSAoZnJhZ21lbnRJbmRleCA9PSBxdWVyeVJhbmdlLmVuZC5xdWVyeUluZGV4KSA/ICBSYW5n
ZTo6Y3JlYXRlKGN1cnJlbnRSYW5nZS0+b3duZXJEb2N1bWVudCgpLCAmY3VycmVudFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLCBjdXJyZW50UmFuZ2UtPnN0YXJ0T2Zmc2V0KCksICZjdXJyZW50UmFu
Z2UtPmVuZENvbnRhaW5lcigpLCBjdXJyZW50UmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgKyBxdWVyeVJh
bmdlLmVuZC5vZmZzZXQpIDogY3VycmVudFJhbmdlOwotICAgICAgICAgICAgUmVmUHRyPFJhbmdl
PiBwcmV2aW91c1JhbmdlID0gZnJhZ21lbnRSYW5nZXMubGFzdCgpOwotICAgICAgICAgICAgaWYg
KCZwcmV2aW91c1JhbmdlLT5zdGFydENvbnRhaW5lcigpID09ICZmcmFnbWVudFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpKSB7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoY3VycmVudFJhbmdlLT5vd25lckRvY3VtZW50KCksICZwcmV2aW91c1JhbmdlLT5zdGFy
dENvbnRhaW5lcigpLCBwcmV2aW91c1JhbmdlLT5zdGFydE9mZnNldCgpLCAmZnJhZ21lbnRSYW5n
ZS0+ZW5kQ29udGFpbmVyKCksIGZyYWdtZW50UmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICAgICAg
ICAgICAgICBmcmFnbWVudFJhbmdlcy5sYXN0KCkgPSBmcmFnbWVudFJhbmdlOwotICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBhdXRvIGZyYWdtZW50UmFuZ2UgPSBpdGVyYXRvci5yYW5n
ZSgpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50SW5kZXggPT0gcXVlcnlSYW5nZS5lbmQucXVl
cnlJbmRleCkKKyAgICAgICAgICAgICAgICBmcmFnbWVudFJhbmdlLmVuZC5vZmZzZXQgPSBmcmFn
bWVudFJhbmdlLnN0YXJ0Lm9mZnNldCArIHF1ZXJ5UmFuZ2UuZW5kLm9mZnNldDsKKyAgICAgICAg
ICAgIGF1dG8mIHByZXZpb3VzUmFuZ2UgPSBmcmFnbWVudFJhbmdlcy5sYXN0KCk7CisgICAgICAg
ICAgICBpZiAocHJldmlvdXNSYW5nZS5zdGFydC5jb250YWluZXIucHRyKCkgPT0gZnJhZ21lbnRS
YW5nZS5zdGFydC5jb250YWluZXIucHRyKCkpCisgICAgICAgICAgICAgICAgcHJldmlvdXNSYW5n
ZS5lbmQgPSBmcmFnbWVudFJhbmdlLmVuZDsKKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBmcmFnbWVudFJhbmdlcy5hcHBlbmQoZnJhZ21lbnRSYW5nZSk7CiAgICAgICAgIH0KICAg
ICAgICAgYWxsUmVzdWx0UmFuZ2VzLmFwcGVuZChXVEZNb3ZlKGZyYWdtZW50UmFuZ2VzKSk7CiAg
ICAgfQotICAgIAorCiAgICAgYXV0byB0eiA9IGFkb3B0Q0YoQ0ZUaW1lWm9uZUNvcHlEZWZhdWx0
KCkpOwogICAgIE5TRGF0ZSAqcmVmZXJlbmNlRGF0ZSA9IFtjb250ZXh0IG9iamVjdEZvcktleTpn
ZXRrRGF0YURldGVjdG9yc1JlZmVyZW5jZURhdGVLZXkoKV0gPzogW05TRGF0ZSBkYXRlXTsKICAg
ICBUZXh0KiBsYXN0VGV4dE5vZGVUb1VwZGF0ZSA9IG51bGxwdHI7CkBAIC01NjUsMTMgKzU2Mywx
MyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8
UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZQogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFBv
c2l0aW9uLCBQb3NpdGlvbj4+IHJhbmdlQm91bmRhcmllczsKICAgICAgICAgcmFuZ2VCb3VuZGFy
aWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVzdWx0UmFuZ2VzLnNpemUoKSk7CiAgICAgICAg
IGZvciAoYXV0byYgcmFuZ2UgOiByZXN1bHRSYW5nZXMpCi0gICAgICAgICAgICByYW5nZUJvdW5k
YXJpZXMudW5jaGVja2VkQXBwZW5kKHsgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVu
ZFBvc2l0aW9uKCkgfSk7CisgICAgICAgICAgICByYW5nZUJvdW5kYXJpZXMudW5jaGVja2VkQXBw
ZW5kKHsgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSwgY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCkgfSk7CiAKICAgICAgICAgTlNTdHJpbmcgKmlk
ZW50aWZpZXIgPSBkYXRhRGV0ZWN0b3JTdHJpbmdGb3JQYXRoKGluZGV4UGF0aHNbcmVzdWx0SW5k
ZXhdLmdldCgpKTsKICAgICAgICAgTlNTdHJpbmcgKmNvcnJlc3BvbmRpbmdVUkwgPSBjb25zdHJ1
Y3RVUkxTdHJpbmdGb3JSZXN1bHQoY29yZVJlc3VsdCwgaWRlbnRpZmllciwgcmVmZXJlbmNlRGF0
ZSwgKE5TVGltZVpvbmUgKil0ei5nZXQoKSwgdHlwZXMpOwogICAgICAgICBib29sIGRpZE1vZGlm
eURPTSA9IGZhbHNlOwogCi0gICAgICAgIGlmICghY29ycmVzcG9uZGluZ1VSTCB8fCBzZWFyY2hG
b3JMaW5rUmVtb3ZpbmdFeGlzdGluZ0RETGlua3MocmVzdWx0UmFuZ2VzLmZpcnN0KCktPnN0YXJ0
Q29udGFpbmVyKCksIHJlc3VsdFJhbmdlcy5sYXN0KCktPmVuZENvbnRhaW5lcigpLCBkaWRNb2Rp
ZnlET00pKQorICAgICAgICBpZiAoIWNvcnJlc3BvbmRpbmdVUkwgfHwgc2VhcmNoRm9yTGlua1Jl
bW92aW5nRXhpc3RpbmdERExpbmtzKHJlc3VsdFJhbmdlcy5maXJzdCgpLnN0YXJ0LmNvbnRhaW5l
ciwgcmVzdWx0UmFuZ2VzLmxhc3QoKS5lbmQuY29udGFpbmVyLCBkaWRNb2RpZnlET00pKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAoZGlkTW9kaWZ5RE9NKSB7
CkBAIC01ODcsMTQgKzU4NSwxNCBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250
ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZQogICAgICAgICBC
T09MIHNob3VsZFVzZUxpZ2h0TGlua3MgPSBzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFNo
b3VsZFVzZUxpZ2h0TGlua3NGb3JSZXN1bHQoY29yZVJlc3VsdCwgW2luZGV4UGF0aHNbcmVzdWx0
SW5kZXhdIGxlbmd0aF0gPiAxKTsKIAogICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogcmVzdWx0
UmFuZ2VzKSB7Ci0gICAgICAgICAgICBhdXRvKiBwYXJlbnROb2RlID0gcmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCkucGFyZW50Tm9kZSgpOworICAgICAgICAgICAgYXV0byogcGFyZW50Tm9kZSA9IHJh
bmdlLnN0YXJ0LmNvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFwYXJl
bnROb2RlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAoIWlz
PFRleHQ+KHJhbmdlLT5zdGFydENvbnRhaW5lcigpKSkKKyAgICAgICAgICAgIGlmICghaXM8VGV4
dD4ocmFuZ2Uuc3RhcnQuY29udGFpbmVyKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgYXV0byYgY3VycmVudFRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4ocmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCkpOworICAgICAgICAgICAgYXV0byYgY3VycmVudFRleHROb2RlID0g
ZG93bmNhc3Q8VGV4dD4ocmFuZ2Uuc3RhcnQuY29udGFpbmVyLmdldCgpKTsKICAgICAgICAgICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGN1cnJlbnRUZXh0Tm9kZS5kb2N1bWVudCgpOwogICAgICAg
ICAgICAgU3RyaW5nIHRleHROb2RlRGF0YTsKIApAQCAtNjAyLDE4ICs2MDAsMTggQEAgTlNBcnJh
eSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29u
dGV4dFJhbmdlLCBEYXRhRGUKICAgICAgICAgICAgICAgICBpZiAobGFzdFRleHROb2RlVG9VcGRh
dGUpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5zZXREYXRhKGxh
c3ROb2RlQ29udGVudCk7CiAgICAgICAgICAgICAgICAgY29udGVudE9mZnNldCA9IDA7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJhbmdlLT5zdGFydE9mZnNldCgpID4gMCkKLSAgICAgICAgICAgICAg
ICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLmRhdGEoKS5zdWJzdHJpbmcoMCwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5v
ZmZzZXQgPiAwKQorICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZURhdGEgPSBjdXJyZW50VGV4
dE5vZGUuZGF0YSgpLnN1YnN0cmluZygwLCByYW5nZS5zdGFydC5vZmZzZXQpOwogICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2Rl
LmRhdGEoKS5zdWJzdHJpbmcoY29udGVudE9mZnNldCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgLSBj
b250ZW50T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB0ZXh0Tm9kZURhdGEgPSBjdXJyZW50VGV4
dE5vZGUuZGF0YSgpLnN1YnN0cmluZyhjb250ZW50T2Zmc2V0LCByYW5nZS5zdGFydC5vZmZzZXQg
LSBjb250ZW50T2Zmc2V0KTsKIAogICAgICAgICAgICAgaWYgKCF0ZXh0Tm9kZURhdGEuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCwgdGV4dE5vZGVEYXRhKSwgJmN1cnJlbnRUZXh0Tm9kZSk7Ci0gICAgICAg
ICAgICAgICAgY29udGVudE9mZnNldCA9IHJhbmdlLT5zdGFydE9mZnNldCgpOworICAgICAgICAg
ICAgICAgIGNvbnRlbnRPZmZzZXQgPSByYW5nZS5zdGFydC5vZmZzZXQ7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0dWFsIGFuY2hvciBub2RlIGFuZCBpbnNl
cnQgaXQgYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUuCi0gICAgICAgICAgICB0ZXh0Tm9kZURhdGEg
PSBjdXJyZW50VGV4dE5vZGUuZGF0YSgpLnN1YnN0cmluZyhyYW5nZS0+c3RhcnRPZmZzZXQoKSwg
cmFuZ2UtPmVuZE9mZnNldCgpIC0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgICAgICAgICAg
dGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLmRhdGEoKS5zdWJzdHJpbmcocmFuZ2Uuc3Rh
cnQub2Zmc2V0LCByYW5nZS5lbmQub2Zmc2V0IC0gcmFuZ2Uuc3RhcnQub2Zmc2V0KTsKICAgICAg
ICAgICAgIFJlZjxUZXh0PiBuZXdUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgdGV4
dE5vZGVEYXRhKTsKICAgICAgICAgICAgIHBhcmVudE5vZGUtPmluc2VydEJlZm9yZShuZXdUZXh0
Tm9kZS5jb3B5UmVmKCksICZjdXJyZW50VGV4dE5vZGUpOwogICAgICAgICAgICAgCkBAIC02NTIs
OSArNjUwLDkgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2Uo
UmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGUKIAogICAgICAgICAgICAgcGFyZW50
Tm9kZS0+aW5zZXJ0QmVmb3JlKFdURk1vdmUoYW5jaG9yRWxlbWVudCksICZjdXJyZW50VGV4dE5v
ZGUpOwogCi0gICAgICAgICAgICBjb250ZW50T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOwor
ICAgICAgICAgICAgY29udGVudE9mZnNldCA9IHJhbmdlLmVuZC5vZmZzZXQ7CiAKLSAgICAgICAg
ICAgIGxhc3ROb2RlQ29udGVudCA9IGN1cnJlbnRUZXh0Tm9kZS5kYXRhKCkuc3Vic3RyaW5nKHJh
bmdlLT5lbmRPZmZzZXQoKSwgY3VycmVudFRleHROb2RlLmxlbmd0aCgpIC0gcmFuZ2UtPmVuZE9m
ZnNldCgpKTsKKyAgICAgICAgICAgIGxhc3ROb2RlQ29udGVudCA9IGN1cnJlbnRUZXh0Tm9kZS5k
YXRhKCkuc3Vic3RyaW5nKHJhbmdlLmVuZC5vZmZzZXQsIGN1cnJlbnRUZXh0Tm9kZS5sZW5ndGgo
KSAtIHJhbmdlLmVuZC5vZmZzZXQpOwogICAgICAgICAgICAgbGFzdFRleHROb2RlVG9VcGRhdGUg
PSAmY3VycmVudFRleHROb2RlOwogICAgICAgICB9ICAgICAgICAKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDEx
Zjc2ZTkzYTAwYzFjNTRkMWFiMDYzOGE5MTA2YTBmODhhZTkxN2IuLmFhOGIyYjhjZDJjZmM4ZGYx
NzZhMTllZjBjNGNmNjdmNTVhNjZiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC00MzUsNyArNDM1LDcgQEAgVGV4dEZp
ZWxkU2VsZWN0aW9uRGlyZWN0aW9uIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRl
U2VsZWN0aW9uRGlyZWN0aW8KICAgICByZXR1cm4gc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKSA/
IChzZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IFNlbGVjdGlvbkhhc0ZvcndhcmREaXJlY3Rpb24g
OiBTZWxlY3Rpb25IYXNCYWNrd2FyZERpcmVjdGlvbikgOiBTZWxlY3Rpb25IYXNOb0RpcmVjdGlv
bjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdl
KE5vZGUqIG5vZGUsIGludCBvZmZzZXQsIE5vZGUqJiBjb250YWluZXJOb2RlLCBpbnQmIG9mZnNl
dEluQ29udGFpbmVyKQorc3RhdGljIHZvaWQgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2Uo
Tm9kZSogbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBOb2RlKiYgY29udGFpbmVyTm9kZSwgdW5zaWdu
ZWQmIG9mZnNldEluQ29udGFpbmVyKQogewogICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsK
ICAgICAgICAgY29udGFpbmVyTm9kZSA9IG5vZGU7CkBAIC00NDYsMjkgKzQ0NiwzMCBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2UoTm9kZSogbm9kZSwg
aW50IG9mZnNldCwgTm9kZSomCiAgICAgfQogfQogCi1SZWZQdHI8UmFuZ2U+IEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb24oKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb24oKSBjb25zdAogewogICAgIGlm
ICghcmVuZGVyZXIoKSB8fCAhaXNUZXh0RmllbGQoKSB8fCAhaGFzQ2FjaGVkU2VsZWN0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgaW50IHN0YXJ0ID0gbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKLSAgICBpbnQgZW5kID0g
bV9jYWNoZWRTZWxlY3Rpb25FbmQ7CisgICAgdW5zaWduZWQgc3RhcnQgPSBtX2NhY2hlZFNlbGVj
dGlvblN0YXJ0OworICAgIHVuc2lnbmVkIGVuZCA9IG1fY2FjaGVkU2VsZWN0aW9uRW5kOwogCiAg
ICAgQVNTRVJUKHN0YXJ0IDw9IGVuZCk7CiAgICAgYXV0byBpbm5lclRleHQgPSBpbm5lclRleHRF
bGVtZW50KCk7CiAgICAgaWYgKCFpbm5lclRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCFpbm5lclRleHQtPmZpcnN0
Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgaW5uZXJU
ZXh0LCAwLCBpbm5lclRleHQsIDApOworICAgICAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpp
bm5lclRleHQsIDAgfSwgeyAqaW5uZXJUZXh0LCAwIH0gfTsKIAotICAgIGludCBvZmZzZXQgPSAw
OworICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CiAgICAgTm9kZSogc3RhcnROb2RlID0gbnVsbHB0
cjsKICAgICBOb2RlKiBlbmROb2RlID0gbnVsbHB0cjsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBu
b2RlID0gaW5uZXJUZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KCpub2RlLCBpbm5lclRleHQuZ2V0KCkpKSB7CiAgICAgICAgIEFTU0VSVCghbm9kZS0+
Zmlyc3RDaGlsZCgpKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGV4dE5vZGUoKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKGJyVGFnKSk7Ci0gICAgICAgIGludCBsZW5ndGggPSBpczxUZXh0Pigqbm9k
ZSkgPyBkb3duY2FzdDxUZXh0Pigqbm9kZSkubGVuZ3RoKCkgOiAxOworCisgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGlzPFRleHQ+KCpub2RlKSA/IGRvd25jYXN0PFRleHQ+KCpub2RlKS5sZW5n
dGgoKSA6IDE7CiAKICAgICAgICAgaWYgKG9mZnNldCA8PSBzdGFydCAmJiBzdGFydCA8PSBvZmZz
ZXQgKyBsZW5ndGgpCiAgICAgICAgICAgICBzZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZShu
b2RlLmdldCgpLCBzdGFydCAtIG9mZnNldCwgc3RhcnROb2RlLCBzdGFydCk7CkBAIC00ODIsOSAr
NDgzLDkgQEAgUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0
aW9uKCkgY29uc3QKICAgICB9CiAKICAgICBpZiAoIXN0YXJ0Tm9kZSB8fCAhZW5kTm9kZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE5vZGUsIHN0YXJ0LCBlbmRO
b2RlLCBlbmQpOworICAgIHJldHVybiBTaW1wbGVSYW5nZSB7IHsgKnN0YXJ0Tm9kZSwgc3RhcnQg
fSwgeyAqZW5kTm9kZSwgZW5kIH0gfTsKIH0KIAogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6cmVzdG9yZUNhY2hlZFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1v
ZGUsIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgKaW5kZXggNDA3ODk0ZjVl
Y2NlNmExMjI4ZTc5YmRiOGYzYzk1Nzg5YWMyOWZiZS4uMDRjYTk5ZWE2YTIyMjdiMzgxOGJiOWI0
ZjYzNDgwNzJjOTNkODRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuaApAQCAtMzMsNiArMzMsOCBAQCBjbGFzcyBSZW5kZXJUZXh0Q29u
dHJvbDsKIGNsYXNzIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDsKIGNsYXNzIFZpc2libGVQ
b3NpdGlvbjsKIAorc3RydWN0IFNpbXBsZVJhbmdlOworCiBlbnVtIGNsYXNzIEF1dG9GaWxsQnV0
dG9uVHlwZSA6IHVpbnQ4X3QgeyBOb25lLCBDcmVkZW50aWFscywgQ29udGFjdHMsIFN0cm9uZ1Bh
c3N3b3JkLCBDcmVkaXRDYXJkIH07CiBlbnVtIFRleHRGaWVsZFNlbGVjdGlvbkRpcmVjdGlvbiB7
IFNlbGVjdGlvbkhhc05vRGlyZWN0aW9uLCBTZWxlY3Rpb25IYXNGb3J3YXJkRGlyZWN0aW9uLCBT
ZWxlY3Rpb25IYXNCYWNrd2FyZERpcmVjdGlvbiB9OwogZW51bSBUZXh0RmllbGRFdmVudEJlaGF2
aW9yIHsgRGlzcGF0Y2hOb0V2ZW50LCBEaXNwYXRjaENoYW5nZUV2ZW50LCBEaXNwYXRjaElucHV0
QW5kQ2hhbmdlRXZlbnQgfTsKQEAgLTc4LDcgKzgwLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgRXhjZXB0aW9uT3I8dm9pZD4gc2V0UmFuZ2VUZXh0KGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGNvbnN0IFN0cmlu
ZyYgc2VsZWN0aW9uTW9kZSk7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQs
IGludCBlbmQsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5n
ZUludGVudCYgPSBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgVGV4dEZpZWxkU2Vs
ZWN0aW9uRGlyZWN0aW9uID0gU2VsZWN0aW9uSGFzTm9EaXJlY3Rpb24sIFNlbGVjdGlvblJldmVh
bE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpEb05vdFJldmVhbCwgY29uc3QgQVhUZXh0U3Rh
dGVDaGFuZ2VJbnRlbnQmID0gQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKSk7Ci0gICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3Rpb24oKSBjb25zdDsKKworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBz
ZWxlY3Rpb24oKSBjb25zdDsKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7CiAKICAg
ICB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpIGZpbmFsOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggNDJlZmVhZGIwZDFhNjgzNjVjNWMzNDMwODBl
NWZmYjI2ODA2OGJiOC4uZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5NTFmNjk3MDZmYzRkNmY4MGUwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0zMzcsNyArMzM3LDcgQEAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwg
RnJhbWUmIGZyYW1lLCBjb25zdCBSYW4KICNlbmRpZgogICAgIGVsc2UgewogICAgICAgICBWZWN0
b3I8SW50UmVjdD4gYWJzb2x1dGVUZXh0UmVjdHM7Ci0gICAgICAgIHJhbmdlLmFic29sdXRlVGV4
dFJlY3RzKGFic29sdXRlVGV4dFJlY3RzLCB0ZXh0UmVjdEhlaWdodCA9PSBGcmFtZVNlbGVjdGlv
bjo6VGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0LCBudWxscHRyLCBSYW5nZTo6
Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlJlc3BlY3RDbGlwcGluZyk7CisgICAgICAgIHJhbmdlLmFi
c29sdXRlVGV4dFJlY3RzKGFic29sdXRlVGV4dFJlY3RzLCB0ZXh0UmVjdEhlaWdodCA9PSBGcmFt
ZVNlbGVjdGlvbjo6VGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0LCBSYW5nZTo6
Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlJlc3BlY3RDbGlwcGluZyk7CiAKICAgICAgICAgdGV4dFJl
Y3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWJzb2x1dGVUZXh0UmVjdHMuc2l6ZSgpKTsKICAg
ICAgICAgZm9yIChhdXRvJiByZWN0IDogYWJzb2x1dGVUZXh0UmVjdHMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaAppbmRleCBhN2U4NDk0ZGZiZDQzYWFjNjg1OTFiMDZk
Y2ZkOTRhM2U3Mzk0MjUxLi42NTRhZGEwMTI1ZjgwY2Y4MWVmMjcxODI0M2U3OTBjYWQ4MDcxMTY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmgKQEAgLTM3LDggKzM3
LDYgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBPbGRTZWxlY3Rp
b25EYXRhOwogICAgIAogY2xhc3MgSGlnaGxpZ2h0RGF0YSB7CiBwdWJsaWM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDhjMTQ0ZDY1MWYyMjU1ZmExYWQ0
YjA3ZjU5MDJmNjhmNDZkNjg1NzQuLmNkMmI4NGNlNjFhZDNmNWIyYzU2NTQ0NTRiODgzOTg4OWQ4
NGI4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC03
NDYsMTQgKzc0Niw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUZvY3VzUmluZ1F1YWRz
KFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKICAgICB9CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJP
YmplY3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdl
KQotewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmFuZ2UtPm93
bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKLSAgICByZXR1cm4gdW5pdGVkQm91bmRpbmdC
b3hlcyhhYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UpKTsKLX0KLQogdm9pZCBSZW5kZXJPYmplY3Q6
OmFkZEFic29sdXRlUmVjdEZvckxheWVyKExheW91dFJlY3QmIHJlc3VsdCkKIHsKICAgICBpZiAo
aGFzTGF5ZXIoKSkKQEAgLTE5MDIsNiArMTg5NCwyMiBAQCBWZWN0b3I8RmxvYXRRdWFkPiBSZW5k
ZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9v
bAogICAgIHJldHVybiBxdWFkczsKIH0KIAorVmVjdG9yPEludFJlY3Q+IFJlbmRlck9iamVjdDo6
YWJzb2x1dGVUZXh0UmVjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIHVzZVNlbGVj
dGlvbkhlaWdodCkKK3sKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CisgICAgZm9yIChhdXRv
JiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGF1dG8gcmVuZGVy
ZXIgPSBub2RlLnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+
aXNCUigpKQorICAgICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUmVjdHMocmVjdHMsIGZsb29y
ZWRMYXlvdXRQb2ludChyZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKCkpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIpKSB7CisgICAgICAgICAgICBhdXRvIG9mZnNl
dFJhbmdlID0gY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKHJhbmdlLCBkb3duY2FzdDxDaGFyYWN0
ZXJEYXRhPihub2RlKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHF1YWQgOiBkb3duY2FzdDxS
ZW5kZXJUZXh0PigqcmVuZGVyZXIpLmFic29sdXRlUXVhZHNGb3JSYW5nZShvZmZzZXRSYW5nZS5z
dGFydCwgb2Zmc2V0UmFuZ2UuZW5kLCB1c2VTZWxlY3Rpb25IZWlnaHQpKQorICAgICAgICAgICAg
ICAgIHJlY3RzLmFwcGVuZChxdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiByZWN0czsKK30KKwogU3RyaW5nIFJlbmRlck9iamVjdDo6ZGVi
dWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDg1Mzg0NTU4NGRhMjY1Yjc5
MTM0YzNhNjA3MjEzZTYxMjUxOGQ5OGMuLmViOGI0MmNjZWI1ZmU0NGM4ZDQwMDg5YTcwMGQ3ODM4
NjJjMGY5MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTU1
OCw3ICs1NTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlRm9jdXNSaW5n
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBW
ZWN0b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZVRleHRRdWFkcyhjb25zdCBTaW1wbGVSYW5nZSYsIGJv
b2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgYWJz
b2x1dGVCb3VuZGluZ0JveFJlY3RGb3JSYW5nZShjb25zdCBSYW5nZSopOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBWZWN0b3I8SW50UmVjdD4gYWJzb2x1dGVUZXh0UmVjdHMoY29uc3QgU2lt
cGxlUmFuZ2UmLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKIAogICAgIC8vIHRo
ZSByZWN0IHRoYXQgd2lsbCBiZSBwYWludGVkIGlmIHRoaXMgb2JqZWN0IGlzIHBhc3NlZCBhcyB0
aGUgcGFpbnRpbmdSb290CiAgICAgV0VCQ09SRV9FWFBPUlQgTGF5b3V0UmVjdCBwYWludGluZ1Jv
b3RSZWN0KExheW91dFJlY3QmIHRvcExldmVsUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTU5vZGUubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTU5vZGUubW0K
aW5kZXggY2Q4MDYxZWMxYjIwM2YwMzM0NjdmNTQwYjkzN2QwYzFiNzFiODQ2Yi4uNTkwMTYxZjAw
OTI0YjFkMjJmYTlmNWJkNDFlOWZkMzA0MjBjZmE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01Ob2RlLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NTm9kZS5t
bQpAQCAtMzAsNiArMzAsOCBAQAogI2ltcG9ydCAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW1wb3J0
ICJXS0RPTUludGVybmFscy5oIgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2Uu
aD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBAaW1wbGVtZW50YXRpb24g
V0tET01Ob2RlCkBAIC0xMTEsOSArMTEzLDcgQEAgLSAoTlNBcnJheSAqKXRleHRSZWN0cwogICAg
IF9pbXBsLT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwogICAgIGlmICghX2ltcGwtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHJlY3RzOwotICAgIF9pbXBsLT50ZXh0UmVjdHMocmVj
dHMpOwotICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzKS5hdXRvcmVsZWFzZSgpOworICAg
IHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0
UmVjdHMoV2ViQ29yZTo6bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpfaW1wbCkpKS5h
dXRvcmVsZWFzZSgpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQppbmRleCBh
YzZmZmIxZTk3OGM4Mzg4MTJhOGIxMWIzNzIyNDkxOGVlZTI4ZTRiLi5lZTI5NjViMDA5ZDJkYzY1
OTUxYTI0Nzk0Y2M3ZmI2Mzc1ODc5OWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KQEAg
LTEyOSw5ICsxMjksNyBAQCAtIChCT09MKWlzQ29sbGFwc2VkCiAtIChOU0FycmF5ICopdGV4dFJl
Y3RzCiB7CiAgICAgX2ltcGwtPm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gcmVjdHM7Ci0g
ICAgX2ltcGwtPmFic29sdXRlVGV4dFJlY3RzKHJlY3RzKTsKLSAgICByZXR1cm4gY3JlYXRlTlNB
cnJheShyZWN0cykuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKCpfaW1wbCkpLmF1dG9yZWxlYXNl
KCk7CiB9CiAKIC0gKFdLRE9NUmFuZ2UgKilyYW5nZUJ5RXhwYW5kaW5nVG9Xb3JkQm91bmRhcnlC
eUNoYXJhY3RlcnM6KE5TVUludGVnZXIpY2hhcmFjdGVycyBpbkRpcmVjdGlvbjooV0tET01SYW5n
ZURpcmVjdGlvbilkaXJlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCBjNTJhZjY1OWIxMGE5MDY0ODlkZDhhMTkz
NjA3MjAyNmU4Y2JjMzZkLi5mYTFmYWM0OGFjYzcwNDlhYjE4OTNmZmEwYWM3NDBmZWZlYmE1NjRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCkBAIC0yMDIsMTAgKzIwMiw5IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OnVwZGF0
ZUZpbmRVSUFmdGVyUGFnZVNjcm9sbChib29sIGZvdW5kLCBjb25zdCBTdHJpbmcmIHN0cmluCiAg
ICAgICAgICAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7CiAgICAgICAgICAgICBWZWN0b3I8SW50
UmVjdD4gbWF0Y2hSZWN0czsKICAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpIHsKLSAgICAgICAgICAgICAg
ICByYW5nZS0+YWJzb2x1dGVUZXh0UmVjdHMobWF0Y2hSZWN0cyk7Ci0gICAgICAgICAgICAgICAg
bV9maW5kTWF0Y2hlcy5hcHBlbmQocmFuZ2UpOworICAgICAgICAgICAgICAgIG1hdGNoUmVjdHMg
PSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKCpyYW5nZSk7CisgICAgICAgICAgICAg
ICAgbV9maW5kTWF0Y2hlcy5hcHBlbmQoV1RGTW92ZShyYW5nZSkpOwogICAgICAgICAgICAgfQot
CiAgICAgICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlk
RmluZFN0cmluZyhzdHJpbmcsIG1hdGNoUmVjdHMsIG1hdGNoQ291bnQsIG1fZm91bmRTdHJpbmdN
YXRjaEluZGV4LCBkaWRXcmFwID09IERpZFdyYXA6OlllcykpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjkyLDExICsyOTEsOCBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nTWF0Y2hl
cyhjb25zdCBTdHJpbmcmIHN0cmluZywgRmluZE9wdGlvbnMgb3B0aW9ucwogICAgIG1fd2ViUGFn
ZS0+Y29yZVBhZ2UoKS0+ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKHN0cmluZywgY29yZShvcHRp
b25zKSwgbWF4TWF0Y2hDb3VudCwgbV9maW5kTWF0Y2hlcywgaW5kZXhGb3JTZWxlY3Rpb24pOwog
CiAgICAgVmVjdG9yPFZlY3RvcjxJbnRSZWN0Pj4gbWF0Y2hSZWN0czsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZmluZE1hdGNoZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVmVjdG9y
PEludFJlY3Q+IHJlY3RzOwotICAgICAgICBtX2ZpbmRNYXRjaGVzW2ldLT5hYnNvbHV0ZVRleHRS
ZWN0cyhyZWN0cyk7Ci0gICAgICAgIG1hdGNoUmVjdHMuYXBwZW5kKFdURk1vdmUocmVjdHMpKTsK
LSAgICB9CisgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fZmluZE1hdGNoZXMpCisgICAgICAgIG1h
dGNoUmVjdHMuYXBwZW5kKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoKnJhbmdlKSk7
CiAKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0
cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCBpbmRleEZvclNlbGVjdGlvbikpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
SU9TLm1tCmluZGV4IDVkNjk0ZTRlMjViMmJmOTdjMjk4ZmQxZmMyOGU2MzUxZmRkNjFjMmYuLmU0
MzhmMDE1MTc2MWE2MGNiZmI4ZTFkYmE3MzIyYTU2YjE0MDFlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBAIC0x
MzMsNTIgKzEzMyw1MiBAQCAtIChDR1JlY3QpY2FyZXRSZWN0Rm9yUG9zaXRpb246KFdlYlZpc2li
bGVQb3NpdGlvbiAqKXBvc2l0aW9uCiAKIC0gKENHUmVjdCljbG9zZXN0Q2FyZXRSZWN0SW5NYXJr
ZWRUZXh0UmFuZ2VGb3JQb2ludDooQ0dQb2ludClwb2ludAogewotICAgIEZyYW1lICpmcmFtZSA9
IFtzZWxmIGNvcmVGcmFtZV07Ci0gICAgUmFuZ2UgKm1hcmtlZFRleHRSYW5nZSA9IGZyYW1lLT5l
ZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBt
YXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24gPSBtYXJrZWRUZXh0UmFuZ2UgPyBWaXNpYmxlU2VsZWN0
aW9uKCptYXJrZWRUZXh0UmFuZ2UpIDogVmlzaWJsZVNlbGVjdGlvbigpOwotCi0gICAgSW50UmVj
dCByZXN1bHQ7Ci0KLSAgICBpZiAobWFya2VkVGV4dFJhbmdlU2VsZWN0aW9uLmlzUmFuZ2UoKSkg
ewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQobWFya2VkVGV4dFJhbmdlU2VsZWN0aW9u
LnN0YXJ0KCkpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kKG1hcmtlZFRleHRSYW5nZVNl
bGVjdGlvbi5lbmQoKSk7Ci0KLSAgICAgICAgLy8gQWRqdXN0IHBvcyBhbmQgZ2l2ZSBpdCBhbiBh
cHByb3ByaWF0ZSBhZmZpbml0eS4KLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKLSAgICAg
ICAgVmVjdG9yPEludFJlY3Q+IGludFJlY3RzOwotICAgICAgICBtYXJrZWRUZXh0UmFuZ2UtPmFi
c29sdXRlVGV4dFJlY3RzKGludFJlY3RzLCBOTyk7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBp
bnRSZWN0cy5zaXplKCk7Ci0gICAgICAgIENHUmVjdCBmaXJzdFJlY3QgPSBpbnRSZWN0c1swXTsK
LSAgICAgICAgQ0dSZWN0IGxhc3RSZWN0ICA9IGludFJlY3RzW3NpemUtMV07Ci0gICAgICAgIGlm
IChwb2ludC55IDwgZmlyc3RSZWN0Lm9yaWdpbi55KSB7Ci0gICAgICAgICAgICBwb2ludC55ID0g
Zmlyc3RSZWN0Lm9yaWdpbi55OwotICAgICAgICAgICAgcG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQ6cG9pbnRdOwotICAgICAgICAgICAgcG9zLnNldEFmZmluaXR5KFVQU1RSRUFN
KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChwb2ludC55ID49IGxhc3RSZWN0Lm9yaWdp
bi55KSB7Ci0gICAgICAgICAgICBwb2ludC55ID0gbGFzdFJlY3Qub3JpZ2luLnk7Ci0gICAgICAg
ICAgICBwb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF07Ci0gICAgICAg
ICAgICBwb3Muc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBwb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2lu
dF07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwb3MgPT0gc3RhcnQgfHwgcG9z
IDwgc3RhcnQpIHsKLSAgICAgICAgICAgIHN0YXJ0LnNldEFmZmluaXR5KFVQU1RSRUFNKTsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IHN0YXJ0LmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKLSAgICAgICAg
fSBlbHNlIGlmIChwb3MgPiBlbmQpIHsKLSAgICAgICAgICAgIGVuZC5zZXRBZmZpbml0eShET1dO
U1RSRUFNKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGVuZC5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBwb3MuYWJzb2x1dGVDYXJl
dEJvdW5kcygpOwotICAgICAgICB9CisgICAgYXV0byBmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gZG9jdW1l
bnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOworCisgICAgYXV0byBtYXJr
ZWRUZXh0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgpOwor
ICAgIGF1dG8gbWFya2VkVGV4dFJhbmdlU2VsZWN0aW9uID0gbWFya2VkVGV4dFJhbmdlID8gVmlz
aWJsZVNlbGVjdGlvbigqbWFya2VkVGV4dFJhbmdlKSA6IFZpc2libGVTZWxlY3Rpb24oKTsKKwor
ICAgIGlmICghbWFya2VkVGV4dFJhbmdlU2VsZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgcmV0
dXJuIFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XS5hYnNvbHV0ZUNhcmV0Qm91
bmRzKCk7CisKKyAgICBhdXRvIGludFJlY3RzID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRS
ZWN0cygqbWFya2VkVGV4dFJhbmdlKTsKKyAgICBDR1JlY3QgZmlyc3RSZWN0ID0gaW50UmVjdHMu
Zmlyc3QoKTsKKyAgICBDR1JlY3QgbGFzdFJlY3QgPSBpbnRSZWN0cy5sYXN0KCk7CisKKyAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnQgPSBtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24uc3RhcnQoKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gbWFya2VkVGV4dFJhbmdlU2VsZWN0aW9uLmVuZCgp
OworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsKKworICAgIC8vIEFkanVzdCBwb3NpdGlv
biBhbmQgZ2l2ZSBpdCBhbiBhcHByb3ByaWF0ZSBhZmZpbml0eS4KKyAgICBpZiAocG9pbnQueSA8
IGZpcnN0UmVjdC5vcmlnaW4ueSkgeworICAgICAgICBwb2ludC55ID0gZmlyc3RSZWN0Lm9yaWdp
bi55OworICAgICAgICBwb3NpdGlvbiA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclBvaW50OnBv
aW50XTsKKyAgICAgICAgcG9zaXRpb24uc2V0QWZmaW5pdHkoVVBTVFJFQU0pOworICAgIH0gZWxz
ZSBpZiAocG9pbnQueSA+PSBsYXN0UmVjdC5vcmlnaW4ueSkgeworICAgICAgICBwb2ludC55ID0g
bGFzdFJlY3Qub3JpZ2luLnk7CisgICAgICAgIHBvc2l0aW9uID0gW3NlbGYgdmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQ6cG9pbnRdOworICAgICAgICBwb3NpdGlvbi5zZXRBZmZpbml0eShET1dOU1RS
RUFNKTsKICAgICB9IGVsc2UgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gW3NlbGYg
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdOwotICAgICAgICByZXN1bHQgPSBwb3MuYWJz
b2x1dGVDYXJldEJvdW5kcygpOworICAgICAgICBwb3NpdGlvbiA9IFtzZWxmIHZpc2libGVQb3Np
dGlvbkZvclBvaW50OnBvaW50XTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChDR1JlY3QpIHJl
c3VsdDsgICAgCisKKyAgICBpZiAocG9zaXRpb24gPT0gc3RhcnQgfHwgcG9zaXRpb24gPCBzdGFy
dCkgeworICAgICAgICBzdGFydC5zZXRBZmZpbml0eShVUFNUUkVBTSk7CisgICAgICAgIHJldHVy
biBzdGFydC5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CisgICAgfQorICAgIGlmIChwb3NpdGlvbiA+
IGVuZCkgeworICAgICAgICBlbmQuc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7CisgICAgICAgIHJl
dHVybiBlbmQuYWJzb2x1dGVDYXJldEJvdW5kcygpOworICAgIH0KKyAgICByZXR1cm4gcG9zaXRp
b24uYWJzb2x1dGVDYXJldEJvdW5kcygpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9ET00ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
Lm1tCmluZGV4IDllMTI4OTZkNzdmZTA4YmU3ZjBiNjA2ZGMxMWE3ZmExNmU0NzZmNDIuLmQ4YWY2
NzhkYWYwODg4Mjg0YWJkZGMxY2RiMTBhZGViMTRiNzY3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTS5tbQpAQCAtNzQsOSArNzQsNiBAQAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi0vLyBGSVhNRTogVGhlc2UgbWV0aG9kcyBzaG91bGQgbW92
ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlcyBvZiB0aGUgRE9NIGNsYXNzZXMKLS8vIGFu
ZCB0aGlzIGZpbGUgc2hvdWxkIGJlIGVsaW1pbmF0ZWQuCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAvLyBET01Ob2RlCiAKQEAgLTUwNSw5ICs1MDIsNyBAQCAtIChOU0Fy
cmF5ICopdGV4dFJlY3RzCiAgICAgbm9kZS5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogICAgIGlmICghbm9kZS5yZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiByZWN0czsKLSAgICBub2Rl
LnRleHRSZWN0cyhyZWN0cyk7Ci0gICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocmVjdHMpLmF1dG9y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoUmVuZGVyT2JqZWN0OjphYnNvbHV0
ZVRleHRSZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMobm9kZSkpKS5hdXRvcmVs
ZWFzZSgpOwogfQogCiBAZW5kCkBAIC02MjUsMTAgKzYyMCw4IEBAIC0gKENHSW1hZ2VSZWYpcmVu
ZGVyZWRJbWFnZUZvcmNpbmdCbGFja1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKIC0gKE5TQXJy
YXkgKil0ZXh0UmVjdHMKIHsKICAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNlbGYpOwotICAgIFZl
Y3RvcjxXZWJDb3JlOjpJbnRSZWN0PiByZWN0czsKICAgICByYW5nZS5vd25lckRvY3VtZW50KCku
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmFuZ2UuYWJzb2x1
dGVUZXh0UmVjdHMocmVjdHMpOwotICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzKS5hdXRv
cmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UmVjdHMocmFuZ2UpKS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChOU0FycmF5ICopbGlu
ZUJveFJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpp
bmRleCAyYWJiZDkyNGI3ZWEwMGRhMzAzOTgyZTEwZDQ2MGM1MWFiYzgyMzFhLi5hODFjMzBiN2E5
OTg2MzgzOWIwNTFjNDU5YWZlMDVlMDI3OGVkNGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgIkRPTUVs
ZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NSFRNTEVsZW1lbnRJbnRlcm5hbC5oIgogI2lt
cG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01Qcml2YXRlLmgiCiAjaW1wb3J0
ICJET01SYW5nZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJBcmNoaXZlSW50ZXJuYWwuaCIKICNp
bXBvcnQgIldlYkNocm9tZUNsaWVudC5oIgpAQCAtMTEwOSwxNCArMTExMCw5IEBAIC0gKEJPT0wp
X2xvYWRzU3luY2hyb25vdXNseQogICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5sb2Fk
ZXIoKS5sb2Fkc1N5bmNocm9ub3VzbHkoKTsKIH0KIAotLSAoTlNBcnJheSAqKV9yZWN0c0ZvclJh
bmdlOihET01SYW5nZSAqKWRvbVJhbmdlCistIChOU0FycmF5ICopX3JlY3RzRm9yUmFuZ2U6KERP
TVJhbmdlICopcmFuZ2UKIHsKLSAgICBhdXRvKiByYW5nZSA9IGNvcmUoZG9tUmFuZ2UpOwotICAg
IGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBAW107Ci0gICAgVmVjdG9yPFdlYkNvcmU6Oklu
dFJlY3Q+IGludFJlY3RzOwotICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRSZWN0cyhpbnRSZWN0cywg
Tk8pOwotICAgIHJldHVybiBjcmVhdGVOU0FycmF5KGludFJlY3RzKS5hdXRvcmVsZWFzZSgpOwor
ICAgIHJldHVybiByYW5nZSA/IHJhbmdlLnRleHRSZWN0cyA6IEBbXTsKIH0KIAogLSAoRE9NUmFu
Z2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0IHNlY29uZFBv
aW50OihDR1BvaW50KXNlY29uZAo=
</data>
<flag name="review"
          id="411612"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>