<?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>63655</bug_id>
          
          <creation_ts>2011-06-29 14:07:02 -0700</creation_ts>
          <short_desc>Switch computeWidth and computeHeight functions to new layout types</short_desc>
          <delta_ts>2011-06-29 17:00:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>429866</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-29 14:07:02 -0700</bug_when>
    <thetext>More conversion fun!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429907</commentid>
    <comment_count>1</comment_count>
      <attachid>99155</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-29 14:51:29 -0700</bug_when>
    <thetext>Created attachment 99155
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429910</commentid>
    <comment_count>2</comment_count>
      <attachid>99155</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-29 14:59:25 -0700</bug_when>
    <thetext>Comment on attachment 99155
Patch

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

&gt; Source/WebCore/rendering/LayoutTypes.h:44
&gt; +#define LAYOUT_MAX INT_MAX

I guess we could use numeric_limits&lt;LayoutUnit&gt;::max() in the callsites.  I&apos;m not sure that&apos;s any better though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429913</commentid>
    <comment_count>3</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-29 15:01:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 99155 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=99155&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/LayoutTypes.h:44
&gt; &gt; +#define LAYOUT_MAX INT_MAX
&gt; 
&gt; I guess we could use numeric_limits&lt;LayoutUnit&gt;::max() in the callsites.  I&apos;m not sure that&apos;s any better though.

I like that way more actually. I&apos;ll change it before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429922</commentid>
    <comment_count>4</comment_count>
      <attachid>99155</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-29 15:16:38 -0700</bug_when>
    <thetext>Comment on attachment 99155
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/LayoutTypes.h:44
&gt;&gt;&gt; +#define LAYOUT_MAX INT_MAX
&gt;&gt; 
&gt;&gt; I guess we could use numeric_limits&lt;LayoutUnit&gt;::max() in the callsites.  I&apos;m not sure that&apos;s any better though.
&gt; 
&gt; I like that way more actually. I&apos;ll change it before landing.

Good. I think it’s much better!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429962</commentid>
    <comment_count>5</comment_count>
      <attachid>99173</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-29 16:17:14 -0700</bug_when>
    <thetext>Created attachment 99173
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430000</commentid>
    <comment_count>6</comment_count>
      <attachid>99173</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-29 17:00:02 -0700</bug_when>
    <thetext>Comment on attachment 99173
Patch for landing

Clearing flags on attachment: 99173

Committed r90069: &lt;http://trac.webkit.org/changeset/90069&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430001</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-29 17:00:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99155</attachid>
            <date>2011-06-29 14:51:29 -0700</date>
            <delta_ts>2011-06-29 16:17:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63655-20110629145128.patch</filename>
            <type>text/plain</type>
            <size>48812</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMDQ4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTEtMDYtMjkgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBjb21wdXRlV2lkdGggYW5kIGNvbXB1dGVIZWln
aHQgZnVuY3Rpb25zIHRvIG5ldyBsYXlvdXQgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNjU1CisKKyAgICAgICAgU3dpdGNoIGNvbXB1dGVX
aWR0aCBhbmQgY29tcHV0ZUhlaWdodCBmdW5jdGlvbnMgb3ZlciB0byB0aGUgbmV3IGxheW91dCB1
bml0IGFic3RyYWN0aW9uLgorCisgICAgICAgIE1ha2luZyBhIHBvaW50IHRvIG1hcmsgcm91bmRp
bmcgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkIGJ5IGxpbmtpbmcgdG8gYSBuZXcK
KyAgICAgICAgdHJhY2tpbmcgYnVnOiA2MzY0NS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5v
IGZ1bmN0aW9uYWxpdHkgY2hhbmdlcy4KKworICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVM
YXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0Ojpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91
dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9MYXlvdXRUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpj
b21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2lj
YWxXaWR0aFVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2lj
YWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhl
aWdodFVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRh
Z2VMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVJl
cGxhY2VkTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0
ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdo
dFJlc3BlY3RpbmdNaW5NYXhIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
b21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlcklGcmFtZTo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklt
YWdlOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW1hZ2U6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTG9naWNh
bFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNsaWRlcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6
Y29tcHV0ZUxvZ2ljYWxXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjpjb21wdXRlUmVwbGFjZWRMb2dpY2Fs
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OmNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpjb21wdXRlTG9naWNhbFdpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6OmNvbXB1dGVMb2dpY2FsSGVp
Z2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZUludHJpbnNpY1dpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9n
aWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bGF5
b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaDoKKwogMjAxMS0w
Ni0yOSAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0
b1RhYmxlTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmNwcAkocmV2aXNpb24gOTAwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDExICsy
MTksMTEgQEAgc3RhdGljIGJvb2wgc2hvdWxkU2NhbGVDb2x1bW5zKFJlbmRlclRhYgogICAgIHJl
dHVybiBzY2FsZTsKIH0KIAotdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpCit2b2lkIEF1dG9UYWJs
ZUxheW91dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluV2lk
dGgsIExheW91dFVuaXQmIG1heFdpZHRoKQogewogICAgIGZ1bGxSZWNhbGMoKTsKIAotICAgIGlu
dCBzcGFuTWF4TG9naWNhbFdpZHRoID0gY2FsY0VmZmVjdGl2ZUxvZ2ljYWxXaWR0aCgpOworICAg
IExheW91dFVuaXQgc3Bhbk1heExvZ2ljYWxXaWR0aCA9IGNhbGNFZmZlY3RpdmVMb2dpY2FsV2lk
dGgoKTsKICAgICBtaW5XaWR0aCA9IDA7CiAgICAgbWF4V2lkdGggPSAwOwogICAgIGZsb2F0IG1h
eFBlcmNlbnQgPSAwOwpAQCAtMjUxLDEzICsyNTEsMTQgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6
OmNvbXB1dGVQcmVmZXJyZWRMbwogCiAgICAgaWYgKHNjYWxlQ29sdW1ucykgewogICAgICAgICBt
YXhOb25QZXJjZW50ID0gbWF4Tm9uUGVyY2VudCAqIDEwMCAvIG1heChyZW1haW5pbmdQZXJjZW50
LCBlcHNpbG9uKTsKLSAgICAgICAgbWF4V2lkdGggPSBtYXgobWF4V2lkdGgsIHN0YXRpY19jYXN0
PGludD4obWluKG1heE5vblBlcmNlbnQsIElOVF9NQVggLyAyLjBmKSkpOwotICAgICAgICBtYXhX
aWR0aCA9IG1heChtYXhXaWR0aCwgc3RhdGljX2Nhc3Q8aW50PihtaW4obWF4UGVyY2VudCwgSU5U
X01BWCAvIDIuMGYpKSk7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdW5uZWNlc3Nhcnkgcm91
bmRpbmcgd2hlbiBsYXlvdXQgaXMgb2ZmIGludHM6IHdlYmtpdC5vcmcvYi82MzY1NgorICAgICAg
ICBtYXhXaWR0aCA9IG1heChtYXhXaWR0aCwgc3RhdGljX2Nhc3Q8aW50PihtaW4obWF4Tm9uUGVy
Y2VudCwgTEFZT1VUX01BWCAvIDIuMGYpKSk7CisgICAgICAgIG1heFdpZHRoID0gbWF4KG1heFdp
ZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KG1pbihtYXhQZXJjZW50LCBMQVlPVVRfTUFYIC8gMi4wZikp
KTsKICAgICB9CiAKICAgICBtYXhXaWR0aCA9IG1heChtYXhXaWR0aCwgc3Bhbk1heExvZ2ljYWxX
aWR0aCk7CiAKLSAgICBpbnQgYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nID0gbV90YWJsZS0+Ym9y
ZGVyc1BhZGRpbmdBbmRTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKTsKKyAgICBMYXlvdXRVbml0IGJv
cmRlcnNQYWRkaW5nQW5kU3BhY2luZyA9IG1fdGFibGUtPmJvcmRlcnNQYWRkaW5nQW5kU3BhY2lu
Z0luUm93RGlyZWN0aW9uKCk7CiAgICAgbWluV2lkdGggKz0gYm9yZGVyc1BhZGRpbmdBbmRTcGFj
aW5nOwogICAgIG1heFdpZHRoICs9IGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZzsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAkocmV2aXNpb24gOTAw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgQXV0b1RhYmxlTGF5b3V0X2gKICNk
ZWZpbmUgQXV0b1RhYmxlTGF5b3V0X2gKIAorI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5j
bHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiVGFibGVMYXlvdXQuaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CkBAIC0zNSw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBBdXRvVGFibGVMYXlvdXQo
UmVuZGVyVGFibGUqKTsKICAgICB+QXV0b1RhYmxlTGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoaW50JiBtaW5XaWR0aCwgaW50JiBtYXhX
aWR0aCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKExh
eW91dFVuaXQmIG1pbldpZHRoLCBMYXlvdXRVbml0JiBtYXhXaWR0aCk7CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0ZpeGVkVGFibGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAkocmV2aXNpb24gOTAwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
OSw3ICsxODksNyBAQCBpbnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkoaW50CiAv
LyBLZWVwIHRoaXMgaW4gc3luY2ggd2l0aCBCTE9DS19NQVhfV0lEVEggaW4gUmVuZGVyQmxvY2su
Y3BwCiAjZGVmaW5lIFRBQkxFX01BWF9XSURUSCAxNTAwMAogCi12b2lkIEZpeGVkVGFibGVMYXlv
dXQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4
V2lkdGgpCit2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKExheW91dFVuaXQmIG1pbldpZHRoLCBMYXlvdXRVbml0JiBtYXhXaWR0aCkKIHsKICAgICAv
LyBGSVhNRTogVGhpcyBlbnRpcmUgY2FsY3VsYXRpb24gaXMgaW5jb3JyZWN0IGZvciBib3RoIG1p
bndpZHRoIGFuZCBtYXh3aWR0aC4KICAgICAKQEAgLTIwMCwxMCArMjAwLDEwIEBAIHZvaWQgRml4
ZWRUYWJsZUxheW91dDo6Y29tcHV0ZVByZWZlcnJlZEwKICAgICAvLyBjb2xzL2NlbGxzIHdpdGgg
YSBmaXhlZCB3aWR0aC4KICAgICAvLwogICAgIC8vIFRoZSBtYXhpbXVtIHdpZHRoIGlzIG1heCht
aW5XaWR0aCwgdGFibGVXaWR0aCkuCi0gICAgaW50IGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZyA9
IG1fdGFibGUtPmJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9uKCk7CisgICAg
TGF5b3V0VW5pdCBib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmcgPSBtX3RhYmxlLT5ib3JkZXJzUGFk
ZGluZ0FuZFNwYWNpbmdJblJvd0RpcmVjdGlvbigpOwogCi0gICAgaW50IHRhYmxlTG9naWNhbFdp
ZHRoID0gbV90YWJsZS0+c3R5bGUoKS0+bG9naWNhbFdpZHRoKCkuaXNGaXhlZCgpID8gbV90YWJs
ZS0+c3R5bGUoKS0+bG9naWNhbFdpZHRoKCkudmFsdWUoKSAtIGJvcmRlcnNQYWRkaW5nQW5kU3Bh
Y2luZyA6IDA7Ci0gICAgaW50IG13ID0gY2FsY1dpZHRoQXJyYXkodGFibGVMb2dpY2FsV2lkdGgp
ICsgYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nOworICAgIExheW91dFVuaXQgdGFibGVMb2dpY2Fs
V2lkdGggPSBtX3RhYmxlLT5zdHlsZSgpLT5sb2dpY2FsV2lkdGgoKS5pc0ZpeGVkKCkgPyBtX3Rh
YmxlLT5zdHlsZSgpLT5sb2dpY2FsV2lkdGgoKS52YWx1ZSgpIC0gYm9yZGVyc1BhZGRpbmdBbmRT
cGFjaW5nIDogMDsKKyAgICBMYXlvdXRVbml0IG13ID0gY2FsY1dpZHRoQXJyYXkodGFibGVMb2dp
Y2FsV2lkdGgpICsgYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nOwogCiAgICAgbWluV2lkdGggPSBt
YXgobXcsIHRhYmxlTG9naWNhbFdpZHRoKTsKICAgICBtYXhXaWR0aCA9IG1pbldpZHRoOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCShyZXZpc2lv
biA5MDAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgRml4ZWRUYWJsZUxheW91
dF9oCiAjZGVmaW5lIEZpeGVkVGFibGVMYXlvdXRfaAogCisjaW5jbHVkZSAiTGF5b3V0VHlwZXMu
aCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlICJUYWJsZUxheW91dC5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTMzLDcgKzM0LDcgQEAgY2xhc3MgRml4ZWRUYWJsZUxheW91
dCA6IHB1YmxpYyBUYWJsZUxheQogcHVibGljOgogICAgIEZpeGVkVGFibGVMYXlvdXQoUmVuZGVy
VGFibGUqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cyhpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluV2lkdGgsIExheW91dFVuaXQm
IG1heFdpZHRoKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkocmV2aXNpb24gOTAwMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsOSArMzcsMTIgQEAKICNkZWZpbmUgTGF5b3V0VHlwZXNfaAogCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgPGxpbWl0cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNk
ZWZpbmUgTEFZT1VUX01BWCBJTlRfTUFYCisKIHR5cGVkZWYgaW50IExheW91dFVuaXQ7CiB0eXBl
ZGVmIEludFBvaW50IExheW91dFBvaW50OwogdHlwZWRlZiBJbnRTaXplIExheW91dFNpemU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDkw
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYzOCw3ICs0NjM4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYQogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbiht
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
c3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAotICAgIGludCBi
b3JkZXJBbmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOworICAgIExh
eW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgo
KTsKICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBib3JkZXJBbmRQYWRkaW5nOwog
ICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IGJvcmRlckFuZFBhZGRpbmc7CiAKQEAg
LTQ3NTQsNyArNDc1NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJy
ZWQKICAgICBmbG9hdCBpbmxpbmVNYXggPSAwOwogICAgIGZsb2F0IGlubGluZU1pbiA9IDA7CiAK
LSAgICBpbnQgY3cgPSBjb250YWluaW5nQmxvY2soKS0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwor
ICAgIExheW91dFVuaXQgY3cgPSBjb250YWluaW5nQmxvY2soKS0+Y29udGVudExvZ2ljYWxXaWR0
aCgpOwogCiAgICAgLy8gSWYgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUsIHdlIHdhbnQg
dG8gaWdub3JlIGFsbCB3aGl0ZS1zcGFjZS4KICAgICAvLyBBbHNvIHN0cmlwIHNwYWNlcyBpZiB3
ZSBwcmV2aW91c2x5IGhhZCB0ZXh0IHRoYXQgZW5kZWQgaW4gYSB0cmFpbGluZyBzcGFjZS4KQEAg
LTQ4NzIsNyArNDg3Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJy
ZWQKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgaW4gdGV4dC1p
bmRlbnQuICBUaGlzIGlzIGFkZGVkIGluIG9ubHkgb25jZS4KLSAgICAgICAgICAgICAgICBpbnQg
dGkgPSAwOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgdGkgPSAwOwogICAgICAgICAgICAg
ICAgIGlmICghYWRkZWRUZXh0SW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZGVkVGV4
dEluZGVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHRpID0gc3R5bGUoKS0+dGV4dElu
ZGVudCgpLmNhbGNNaW5WYWx1ZShjdyk7CkBAIC00OTQzLDcgKzQ5NDMsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpjb21wdXRlSW5saW5lUHJlZmVycmVkCiAgICAgICAgICAgICAgICAgICAgIHRyYWls
aW5nU3BhY2VDaGlsZCA9IDA7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgaW4gdGV4dC1pbmRl
bnQuICBUaGlzIGlzIGFkZGVkIGluIG9ubHkgb25jZS4KLSAgICAgICAgICAgICAgICBpbnQgdGkg
PSAwOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgdGkgPSAwOwogICAgICAgICAgICAgICAg
IGlmICghYWRkZWRUZXh0SW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZGVkVGV4dElu
ZGVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHRpID0gc3R5bGUoKS0+dGV4dEluZGVu
dCgpLmNhbGNNaW5WYWx1ZShjdyk7CkBAIC01MDE5LDcgKzUwMTksNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMCiAgICAgYm9vbCBub3dyYXAgPSBzdHlsZSgpLT53
aGl0ZVNwYWNlKCkgPT0gTk9XUkFQOwogCiAgICAgUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsKLSAgICBpbnQgZmxvYXRMZWZ0V2lkdGggPSAwLCBmbG9hdFJpZ2h0V2lkdGggPSAw
OworICAgIExheW91dFVuaXQgZmxvYXRMZWZ0V2lkdGggPSAwLCBmbG9hdFJpZ2h0V2lkdGggPSAw
OwogICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAvLyBQb3NpdGlvbmVkIGNoaWxkcmVuIGRv
bid0IGFmZmVjdCB0aGUgbWluL21heCB3aWR0aAogICAgICAgICBpZiAoY2hpbGQtPmlzUG9zaXRp
b25lZCgpKSB7CkBAIC01MDI4LDcgKzUwMjgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRl
QmxvY2tQcmVmZXJyZWRMCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRp
bmcoKSB8fCAoY2hpbGQtPmlzQm94KCkgJiYgdG9SZW5kZXJCb3goY2hpbGQpLT5hdm9pZHNGbG9h
dHMoKSkpIHsKLSAgICAgICAgICAgIGludCBmbG9hdFRvdGFsV2lkdGggPSBmbG9hdExlZnRXaWR0
aCArIGZsb2F0UmlnaHRXaWR0aDsKKyAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRUb3RhbFdp
ZHRoID0gZmxvYXRMZWZ0V2lkdGggKyBmbG9hdFJpZ2h0V2lkdGg7CiAgICAgICAgICAgICBpZiAo
Y2hpbGQtPnN0eWxlKCktPmNsZWFyKCkgJiBDTEVGVCkgewogICAgICAgICAgICAgICAgIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGZsb2F0VG90YWxXaWR0aCwgbV9tYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgICAgIGZsb2F0TGVmdFdpZHRoID0gMDsKQEAg
LTUwNDQsMTYgKzUwNDQsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUJsb2NrUHJlZmVy
cmVkTAogICAgICAgICAvLyBGaXhlZCBtYXJnaW5zIGNhbiBiZSBhZGRlZCBpbiBhcyBpcy4KICAg
ICAgICAgTGVuZ3RoIHN0YXJ0TWFyZ2luTGVuZ3RoID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpblN0
YXJ0KCk7CiAgICAgICAgIExlbmd0aCBlbmRNYXJnaW5MZW5ndGggPSBjaGlsZC0+c3R5bGUoKS0+
bWFyZ2luRW5kKCk7Ci0gICAgICAgIGludCBtYXJnaW4gPSAwOwotICAgICAgICBpbnQgbWFyZ2lu
U3RhcnQgPSAwOwotICAgICAgICBpbnQgbWFyZ2luRW5kID0gMDsKKyAgICAgICAgTGF5b3V0VW5p
dCBtYXJnaW4gPSAwOworICAgICAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0ID0gMDsKKyAgICAg
ICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQgPSAwOwogICAgICAgICBpZiAoc3RhcnRNYXJnaW5MZW5n
dGguaXNGaXhlZCgpKQogICAgICAgICAgICAgbWFyZ2luU3RhcnQgKz0gc3RhcnRNYXJnaW5MZW5n
dGgudmFsdWUoKTsKICAgICAgICAgaWYgKGVuZE1hcmdpbkxlbmd0aC5pc0ZpeGVkKCkpCiAgICAg
ICAgICAgICBtYXJnaW5FbmQgKz0gZW5kTWFyZ2luTGVuZ3RoLnZhbHVlKCk7CiAgICAgICAgIG1h
cmdpbiA9IG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kOwogCi0gICAgICAgIGludCB3ID0gY2hpbGQt
Pm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgbWFyZ2luOworICAgICAgICBMYXlvdXRVbml0
IHcgPSBjaGlsZC0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyBtYXJnaW47CiAgICAgICAg
IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KHcsIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoKTsKICAgICAgICAgCiAgICAgICAgIC8vIElFIGlnbm9yZXMgdGFibGVzIGZvciBjYWxj
dWxhdGlvbiBvZiBub3dyYXAuIE1ha2VzIHNvbWUgc2Vuc2UuCkBAIC01MDY4LDEwICs1MDY4LDEw
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZlcnJlZEwKICAgICAgICAgICAg
ICAgICAvLyBtYXJnaW5zIG9mIHRoZSBvYmplY3QuICBGb3IgbmVnYXRpdmUgbWFyZ2lucywgd2Ug
d2lsbCBhdHRlbXB0IHRvIG92ZXJsYXAgdGhlIGZsb2F0IGlmIHRoZSBuZWdhdGl2ZSBtYXJnaW4K
ICAgICAgICAgICAgICAgICAvLyBpcyBzbWFsbGVyIHRoYW4gdGhlIGZsb2F0IHdpZHRoLgogICAg
ICAgICAgICAgICAgIGJvb2wgbHRyID0gY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBpbnQgbWFyZ2luTG9naWNhbExl
ZnQgPSBsdHIgPyBtYXJnaW5TdGFydCA6IG1hcmdpbkVuZDsKLSAgICAgICAgICAgICAgICBpbnQg
bWFyZ2luTG9naWNhbFJpZ2h0ID0gbHRyID8gbWFyZ2luRW5kIDogbWFyZ2luU3RhcnQ7Ci0gICAg
ICAgICAgICAgICAgaW50IG1heExlZnQgPSBtYXJnaW5Mb2dpY2FsTGVmdCA+IDAgPyBtYXgoZmxv
YXRMZWZ0V2lkdGgsIG1hcmdpbkxvZ2ljYWxMZWZ0KSA6IGZsb2F0TGVmdFdpZHRoICsgbWFyZ2lu
TG9naWNhbExlZnQ7Ci0gICAgICAgICAgICAgICAgaW50IG1heFJpZ2h0ID0gbWFyZ2luTG9naWNh
bFJpZ2h0ID4gMCA/IG1heChmbG9hdFJpZ2h0V2lkdGgsIG1hcmdpbkxvZ2ljYWxSaWdodCkgOiBm
bG9hdFJpZ2h0V2lkdGggKyBtYXJnaW5Mb2dpY2FsUmlnaHQ7CisgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBtYXJnaW5Mb2dpY2FsTGVmdCA9IGx0ciA/IG1hcmdpblN0YXJ0IDogbWFyZ2luRW5k
OworICAgICAgICAgICAgICAgIExheW91dFVuaXQgbWFyZ2luTG9naWNhbFJpZ2h0ID0gbHRyID8g
bWFyZ2luRW5kIDogbWFyZ2luU3RhcnQ7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhM
ZWZ0ID0gbWFyZ2luTG9naWNhbExlZnQgPiAwID8gbWF4KGZsb2F0TGVmdFdpZHRoLCBtYXJnaW5M
b2dpY2FsTGVmdCkgOiBmbG9hdExlZnRXaWR0aCArIG1hcmdpbkxvZ2ljYWxMZWZ0OworICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgbWF4UmlnaHQgPSBtYXJnaW5Mb2dpY2FsUmlnaHQgPiAwID8g
bWF4KGZsb2F0UmlnaHRXaWR0aCwgbWFyZ2luTG9naWNhbFJpZ2h0KSA6IGZsb2F0UmlnaHRXaWR0
aCArIG1hcmdpbkxvZ2ljYWxSaWdodDsKICAgICAgICAgICAgICAgICB3ID0gY2hpbGQtPm1heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgbWF4TGVmdCArIG1heFJpZ2h0OwogICAgICAgICAgICAg
ICAgIHcgPSBtYXgodywgZmxvYXRMZWZ0V2lkdGggKyBmbG9hdFJpZ2h0V2lkdGgpOwogICAgICAg
ICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlz
aW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2MjAsOSArMTYyMCw5IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRl
TG9naWNhbFdpZHRoKCkKICAgICAgICAgY2ItPnNldE1hcmdpbkVuZEZvckNoaWxkKHRoaXMsIGNv
bnRhaW5lckxvZ2ljYWxXaWR0aCAtIGxvZ2ljYWxXaWR0aCgpIC0gY2ItPm1hcmdpblN0YXJ0Rm9y
Q2hpbGQodGhpcykpOwogfQogCi1pbnQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoVXNp
bmcoTG9naWNhbFdpZHRoVHlwZSB3aWR0aFR5cGUsIGludCBhdmFpbGFibGVMb2dpY2FsV2lkdGgp
CitMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKExvZ2ljYWxX
aWR0aFR5cGUgd2lkdGhUeXBlLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkKIHsK
LSAgICBpbnQgbG9naWNhbFdpZHRoUmVzdWx0ID0gbG9naWNhbFdpZHRoKCk7CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsV2lkdGhSZXN1bHQgPSBsb2dpY2FsV2lkdGgoKTsKICAgICBMZW5ndGggbG9n
aWNhbFdpZHRoOwogICAgIGlmICh3aWR0aFR5cGUgPT0gTG9naWNhbFdpZHRoKQogICAgICAgICBs
b2dpY2FsV2lkdGggPSBzdHlsZSgpLT5sb2dpY2FsV2lkdGgoKTsKQEAgLTE2MzIsOCArMTYzMiw4
IEBAIGludCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZygKICAgICAgICAgbG9n
aWNhbFdpZHRoID0gc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCk7CiAKICAgICBpZiAobG9naWNh
bFdpZHRoLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKLSAgICAgICAgaW50IG1hcmdpblN0YXJ0ID0g
c3R5bGUoKS0+bWFyZ2luU3RhcnQoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlTG9naWNhbFdpZHRo
KTsKLSAgICAgICAgaW50IG1hcmdpbkVuZCA9IHN0eWxlKCktPm1hcmdpbkVuZCgpLmNhbGNNaW5W
YWx1ZShhdmFpbGFibGVMb2dpY2FsV2lkdGgpOworICAgICAgICBMYXlvdXRVbml0IG1hcmdpblN0
YXJ0ID0gc3R5bGUoKS0+bWFyZ2luU3RhcnQoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlTG9naWNh
bFdpZHRoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQgPSBzdHlsZSgpLT5tYXJnaW5F
bmQoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKICAgICAgICAgaWYgKGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aCkKICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aFJlc3VsdCA9IGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aCAtIG1hcmdpblN0YXJ0IC0gbWFyZ2luRW5kOwogCkBAIC0xNzgx
LDEzICsxNzgxLDEzIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdodCgpCiAg
ICAgICAgICAgICBjaGVja01pbk1heEhlaWdodCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IGhlaWdodFJlc3VsdDsKKyAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHRSZXN1bHQ7CiAg
ICAgICAgIGlmIChjaGVja01pbk1heEhlaWdodCkgewogICAgICAgICAgICAgaGVpZ2h0UmVzdWx0
ID0gY29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkpOwog
ICAgICAgICAgICAgaWYgKGhlaWdodFJlc3VsdCA9PSAtMSkKICAgICAgICAgICAgICAgICBoZWln
aHRSZXN1bHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICBpbnQgbWluSCA9IGNvbXB1
dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpKTsgLy8gTGVh
dmUgYXMgLTEgaWYgdW5zZXQuCi0gICAgICAgICAgICBpbnQgbWF4SCA9IHN0eWxlKCktPmxvZ2lj
YWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gaGVpZ2h0UmVzdWx0IDogY29tcHV0ZUxvZ2lj
YWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOworICAgICAgICAgICAg
TGF5b3V0VW5pdCBtaW5IID0gY29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dp
Y2FsTWluSGVpZ2h0KCkpOyAvLyBMZWF2ZSBhcyAtMSBpZiB1bnNldC4KKyAgICAgICAgICAgIExh
eW91dFVuaXQgbWF4SCA9IHN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgp
ID8gaGVpZ2h0UmVzdWx0IDogY29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dp
Y2FsTWF4SGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKG1heEggPT0gLTEpCiAgICAgICAgICAg
ICAgICAgbWF4SCA9IGhlaWdodFJlc3VsdDsKICAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IG1p
bihtYXhILCBoZWlnaHRSZXN1bHQpOwpAQCAtMTgxNSwxMCArMTgxNSwxMCBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQogICAgIGlmIChzdHJldGNoZXNUb1ZpZXdwb3J0
KCkgfHwgcGFnaW5hdGVkQ29udGVudE5lZWRzQmFzZUhlaWdodCkgewogICAgICAgICAvLyBGSVhN
RTogRmluaXNoIGFjY291bnRpbmcgZm9yIGJsb2NrIGZsb3cgaGVyZS4KICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NjAzCi0gICAgICAgIGludCBt
YXJnaW5zID0gY29sbGFwc2VkTWFyZ2luQmVmb3JlKCkgKyBjb2xsYXBzZWRNYXJnaW5BZnRlcigp
OwotICAgICAgICBpbnQgdmlzSGVpZ2h0OworICAgICAgICBMYXlvdXRVbml0IG1hcmdpbnMgPSBj
b2xsYXBzZWRNYXJnaW5CZWZvcmUoKSArIGNvbGxhcHNlZE1hcmdpbkFmdGVyKCk7CisgICAgICAg
IExheW91dFVuaXQgdmlzSGVpZ2h0OwogICAgICAgICBpZiAoZG9jdW1lbnQoKS0+cHJpbnRpbmco
KSkKLSAgICAgICAgICAgIHZpc0hlaWdodCA9IHN0YXRpY19jYXN0PGludD4odmlldygpLT5wYWdl
TG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgIHZpc0hlaWdodCA9IHN0YXRpY19jYXN0PExh
eW91dFVuaXQ+KHZpZXcoKS0+cGFnZUxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIGVsc2UgIHsK
ICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAg
ICAgIHZpc0hlaWdodCA9IHZpZXcoKS0+dmlld0hlaWdodCgpOwpAQCAtMTgyOCwxNSArMTgyOCwx
NSBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQogICAgICAgICBpZiAo
aXNSb290KCkpCiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KG1heChsb2dpY2FsSGVpZ2h0
KCksIHZpc0hlaWdodCAtIG1hcmdpbnMpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBp
bnQgbWFyZ2luc0JvcmRlcnNQYWRkaW5nID0gbWFyZ2lucyArIHBhcmVudEJveCgpLT5tYXJnaW5C
ZWZvcmUoKSArIHBhcmVudEJveCgpLT5tYXJnaW5BZnRlcigpICsgcGFyZW50Qm94KCktPmJvcmRl
ckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IG1hcmdp
bnNCb3JkZXJzUGFkZGluZyA9IG1hcmdpbnMgKyBwYXJlbnRCb3goKS0+bWFyZ2luQmVmb3JlKCkg
KyBwYXJlbnRCb3goKS0+bWFyZ2luQWZ0ZXIoKSArIHBhcmVudEJveCgpLT5ib3JkZXJBbmRQYWRk
aW5nTG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChtYXgobG9n
aWNhbEhlaWdodCgpLCB2aXNIZWlnaHQgLSBtYXJnaW5zQm9yZGVyc1BhZGRpbmcpKTsKICAgICAg
ICAgfQogICAgIH0KIH0KIAotaW50IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2lu
Zyhjb25zdCBMZW5ndGgmIGgpCitMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxI
ZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGgpCiB7Ci0gICAgaW50IGxvZ2ljYWxIZWlnaHQgPSAt
MTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAtMTsKICAgICBpZiAoIWguaXNBdXRv
KCkpIHsKICAgICAgICAgaWYgKGguaXNGaXhlZCgpKQogICAgICAgICAgICAgbG9naWNhbEhlaWdo
dCA9IGgudmFsdWUoKTsKQEAgLTE4NTAsOSArMTg1MCw5IEBAIGludCBSZW5kZXJCb3g6OmNvbXB1
dGVMb2dpY2FsSGVpZ2h0VXNpbmcKICAgICByZXR1cm4gbG9naWNhbEhlaWdodDsKIH0KIAotaW50
IFJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNvbnN0IExlbmd0aCYg
aGVpZ2h0KQorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhl
aWdodChjb25zdCBMZW5ndGgmIGhlaWdodCkKIHsKLSAgICBpbnQgcmVzdWx0ID0gLTE7CisgICAg
TGF5b3V0VW5pdCByZXN1bHQgPSAtMTsKICAgICAKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgYmxv
Y2tzIHdpdGggYXV0byBoZWlnaHQgYXJlIHNraXBwZWQsIGFuZCB3ZSBrZWVwIGxvb2tpbmcgZm9y
IGFuIGVuY2xvc2luZwogICAgIC8vIGJsb2NrIHRoYXQgbWF5IGhhdmUgYSBzcGVjaWZpZWQgaGVp
Z2h0IGFuZCB0aGVuIHVzZSBpdC4gSW4gc3RyaWN0IG1vZGUsIHRoaXMgdmlvbGF0ZXMgdGhlCkBA
IC0xOTExLDcgKzE5MTEsNyBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUGVyY2VudGFnZUxvZ2lj
YWxICiAgICAgfSBlbHNlIGlmIChjYi0+aXNSZW5kZXJWaWV3KCkgfHwgKGNiLT5pc0JvZHkoKSAm
JiBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkgfHwgaXNQb3NpdGlvbmVkV2l0aFNwZWNpZmll
ZEhlaWdodCkgewogICAgICAgICAvLyBEb24ndCBhbGxvdyB0aGlzIHRvIGFmZmVjdCB0aGUgYmxv
Y2snIGhlaWdodCgpIG1lbWJlciB2YXJpYWJsZSwgc2luY2UgdGhpcwogICAgICAgICAvLyBjYW4g
Z2V0IGNhbGxlZCB3aGlsZSB0aGUgYmxvY2sgaXMgc3RpbGwgbGF5aW5nIG91dCBpdHMga2lkcy4K
LSAgICAgICAgaW50IG9sZEhlaWdodCA9IGNiLT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIExh
eW91dFVuaXQgb2xkSGVpZ2h0ID0gY2ItPmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgY2ItPmNv
bXB1dGVMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIHJlc3VsdCA9IGNiLT5jb250ZW50TG9naWNh
bEhlaWdodCgpOwogICAgICAgICBjYi0+c2V0TG9naWNhbEhlaWdodChvbGRIZWlnaHQpOwpAQCAt
MTkzMywxOSArMTkzMywxOSBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUGVyY2VudGFnZUxvZ2lj
YWxICiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW50IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxh
Y2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAorTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0
aCkgY29uc3QKIHsKICAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVj
dGluZ01pbk1heFdpZHRoKGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCkt
PmxvZ2ljYWxXaWR0aCgpKSwgaW5jbHVkZU1heFdpZHRoKTsKIH0KIAotaW50IFJlbmRlckJveDo6
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGludCBsb2dp
Y2FsV2lkdGgsIGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJC
b3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CiB7Ci0gICAg
aW50IG1pbkxvZ2ljYWxXaWR0aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0
eWxlKCktPmxvZ2ljYWxNaW5XaWR0aCgpKTsKLSAgICBpbnQgbWF4TG9naWNhbFdpZHRoID0gIWlu
Y2x1ZGVNYXhXaWR0aCB8fCBzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS5pc1VuZGVmaW5lZCgp
ID8gbG9naWNhbFdpZHRoIDogY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUo
KS0+bG9naWNhbE1heFdpZHRoKCkpOworICAgIExheW91dFVuaXQgbWluTG9naWNhbFdpZHRoID0g
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbldpZHRo
KCkpOworICAgIExheW91dFVuaXQgbWF4TG9naWNhbFdpZHRoID0gIWluY2x1ZGVNYXhXaWR0aCB8
fCBzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS5pc1VuZGVmaW5lZCgpID8gbG9naWNhbFdpZHRo
IDogY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbE1heFdp
ZHRoKCkpOwogICAgIHJldHVybiBtYXgobWluTG9naWNhbFdpZHRoLCBtaW4obG9naWNhbFdpZHRo
LCBtYXhMb2dpY2FsV2lkdGgpKTsKIH0KIAotaW50IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2Vk
TG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aCkgY29uc3QKK0xheW91dFVuaXQg
UmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhMZW5ndGggbG9naWNh
bFdpZHRoKSBjb25zdAogewogICAgIHN3aXRjaCAobG9naWNhbFdpZHRoLnR5cGUoKSkgewogICAg
ICAgICBjYXNlIEZpeGVkOgpAQCAtMTk1NCw3ICsxOTU0LDcgQEAgaW50IFJlbmRlckJveDo6Y29t
cHV0ZVJlcGxhY2VkTG9naWNhbFdpZAogICAgICAgICAgICAgLy8gRklYTUU6IGNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBpcyB3cm9uZyBpZiB0aGUgcmVwbGFjZWQgZWxl
bWVudCdzIGJsb2NrLWZsb3cgaXMgcGVycGVuZGljdWxhciB0byB0aGUKICAgICAgICAgICAgIC8v
IGNvbnRhaW5pbmcgYmxvY2sncyBibG9jay1mbG93LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NDk2Ci0gICAgICAgICAgICBjb25zdCBp
bnQgY3cgPSBpc1Bvc2l0aW9uZWQoKSA/IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBv
c2l0aW9uZWQodG9SZW5kZXJCb3hNb2RlbE9iamVjdChjb250YWluZXIoKSkpIDogY29udGFpbmlu
Z0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOworICAgICAgICAgICAgY29uc3QgTGF5b3V0
VW5pdCBjdyA9IGlzUG9zaXRpb25lZCgpID8gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9y
UG9zaXRpb25lZCh0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKSkgOiBjb250YWlu
aW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCk7CiAgICAgICAgICAgICBpZiAoY3cgPiAw
KQogICAgICAgICAgICAgICAgIHJldHVybiBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChs
b2dpY2FsV2lkdGguY2FsY01pblZhbHVlKGN3KSk7CiAgICAgICAgIH0KQEAgLTE5NjQsMTkgKzE5
NjQsMTkgQEAgaW50IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZAogICAgICB9
CiB9CiAKLWludCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25z
dAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBj
b25zdAogewogICAgIHJldHVybiBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0UmVzcGVjdGlu
Z01pbk1heEhlaWdodChjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+
bG9naWNhbEhlaWdodCgpKSk7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxIZWlnaHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGludCBsb2dpY2FsSGVpZ2h0KSBjb25z
dAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRSZXNw
ZWN0aW5nTWluTWF4SGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCkgY29uc3QKIHsKLSAg
ICBpbnQgbWluTG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2lu
ZyhzdHlsZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCkpOwotICAgIGludCBtYXhMb2dpY2FsSGVpZ2h0
ID0gc3R5bGUoKS0+bG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBsb2dpY2FsSGVp
Z2h0IDogY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxN
YXhIZWlnaHQoKSk7CisgICAgTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSGVpZ2h0ID0gY29tcHV0ZVJl
cGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNaW5IZWlnaHQoKSk7Cisg
ICAgTGF5b3V0VW5pdCBtYXhMb2dpY2FsSGVpZ2h0ID0gc3R5bGUoKS0+bG9naWNhbE1heEhlaWdo
dCgpLmlzVW5kZWZpbmVkKCkgPyBsb2dpY2FsSGVpZ2h0IDogY29tcHV0ZVJlcGxhY2VkTG9naWNh
bEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKSk7CiAgICAgcmV0dXJuIG1h
eChtaW5Mb2dpY2FsSGVpZ2h0LCBtaW4obG9naWNhbEhlaWdodCwgbWF4TG9naWNhbEhlaWdodCkp
OwogfQogCi1pbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmco
TGVuZ3RoIGxvZ2ljYWxIZWlnaHQpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0
ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKExlbmd0aCBsb2dpY2FsSGVpZ2h0KSBjb25zdAog
ewogICAgIHN3aXRjaCAobG9naWNhbEhlaWdodC50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGaXhl
ZDoKQEAgLTE5OTQsOSArMTk5NCw5IEBAIGludCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxIZWkKICAgICAgICAgICAgIGlmIChjYi0+aXNQb3NpdGlvbmVkKCkgJiYgY2ItPnN0eWxl
KCktPmhlaWdodCgpLmlzQXV0bygpICYmICEoY2ItPnN0eWxlKCktPnRvcCgpLmlzQXV0bygpIHx8
IGNiLT5zdHlsZSgpLT5ib3R0b20oKS5pc0F1dG8oKSkpIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQoY2ItPmlzUmVuZGVyQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJs
b2NrID0gdG9SZW5kZXJCbG9jayhjYik7Ci0gICAgICAgICAgICAgICAgaW50IG9sZEhlaWdodCA9
IGJsb2NrLT5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZEhlaWdodCA9
IGJsb2NrLT5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBibG9jay0+Y29tcHV0ZUxvZ2ljYWxI
ZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBpbnQgbmV3SGVpZ2h0ID0gYmxvY2stPmNvbXB1dGVD
b250ZW50Qm94TG9naWNhbEhlaWdodChibG9jay0+Y29udGVudEhlaWdodCgpKTsKKyAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IG5ld0hlaWdodCA9IGJsb2NrLT5jb21wdXRlQ29udGVudEJveExv
Z2ljYWxIZWlnaHQoYmxvY2stPmNvbnRlbnRIZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgYmxv
Y2stPnNldEhlaWdodChvbGRIZWlnaHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBjb21wdXRl
Q29udGVudEJveExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodC5jYWxjVmFsdWUobmV3SGVpZ2h0
KSk7CiAgICAgICAgICAgICB9CkBAIC0yMDA0LDcgKzIwMDQsNyBAQCBpbnQgUmVuZGVyQm94Ojpj
b21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpCiAgICAgICAgICAgICAvLyBGSVhNRTogYXZhaWxhYmxl
TG9naWNhbEhlaWdodCgpIGlzIHdyb25nIGlmIHRoZSByZXBsYWNlZCBlbGVtZW50J3MgYmxvY2st
ZmxvdyBpcyBwZXJwZW5kaWN1bGFyIHRvIHRoZQogICAgICAgICAgICAgLy8gY29udGFpbmluZyBi
bG9jaydzIGJsb2NrLWZsb3cuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDY0OTYKLSAgICAgICAgICAgIGludCBhdmFpbGFibGVIZWlnaHQ7
CisgICAgICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUhlaWdodDsKICAgICAgICAgICAgIGlm
IChpc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBjb250
YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZCh0b1JlbmRlckJveE1vZGVsT2Jq
ZWN0KGNiKSk7CiAgICAgICAgICAgICBlbHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsMTcgKzMwNSwxNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBzaXplc1RvSW50cmluc2ljTG9naWNhbFdpZHRoKExvZ2ljYWxXaWR0aFR5cGUp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdHJldGNoZXNUb01pbkludHJpbnNpY0xvZ2ljYWxX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBpbnQgY29tcHV0ZUxvZ2ljYWxX
aWR0aFVzaW5nKExvZ2ljYWxXaWR0aFR5cGUsIGludCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwot
ICAgIGludCBjb21wdXRlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYgaGVpZ2h0KTsK
LSAgICBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIHdpZHRoKSBj
b25zdDsKLSAgICBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1h
eFdpZHRoKGludCBsb2dpY2FsV2lkdGgsIGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29u
c3Q7Ci0gICAgaW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhMZW5ndGggaGVp
Z2h0KSBjb25zdDsKLSAgICBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3Rp
bmdNaW5NYXhIZWlnaHQoaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0OworICAgIExheW91dFVuaXQg
Y29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKExvZ2ljYWxXaWR0aFR5cGUsIExheW91dFVuaXQgYXZh
aWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVMb2dpY2FsSGVpZ2h0
VXNpbmcoY29uc3QgTGVuZ3RoJiBoZWlnaHQpOworICAgIExheW91dFVuaXQgY29tcHV0ZVJlcGxh
Y2VkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIHdpZHRoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0
IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChMYXlvdXRV
bml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhMZW5ndGggaGVp
Z2h0KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRS
ZXNwZWN0aW5nTWluTWF4SGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRl
TWF4V2lkdGggPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRM
b2dpY2FsSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0OworICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7
CiAKLSAgICBpbnQgY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNvbnN0IExlbmd0aCYg
aGVpZ2h0KTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChj
b25zdCBMZW5ndGgmIGhlaWdodCk7CiAKICAgICAvLyBCbG9jayBmbG93cyBzdWJjbGFzcyBhdmFp
bGFibGVXaWR0aCB0byBoYW5kbGUgbXVsdGkgY29sdW1uIGxheW91dCAoc2hyaW5raW5nIHRoZSB3
aWR0aCBhdmFpbGFibGUgdG8gY2hpbGRyZW4gd2hlbiBsYXlpbmcgb3V0LikKICAgICB2aXJ0dWFs
IGludCBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBjb250ZW50TG9naWNh
bFdpZHRoKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJRnJhbWUu
Y3BwCShyZXZpc2lvbiA5MDAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgUmVuZGVySUZy
YW1lOjpjb21wdXRlTG9naWNhbFdpZHRoKCkKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KCkpOwogICAgICAgICBpZiAoIXZpZXcpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGludCBib3JkZXIgPSBib3JkZXJMZWZ0KCkgKyBib3Jk
ZXJSaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGJvcmRlciA9IGJvcmRlckxlZnQoKSArIGJv
cmRlclJpZ2h0KCk7CiAgICAgICAgIHNldFdpZHRoKG1heCh3aWR0aCgpLCB2aWV3LT5jb250ZW50
c1dpZHRoKCkgKyBib3JkZXIpKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDE5ICs0NjAs
MTkgQEAgYm9vbCBSZW5kZXJJbWFnZTo6aXNMb2dpY2FsSGVpZ2h0U3BlY2lmaQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotaW50IFJlbmRlckltYWdlOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lk
dGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckltYWdlOjpj
b21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CiB7
CiAgICAgaWYgKG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkpCiAgICAg
ICAgIGlmIChSZW5kZXJPYmplY3QqIGNiID0gaXNQb3NpdGlvbmVkKCkgPyBjb250YWluZXIoKSA6
IGNvbnRhaW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoY2ItPmlzQm94KCkpCi0gICAg
ICAgICAgICAgICAgbV9pbWFnZVJlc291cmNlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUoSW50U2l6
ZSh0b1JlbmRlckJveChjYiktPmF2YWlsYWJsZVdpZHRoKCksIHRvUmVuZGVyQm94KGNiKS0+YXZh
aWxhYmxlSGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICBtX2ltYWdlUmVzb3VyY2UtPnNldElt
YWdlQ29udGFpbmVyU2l6ZShMYXlvdXRTaXplKHRvUmVuZGVyQm94KGNiKS0+YXZhaWxhYmxlV2lk
dGgoKSwgdG9SZW5kZXJCb3goY2IpLT5hdmFpbGFibGVIZWlnaHQoKSkpOwogICAgICAgICB9CiAK
LSAgICBpbnQgbG9naWNhbFdpZHRoOworICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoOwogICAg
IGlmIChpc0xvZ2ljYWxXaWR0aFNwZWNpZmllZCgpKQogICAgICAgICBsb2dpY2FsV2lkdGggPSBj
b21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5sb2dpY2FsV2lkdGgoKSk7
CiAgICAgZWxzZSBpZiAobV9pbWFnZVJlc291cmNlLT51c2VzSW1hZ2VDb250YWluZXJTaXplKCkp
IHsKLSAgICAgICAgSW50U2l6ZSBzaXplID0gbV9pbWFnZVJlc291cmNlLT5pbWFnZVNpemUoc3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBzaXplID0gbV9pbWFn
ZVJlc291cmNlLT5pbWFnZVNpemUoc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAg
bG9naWNhbFdpZHRoID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHNpemUu
d2lkdGgoKSA6IHNpemUuaGVpZ2h0KCk7CiAgICAgfSBlbHNlIGlmIChtX2ltYWdlUmVzb3VyY2Ut
PmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpKQogICAgICAgICBsb2dpY2FsV2lkdGggPSAwOyAvLyBJ
ZiB0aGUgaW1hZ2UgaXMgcmVsYXRpdmVseS1zaXplZCwgc2V0IHRoZSB3aWR0aCB0byAwIHVudGls
IHRoZXJlIGlzIGEgc2V0IGNvbnRhaW5lciBzaXplLgpAQCAtNDgyLDEzICs0ODIsMTMgQEAgaW50
IFJlbmRlckltYWdlOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsVwogICAgIHJldHVybiBjb21wdXRl
UmVwbGFjZWRMb2dpY2FsV2lkdGhSZXNwZWN0aW5nTWluTWF4V2lkdGgobG9naWNhbFdpZHRoLCBp
bmNsdWRlTWF4V2lkdGgpOwogfQogCi1pbnQgUmVuZGVySW1hZ2U6OmNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxIZWlnaHQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJJbWFnZTo6Y29tcHV0ZVJlcGxh
Y2VkTG9naWNhbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaW50IGxvZ2ljYWxIZWlnaHQ7CisgICAg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0OwogICAgIGlmIChpc0xvZ2ljYWxIZWlnaHRTcGVjaWZp
ZWQoKSkKICAgICAgICAgbG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWln
aHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkpOwogICAgIGVsc2UgaWYgKG1faW1hZ2VS
ZXNvdXJjZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpKSB7Ci0gICAgICAgIEludFNpemUgc2l6
ZSA9IG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VTaXplKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7
CisgICAgICAgIExheW91dFNpemUgc2l6ZSA9IG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VTaXplKHN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gc2l6ZS5oZWlnaHQoKSA6IHNpemUud2lkdGgo
KTsKICAgICB9IGVsc2UgaWYgKG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VIYXNSZWxhdGl2ZUhlaWdo
dCgpKQogICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gMDsgLy8gSWYgdGhlIGltYWdlIGlzIHJlbGF0
aXZlbHktc2l6ZWQsIHNldCB0aGUgaGVpZ2h0IHRvIDAgdW50aWwgdGhlcmUgaXMgYSBzZXQgY29u
dGFpbmVyIHNpemUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAko
cmV2aXNpb24gOTAwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOwogICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uKTsKIAotICAgIHZpcnR1YWwgaW50IGNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1
YWwgaW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExheW91dFVuaXQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdp
ZHRoID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNl
ZExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKIAogICAgIEludFNpemUgaW1hZ2VTaXplRm9yRXJyb3Io
Q2FjaGVkSW1hZ2UqKSBjb25zdDsKICAgICB2b2lkIGltYWdlRGltZW5zaW9uc0NoYW5nZWQoYm9v
bCBpbWFnZVNpemVDaGFuZ2VkLCBjb25zdCBJbnRSZWN0KiA9IDApOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gOTAwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OmNvbXB1dGVQcmVmZXJyZWRM
b2dpCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5t
YXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKLSAgICBpbnQgdG9BZGQgPSBib3JkZXJBbmRQ
YWRkaW5nV2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dp
ZHRoKCk7CiAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CiAgICAgbV9t
YXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmNwcAkocmV2aXNpb24gOTAwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNDgsMTYgKzEzNDgsMTYg
QEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTAogICAgIGlmIChpc0lt
YWdlKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBzb21ld2hhdCBhcmJpdHJhcnkg
d2lkdGguICBHZW5lcmF0ZWQgaW1hZ2VzIGZvciBtYXJrZXJzIHJlYWxseSB3b24ndCBiZWNvbWUg
cGFydGljdWxhcmx5IHVzZWZ1bAogICAgICAgICAvLyB1bnRpbCB3ZSBzdXBwb3J0IHRoZSBDU1Mz
IG1hcmtlciBwc2V1ZG9jbGFzcyB0byBhbGxvdyBjb250cm9sIG92ZXIgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgb2YgdGhlIG1hcmtlciBib3guCi0gICAgICAgIGludCBidWxsZXRXaWR0aCA9IGZvbnRN
ZXRyaWNzLmFzY2VudCgpIC8gMjsKLSAgICAgICAgbV9pbWFnZS0+c2V0SW1hZ2VDb250YWluZXJT
aXplKEludFNpemUoYnVsbGV0V2lkdGgsIGJ1bGxldFdpZHRoKSk7Ci0gICAgICAgIEludFNpemUg
aW1hZ2VTaXplID0gbV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSk7CisgICAgICAgIExheW91dFVuaXQgYnVsbGV0V2lkdGggPSBmb250TWV0cmljcy5hc2Nl
bnQoKSAvIDI7CisgICAgICAgIG1faW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShMYXlvdXRT
aXplKGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCkpOworICAgICAgICBMYXlvdXRTaXplIGltYWdl
U2l6ZSA9IG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OwogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGltYWdlU2l6
ZS53aWR0aCgpIDogaW1hZ2VTaXplLmhlaWdodCgpOwogICAgICAgICBzZXRQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkoZmFsc2UpOwogICAgICAgICB1cGRhdGVNYXJnaW5zKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgbG9naWNhbFdpZHRoID0gMDsKKyAgICBMYXlvdXRV
bml0IGxvZ2ljYWxXaWR0aCA9IDA7CiAgICAgRUxpc3RTdHlsZVR5cGUgdHlwZSA9IHN0eWxlKCkt
Pmxpc3RTdHlsZVR5cGUoKTsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBOb25l
TGlzdFN0eWxlOgpAQCAtMTQ1Miw5ICsxNDUyLDkgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpj
b21wdXRlUHJlZmVycmVkTAogICAgICAgICAgICAgaWYgKG1fdGV4dC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICAgICAgbG9naWNhbFdpZHRoID0gMDsKICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIGludCBpdGVtV2lkdGggPSBmb250LndpZHRoKG1fdGV4dCk7CisgICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCBpdGVtV2lkdGggPSBmb250LndpZHRoKG1fdGV4dCk7CiAgICAgICAg
ICAgICAgICAgVUNoYXIgc3VmZml4U3BhY2VbMl0gPSB7IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwg
bV9saXN0SXRlbS0+dmFsdWUoKSksICcgJyB9OwotICAgICAgICAgICAgICAgIGludCBzdWZmaXhT
cGFjZVdpZHRoID0gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlz
LCBmb250LCBzdWZmaXhTcGFjZSwgMiwgc3R5bGUoKSkpOworICAgICAgICAgICAgICAgIExheW91
dFVuaXQgc3VmZml4U3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4odGhpcywgZm9udCwgc3VmZml4U3BhY2UsIDIsIHN0eWxlKCkpKTsKICAgICAgICAg
ICAgICAgICBsb2dpY2FsV2lkdGggPSBpdGVtV2lkdGggKyBzdWZmaXhTcGFjZVdpZHRoOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2
LDcgKzI3Niw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNvbXB1dGVQcmVmZXJyZWRMb2cKICAg
ICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRo
KCkudmFsdWUoKSkpOwogICAgIH0KIAotICAgIGludCB0b0FkZCA9IGJvcmRlckFuZFBhZGRpbmdX
aWR0aCgpOworICAgIExheW91dFVuaXQgdG9BZGQgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsK
ICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSB0b0FkZDsKICAgICBtX21heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCArPSB0b0FkZDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA5MDAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NCwx
MSArMjQ0LDEzIEBAIGludCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhY2VkTG9naWMKICAg
ICAgICAgICAgIGlmICgoaGVpZ2h0SXNBdXRvICYmICFoYXNJbnRyaW5zaWNXaWR0aCAmJiBoYXNJ
bnRyaW5zaWNIZWlnaHQpIHx8ICFoZWlnaHRJc0F1dG8pIHsKICAgICAgICAgICAgICAgICBpZiAo
aGVpZ2h0SXNBdXRvKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50UmVuZGVyZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGVudFJl
bmRlcmVyLT5jb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoY29udGVudFJlbmRlclN0
eWxlLT5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0ID0gY29udGVudFJlbmRlcmVyLT5jb21wdXRlUmVwbGFjZWRMb2dpY2Fs
SGVpZ2h0VXNpbmcoY29udGVudFJlbmRlclN0eWxlLT5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB1bm5lY2Vzc2FyeSByb3VuZGluZyB3
aGVuIGxheW91dCBpcyBvZmYgaW50czogd2Via2l0Lm9yZy9iLzYzNjU2CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGVudFJlbmRlcmVyLT5jb21wdXRlUmVwbGFjZWRMb2dpY2Fs
V2lkdGhSZXNwZWN0aW5nTWluTWF4V2lkdGgoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihsb2dpY2Fs
SGVpZ2h0ICogaW50cmluc2ljUmF0aW8ud2lkdGgoKSAvIGludHJpbnNpY1JhdGlvLmhlaWdodCgp
KSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsgCi0g
ICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29tcHV0ZVJlcGxhY2VkTG9n
aWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxI
ZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogUmVtb3ZlIHVubmVjZXNzYXJ5IHJvdW5kaW5nIHdoZW4gbGF5b3V0IGlzIG9m
ZiBpbnRzOiB3ZWJraXQub3JnL2IvNjM2NTYKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChzdGF0aWNfY2Fz
dDxpbnQ+KGNlaWxmKGxvZ2ljYWxIZWlnaHQgKiBpbnRyaW5zaWNSYXRpby53aWR0aCgpIC8gaW50
cmluc2ljUmF0aW8uaGVpZ2h0KCkpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQpAQCAtMjczLDExICsyNzUsMTIgQEAgaW50IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFj
ZWRMb2dpYwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBUaGlzIHNvbHZlcyBhYm92ZSBlcXVhdGlvbiBmb3IgJ3dpZHRoJyAoPT0gbG9naWNh
bFdpZHRoKS4KLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFdpZHRoID0gZm91bmRFeHBsaWNp
dFdpZHRoID8gY29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aChjb250YWluaW5nQmxvY2ssIGZh
bHNlKSA6IGNvbnRhaW5pbmdCbG9jay0+YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7Ci0gICAgICAg
ICAgICAgICAgaW50IG1hcmdpblN0YXJ0ID0gc3R5bGUoKS0+bWFyZ2luU3RhcnQoKS5jYWxjTWlu
VmFsdWUobG9naWNhbFdpZHRoKTsKLSAgICAgICAgICAgICAgICBpbnQgbWFyZ2luRW5kID0gc3R5
bGUoKS0+bWFyZ2luRW5kKCkuY2FsY01pblZhbHVlKGxvZ2ljYWxXaWR0aCk7CisgICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggPSBmb3VuZEV4cGxpY2l0V2lkdGggPyBjb21w
dXRlSW50cmluc2ljTG9naWNhbFdpZHRoKGNvbnRhaW5pbmdCbG9jaywgZmFsc2UpIDogY29udGFp
bmluZ0Jsb2NrLT5hdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IG1hcmdpblN0YXJ0ID0gc3R5bGUoKS0+bWFyZ2luU3RhcnQoKS5jYWxjTWluVmFsdWUo
bG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCA9IHN0
eWxlKCktPm1hcmdpbkVuZCgpLmNhbGNNaW5WYWx1ZShsb2dpY2FsV2lkdGgpOwogICAgICAgICAg
ICAgICAgIGxvZ2ljYWxXaWR0aCA9IG1heCgwLCBsb2dpY2FsV2lkdGggLSAobWFyZ2luU3RhcnQg
KyBtYXJnaW5FbmQgKyAod2lkdGgoKSAtIGNsaWVudFdpZHRoKCkpKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpCisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBSZW1vdmUgdW5uZWNlc3Nhcnkgcm91bmRpbmcgd2hlbiBsYXlvdXQgaXMgb2ZmIGlu
dHM6IHdlYmtpdC5vcmcvYi82MzY1NgogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGgg
PSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGxvZ2ljYWxXaWR0aCAqIGludHJpbnNpY1JhdGlvLndp
ZHRoKCkgLyAxMDApKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9n
aWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAg
ICB9CkBAIC0zMzMsNiArMzM2LDcgQEAgaW50IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFj
ZWRMb2dpYwogICAgICAgICAvLyBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVk
IHZhbHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgcmF0aW8g
dGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBpczoKICAgICAgICAgLy8gKHVzZWQgd2lk
dGgpIC8gKGludHJpbnNpYyByYXRpbykKICAgICAgICAgaWYgKCFpbnRyaW5zaWNSYXRpby5pc0Vt
cHR5KCkgJiYgIWlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpCisgICAgICAgICAgICAvLyBGSVhN
RTogUmVtb3ZlIHVubmVjZXNzYXJ5IHJvdW5kaW5nIHdoZW4gbGF5b3V0IGlzIG9mZiBpbnRzOiB3
ZWJraXQub3JnL2IvNjM2NTYKICAgICAgICAgICAgIHJldHVybiBjb21wdXRlUmVwbGFjZWRMb2dp
Y2FsSGVpZ2h0UmVzcGVjdGluZ01pbk1heEhlaWdodChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aCgpICogaW50cmluc2ljUmF0aW8uaGVpZ2h0KCkgLyBpbnRyaW5z
aWNSYXRpby53aWR0aCgpKSkpOwogCiAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgJ2hlaWdodCcg
aGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhlIGVsZW1lbnQgaGFzIGFuIGlu
dHJpbnNpYyBoZWlnaHQsIHRoZW4gdGhhdCBpbnRyaW5zaWMgaGVpZ2h0IGlzIHRoZSB1c2VkIHZh
bHVlIG9mICdoZWlnaHQnLgpAQCAtMzY3LDcgKzM3MSw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6
OmNvbXB1dGVQcmVmZXJyZWRMb2cKIHsKICAgICBBU1NFUlQocHJlZmVycmVkTG9naWNhbFdpZHRo
c0RpcnR5KCkpOwogCi0gICAgaW50IGJvcmRlckFuZFBhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5n
V2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmcgPSBib3JkZXJBbmRQYWRk
aW5nV2lkdGgoKTsKICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxXaWR0aChmYWxzZSkgKyBib3JkZXJBbmRQYWRkaW5nOwogCiAgICAgaWYgKHN0
eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUo
KSAhPSB1bmRlZmluZWRMZW5ndGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuaAkocmV2aXNpb24gOTAwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQCBwdWJs
aWM6CiAgICAgUmVuZGVyUmVwbGFjZWQoTm9kZSosIGNvbnN0IEludFNpemUmIGludHJpbnNpY1Np
emUpOwogICAgIHZpcnR1YWwgflJlbmRlclJlcGxhY2VkKCk7CiAKLSAgICB2aXJ0dWFsIGludCBj
b21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChi
b29sIGluY2x1ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2xpZGVyLmNwcAkocmV2aXNpb24gOTAwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2
b2lkIFJlbmRlclNsaWRlcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljCiAgICAgICAgIG1fbWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21w
dXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsK
ICAgICB9CiAKLSAgICBpbnQgdG9BZGQgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKKyAgICBM
YXlvdXRVbml0IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAgICAgbV9taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGggKz0gdG9BZGQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAkocmV2aXNpb24gOTAwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOSArMjE1LDkgQEAgdm9pZCBSZW5kZXJU
YWJsZTo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAKICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250
YWluaW5nQmxvY2soKTsKIAotICAgIGludCBhdmFpbGFibGVMb2dpY2FsV2lkdGggPSBjb250YWlu
aW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCk7CisgICAgTGF5b3V0VW5pdCBhdmFpbGFi
bGVMb2dpY2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCk7
CiAgICAgYm9vbCBoYXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrID0gY2ItPnN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKTsKLSAgICBpbnQgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbiA9IGhhc1Bl
cnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2sgPyBwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2Nr
TG9naWNhbEhlaWdodCgpIDogYXZhaWxhYmxlTG9naWNhbFdpZHRoOworICAgIExheW91dFVuaXQg
Y29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbiA9IGhhc1BlcnBlbmRpY3VsYXJDb250YWlu
aW5nQmxvY2sgPyBwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIDog
YXZhaWxhYmxlTG9naWNhbFdpZHRoOwogCiAgICAgTGVuZ3RoVHlwZSBsb2dpY2FsV2lkdGhUeXBl
ID0gc3R5bGUoKS0+bG9naWNhbFdpZHRoKCkudHlwZSgpOwogICAgIGlmIChsb2dpY2FsV2lkdGhU
eXBlID4gUmVsYXRpdmUgJiYgc3R5bGUoKS0+bG9naWNhbFdpZHRoKCkuaXNQb3NpdGl2ZSgpKSB7
CkBAIC0yMjYsMTQgKzIyNiwxNCBAQCB2b2lkIFJlbmRlclRhYmxlOjpjb21wdXRlTG9naWNhbFdp
ZHRoKCkKICAgICAgICAgc2V0TG9naWNhbFdpZHRoKG1heChtaW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGgoKSwgbG9naWNhbFdpZHRoKCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTdWJ0cmFj
dCBvdXQgYW55IGZpeGVkIG1hcmdpbnMgZnJvbSBvdXIgYXZhaWxhYmxlIHdpZHRoIGZvciBhdXRv
IHdpZHRoIHRhYmxlcy4KLSAgICAgICAgaW50IG1hcmdpblRvdGFsID0gMDsKKyAgICAgICAgTGF5
b3V0VW5pdCBtYXJnaW5Ub3RhbCA9IDA7CiAgICAgICAgIGlmICghc3R5bGUoKS0+bWFyZ2luU3Rh
cnQoKS5pc0F1dG8oKSkKICAgICAgICAgICAgIG1hcmdpblRvdGFsICs9IHN0eWxlKCktPm1hcmdp
blN0YXJ0KCkuY2FsY1ZhbHVlKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGlmICgh
c3R5bGUoKS0+bWFyZ2luRW5kKCkuaXNBdXRvKCkpCiAgICAgICAgICAgICBtYXJnaW5Ub3RhbCAr
PSBzdHlsZSgpLT5tYXJnaW5FbmQoKS5jYWxjVmFsdWUoYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsK
ICAgICAgICAgICAgIAogICAgICAgICAvLyBTdWJ0cmFjdCBvdXQgb3VyIG1hcmdpbnMgdG8gZ2V0
IHRoZSBhdmFpbGFibGUgY29udGVudCB3aWR0aC4KLSAgICAgICAgaW50IGF2YWlsYWJsZUNvbnRl
bnRMb2dpY2FsV2lkdGggPSBtYXgoMCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbiAt
IG1hcmdpblRvdGFsKTsKKyAgICAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVDb250ZW50TG9naWNh
bFdpZHRoID0gbWF4KDAsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24gLSBtYXJnaW5U
b3RhbCk7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgd2UgYXJlbid0IGJpZ2dlciB0aGFu
IG91ciBtYXggd2lkdGggb3Igc21hbGxlciB0aGFuIG91ciBtaW4gd2lkdGguCiAgICAgICAgIHNl
dExvZ2ljYWxXaWR0aChtaW4oYXZhaWxhYmxlQ29udGVudExvZ2ljYWxXaWR0aCwgbWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gOTAwMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjUs
NyArNTY1LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZVByZWZlcnJlZAogICAg
ICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExvZ2lj
YWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgo
KS52YWx1ZSgpKSk7CiAgICAgfQogCi0gICAgaW50IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dp
ZHRoKCk7CisgICAgTGF5b3V0VW5pdCB0b0FkZCA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwog
CiAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CiAgICAgbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWRlby5jcHAJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDEyICsyNTMsMTIg
QEAgdm9pZCBSZW5kZXJWaWRlbzo6dXBkYXRlUGxheWVyKCkKICAgICBtZWRpYVBsYXllci0+c2V0
VmlzaWJsZSh0cnVlKTsKIH0KIAotaW50IFJlbmRlclZpZGVvOjpjb21wdXRlUmVwbGFjZWRMb2dp
Y2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclZp
ZGVvOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2Fs
V2lkdGgoaW5jbHVkZU1heFdpZHRoKTsKIH0KIAotaW50IFJlbmRlclZpZGVvOjpjb21wdXRlUmVw
bGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyVmlkZW86OmNvbXB1
dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdAogewogICAgIHJldHVybiBSZW5kZXJSZXBs
YWNlZDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcw
LDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1
YWwgaW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCA9
IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWln
aHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZVJlcGxhY2VkTG9naWNh
bFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBM
YXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGludCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKIAogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gOTAwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NiwxMiArODYsMTQgQEAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5k
ZXJTVkdGb3JlaWduTwogdm9pZCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpjb21wdXRlTG9naWNh
bFdpZHRoKCkKIHsKICAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaW4gc2l6ZSByb3VuZGluZyBp
c3N1ZXMKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHVubmVjZXNzYXJ5IHJvdW5kaW5nIHdoZW4gbGF5
b3V0IGlzIG9mZiBpbnRzOiB3ZWJraXQub3JnL2IvNjM2NTYKICAgICBzZXRXaWR0aChzdGF0aWNf
Y2FzdDxpbnQ+KHJvdW5kZihtX3ZpZXdwb3J0LndpZHRoKCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQogewogICAgIC8vIEZJWE1F
OiBJbnZlc3RpZ2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcworICAgIC8vIEZJWE1FOiBSZW1v
dmUgdW5uZWNlc3Nhcnkgcm91bmRpbmcgd2hlbiBsYXlvdXQgaXMgb2ZmIGludHM6IHdlYmtpdC5v
cmcvYi82MzY1NgogICAgIHNldEhlaWdodChzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihtX3ZpZXdw
b3J0LmhlaWdodCgpKSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgs
OCArOTgsOCBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVQcmVmZXJyZWRMb2dpCiB7CiAg
ICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAotICAgIGludCBib3Jk
ZXJBbmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAgaW50IHdpZHRoID0g
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGZhbHNlKSArIGJvcmRlckFuZFBhZGRpbmc7Cisg
ICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7
CisgICAgTGF5b3V0VW5pdCB3aWR0aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChmYWxz
ZSkgKyBib3JkZXJBbmRQYWRkaW5nOwogCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNG
aXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgp
CiAgICAgICAgIHdpZHRoID0gbWluKHdpZHRoLCBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkg
KyAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBib3JkZXJBbmRQYWRkaW5n
IDogMCkpOwpAQCAtMTEzLDE3ICsxMTMsMTkgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRl
UHJlZmVycmVkTG9naQogICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7
CiB9CiAKLWludCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmluc2ljV2lkdGgoaW50IHJlcGxh
Y2VkV2lkdGgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5z
aWNXaWR0aChMYXlvdXRVbml0IHJlcGxhY2VkV2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKCFzdHls
ZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpKQogICAgICAgICByZXR1cm4gcmVwbGFjZWRXaWR0aDsK
KyAgICAvLyBGSVhNRTogUmVtb3ZlIHVubmVjZXNzYXJ5IHJvdW5kaW5nIHdoZW4gbGF5b3V0IGlz
IG9mZiBpbnRzOiB3ZWJraXQub3JnL2IvNjM2NTYKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PihjZWlsZihyZXBsYWNlZFdpZHRoICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiB9CiAK
LWludCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmluc2ljSGVpZ2h0KGludCByZXBsYWNlZEhl
aWdodCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZUludHJpbnNpY0hl
aWdodChMYXlvdXRVbml0IHJlcGxhY2VkSGVpZ2h0KSBjb25zdAogewogICAgIGlmICghc3R5bGUo
KS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpCiAgICAgICAgIHJldHVybiByZXBsYWNlZEhlaWdodDsK
KyAgICAvLyBGSVhNRTogUmVtb3ZlIHVubmVjZXNzYXJ5IHJvdW5kaW5nIHdoZW4gbGF5b3V0IGlz
IG9mZiBpbnRzOiB3ZWJraXQub3JnL2IvNjM2NTYKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PihjZWlsZihyZXBsYWNlZEhlaWdodCAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogfQog
CkBAIC0xNDgsOSArMTUwLDkgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpuZWdvdGlhdGVTaXplV2l0
aEhvcwogICAgIH0KIH0KIAotaW50IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyU1ZH
Um9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoKSBj
b25zdAogewotICAgIGludCByZXBsYWNlZFdpZHRoID0gUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFj
ZWRMb2dpY2FsV2lkdGgoaW5jbHVkZU1heFdpZHRoKTsKKyAgICBMYXlvdXRVbml0IHJlcGxhY2Vk
V2lkdGggPSBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChpbmNsdWRlTWF4
V2lkdGgpOwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUoKSAmJiBub2RlKCktPmRvY3VtZW50KCkg
PyBub2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkgOiAwOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybiBjb21wdXRlSW50cmluc2ljV2lkdGgocmVwbGFjZWRXaWR0aCk7CkBAIC0xODks
OSArMTkxLDkgQEAgaW50IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYQogICAg
IHJldHVybiBvd25lclJlbmRlcmVyLT5jb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhSZXNwZWN0
aW5nTWluTWF4V2lkdGgob3duZXJSZW5kZXJlci0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRo
VXNpbmcob3duZXJXaWR0aCksIGluY2x1ZGVNYXhXaWR0aCk7CiB9CiAKLWludCBSZW5kZXJTVkdS
b290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKK0xheW91dFVuaXQgUmVu
ZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAg
aW50IHJlcGxhY2VkSGVpZ2h0ID0gUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVp
Z2h0KCk7CisgICAgTGF5b3V0VW5pdCByZXBsYWNlZEhlaWdodCA9IFJlbmRlckJveDo6Y29tcHV0
ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gbm9kZSgpICYm
IG5vZGUoKS0+ZG9jdW1lbnQoKSA/IG5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA6IDA7CiAg
ICAgaWYgKCFmcmFtZSkKQEAgLTIyOCw3ICsyMzAsNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6Omxh
eW91dCgpCiAgICAgYm9vbCBuZWVkc0xheW91dCA9IHNlbGZOZWVkc0xheW91dCgpOwogICAgIExh
eW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91
dCgpICYmIG5lZWRzTGF5b3V0KTsKIAotICAgIEludFNpemUgb2xkU2l6ZSh3aWR0aCgpLCBoZWln
aHQoKSk7CisgICAgTGF5b3V0U2l6ZSBvbGRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKICAgICBu
ZWdvdGlhdGVTaXplV2l0aEhvc3REb2N1bWVudElmTmVlZGVkKCk7CiAgICAgY29tcHV0ZUxvZ2lj
YWxXaWR0aCgpOwogICAgIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAkocmV2aXNpb24gOTAwMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsOCArNDgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
VHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlID0g
dHJ1ZTsgfQogCiBwcml2YXRlOgotICAgIGludCBjb21wdXRlSW50cmluc2ljV2lkdGgoaW50IHJl
cGxhY2VkV2lkdGgpIGNvbnN0OwotICAgIGludCBjb21wdXRlSW50cmluc2ljSGVpZ2h0KGludCBy
ZXBsYWNlZEhlaWdodCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlSW50cmluc2ljV2lk
dGgoTGF5b3V0VW5pdCByZXBsYWNlZFdpZHRoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbXB1
dGVJbnRyaW5zaWNIZWlnaHQoTGF5b3V0VW5pdCByZXBsYWNlZEhlaWdodCkgY29uc3Q7CiAgICAg
dm9pZCBuZWdvdGlhdGVTaXplV2l0aEhvc3REb2N1bWVudElmTmVlZGVkKCk7CiAKICAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hp
bGRyZW4oKTsgfQpAQCAtNTksOCArNTksOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSb290IjsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7Ci0gICAgdmly
dHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRo
ID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhl
aWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dp
Y2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExheW91dFVuaXQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgSW50UG9pbnQmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99173</attachid>
            <date>2011-06-29 16:17:14 -0700</date>
            <delta_ts>2011-06-29 17:00:02 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-63655-20110629161713.patch</filename>
            <type>text/plain</type>
            <size>48396</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMDQ4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTEtMDYtMjkgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgorCisgICAgICAgIFN3aXRjaCBjb21wdXRlV2lkdGggYW5kIGNvbXB1dGVIZWlnaHQg
ZnVuY3Rpb25zIHRvIG5ldyBsYXlvdXQgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNjU1CisKKyAgICAgICAgU3dpdGNoIGNvbXB1dGVXaWR0
aCBhbmQgY29tcHV0ZUhlaWdodCBmdW5jdGlvbnMgb3ZlciB0byB0aGUgbmV3IGxheW91dCB1bml0
IGFic3RyYWN0aW9uLgorCisgICAgICAgIE1ha2luZyBhIHBvaW50IHRvIG1hcmsgcm91bmRpbmcg
dGhhdCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkIGJ5IGxpbmtpbmcgdG8gYSBuZXcKKyAg
ICAgICAgdHJhY2tpbmcgYnVnOiA2MzY0NS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1
bmN0aW9uYWxpdHkgY2hhbmdlcy4KKworICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVMYXlv
dXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0Ojpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9MYXlvdXRUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxX
aWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21w
dXRlQmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxX
aWR0aFVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdo
dFVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VM
b2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVJlcGxh
Y2VkTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVJl
cGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJl
c3BlY3RpbmdNaW5NYXhIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21w
dXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklGcmFtZTo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW1hZ2U6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdp
ZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNsaWRlcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29t
cHV0ZUxvZ2ljYWxXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OmNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5oOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpjb21wdXRlTG9naWNhbFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNh
bFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNl
ZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bGF5b3V0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaDoKKwogMjAxMS0wNi0y
OSAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1Rh
YmxlTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0
b1RhYmxlTGF5b3V0LmNwcAkocmV2aXNpb24gOTAwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDExICsyMTks
MTEgQEAgc3RhdGljIGJvb2wgc2hvdWxkU2NhbGVDb2x1bW5zKFJlbmRlclRhYgogICAgIHJldHVy
biBzY2FsZTsKIH0KIAotdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpCit2b2lkIEF1dG9UYWJsZUxh
eW91dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluV2lkdGgs
IExheW91dFVuaXQmIG1heFdpZHRoKQogewogICAgIGZ1bGxSZWNhbGMoKTsKIAotICAgIGludCBz
cGFuTWF4TG9naWNhbFdpZHRoID0gY2FsY0VmZmVjdGl2ZUxvZ2ljYWxXaWR0aCgpOworICAgIExh
eW91dFVuaXQgc3Bhbk1heExvZ2ljYWxXaWR0aCA9IGNhbGNFZmZlY3RpdmVMb2dpY2FsV2lkdGgo
KTsKICAgICBtaW5XaWR0aCA9IDA7CiAgICAgbWF4V2lkdGggPSAwOwogICAgIGZsb2F0IG1heFBl
cmNlbnQgPSAwOwpAQCAtMjUxLDEzICsyNTEsMTQgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmNv
bXB1dGVQcmVmZXJyZWRMbwogCiAgICAgaWYgKHNjYWxlQ29sdW1ucykgewogICAgICAgICBtYXhO
b25QZXJjZW50ID0gbWF4Tm9uUGVyY2VudCAqIDEwMCAvIG1heChyZW1haW5pbmdQZXJjZW50LCBl
cHNpbG9uKTsKLSAgICAgICAgbWF4V2lkdGggPSBtYXgobWF4V2lkdGgsIHN0YXRpY19jYXN0PGlu
dD4obWluKG1heE5vblBlcmNlbnQsIElOVF9NQVggLyAyLjBmKSkpOwotICAgICAgICBtYXhXaWR0
aCA9IG1heChtYXhXaWR0aCwgc3RhdGljX2Nhc3Q8aW50PihtaW4obWF4UGVyY2VudCwgSU5UX01B
WCAvIDIuMGYpKSk7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdW5uZWNlc3Nhcnkgcm91bmRp
bmcgd2hlbiBsYXlvdXQgaXMgb2ZmIGludHM6IHdlYmtpdC5vcmcvYi82MzY1NgorICAgICAgICBt
YXhXaWR0aCA9IG1heChtYXhXaWR0aCwgc3RhdGljX2Nhc3Q8aW50PihtaW4obWF4Tm9uUGVyY2Vu
dCwgbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpIC8gMi4wZikpKTsKKyAgICAgICAg
bWF4V2lkdGggPSBtYXgobWF4V2lkdGgsIHN0YXRpY19jYXN0PGludD4obWluKG1heFBlcmNlbnQs
IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKSAvIDIuMGYpKSk7CiAgICAgfQogCiAg
ICAgbWF4V2lkdGggPSBtYXgobWF4V2lkdGgsIHNwYW5NYXhMb2dpY2FsV2lkdGgpOwogCi0gICAg
aW50IGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZyA9IG1fdGFibGUtPmJvcmRlcnNQYWRkaW5nQW5k
U3BhY2luZ0luUm93RGlyZWN0aW9uKCk7CisgICAgTGF5b3V0VW5pdCBib3JkZXJzUGFkZGluZ0Fu
ZFNwYWNpbmcgPSBtX3RhYmxlLT5ib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmdJblJvd0RpcmVjdGlv
bigpOwogICAgIG1pbldpZHRoICs9IGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZzsKICAgICBtYXhX
aWR0aCArPSBib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmc7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAjaWZuZGVmIEF1dG9UYWJsZUxheW91dF9oCiAjZGVmaW5lIEF1dG9UYWJs
ZUxheW91dF9oCiAKKyNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgIkxlbmd0aC5o
IgogI2luY2x1ZGUgIlRhYmxlTGF5b3V0LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAt
MzUsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgQXV0b1RhYmxlTGF5b3V0KFJlbmRlclRhYmxlKik7
CiAgICAgfkF1dG9UYWJsZUxheW91dCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpOworICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5X
aWR0aCwgTGF5b3V0VW5pdCYgbWF4V2lkdGgpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5
b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJs
ZUxheW91dC5jcHAJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0ZpeGVkVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAg
aW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGludAogLy8gS2VlcCB0aGlzIGlu
IHN5bmNoIHdpdGggQkxPQ0tfTUFYX1dJRFRIIGluIFJlbmRlckJsb2NrLmNwcAogI2RlZmluZSBU
QUJMRV9NQVhfV0lEVEggMTUwMDAKIAotdm9pZCBGaXhlZFRhYmxlTGF5b3V0Ojpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyhpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRoKQordm9pZCBG
aXhlZFRhYmxlTGF5b3V0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0
JiBtaW5XaWR0aCwgTGF5b3V0VW5pdCYgbWF4V2lkdGgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
ZW50aXJlIGNhbGN1bGF0aW9uIGlzIGluY29ycmVjdCBmb3IgYm90aCBtaW53aWR0aCBhbmQgbWF4
d2lkdGguCiAgICAgCkBAIC0yMDAsMTAgKzIwMCwxMCBAQCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6
OmNvbXB1dGVQcmVmZXJyZWRMCiAgICAgLy8gY29scy9jZWxscyB3aXRoIGEgZml4ZWQgd2lkdGgu
CiAgICAgLy8KICAgICAvLyBUaGUgbWF4aW11bSB3aWR0aCBpcyBtYXgobWluV2lkdGgsIHRhYmxl
V2lkdGgpLgotICAgIGludCBib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmcgPSBtX3RhYmxlLT5ib3Jk
ZXJzUGFkZGluZ0FuZFNwYWNpbmdJblJvd0RpcmVjdGlvbigpOworICAgIExheW91dFVuaXQgYm9y
ZGVyc1BhZGRpbmdBbmRTcGFjaW5nID0gbV90YWJsZS0+Ym9yZGVyc1BhZGRpbmdBbmRTcGFjaW5n
SW5Sb3dEaXJlY3Rpb24oKTsKIAotICAgIGludCB0YWJsZUxvZ2ljYWxXaWR0aCA9IG1fdGFibGUt
PnN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpLmlzRml4ZWQoKSA/IG1fdGFibGUtPnN0eWxlKCktPmxv
Z2ljYWxXaWR0aCgpLnZhbHVlKCkgLSBib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmcgOiAwOwotICAg
IGludCBtdyA9IGNhbGNXaWR0aEFycmF5KHRhYmxlTG9naWNhbFdpZHRoKSArIGJvcmRlcnNQYWRk
aW5nQW5kU3BhY2luZzsKKyAgICBMYXlvdXRVbml0IHRhYmxlTG9naWNhbFdpZHRoID0gbV90YWJs
ZS0+c3R5bGUoKS0+bG9naWNhbFdpZHRoKCkuaXNGaXhlZCgpID8gbV90YWJsZS0+c3R5bGUoKS0+
bG9naWNhbFdpZHRoKCkudmFsdWUoKSAtIGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZyA6IDA7Cisg
ICAgTGF5b3V0VW5pdCBtdyA9IGNhbGNXaWR0aEFycmF5KHRhYmxlTG9naWNhbFdpZHRoKSArIGJv
cmRlcnNQYWRkaW5nQW5kU3BhY2luZzsKIAogICAgIG1pbldpZHRoID0gbWF4KG13LCB0YWJsZUxv
Z2ljYWxXaWR0aCk7CiAgICAgbWF4V2lkdGggPSBtaW5XaWR0aDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkocmV2aXNpb24gOTAwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIEZpeGVkVGFibGVMYXlvdXRfaAogI2RlZmluZSBG
aXhlZFRhYmxlTGF5b3V0X2gKIAorI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAi
TGVuZ3RoLmgiCiAjaW5jbHVkZSAiVGFibGVMYXlvdXQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC0zMyw3ICszNCw3IEBAIGNsYXNzIEZpeGVkVGFibGVMYXlvdXQgOiBwdWJsaWMgVGFi
bGVMYXkKIHB1YmxpYzoKICAgICBGaXhlZFRhYmxlTGF5b3V0KFJlbmRlclRhYmxlKik7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoaW50JiBtaW5XaWR0
aCwgaW50JiBtYXhXaWR0aCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKExheW91dFVuaXQmIG1pbldpZHRoLCBMYXlvdXRVbml0JiBtYXhXaWR0aCk7CiAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5MDAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Mzgs
NyArNDYzOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2EKICAg
ICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPmxvZ2ljYWxN
YXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKLSAgICBpbnQgYm9yZGVyQW5kUGFkZGluZyA9
IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGJvcmRlckFu
ZFBhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7CiAgICAgbV9taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggKz0gYm9yZGVyQW5kUGFkZGluZzsKICAgICBtX21heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aCArPSBib3JkZXJBbmRQYWRkaW5nOwogCkBAIC00NzU0LDcgKzQ3NTQsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJlZmVycmVkCiAgICAgZmxvYXQgaW5s
aW5lTWF4ID0gMDsKICAgICBmbG9hdCBpbmxpbmVNaW4gPSAwOwogCi0gICAgaW50IGN3ID0gY29u
dGFpbmluZ0Jsb2NrKCktPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGN3
ID0gY29udGFpbmluZ0Jsb2NrKCktPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKIAogICAgIC8vIElm
IHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLCB3ZSB3YW50IHRvIGlnbm9yZSBhbGwgd2hp
dGUtc3BhY2UuCiAgICAgLy8gQWxzbyBzdHJpcCBzcGFjZXMgaWYgd2UgcHJldmlvdXNseSBoYWQg
dGV4dCB0aGF0IGVuZGVkIGluIGEgdHJhaWxpbmcgc3BhY2UuCkBAIC00ODcyLDcgKzQ4NzIsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJlZmVycmVkCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgLy8gQWRkIGluIHRleHQtaW5kZW50LiAgVGhpcyBpcyBh
ZGRlZCBpbiBvbmx5IG9uY2UuCi0gICAgICAgICAgICAgICAgaW50IHRpID0gMDsKKyAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IHRpID0gMDsKICAgICAgICAgICAgICAgICBpZiAoIWFkZGVkVGV4
dEluZGVudCkgewogICAgICAgICAgICAgICAgICAgICBhZGRlZFRleHRJbmRlbnQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICB0aSA9IHN0eWxlKCktPnRleHRJbmRlbnQoKS5jYWxjTWluVmFs
dWUoY3cpOwpAQCAtNDk0Myw3ICs0OTQzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlu
bGluZVByZWZlcnJlZAogICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlQ2hpbGQgPSAw
OwogCiAgICAgICAgICAgICAgICAgLy8gQWRkIGluIHRleHQtaW5kZW50LiAgVGhpcyBpcyBhZGRl
ZCBpbiBvbmx5IG9uY2UuCi0gICAgICAgICAgICAgICAgaW50IHRpID0gMDsKKyAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IHRpID0gMDsKICAgICAgICAgICAgICAgICBpZiAoIWFkZGVkVGV4dElu
ZGVudCkgewogICAgICAgICAgICAgICAgICAgICBhZGRlZFRleHRJbmRlbnQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICB0aSA9IHN0eWxlKCktPnRleHRJbmRlbnQoKS5jYWxjTWluVmFsdWUo
Y3cpOwpAQCAtNTAxOSw3ICs1MDE5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUJsb2Nr
UHJlZmVycmVkTAogICAgIGJvb2wgbm93cmFwID0gc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IE5P
V1JBUDsKIAogICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7Ci0gICAgaW50
IGZsb2F0TGVmdFdpZHRoID0gMCwgZmxvYXRSaWdodFdpZHRoID0gMDsKKyAgICBMYXlvdXRVbml0
IGZsb2F0TGVmdFdpZHRoID0gMCwgZmxvYXRSaWdodFdpZHRoID0gMDsKICAgICB3aGlsZSAoY2hp
bGQpIHsKICAgICAgICAgLy8gUG9zaXRpb25lZCBjaGlsZHJlbiBkb24ndCBhZmZlY3QgdGhlIG1p
bi9tYXggd2lkdGgKICAgICAgICAgaWYgKGNoaWxkLT5pc1Bvc2l0aW9uZWQoKSkgewpAQCAtNTAy
OCw3ICs1MDI4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUJsb2NrUHJlZmVycmVkTAog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgKGNoaWxkLT5p
c0JveCgpICYmIHRvUmVuZGVyQm94KGNoaWxkKS0+YXZvaWRzRmxvYXRzKCkpKSB7Ci0gICAgICAg
ICAgICBpbnQgZmxvYXRUb3RhbFdpZHRoID0gZmxvYXRMZWZ0V2lkdGggKyBmbG9hdFJpZ2h0V2lk
dGg7CisgICAgICAgICAgICBMYXlvdXRVbml0IGZsb2F0VG90YWxXaWR0aCA9IGZsb2F0TGVmdFdp
ZHRoICsgZmxvYXRSaWdodFdpZHRoOwogICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5j
bGVhcigpICYgQ0xFRlQpIHsKICAgICAgICAgICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IG1heChmbG9hdFRvdGFsV2lkdGgsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsK
ICAgICAgICAgICAgICAgICBmbG9hdExlZnRXaWR0aCA9IDA7CkBAIC01MDQ0LDE2ICs1MDQ0LDE2
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZlcnJlZEwKICAgICAgICAgLy8g
Rml4ZWQgbWFyZ2lucyBjYW4gYmUgYWRkZWQgaW4gYXMgaXMuCiAgICAgICAgIExlbmd0aCBzdGFy
dE1hcmdpbkxlbmd0aCA9IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5TdGFydCgpOwogICAgICAgICBM
ZW5ndGggZW5kTWFyZ2luTGVuZ3RoID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpbkVuZCgpOwotICAg
ICAgICBpbnQgbWFyZ2luID0gMDsKLSAgICAgICAgaW50IG1hcmdpblN0YXJ0ID0gMDsKLSAgICAg
ICAgaW50IG1hcmdpbkVuZCA9IDA7CisgICAgICAgIExheW91dFVuaXQgbWFyZ2luID0gMDsKKyAg
ICAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCA9IDA7CisgICAgICAgIExheW91dFVuaXQgbWFy
Z2luRW5kID0gMDsKICAgICAgICAgaWYgKHN0YXJ0TWFyZ2luTGVuZ3RoLmlzRml4ZWQoKSkKICAg
ICAgICAgICAgIG1hcmdpblN0YXJ0ICs9IHN0YXJ0TWFyZ2luTGVuZ3RoLnZhbHVlKCk7CiAgICAg
ICAgIGlmIChlbmRNYXJnaW5MZW5ndGguaXNGaXhlZCgpKQogICAgICAgICAgICAgbWFyZ2luRW5k
ICs9IGVuZE1hcmdpbkxlbmd0aC52YWx1ZSgpOwogICAgICAgICBtYXJnaW4gPSBtYXJnaW5TdGFy
dCArIG1hcmdpbkVuZDsKIAotICAgICAgICBpbnQgdyA9IGNoaWxkLT5taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKSArIG1hcmdpbjsKKyAgICAgICAgTGF5b3V0VW5pdCB3ID0gY2hpbGQtPm1pblBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgbWFyZ2luOwogICAgICAgICBtX21pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IG1heCh3LCBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAgICAgICAg
IAogICAgICAgICAvLyBJRSBpZ25vcmVzIHRhYmxlcyBmb3IgY2FsY3VsYXRpb24gb2Ygbm93cmFw
LiBNYWtlcyBzb21lIHNlbnNlLgpAQCAtNTA2OCwxMCArNTA2OCwxMCBAQCB2b2lkIFJlbmRlckJs
b2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMCiAgICAgICAgICAgICAgICAgLy8gbWFyZ2lucyBv
ZiB0aGUgb2JqZWN0LiAgRm9yIG5lZ2F0aXZlIG1hcmdpbnMsIHdlIHdpbGwgYXR0ZW1wdCB0byBv
dmVybGFwIHRoZSBmbG9hdCBpZiB0aGUgbmVnYXRpdmUgbWFyZ2luCiAgICAgICAgICAgICAgICAg
Ly8gaXMgc21hbGxlciB0aGFuIHRoZSBmbG9hdCB3aWR0aC4KICAgICAgICAgICAgICAgICBib29s
IGx0ciA9IGNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgaW50IG1hcmdpbkxvZ2ljYWxMZWZ0ID0gbHRyID8gbWFyZ2lu
U3RhcnQgOiBtYXJnaW5FbmQ7Ci0gICAgICAgICAgICAgICAgaW50IG1hcmdpbkxvZ2ljYWxSaWdo
dCA9IGx0ciA/IG1hcmdpbkVuZCA6IG1hcmdpblN0YXJ0OwotICAgICAgICAgICAgICAgIGludCBt
YXhMZWZ0ID0gbWFyZ2luTG9naWNhbExlZnQgPiAwID8gbWF4KGZsb2F0TGVmdFdpZHRoLCBtYXJn
aW5Mb2dpY2FsTGVmdCkgOiBmbG9hdExlZnRXaWR0aCArIG1hcmdpbkxvZ2ljYWxMZWZ0OwotICAg
ICAgICAgICAgICAgIGludCBtYXhSaWdodCA9IG1hcmdpbkxvZ2ljYWxSaWdodCA+IDAgPyBtYXgo
ZmxvYXRSaWdodFdpZHRoLCBtYXJnaW5Mb2dpY2FsUmlnaHQpIDogZmxvYXRSaWdodFdpZHRoICsg
bWFyZ2luTG9naWNhbFJpZ2h0OworICAgICAgICAgICAgICAgIExheW91dFVuaXQgbWFyZ2luTG9n
aWNhbExlZnQgPSBsdHIgPyBtYXJnaW5TdGFydCA6IG1hcmdpbkVuZDsKKyAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IG1hcmdpbkxvZ2ljYWxSaWdodCA9IGx0ciA/IG1hcmdpbkVuZCA6IG1hcmdp
blN0YXJ0OworICAgICAgICAgICAgICAgIExheW91dFVuaXQgbWF4TGVmdCA9IG1hcmdpbkxvZ2lj
YWxMZWZ0ID4gMCA/IG1heChmbG9hdExlZnRXaWR0aCwgbWFyZ2luTG9naWNhbExlZnQpIDogZmxv
YXRMZWZ0V2lkdGggKyBtYXJnaW5Mb2dpY2FsTGVmdDsKKyAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IG1heFJpZ2h0ID0gbWFyZ2luTG9naWNhbFJpZ2h0ID4gMCA/IG1heChmbG9hdFJpZ2h0V2lk
dGgsIG1hcmdpbkxvZ2ljYWxSaWdodCkgOiBmbG9hdFJpZ2h0V2lkdGggKyBtYXJnaW5Mb2dpY2Fs
UmlnaHQ7CiAgICAgICAgICAgICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGgoKSArIG1heExlZnQgKyBtYXhSaWdodDsKICAgICAgICAgICAgICAgICB3ID0gbWF4KHcsIGZs
b2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA5MDAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjIwLDkgKzE2MjAsOSBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAg
ICAgICAgIGNiLT5zZXRNYXJnaW5FbmRGb3JDaGlsZCh0aGlzLCBjb250YWluZXJMb2dpY2FsV2lk
dGggLSBsb2dpY2FsV2lkdGgoKSAtIGNiLT5tYXJnaW5TdGFydEZvckNoaWxkKHRoaXMpKTsKIH0K
IAotaW50IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKExvZ2ljYWxXaWR0aFR5
cGUgd2lkdGhUeXBlLCBpbnQgYXZhaWxhYmxlTG9naWNhbFdpZHRoKQorTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZyhMb2dpY2FsV2lkdGhUeXBlIHdpZHRoVHlw
ZSwgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpCiB7Ci0gICAgaW50IGxvZ2ljYWxX
aWR0aFJlc3VsdCA9IGxvZ2ljYWxXaWR0aCgpOworICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRo
UmVzdWx0ID0gbG9naWNhbFdpZHRoKCk7CiAgICAgTGVuZ3RoIGxvZ2ljYWxXaWR0aDsKICAgICBp
ZiAod2lkdGhUeXBlID09IExvZ2ljYWxXaWR0aCkKICAgICAgICAgbG9naWNhbFdpZHRoID0gc3R5
bGUoKS0+bG9naWNhbFdpZHRoKCk7CkBAIC0xNjMyLDggKzE2MzIsOCBAQCBpbnQgUmVuZGVyQm94
Ojpjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcoCiAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IHN0eWxl
KCktPmxvZ2ljYWxNYXhXaWR0aCgpOwogCiAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc0ludHJpbnNp
Y09yQXV0bygpKSB7Ci0gICAgICAgIGludCBtYXJnaW5TdGFydCA9IHN0eWxlKCktPm1hcmdpblN0
YXJ0KCkuY2FsY01pblZhbHVlKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIGludCBt
YXJnaW5FbmQgPSBzdHlsZSgpLT5tYXJnaW5FbmQoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlTG9n
aWNhbFdpZHRoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCA9IHN0eWxlKCktPm1h
cmdpblN0YXJ0KCkuY2FsY01pblZhbHVlKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CisgICAgICAg
IExheW91dFVuaXQgbWFyZ2luRW5kID0gc3R5bGUoKS0+bWFyZ2luRW5kKCkuY2FsY01pblZhbHVl
KGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGlmIChhdmFpbGFibGVMb2dpY2FsV2lk
dGgpCiAgICAgICAgICAgICBsb2dpY2FsV2lkdGhSZXN1bHQgPSBhdmFpbGFibGVMb2dpY2FsV2lk
dGggLSBtYXJnaW5TdGFydCAtIG1hcmdpbkVuZDsKIApAQCAtMTc4MSwxMyArMTc4MSwxMyBAQCB2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQogICAgICAgICAgICAgY2hlY2tN
aW5NYXhIZWlnaHQgPSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBoZWlnaHRSZXN1
bHQ7CisgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVzdWx0OwogICAgICAgICBpZiAoY2hlY2tN
aW5NYXhIZWlnaHQpIHsKICAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGNvbXB1dGVMb2dpY2Fs
SGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgIGlmICho
ZWlnaHRSZXN1bHQgPT0gLTEpCiAgICAgICAgICAgICAgICAgaGVpZ2h0UmVzdWx0ID0gbG9naWNh
bEhlaWdodCgpOwotICAgICAgICAgICAgaW50IG1pbkggPSBjb21wdXRlTG9naWNhbEhlaWdodFVz
aW5nKHN0eWxlKCktPmxvZ2ljYWxNaW5IZWlnaHQoKSk7IC8vIExlYXZlIGFzIC0xIGlmIHVuc2V0
LgotICAgICAgICAgICAgaW50IG1heEggPSBzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNV
bmRlZmluZWQoKSA/IGhlaWdodFJlc3VsdCA6IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5
bGUoKS0+bG9naWNhbE1heEhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgbWluSCA9
IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpKTsg
Ly8gTGVhdmUgYXMgLTEgaWYgdW5zZXQuCisgICAgICAgICAgICBMYXlvdXRVbml0IG1heEggPSBz
dHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IGhlaWdodFJlc3VsdCA6
IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1heEhlaWdodCgpKTsK
ICAgICAgICAgICAgIGlmIChtYXhIID09IC0xKQogICAgICAgICAgICAgICAgIG1heEggPSBoZWln
aHRSZXN1bHQ7CiAgICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBtaW4obWF4SCwgaGVpZ2h0UmVz
dWx0KTsKQEAgLTE4MTUsMTAgKzE4MTUsMTAgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dp
Y2FsSGVpZ2h0KCkKICAgICBpZiAoc3RyZXRjaGVzVG9WaWV3cG9ydCgpIHx8IHBhZ2luYXRlZENv
bnRlbnROZWVkc0Jhc2VIZWlnaHQpIHsKICAgICAgICAgLy8gRklYTUU6IEZpbmlzaCBhY2NvdW50
aW5nIGZvciBibG9jayBmbG93IGhlcmUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NjYwMwotICAgICAgICBpbnQgbWFyZ2lucyA9IGNvbGxhcHNl
ZE1hcmdpbkJlZm9yZSgpICsgY29sbGFwc2VkTWFyZ2luQWZ0ZXIoKTsKLSAgICAgICAgaW50IHZp
c0hlaWdodDsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5zID0gY29sbGFwc2VkTWFyZ2luQmVm
b3JlKCkgKyBjb2xsYXBzZWRNYXJnaW5BZnRlcigpOworICAgICAgICBMYXlvdXRVbml0IHZpc0hl
aWdodDsKICAgICAgICAgaWYgKGRvY3VtZW50KCktPnByaW50aW5nKCkpCi0gICAgICAgICAgICB2
aXNIZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHZpZXcoKS0+cGFnZUxvZ2ljYWxIZWlnaHQoKSk7
CisgICAgICAgICAgICB2aXNIZWlnaHQgPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0Pih2aWV3KCkt
PnBhZ2VMb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICBlbHNlICB7CiAgICAgICAgICAgICBpZiAo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgICAgICB2aXNIZWlnaHQgPSB2
aWV3KCktPnZpZXdIZWlnaHQoKTsKQEAgLTE4MjgsMTUgKzE4MjgsMTUgQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCkKICAgICAgICAgaWYgKGlzUm9vdCgpKQogICAgICAg
ICAgICAgc2V0TG9naWNhbEhlaWdodChtYXgobG9naWNhbEhlaWdodCgpLCB2aXNIZWlnaHQgLSBt
YXJnaW5zKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50IG1hcmdpbnNCb3JkZXJz
UGFkZGluZyA9IG1hcmdpbnMgKyBwYXJlbnRCb3goKS0+bWFyZ2luQmVmb3JlKCkgKyBwYXJlbnRC
b3goKS0+bWFyZ2luQWZ0ZXIoKSArIHBhcmVudEJveCgpLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNh
bEhlaWdodCgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5zQm9yZGVyc1BhZGRpbmcg
PSBtYXJnaW5zICsgcGFyZW50Qm94KCktPm1hcmdpbkJlZm9yZSgpICsgcGFyZW50Qm94KCktPm1h
cmdpbkFmdGVyKCkgKyBwYXJlbnRCb3goKS0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQo
KTsKICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobWF4KGxvZ2ljYWxIZWlnaHQoKSwgdmlz
SGVpZ2h0IC0gbWFyZ2luc0JvcmRlcnNQYWRkaW5nKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAK
LWludCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoY29uc3QgTGVuZ3RoJiBo
KQorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoY29uc3Qg
TGVuZ3RoJiBoKQogewotICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gLTE7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0ID0gLTE7CiAgICAgaWYgKCFoLmlzQXV0bygpKSB7CiAgICAgICAgIGlm
IChoLmlzRml4ZWQoKSkKICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBoLnZhbHVlKCk7CkBA
IC0xODUwLDkgKzE4NTAsOSBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdodFVz
aW5nCiAgICAgcmV0dXJuIGxvZ2ljYWxIZWlnaHQ7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNvbXB1
dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgmIGhlaWdodCkKK0xheW91dFVu
aXQgUmVuZGVyQm94Ojpjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQoY29uc3QgTGVuZ3Ro
JiBoZWlnaHQpCiB7Ci0gICAgaW50IHJlc3VsdCA9IC0xOworICAgIExheW91dFVuaXQgcmVzdWx0
ID0gLTE7CiAgICAgCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIGJsb2NrcyB3aXRoIGF1dG8gaGVp
Z2h0IGFyZSBza2lwcGVkLCBhbmQgd2Uga2VlcCBsb29raW5nIGZvciBhbiBlbmNsb3NpbmcKICAg
ICAvLyBibG9jayB0aGF0IG1heSBoYXZlIGEgc3BlY2lmaWVkIGhlaWdodCBhbmQgdGhlbiB1c2Ug
aXQuIEluIHN0cmljdCBtb2RlLCB0aGlzIHZpb2xhdGVzIHRoZQpAQCAtMTkxMSw3ICsxOTExLDcg
QEAgaW50IFJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSAogICAgIH0gZWxzZSBp
ZiAoY2ItPmlzUmVuZGVyVmlldygpIHx8IChjYi0+aXNCb2R5KCkgJiYgZG9jdW1lbnQoKS0+aW5R
dWlya3NNb2RlKCkpIHx8IGlzUG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQpIHsKICAgICAg
ICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyB0byBhZmZlY3QgdGhlIGJsb2NrJyBoZWlnaHQoKSBtZW1i
ZXIgdmFyaWFibGUsIHNpbmNlIHRoaXMKICAgICAgICAgLy8gY2FuIGdldCBjYWxsZWQgd2hpbGUg
dGhlIGJsb2NrIGlzIHN0aWxsIGxheWluZyBvdXQgaXRzIGtpZHMuCi0gICAgICAgIGludCBvbGRI
ZWlnaHQgPSBjYi0+bG9naWNhbEhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IG9sZEhlaWdo
dCA9IGNiLT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGNiLT5jb21wdXRlTG9naWNhbEhlaWdo
dCgpOwogICAgICAgICByZXN1bHQgPSBjYi0+Y29udGVudExvZ2ljYWxIZWlnaHQoKTsKICAgICAg
ICAgY2ItPnNldExvZ2ljYWxIZWlnaHQob2xkSGVpZ2h0KTsKQEAgLTE5MzMsMTkgKzE5MzMsMTkg
QEAgaW50IFJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChi
b29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRl
UmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChj
b21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5sb2dpY2FsV2lkdGgoKSks
IGluY2x1ZGVNYXhXaWR0aCk7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChpbnQgbG9naWNhbFdpZHRoLCBib29sIGlu
Y2x1ZGVNYXhXaWR0aCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFj
ZWRMb2dpY2FsV2lkdGhSZXNwZWN0aW5nTWluTWF4V2lkdGgoTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgsIGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAogewotICAgIGludCBtaW5Mb2dpY2FsV2lk
dGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWlu
V2lkdGgoKSk7Ci0gICAgaW50IG1heExvZ2ljYWxXaWR0aCA9ICFpbmNsdWRlTWF4V2lkdGggfHwg
c3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSA/IGxvZ2ljYWxXaWR0aCA6
IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0
aCgpKTsKKyAgICBMYXlvdXRVbml0IG1pbkxvZ2ljYWxXaWR0aCA9IGNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNaW5XaWR0aCgpKTsKKyAgICBMYXlvdXRV
bml0IG1heExvZ2ljYWxXaWR0aCA9ICFpbmNsdWRlTWF4V2lkdGggfHwgc3R5bGUoKS0+bG9naWNh
bE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSA/IGxvZ2ljYWxXaWR0aCA6IGNvbXB1dGVSZXBsYWNl
ZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgpKTsKICAgICByZXR1
cm4gbWF4KG1pbkxvZ2ljYWxXaWR0aCwgbWluKGxvZ2ljYWxXaWR0aCwgbWF4TG9naWNhbFdpZHRo
KSk7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5n
KExlbmd0aCBsb2dpY2FsV2lkdGgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0
ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aCkgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKGxvZ2ljYWxXaWR0aC50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGaXhlZDoK
QEAgLTE5NTQsNyArMTk1NCw3IEBAIGludCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxXaWQKICAgICAgICAgICAgIC8vIEZJWE1FOiBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhG
b3JDb250ZW50KCkgaXMgd3JvbmcgaWYgdGhlIHJlcGxhY2VkIGVsZW1lbnQncyBibG9jay1mbG93
IGlzIHBlcnBlbmRpY3VsYXIgdG8gdGhlCiAgICAgICAgICAgICAvLyBjb250YWluaW5nIGJsb2Nr
J3MgYmxvY2stZmxvdy4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NjQ5NgotICAgICAgICAgICAgY29uc3QgaW50IGN3ID0gaXNQb3NpdGlv
bmVkKCkgPyBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKHRvUmVuZGVy
Qm94TW9kZWxPYmplY3QoY29udGFpbmVyKCkpKSA6IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0
aEZvckNvbnRlbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IExheW91dFVuaXQgY3cgPSBpc1Bvc2l0
aW9uZWQoKSA/IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQodG9SZW5k
ZXJCb3hNb2RlbE9iamVjdChjb250YWluZXIoKSkpIDogY29udGFpbmluZ0Jsb2NrTG9naWNhbFdp
ZHRoRm9yQ29udGVudCgpOwogICAgICAgICAgICAgaWYgKGN3ID4gMCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoLmNhbGNN
aW5WYWx1ZShjdykpOwogICAgICAgICB9CkBAIC0xOTY0LDE5ICsxOTY0LDE5IEBAIGludCBSZW5k
ZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWQKICAgICAgfQogfQogCi1pbnQgUmVuZGVy
Qm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKK0xheW91dFVuaXQgUmVu
ZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3RpbmdNaW5NYXhIZWlnaHQoY29t
cHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKSkp
OwogfQogCi1pbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0UmVzcGVj
dGluZ01pbk1heEhlaWdodChpbnQgbG9naWNhbEhlaWdodCkgY29uc3QKK0xheW91dFVuaXQgUmVu
ZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0UmVzcGVjdGluZ01pbk1heEhlaWdo
dChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CiB7Ci0gICAgaW50IG1pbkxvZ2ljYWxI
ZWlnaHQgPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNh
bE1pbkhlaWdodCgpKTsKLSAgICBpbnQgbWF4TG9naWNhbEhlaWdodCA9IHN0eWxlKCktPmxvZ2lj
YWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gbG9naWNhbEhlaWdodCA6IGNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOworICAg
IExheW91dFVuaXQgbWluTG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWln
aHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCkpOworICAgIExheW91dFVuaXQgbWF4
TG9naWNhbEhlaWdodCA9IHN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgp
ID8gbG9naWNhbEhlaWdodCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHls
ZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOwogICAgIHJldHVybiBtYXgobWluTG9naWNhbEhlaWdo
dCwgbWluKGxvZ2ljYWxIZWlnaHQsIG1heExvZ2ljYWxIZWlnaHQpKTsKIH0KIAotaW50IFJlbmRl
ckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKExlbmd0aCBsb2dpY2FsSGVp
Z2h0KSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxI
ZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGxv
Z2ljYWxIZWlnaHQudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRml4ZWQ6CkBAIC0xOTk0LDkgKzE5
OTQsOSBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpCiAgICAgICAg
ICAgICBpZiAoY2ItPmlzUG9zaXRpb25lZCgpICYmIGNiLT5zdHlsZSgpLT5oZWlnaHQoKS5pc0F1
dG8oKSAmJiAhKGNiLT5zdHlsZSgpLT50b3AoKS5pc0F1dG8oKSB8fCBjYi0+c3R5bGUoKS0+Ym90
dG9tKCkuaXNBdXRvKCkpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGNiLT5pc1JlbmRlckJs
b2NrKCkpOwogICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVyQmxv
Y2soY2IpOwotICAgICAgICAgICAgICAgIGludCBvbGRIZWlnaHQgPSBibG9jay0+aGVpZ2h0KCk7
CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRIZWlnaHQgPSBibG9jay0+aGVpZ2h0KCk7
CiAgICAgICAgICAgICAgICAgYmxvY2stPmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAg
ICAgICAgICAgaW50IG5ld0hlaWdodCA9IGJsb2NrLT5jb21wdXRlQ29udGVudEJveExvZ2ljYWxI
ZWlnaHQoYmxvY2stPmNvbnRlbnRIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCBuZXdIZWlnaHQgPSBibG9jay0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGJsb2Nr
LT5jb250ZW50SGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIGJsb2NrLT5zZXRIZWlnaHQob2xk
SGVpZ2h0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
SGVpZ2h0KGxvZ2ljYWxIZWlnaHQuY2FsY1ZhbHVlKG5ld0hlaWdodCkpOwogICAgICAgICAgICAg
fQpAQCAtMjAwNCw3ICsyMDA0LDcgQEAgaW50IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9n
aWNhbEhlaQogICAgICAgICAgICAgLy8gRklYTUU6IGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoKSBp
cyB3cm9uZyBpZiB0aGUgcmVwbGFjZWQgZWxlbWVudCdzIGJsb2NrLWZsb3cgaXMgcGVycGVuZGlj
dWxhciB0byB0aGUKICAgICAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sncyBibG9jay1mbG93
LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ2NDk2Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0OworICAgICAgICAgICAgTGF5
b3V0VW5pdCBhdmFpbGFibGVIZWlnaHQ7CiAgICAgICAgICAgICBpZiAoaXNQb3NpdGlvbmVkKCkp
CiAgICAgICAgICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrTG9naWNh
bEhlaWdodEZvclBvc2l0aW9uZWQodG9SZW5kZXJCb3hNb2RlbE9iamVjdChjYikpOwogICAgICAg
ICAgICAgZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZp
c2lvbiA5MDAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtMzA1LDE3ICszMDUsMTcgQEAgcHVibGljOgogICAgIGJvb2wgc2l6ZXNU
b0ludHJpbnNpY0xvZ2ljYWxXaWR0aChMb2dpY2FsV2lkdGhUeXBlKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCi0gICAgaW50IGNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZyhMb2dpY2Fs
V2lkdGhUeXBlLCBpbnQgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKLSAgICBpbnQgY29tcHV0ZUxv
Z2ljYWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGhlaWdodCk7Ci0gICAgaW50IGNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKExlbmd0aCB3aWR0aCkgY29uc3Q7Ci0gICAgaW50IGNv
bXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChpbnQgbG9naWNh
bFdpZHRoLCBib29sIGluY2x1ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0OwotICAgIGludCBjb21w
dXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoTGVuZ3RoIGhlaWdodCkgY29uc3Q7Ci0gICAg
aW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGlu
dCBsb2dpY2FsSGVpZ2h0KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVMb2dpY2FsV2lk
dGhVc2luZyhMb2dpY2FsV2lkdGhUeXBlLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0
aCk7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExlbmd0
aCYgaGVpZ2h0KTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVz
aW5nKExlbmd0aCB3aWR0aCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRM
b2dpY2FsV2lkdGhSZXNwZWN0aW5nTWluTWF4V2lkdGgoTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgs
IGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb21w
dXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoTGVuZ3RoIGhlaWdodCkgY29uc3Q7CisgICAg
TGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0UmVzcGVjdGluZ01pbk1heEhl
aWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBpbnQg
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNv
bnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgo
Ym9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVu
aXQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwogCi0gICAgaW50IGNvbXB1
dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgmIGhlaWdodCk7CisgICAgTGF5
b3V0VW5pdCBjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQoY29uc3QgTGVuZ3RoJiBoZWln
aHQpOwogCiAgICAgLy8gQmxvY2sgZmxvd3Mgc3ViY2xhc3MgYXZhaWxhYmxlV2lkdGggdG8gaGFu
ZGxlIG11bHRpIGNvbHVtbiBsYXlvdXQgKHNocmlua2luZyB0aGUgd2lkdGggYXZhaWxhYmxlIHRv
IGNoaWxkcmVuIHdoZW4gbGF5aW5nIG91dC4pCiAgICAgdmlydHVhbCBpbnQgYXZhaWxhYmxlTG9n
aWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcAkocmV2aXNpb24gOTAw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCB2b2lkIFJlbmRlcklGcmFtZTo6Y29tcHV0ZUxvZ2lj
YWxXaWR0aCgpCiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmll
dyo+KHdpZGdldCgpKTsKICAgICAgICAgaWYgKCF2aWV3KQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBpbnQgYm9yZGVyID0gYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBib3JkZXIgPSBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpOwogICAg
ICAgICBzZXRXaWR0aChtYXgod2lkdGgoKSwgdmlldy0+Y29udGVudHNXaWR0aCgpICsgYm9yZGVy
KSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCShyZXZpc2lvbiA5MDAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MCwxOSArNDYwLDE5IEBAIGJvb2wgUmVuZGVy
SW1hZ2U6OmlzTG9naWNhbEhlaWdodFNwZWNpZmkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlu
dCBSZW5kZXJJbWFnZTo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1h
eFdpZHRoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJJbWFnZTo6Y29tcHV0ZVJlcGxhY2VkTG9n
aWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAogewogICAgIGlmIChtX2ltYWdl
UmVzb3VyY2UtPmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpKQogICAgICAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiBjYiA9IGlzUG9zaXRpb25lZCgpID8gY29udGFpbmVyKCkgOiBjb250YWluaW5nQmxvY2so
KSkgewogICAgICAgICAgICAgaWYgKGNiLT5pc0JveCgpKQotICAgICAgICAgICAgICAgIG1faW1h
Z2VSZXNvdXJjZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKEludFNpemUodG9SZW5kZXJCb3goY2Ip
LT5hdmFpbGFibGVXaWR0aCgpLCB0b1JlbmRlckJveChjYiktPmF2YWlsYWJsZUhlaWdodCgpKSk7
CisgICAgICAgICAgICAgICAgbV9pbWFnZVJlc291cmNlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUo
TGF5b3V0U2l6ZSh0b1JlbmRlckJveChjYiktPmF2YWlsYWJsZVdpZHRoKCksIHRvUmVuZGVyQm94
KGNiKS0+YXZhaWxhYmxlSGVpZ2h0KCkpKTsKICAgICAgICAgfQogCi0gICAgaW50IGxvZ2ljYWxX
aWR0aDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aDsKICAgICBpZiAoaXNMb2dpY2FsV2lk
dGhTcGVjaWZpZWQoKSkKICAgICAgICAgbG9naWNhbFdpZHRoID0gY29tcHV0ZVJlcGxhY2VkTG9n
aWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbFdpZHRoKCkpOwogICAgIGVsc2UgaWYgKG1f
aW1hZ2VSZXNvdXJjZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpKSB7Ci0gICAgICAgIEludFNp
emUgc2l6ZSA9IG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VTaXplKHN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSk7CisgICAgICAgIExheW91dFNpemUgc2l6ZSA9IG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VT
aXplKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IHN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBzaXplLndpZHRoKCkgOiBzaXplLmhl
aWdodCgpOwogICAgIH0gZWxzZSBpZiAobV9pbWFnZVJlc291cmNlLT5pbWFnZUhhc1JlbGF0aXZl
V2lkdGgoKSkKICAgICAgICAgbG9naWNhbFdpZHRoID0gMDsgLy8gSWYgdGhlIGltYWdlIGlzIHJl
bGF0aXZlbHktc2l6ZWQsIHNldCB0aGUgd2lkdGggdG8gMCB1bnRpbCB0aGVyZSBpcyBhIHNldCBj
b250YWluZXIgc2l6ZS4KQEAgLTQ4MiwxMyArNDgyLDEzIEBAIGludCBSZW5kZXJJbWFnZTo6Y29t
cHV0ZVJlcGxhY2VkTG9naWNhbFcKICAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdp
ZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGxvZ2ljYWxXaWR0aCwgaW5jbHVkZU1heFdpZHRoKTsK
IH0KIAotaW50IFJlbmRlckltYWdlOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29u
c3QKK0xheW91dFVuaXQgUmVuZGVySW1hZ2U6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQo
KSBjb25zdAogewotICAgIGludCBsb2dpY2FsSGVpZ2h0OworICAgIExheW91dFVuaXQgbG9naWNh
bEhlaWdodDsKICAgICBpZiAoaXNMb2dpY2FsSGVpZ2h0U3BlY2lmaWVkKCkpCiAgICAgICAgIGxv
Z2ljYWxIZWlnaHQgPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+
bG9naWNhbEhlaWdodCgpKTsKICAgICBlbHNlIGlmIChtX2ltYWdlUmVzb3VyY2UtPnVzZXNJbWFn
ZUNvbnRhaW5lclNpemUoKSkgewotICAgICAgICBJbnRTaXplIHNpemUgPSBtX2ltYWdlUmVzb3Vy
Y2UtPmltYWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBMYXlvdXRT
aXplIHNpemUgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpOwogICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IHNpemUuaGVpZ2h0KCkgOiBzaXplLndpZHRoKCk7CiAgICAgfSBlbHNlIGlm
IChtX2ltYWdlUmVzb3VyY2UtPmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSkKICAgICAgICAgbG9n
aWNhbEhlaWdodCA9IDA7IC8vIElmIHRoZSBpbWFnZSBpcyByZWxhdGl2ZWx5LXNpemVkLCBzZXQg
dGhlIGhlaWdodCB0byAwIHVudGlsIHRoZXJlIGlzIGEgc2V0IGNvbnRhaW5lciBzaXplLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgJKHJldmlzaW9uIDkwMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDggKzgzLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNo
ZWQoQ2FjaGVkUmVzb3VyY2UqKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
bik7CiAKLSAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBp
bmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVw
bGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1
dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0
OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkg
Y29uc3Q7CiAKICAgICBJbnRTaXplIGltYWdlU2l6ZUZvckVycm9yKENhY2hlZEltYWdlKikgY29u
c3Q7CiAgICAgdm9pZCBpbWFnZURpbWVuc2lvbnNDaGFuZ2VkKGJvb2wgaW1hZ2VTaXplQ2hhbmdl
ZCwgY29uc3QgSW50UmVjdCogPSAwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNyArMTk5LDcg
QEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojpjb21wdXRlUHJlZmVycmVkTG9naQogICAgICAgICBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwg
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgp
KSk7CiAgICAgfQogCi0gICAgaW50IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Cisg
ICAgTGF5b3V0VW5pdCB0b0FkZCA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwogICAgIG1fbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IHRvQWRkOwogICAgIG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoICs9IHRvQWRkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlz
aW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ4LDE2ICsxMzQ4LDE2IEBAIHZvaWQgUmVuZGVyTGlz
dE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJlZEwKICAgICBpZiAoaXNJbWFnZSgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgc29tZXdoYXQgYXJiaXRyYXJ5IHdpZHRoLiAgR2VuZXJhdGVk
IGltYWdlcyBmb3IgbWFya2VycyByZWFsbHkgd29uJ3QgYmVjb21lIHBhcnRpY3VsYXJseSB1c2Vm
dWwKICAgICAgICAgLy8gdW50aWwgd2Ugc3VwcG9ydCB0aGUgQ1NTMyBtYXJrZXIgcHNldWRvY2xh
c3MgdG8gYWxsb3cgY29udHJvbCBvdmVyIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBtYXJr
ZXIgYm94LgotICAgICAgICBpbnQgYnVsbGV0V2lkdGggPSBmb250TWV0cmljcy5hc2NlbnQoKSAv
IDI7Ci0gICAgICAgIG1faW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShJbnRTaXplKGJ1bGxl
dFdpZHRoLCBidWxsZXRXaWR0aCkpOwotICAgICAgICBJbnRTaXplIGltYWdlU2l6ZSA9IG1faW1h
Z2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBM
YXlvdXRVbml0IGJ1bGxldFdpZHRoID0gZm9udE1ldHJpY3MuYXNjZW50KCkgLyAyOworICAgICAg
ICBtX2ltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUoTGF5b3V0U2l6ZShidWxsZXRXaWR0aCwg
YnVsbGV0V2lkdGgpKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlLT5p
bWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgbV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBpbWFnZVNpemUud2lkdGgoKSA6IGltYWdl
U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGZh
bHNlKTsKICAgICAgICAgdXBkYXRlTWFyZ2lucygpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaW50IGxvZ2ljYWxXaWR0aCA9IDA7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgg
PSAwOwogICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCk7
CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgTm9uZUxpc3RTdHlsZToKQEAgLTE0
NTIsOSArMTQ1Miw5IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJlZEwK
ICAgICAgICAgICAgIGlmIChtX3RleHQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGxvZ2lj
YWxXaWR0aCA9IDA7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgaXRl
bVdpZHRoID0gZm9udC53aWR0aChtX3RleHQpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQg
aXRlbVdpZHRoID0gZm9udC53aWR0aChtX3RleHQpOwogICAgICAgICAgICAgICAgIFVDaGFyIHN1
ZmZpeFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3VmZml4KHR5cGUsIG1fbGlzdEl0ZW0tPnZhbHVl
KCkpLCAnICcgfTsKLSAgICAgICAgICAgICAgICBpbnQgc3VmZml4U3BhY2VXaWR0aCA9IGZvbnQu
d2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgc3VmZml4U3Bh
Y2UsIDIsIHN0eWxlKCkpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHN1ZmZpeFNwYWNl
V2lkdGggPSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZv
bnQsIHN1ZmZpeFNwYWNlLCAyLCBzdHlsZSgpKSk7CiAgICAgICAgICAgICAgICAgbG9naWNhbFdp
ZHRoID0gaXRlbVdpZHRoICsgc3VmZml4U3BhY2VXaWR0aDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCShyZXZpc2lvbiA5MDAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lk
IFJlbmRlck1lbnVMaXN0Ojpjb21wdXRlUHJlZmVycmVkTG9nCiAgICAgICAgIG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRl
Q29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAg
ICB9CiAKLSAgICBpbnQgdG9BZGQgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKKyAgICBMYXlv
dXRVbml0IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAgICAgbV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGggKz0gdG9BZGQ7CiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgg
Kz0gdG9BZGQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcAkocmV2aXNpb24gOTAwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsMTEgKzI0NCwxMyBAQCBpbnQg
UmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljCiAgICAgICAgICAgICBpZiAoKGhl
aWdodElzQXV0byAmJiAhaGFzSW50cmluc2ljV2lkdGggJiYgaGFzSW50cmluc2ljSGVpZ2h0KSB8
fCAhaGVpZ2h0SXNBdXRvKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhlaWdodElzQXV0bykgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRlbnRSZW5kZXJlci0+Y29tcHV0ZVJl
cGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKGNvbnRlbnRSZW5kZXJTdHlsZS0+bG9naWNhbEhlaWdo
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9
IGNvbnRlbnRSZW5kZXJlci0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKGNvbnRl
bnRSZW5kZXJTdHlsZS0+bG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBSZW1vdmUgdW5uZWNlc3Nhcnkgcm91bmRpbmcgd2hlbiBsYXlvdXQgaXMgb2Zm
IGludHM6IHdlYmtpdC5vcmcvYi82MzY1NgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbnRlbnRSZW5kZXJlci0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01p
bk1heFdpZHRoKHN0YXRpY19jYXN0PGludD4oY2VpbGYobG9naWNhbEhlaWdodCAqIGludHJpbnNp
Y1JhdGlvLndpZHRoKCkgLyBpbnRyaW5zaWNSYXRpby5oZWlnaHQoKSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7IAotICAgICAgICAgICAgICAgICAg
ICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhz
dHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQgPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUo
KS0+bG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92
ZSB1bm5lY2Vzc2FyeSByb3VuZGluZyB3aGVuIGxheW91dCBpcyBvZmYgaW50czogd2Via2l0Lm9y
Zy9iLzYzNjU2CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wdXRlUmVwbGFjZWRMb2dp
Y2FsV2lkdGhSZXNwZWN0aW5nTWluTWF4V2lkdGgoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihsb2dp
Y2FsSGVpZ2h0ICogaW50cmluc2ljUmF0aW8ud2lkdGgoKSAvIGludHJpbnNpY1JhdGlvLmhlaWdo
dCgpKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI3MywxMSArMjc1
LDEyIEBAIGludCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhY2VkTG9naWMKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBzb2x2
ZXMgYWJvdmUgZXF1YXRpb24gZm9yICd3aWR0aCcgKD09IGxvZ2ljYWxXaWR0aCkuCi0gICAgICAg
ICAgICAgICAgaW50IGxvZ2ljYWxXaWR0aCA9IGZvdW5kRXhwbGljaXRXaWR0aCA/IGNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGgoY29udGFpbmluZ0Jsb2NrLCBmYWxzZSkgOiBjb250YWluaW5n
QmxvY2stPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOwotICAgICAgICAgICAgICAgIGludCBtYXJn
aW5TdGFydCA9IHN0eWxlKCktPm1hcmdpblN0YXJ0KCkuY2FsY01pblZhbHVlKGxvZ2ljYWxXaWR0
aCk7Ci0gICAgICAgICAgICAgICAgaW50IG1hcmdpbkVuZCA9IHN0eWxlKCktPm1hcmdpbkVuZCgp
LmNhbGNNaW5WYWx1ZShsb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQg
bG9naWNhbFdpZHRoID0gZm91bmRFeHBsaWNpdFdpZHRoID8gY29tcHV0ZUludHJpbnNpY0xvZ2lj
YWxXaWR0aChjb250YWluaW5nQmxvY2ssIGZhbHNlKSA6IGNvbnRhaW5pbmdCbG9jay0+YXZhaWxh
YmxlTG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFy
dCA9IHN0eWxlKCktPm1hcmdpblN0YXJ0KCkuY2FsY01pblZhbHVlKGxvZ2ljYWxXaWR0aCk7Cisg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQgPSBzdHlsZSgpLT5tYXJnaW5FbmQo
KS5jYWxjTWluVmFsdWUobG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICBsb2dpY2FsV2lk
dGggPSBtYXgoMCwgbG9naWNhbFdpZHRoIC0gKG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kICsgKHdp
ZHRoKCkgLSBjbGllbnRXaWR0aCgpKSkpOwogICAgICAgICAgICAgICAgIGlmIChpc1BlcmNlbnRh
Z2VJbnRyaW5zaWNTaXplKQorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHVu
bmVjZXNzYXJ5IHJvdW5kaW5nIHdoZW4gbGF5b3V0IGlzIG9mZiBpbnRzOiB3ZWJraXQub3JnL2Iv
NjM2NTYKICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFdpZHRoID0gc3RhdGljX2Nhc3Q8aW50
PihjZWlsZihsb2dpY2FsV2lkdGggKiBpbnRyaW5zaWNSYXRpby53aWR0aCgpIC8gMTAwKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3Rp
bmdNaW5NYXhXaWR0aChsb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgfQpAQCAtMzMzLDYgKzMz
Niw3IEBAIGludCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhY2VkTG9naWMKICAgICAgICAg
Ly8gT3RoZXJ3aXNlLCBpZiAnaGVpZ2h0JyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycs
IGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIHRoZW4gdGhlIHVzZWQgdmFs
dWUgb2YgJ2hlaWdodCcgaXM6CiAgICAgICAgIC8vICh1c2VkIHdpZHRoKSAvIChpbnRyaW5zaWMg
cmF0aW8pCiAgICAgICAgIGlmICghaW50cmluc2ljUmF0aW8uaXNFbXB0eSgpICYmICFpc1BlcmNl
bnRhZ2VJbnRyaW5zaWNTaXplKQorICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB1bm5lY2Vz
c2FyeSByb3VuZGluZyB3aGVuIGxheW91dCBpcyBvZmYgaW50czogd2Via2l0Lm9yZy9iLzYzNjU2
CiAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3Rp
bmdNaW5NYXhIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihhdmFpbGFibGVMb2dpY2FsV2lk
dGgoKSAqIGludHJpbnNpY1JhdGlvLmhlaWdodCgpIC8gaW50cmluc2ljUmF0aW8ud2lkdGgoKSkp
KTsKIAogICAgICAgICAvLyBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZh
bHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0
aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4K
QEAgLTM2Nyw3ICszNzEsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUHJlZmVycmVk
TG9nCiB7CiAgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAotICAg
IGludCBib3JkZXJBbmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CisgICAgTGF5
b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAgICAg
bV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgo
ZmFsc2UpICsgYm9yZGVyQW5kUGFkZGluZzsKIAogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgp
LmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVu
Z3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHJl
dmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2Vk
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAgcHVibGljOgogICAgIFJlbmRlclJl
cGxhY2VkKE5vZGUqLCBjb25zdCBJbnRTaXplJiBpbnRyaW5zaWNTaXplKTsKICAgICB2aXJ0dWFs
IH5SZW5kZXJSZXBsYWNlZCgpOwogCi0gICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9n
aWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVh
bCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lk
dGggPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZVJlcGxhY2Vk
TG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJ
KHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBSZW5kZXJTbGlkZXI6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpYwogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IG1pbihtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dp
Y2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogCi0gICAgaW50
IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CisgICAgTGF5b3V0VW5pdCB0b0FkZCA9
IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwogICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRo
ICs9IHRvQWRkOwogICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IHRvQWRkOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDkw
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE1LDkgKzIxNSw5IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNvbXB1dGVMb2dp
Y2FsV2lkdGgoKQogCiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAK
LSAgICBpbnQgYXZhaWxhYmxlTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdp
ZHRoRm9yQ29udGVudCgpOworICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoID0g
Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOwogICAgIGJvb2wgaGFzUGVy
cGVuZGljdWxhckNvbnRhaW5pbmdCbG9jayA9IGNiLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpICE9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgaW50
IGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24gPSBoYXNQZXJwZW5kaWN1bGFyQ29udGFp
bmluZ0Jsb2NrID8gcGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSA6
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aDsKKyAgICBMYXlvdXRVbml0IGNvbnRhaW5lcldpZHRoSW5J
bmxpbmVEaXJlY3Rpb24gPSBoYXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrID8gcGVycGVu
ZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSA6IGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aDsKIAogICAgIExlbmd0aFR5cGUgbG9naWNhbFdpZHRoVHlwZSA9IHN0eWxlKCktPmxvZ2lj
YWxXaWR0aCgpLnR5cGUoKTsKICAgICBpZiAobG9naWNhbFdpZHRoVHlwZSA+IFJlbGF0aXZlICYm
IHN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpLmlzUG9zaXRpdmUoKSkgewpAQCAtMjI2LDE0ICsyMjYs
MTQgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgICAgIHNl
dExvZ2ljYWxXaWR0aChtYXgobWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCksIGxvZ2ljYWxXaWR0
aCgpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gU3VidHJhY3Qgb3V0IGFueSBmaXhlZCBt
YXJnaW5zIGZyb20gb3VyIGF2YWlsYWJsZSB3aWR0aCBmb3IgYXV0byB3aWR0aCB0YWJsZXMuCi0g
ICAgICAgIGludCBtYXJnaW5Ub3RhbCA9IDA7CisgICAgICAgIExheW91dFVuaXQgbWFyZ2luVG90
YWwgPSAwOwogICAgICAgICBpZiAoIXN0eWxlKCktPm1hcmdpblN0YXJ0KCkuaXNBdXRvKCkpCiAg
ICAgICAgICAgICBtYXJnaW5Ub3RhbCArPSBzdHlsZSgpLT5tYXJnaW5TdGFydCgpLmNhbGNWYWx1
ZShhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgICAgICBpZiAoIXN0eWxlKCktPm1hcmdpbkVu
ZCgpLmlzQXV0bygpKQogICAgICAgICAgICAgbWFyZ2luVG90YWwgKz0gc3R5bGUoKS0+bWFyZ2lu
RW5kKCkuY2FsY1ZhbHVlKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgLy8gU3VidHJhY3Qgb3V0IG91ciBtYXJnaW5zIHRvIGdldCB0aGUgYXZhaWxhYmxlIGNv
bnRlbnQgd2lkdGguCi0gICAgICAgIGludCBhdmFpbGFibGVDb250ZW50TG9naWNhbFdpZHRoID0g
bWF4KDAsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24gLSBtYXJnaW5Ub3RhbCk7Cisg
ICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlQ29udGVudExvZ2ljYWxXaWR0aCA9IG1heCgwLCBj
b250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uIC0gbWFyZ2luVG90YWwpOwogICAgICAgICAK
ICAgICAgICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBiaWdnZXIgdGhhbiBvdXIgbWF4IHdpZHRoIG9y
IHNtYWxsZXIgdGhhbiBvdXIgbWluIHdpZHRoLgogICAgICAgICBzZXRMb2dpY2FsV2lkdGgobWlu
KGF2YWlsYWJsZUNvbnRlbnRMb2dpY2FsV2lkdGgsIG1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5jcHAJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3IEBAIHZvaWQg
UmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVQcmVmZXJyZWQKICAgICAgICAgbV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVD
b250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAg
IH0KIAotICAgIGludCB0b0FkZCA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOworICAgIExheW91
dFVuaXQgdG9BZGQgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKIAogICAgIG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoICs9IHRvQWRkOwogICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
ICs9IHRvQWRkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3Bw
CShyZXZpc2lvbiA5MDAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRl
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MywxMiArMjUzLDEyIEBAIHZvaWQgUmVuZGVyVmlk
ZW86OnVwZGF0ZVBsYXllcigpCiAgICAgbWVkaWFQbGF5ZXItPnNldFZpc2libGUodHJ1ZSk7CiB9
CiAKLWludCBSZW5kZXJWaWRlbzo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5j
bHVkZU1heFdpZHRoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJWaWRlbzo6Y29tcHV0ZVJlcGxh
Y2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAogewogICAgIHJldHVy
biBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGluY2x1ZGVNYXhX
aWR0aCk7CiB9CiAKLWludCBSZW5kZXJWaWRlbzo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdo
dCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclZpZGVvOjpjb21wdXRlUmVwbGFjZWRMb2dpY2Fs
SGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxIZWlnaHQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWRlby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWRlby5oCShyZXZpc2lvbiA5MDAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWRlby5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIHByaXZhdGU6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVw
bGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1
ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRl
UmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgbWluaW11bVJl
cGxhY2VkSGVpZ2h0KCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdC5jcHAJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
MTIgKzg2LDE0IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyU1ZHRm9yZWlnbk8KIHZv
aWQgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiB7CiAgICAg
Ly8gRklYTUU6IEludmVzdGlnYXRlIGluIHNpemUgcm91bmRpbmcgaXNzdWVzCisgICAgLy8gRklY
TUU6IFJlbW92ZSB1bm5lY2Vzc2FyeSByb3VuZGluZyB3aGVuIGxheW91dCBpcyBvZmYgaW50czog
d2Via2l0Lm9yZy9iLzYzNjU2CiAgICAgc2V0V2lkdGgoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYo
bV92aWV3cG9ydC53aWR0aCgpKSkpOwogfQogCiB2b2lkIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6
OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCkKIHsKICAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaW4g
c2l6ZSByb3VuZGluZyBpc3N1ZXMKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHVubmVjZXNzYXJ5IHJv
dW5kaW5nIHdoZW4gbGF5b3V0IGlzIG9mZiBpbnRzOiB3ZWJraXQub3JnL2IvNjM2NTYKICAgICBz
ZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYobV92aWV3cG9ydC5oZWlnaHQoKSkpKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuY3BwCShyZXZpc2lvbiA5MDAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDggKzk4LDggQEAgdm9pZCBS
ZW5kZXJTVkdSb290Ojpjb21wdXRlUHJlZmVycmVkTG9naQogewogICAgIEFTU0VSVChwcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBpbnQgYm9yZGVyQW5kUGFkZGluZyA9IGJv
cmRlckFuZFBhZGRpbmdXaWR0aCgpOwotICAgIGludCB3aWR0aCA9IGNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxXaWR0aChmYWxzZSkgKyBib3JkZXJBbmRQYWRkaW5nOworICAgIExheW91dFVuaXQgYm9y
ZGVyQW5kUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOworICAgIExheW91dFVuaXQg
d2lkdGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoZmFsc2UpICsgYm9yZGVyQW5kUGFk
ZGluZzsKIAogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgp
LT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQogICAgICAgICB3aWR0aCA9
IG1pbih3aWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0eWxlKCktPmJveFNp
emluZygpID09IENPTlRFTlRfQk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IDApKTsKQEAgLTExMywx
NyArMTEzLDE5IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2kKICAg
ICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCi1pbnQgUmVuZGVy
U1ZHUm9vdDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoKGludCByZXBsYWNlZFdpZHRoKSBjb25zdAor
TGF5b3V0VW5pdCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmluc2ljV2lkdGgoTGF5b3V0VW5p
dCByZXBsYWNlZFdpZHRoKSBjb25zdAogewogICAgIGlmICghc3R5bGUoKS0+d2lkdGgoKS5pc1Bl
cmNlbnQoKSkKICAgICAgICAgcmV0dXJuIHJlcGxhY2VkV2lkdGg7CisgICAgLy8gRklYTUU6IFJl
bW92ZSB1bm5lY2Vzc2FyeSByb3VuZGluZyB3aGVuIGxheW91dCBpcyBvZmYgaW50czogd2Via2l0
Lm9yZy9iLzYzNjU2CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYocmVwbGFjZWRX
aWR0aCAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogfQogCi1pbnQgUmVuZGVyU1ZHUm9v
dDo6Y29tcHV0ZUludHJpbnNpY0hlaWdodChpbnQgcmVwbGFjZWRIZWlnaHQpIGNvbnN0CitMYXlv
dXRVbml0IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNIZWlnaHQoTGF5b3V0VW5pdCBy
ZXBsYWNlZEhlaWdodCkgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmhlaWdodCgpLmlzUGVy
Y2VudCgpKQogICAgICAgICByZXR1cm4gcmVwbGFjZWRIZWlnaHQ7CisgICAgLy8gRklYTUU6IFJl
bW92ZSB1bm5lY2Vzc2FyeSByb3VuZGluZyB3aGVuIGxheW91dCBpcyBvZmYgaW50czogd2Via2l0
Lm9yZy9iLzYzNjU2CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYocmVwbGFjZWRI
ZWlnaHQgKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKIH0KIApAQCAtMTQ4LDkgKzE1MCw5
IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6bmVnb3RpYXRlU2l6ZVdpdGhIb3MKICAgICB9CiB9CiAK
LWludCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNs
dWRlTWF4V2lkdGgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QKIHsKLSAgICBpbnQg
cmVwbGFjZWRXaWR0aCA9IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGlu
Y2x1ZGVNYXhXaWR0aCk7CisgICAgTGF5b3V0VW5pdCByZXBsYWNlZFdpZHRoID0gUmVuZGVyQm94
Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoaW5jbHVkZU1heFdpZHRoKTsKICAgICBGcmFt
ZSogZnJhbWUgPSBub2RlKCkgJiYgbm9kZSgpLT5kb2N1bWVudCgpID8gbm9kZSgpLT5kb2N1bWVu
dCgpLT5mcmFtZSgpIDogMDsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gY29tcHV0
ZUludHJpbnNpY1dpZHRoKHJlcGxhY2VkV2lkdGgpOwpAQCAtMTg5LDkgKzE5MSw5IEBAIGludCBS
ZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2EKICAgICByZXR1cm4gb3duZXJSZW5k
ZXJlci0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKG93
bmVyUmVuZGVyZXItPmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKG93bmVyV2lkdGgp
LCBpbmNsdWRlTWF4V2lkdGgpOwogfQogCi1pbnQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxh
Y2VkTG9naWNhbEhlaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclNWR1Jvb3Q6OmNvbXB1
dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdAogewotICAgIGludCByZXBsYWNlZEhlaWdo
dCA9IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpOworICAgIExheW91
dFVuaXQgcmVwbGFjZWRIZWlnaHQgPSBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxI
ZWlnaHQoKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUoKSAmJiBub2RlKCktPmRvY3VtZW50
KCkgPyBub2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkgOiAwOwogICAgIGlmICghZnJhbWUpCkBA
IC0yMjgsNyArMjMwLDcgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQogICAgIGJvb2wg
bmVlZHNMYXlvdXQgPSBzZWxmTmVlZHNMYXlvdXQoKTsKICAgICBMYXlvdXRSZXBhaW50ZXIgcmVw
YWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBuZWVkc0xheW91
dCk7CiAKLSAgICBJbnRTaXplIG9sZFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIExheW91
dFNpemUgb2xkU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgbmVnb3RpYXRlU2l6ZVdpdGhI
b3N0RG9jdW1lbnRJZk5lZWRlZCgpOwogICAgIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKICAgICBj
b21wdXRlTG9naWNhbEhlaWdodCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDkwMDM0KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgp
IHsgbV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KIAogcHJpdmF0
ZToKLSAgICBpbnQgY29tcHV0ZUludHJpbnNpY1dpZHRoKGludCByZXBsYWNlZFdpZHRoKSBjb25z
dDsKLSAgICBpbnQgY29tcHV0ZUludHJpbnNpY0hlaWdodChpbnQgcmVwbGFjZWRIZWlnaHQpIGNv
bnN0OworICAgIExheW91dFVuaXQgY29tcHV0ZUludHJpbnNpY1dpZHRoKExheW91dFVuaXQgcmVw
bGFjZWRXaWR0aCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlSW50cmluc2ljSGVpZ2h0
KExheW91dFVuaXQgcmVwbGFjZWRIZWlnaHQpIGNvbnN0OwogICAgIHZvaWQgbmVnb3RpYXRlU2l6
ZVdpdGhIb3N0RG9jdW1lbnRJZk5lZWRlZCgpOwogCiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3RD
aGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KQEAgLTU5
LDggKzU5LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUm9vdCI7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwotICAgIHZpcnR1YWwgaW50IGNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0Owot
ICAgIHZpcnR1YWwgaW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5j
bHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1
dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7
CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>