<?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>191604</bug_id>
          
          <creation_ts>2018-11-13 15:14:44 -0800</creation_ts>
          <short_desc>Add SPI to show a safe browsing warning</short_desc>
          <delta_ts>2018-11-14 11:48:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>aestes</cc>
    
    <cc>beidson</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1478160</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-13 15:14:44 -0800</bug_when>
    <thetext>Add SPI to show a safe browsing warning</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478165</commentid>
    <comment_count>1</comment_count>
      <attachid>354709</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-13 15:23:46 -0800</bug_when>
    <thetext>Created attachment 354709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478188</commentid>
    <comment_count>2</comment_count>
      <attachid>354721</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-13 16:02:11 -0800</bug_when>
    <thetext>Created attachment 354721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478510</commentid>
    <comment_count>3</comment_count>
      <attachid>354721</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2018-11-14 10:25:37 -0800</bug_when>
    <thetext>Comment on attachment 354721
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1285
&gt; -- (void)_showSafeBrowsingWarning:(const WebKit::SafeBrowsingResult&amp;)result completionHandler:(CompletionHandler&lt;void(Variant&lt;WebKit::ContinueUnsafeLoad, WebCore::URL&gt;&amp;&amp;)&gt;&amp;&amp;)completionHandler
&gt; +- (void)_showSafeBrowsingWarningWithTitle:(NSString *)title warning:(NSString *)warning details:(NSAttributedString *)details completionHandler:(void(^)(BOOL, NSURL *))completionHandler
&gt;  {
&gt; -    _safeBrowsingWarning = adoptNS([[WKSafeBrowsingWarning alloc] initWithFrame:self.bounds safeBrowsingResult:result completionHandler:[weakSelf = WeakObjCPtr&lt;WKWebView&gt;(self), completionHandler = WTFMove(completionHandler)] (auto&amp;&amp; result) mutable {
&gt; +    
&gt; +}

Oops?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478515</commentid>
    <comment_count>4</comment_count>
      <attachid>354832</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-14 10:36:54 -0800</bug_when>
    <thetext>Created attachment 354832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478524</commentid>
    <comment_count>5</comment_count>
      <attachid>354836</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-14 10:49:59 -0800</bug_when>
    <thetext>Created attachment 354836
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478555</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-14 11:47:13 -0800</bug_when>
    <thetext>http://trac.webkit.org/r238190</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478557</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-14 11:48:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/46070191&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354709</attachid>
            <date>2018-11-13 15:23:46 -0800</date>
            <delta_ts>2018-11-13 16:02:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191604-20181113152345.patch</filename>
            <type>text/plain</type>
            <size>86588</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzgxMzMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxOC0xMS0xMyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBTUEkgdG8g
c2hvdyBhIHNhZmUgYnJvd3Npbmcgd2FybmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNjA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2FmYXJpIGhhcyBhIGNhc2Ugd2hlcmUgaXQgc2hvd3Mgc2Fm
ZSBicm93c2luZyB3YXJuaW5ncyBmb3IgYSByZWFzb24gb3RoZXIgdGhhbiBiZWluZyB0b2xkIHRv
IGJ5IHRoZSBTYWZlQnJvd3NpbmcgZnJhbWV3b3JrLgorICAgICAgICBCZWNhdXNlIHNhZmUgYnJv
d3NpbmcgaXMgbW92aW5nIHRvIFdlYktpdCwgd2Ugd2lsbCBoYXZlIFNhZmFyaSBjYWxsIHRoaXMg
V2ViS2l0IFNQSSBpbiB0aGF0IGNhc2UuCisgICAgICAgIFRoZSB3YXJuaW5nIGxvb2tzIGEgbGl0
dGxlIGRpZmZlcmVudCwgc28gSSBoYWQgdG8gY2hhbmdlIHRoZSBzdHJ1Y3R1cmUgb2YgYSBTYWZl
QnJvd3NpbmdSZXN1bHQgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RyaW5nIHByb2Nlc3Npbmcs
CisgICAgICAgIGJ1dCB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgdmVyaWZp
ZWQgYnkgZXhpc3RpbmcgdW5pdCB0ZXN0cy4gIEkgYWRkZWQgYSB1bml0IHRlc3QgdG8gdmVyaWZ5
IGJlaGF2aW9yIG9mIHRoZSBuZXcgU1BJLgorCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhUaXRsZTp3YXJuaW5nOmRldGFp
bHM6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVC
cm93c2luZ1dhcm5pbmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgrW1dLV2ViVmll
dyBfY29uZmlybU1hbHdhcmVTZW50aW5lbF0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX3Zpc2l0
VW5zYWZlV2Vic2l0ZVNlbnRpbmVsXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdSZXN1
bHRDb2NvYS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dz
aW5nV2FybmluZ0NvY29hLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9TYWZlQnJvd3NpbmdSZXN1bHRDb2NvYS5tbS4KKyAgICAgICAgKFdlYktpdDo6bWFsd2Fy
ZURldGFpbHNCYXNlKToKKyAgICAgICAgKFdlYktpdDo6bGVhcm5Nb3JlVVJMKToKKyAgICAgICAg
KFdlYktpdDo6cmVwb3J0QW5FcnJvckJhc2UpOgorICAgICAgICAoV2ViS2l0Ojpsb2NhbGl6ZWRQ
cm92aWRlcik6CisgICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OnZpc2l0VW5z
YWZlV2Vic2l0ZVNlbnRpbmVsKToKKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nV2Fybmlu
Zzo6Y29uZmlybU1hbHdhcmVTZW50aW5lbCk6CisgICAgICAgIChXZWJLaXQ6OnJlcGxhY2UpOgor
ICAgICAgICAoV2ViS2l0OjphZGRMaW5rQW5kUmVwbGFjZSk6CisgICAgICAgIChXZWJLaXQ6OnJl
cG9ydEFuRXJyb3JVUkwpOgorICAgICAgICAoV2ViS2l0OjptYWx3YXJlRGV0YWlsc1VSTCk6Cisg
ICAgICAgIChXZWJLaXQ6OnNhZmVCcm93c2luZ1RpdGxlVGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OnNhZmVCcm93c2luZ1dhcm5pbmdUZXh0KToKKyAgICAgICAgKFdlYktpdDo6c2FmZUJyb3dzaW5n
RGV0YWlsc1RleHQpOgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpTYWZl
QnJvd3NpbmdXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6bGVhcm5Nb3JlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0OjpTYWZlQnJvd3NpbmdSZXN1bHQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5p
bmcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1t
OgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJv
d3NpbmdXYXJuaW5nOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1NhZmVCcm93
c2luZ1dhcm5pbmcgYWRkQ29udGVudF0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1dhcm5p
bmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2Fybmlu
ZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3IGlu
aXRXaXRoQXR0cmlidXRlZFN0cmluZzpmb3JXYXJuaW5nOl0pOgorICAgICAgICAoY29uZmlybU1h
bHdhcmVTZW50aW5lbCk6IERlbGV0ZWQuCisgICAgICAgICh2aXNpdFVuc2FmZVdlYnNpdGVTZW50
aW5lbCk6IERlbGV0ZWQuCisgICAgICAgIChyZXBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKGFk
ZExpbmtBbmRSZXBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKHJlcG9ydEFuRXJyb3JVUkwpOiBE
ZWxldGVkLgorICAgICAgICAobWFsd2FyZURldGFpbHNVUkwpOiBEZWxldGVkLgorICAgICAgICAo
dGl0bGVUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKHdhcm5pbmdUZXh0KTogRGVsZXRlZC4KKyAg
ICAgICAgKGRldGFpbHNUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdX
YXJuaW5nIGluaXRXaXRoRnJhbWU6c2FmZUJyb3dzaW5nUmVzdWx0OmNvbXBsZXRpb25IYW5kbGVy
Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2Nv
YS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpiZWdpblNhZmVCcm93c2luZ0No
ZWNrKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudDo6c2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9TYWZlQnJvd3NpbmdSZXN1bHQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvU2FmZUJyb3dzaW5nV2FybmluZy5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdSZXN1bHQuaC4KKyAgICAg
ICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6U2FmZUJyb3dzaW5nV2FybmluZzo6dGl0bGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpT
YWZlQnJvd3NpbmdXYXJuaW5nOjp3YXJuaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2Fm
ZUJyb3dzaW5nV2FybmluZzo6ZGV0YWlscyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNhZmVC
cm93c2luZ1Jlc3VsdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2FmZUJy
b3dzaW5nUmVzdWx0Ojppc1BoaXNoaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6U2FmZUJyb3dzaW5nUmVzdWx0Ojppc01hbHdhcmUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ6OmlzVW53YW50ZWRTb2Z0d2FyZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdDo6dXJsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0Ojpwcm92aWRl
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdDo6
bG9jYWxpemVkUHJvdmlkZXJOYW1lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
U2FmZUJyb3dzaW5nUmVzdWx0OjptYWx3YXJlRGV0YWlsc1VSTEJhc2UgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ6OnJlcG9ydEFuRXJyb3JVUkxC
YXNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0
OjpsZWFybk1vcmVVUkwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJv
d3NpbmdSZXN1bHQ6Om5lZWRzU2FmZUJyb3dzaW5nV2FybmluZyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHk6OmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojp1c2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRnJh
bWVQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OldlYkZyYW1lUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZVByb3h5OjpzZXRVcFBvbGljeUxpc3RlbmVy
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZVByb3h5OjpkaWRIYW5kbGVDb250ZW50
RmlsdGVyVW5ibG9ja05hdmlnYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVBy
b3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OnBhZ2UgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN3YXBU
b1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENyZWF0ZU1h
aW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ3JlYXRlU3ViZnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGlj
eUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVj
aWRlUG9saWN5Rm9yUmVzcG9uc2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVu
dEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1t
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5p
bmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLm1tOgorICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4LTExLTEzICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IGlu
dGVybmFsIGJ1aWxkcyBhZnRlciByMjM4MTE1CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NvdXJjZXND
b2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CShy
ZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTMyMiw3ICszMjIsNyBAQCBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0
YXRlLm1tCiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQogVUlQcm9jZXNz
L0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQogVUlQcm9jZXNzL0NvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tCi1VSVByb2Nlc3MvQ29jb2Ev
U2FmZUJyb3dzaW5nUmVzdWx0Q29jb2EubW0KK1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdX
YXJuaW5nQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2NvYS9TZXNzaW9uU3RhdGVDb2RpbmcubW0KIFVJ
UHJvY2Vzcy9Db2NvYS9TeXN0ZW1QcmV2aWV3Q29udHJvbGxlckNvY29hLm1tCiBVSVByb2Nlc3Mv
Q29jb2EvVUlEZWxlZ2F0ZS5tbQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAkocmV2aXNpb24gMjM4MTE0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgY2xhc3MgTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudDsKIGNsYXNzIE5hdGl2ZVdlYk1vdXNlRXZlbnQ7CiBjbGFzcyBOYXRpdmVXZWJX
aGVlbEV2ZW50OwogY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247Ci1jbGFzcyBTYWZl
QnJvd3NpbmdSZXN1bHQ7CitjbGFzcyBTYWZlQnJvd3NpbmdXYXJuaW5nOwogY2xhc3MgVXNlckRh
dGE7CiBjbGFzcyBWaWV3U25hcHNob3Q7CiBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOwpA
QCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VD
b250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOwogCi0gICAgdmlydHVhbCB2
b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6
OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIoQ29udGlu
dWVVbnNhZmVMb2FkOjpZZXMpOyB9CisgICAgdmlydHVhbCB2b2lkIHNob3dTYWZlQnJvd3NpbmdX
YXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1dhcm5pbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZhcmlhbnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSB7IGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSB7IH0KICAgICAK
ICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
U2FmZUJyb3dzaW5nUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvU2FmZUJyb3dzaW5nUmVzdWx0LmgJKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1Jlc3VsdC5oCShub25leGlzdGVudCkKQEAgLTEsNzQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8V2ViQ29yZS9V
UkwuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1PQkpDX0NMQVNTIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQ7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBTYWZlQnJvd3NpbmdSZXN1bHQgOiBwdWJsaWMgUmVmQ291
bnRlZDxTYWZlQnJvd3NpbmdSZXN1bHQ+IHsKLXB1YmxpYzoKLSNpZiBIQVZFKFNBRkVfQlJPV1NJ
TkcpCi0gICAgc3RhdGljIFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+IGNyZWF0ZShXZWJDb3JlOjpV
UkwmJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNhZmVCcm93c2luZ1Jlc3VsdChXVEZNb3ZlKHVybCksIHJl
c3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYm9vbCBpc1BoaXNoaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1BoaXNoaW5nOyB9Ci0gICAgYm9vbCBpc01hbHdhcmUoKSBjb25zdCB7IHJldHVy
biBtX2lzTWFsd2FyZTsgfQotICAgIGJvb2wgaXNVbndhbnRlZFNvZnR3YXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1Vud2FudGVkU29mdHdhcmU7IH0KLQotICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYg
dXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KLSAgICBjb25zdCBTdHJpbmcmIHByb3ZpZGVy
KCkgY29uc3QgeyByZXR1cm4gbV9wcm92aWRlcjsgfQotICAgIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkUHJvdmlkZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGl6ZWRQcm92aWRlck5hbWU7
IH0KLSAgICBjb25zdCBTdHJpbmcmIG1hbHdhcmVEZXRhaWxzVVJMQmFzZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFsd2FyZURldGFpbHNVUkxCYXNlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiByZXBvcnRB
bkVycm9yVVJMQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0QW5FcnJvclVSTEJhc2U7IH0K
LSAgICBjb25zdCBXZWJDb3JlOjpVUkwmIGxlYXJuTW9yZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVhcm5Nb3JlVVJMOyB9Ci0KLSAgICBib29sIG5lZWRzU2FmZUJyb3dzaW5nV2FybmluZygpIGNv
bnN0IHsgcmV0dXJuIG1faXNQaGlzaGluZyB8fCBtX2lzTWFsd2FyZSB8fCBtX2lzVW53YW50ZWRT
b2Z0d2FyZTsgfQotCi1wcml2YXRlOgotI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKLSAgICBTYWZl
QnJvd3NpbmdSZXN1bHQoV2ViQ29yZTo6VVJMJiYsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKik7
Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpVUkwgbV91cmw7Ci0gICAgYm9vbCBtX2lzUGhpc2hpbmcg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc01hbHdhcmUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9p
c1Vud2FudGVkU29mdHdhcmUgeyBmYWxzZSB9OwotCi0gICAgU3RyaW5nIG1fcHJvdmlkZXI7Ci0g
ICAgU3RyaW5nIG1fbG9jYWxpemVkUHJvdmlkZXJOYW1lOwotICAgIFN0cmluZyBtX21hbHdhcmVE
ZXRhaWxzVVJMQmFzZTsKLSAgICBTdHJpbmcgbV9yZXBvcnRBbkVycm9yVVJMQmFzZTsKLSAgICBX
ZWJDb3JlOjpVUkwgbV9sZWFybk1vcmVVUkw7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2lu
Z1Jlc3VsdC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMj
Ci1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvU2FmZUJyb3dzaW5nV2FybmluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1dhcm5pbmcuaAkocmV2aXNpb24gMjM4MTE0
KQkoZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdSZXN1bHQuaDoyMzgx
MTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdXYXJuaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NMQVNTIFNTQlNlcnZpY2VM
b29rdXBSZXN1bHQ7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTYWZlQnJvd3NpbmdS
ZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYWZlQnJvd3NpbmdSZXN1bHQ+IHsKK3B1YmxpYzoK
KyNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCisgICAgc3RhdGljIFJlZjxTYWZlQnJvd3NpbmdSZXN1
bHQ+IGNyZWF0ZShXZWJDb3JlOjpVUkwmJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJl
c3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNhZmVCcm93c2luZ1Jl
c3VsdChXVEZNb3ZlKHVybCksIHJlc3VsdCkpOworICAgIH0KKyNlbmRpZgorCisgICAgYm9vbCBp
c1BoaXNoaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1BoaXNoaW5nOyB9CisgICAgYm9vbCBpc01h
bHdhcmUoKSBjb25zdCB7IHJldHVybiBtX2lzTWFsd2FyZTsgfQorICAgIGJvb2wgaXNVbndhbnRl
ZFNvZnR3YXJlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Vud2FudGVkU29mdHdhcmU7IH0KKworICAg
IGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBj
b25zdCBTdHJpbmcmIHByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9wcm92aWRlcjsgfQorICAg
IGNvbnN0IFN0cmluZyYgbG9jYWxpemVkUHJvdmlkZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhbGl6ZWRQcm92aWRlck5hbWU7IH0KKyAgICBjb25zdCBTdHJpbmcmIG1hbHdhcmVEZXRhaWxz
VVJMQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFsd2FyZURldGFpbHNVUkxCYXNlOyB9CisgICAg
Y29uc3QgU3RyaW5nJiByZXBvcnRBbkVycm9yVVJMQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
b3J0QW5FcnJvclVSTEJhc2U7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpVUkwmIGxlYXJuTW9yZVVS
TCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVhcm5Nb3JlVVJMOyB9CisKKyAgICBib29sIG5lZWRzU2Fm
ZUJyb3dzaW5nV2FybmluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNQaGlzaGluZyB8fCBtX2lzTWFs
d2FyZSB8fCBtX2lzVW53YW50ZWRTb2Z0d2FyZTsgfQorCitwcml2YXRlOgorI2lmIEhBVkUoU0FG
RV9CUk9XU0lORykKKyAgICBTYWZlQnJvd3NpbmdSZXN1bHQoV2ViQ29yZTo6VVJMJiYsIFNTQlNl
cnZpY2VMb29rdXBSZXN1bHQgKik7CisjZW5kaWYKKyAgICBXZWJDb3JlOjpVUkwgbV91cmw7Cisg
ICAgYm9vbCBtX2lzUGhpc2hpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc01hbHdhcmUgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc1Vud2FudGVkU29mdHdhcmUgeyBmYWxzZSB9OworCisgICAg
U3RyaW5nIG1fcHJvdmlkZXI7CisgICAgU3RyaW5nIG1fbG9jYWxpemVkUHJvdmlkZXJOYW1lOwor
ICAgIFN0cmluZyBtX21hbHdhcmVEZXRhaWxzVVJMQmFzZTsKKyAgICBTdHJpbmcgbV9yZXBvcnRB
bkVycm9yVVJMQmFzZTsKKyAgICBXZWJDb3JlOjpVUkwgbV9sZWFybk1vcmVVUkw7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1NhZmVCcm93c2luZ1dhcm5pbmcuaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdXYXJuaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2FmZUJyb3dzaW5nV2Fybmlu
Zy5oCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJv
d3NpbmdXYXJuaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQ4ICsyNyw1MiBAQAogCiAjaW5j
bHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAor
T0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CitPQkpDX0NMQVNTIE5TVVJMOwogT0JKQ19D
TEFTUyBTU0JTZXJ2aWNlTG9va3VwUmVzdWx0OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xh
c3MgU2FmZUJyb3dzaW5nUmVzdWx0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FmZUJyb3dzaW5nUmVz
dWx0PiB7CitjbGFzcyBTYWZlQnJvd3NpbmdXYXJuaW5nIDogcHVibGljIFJlZkNvdW50ZWQ8U2Fm
ZUJyb3dzaW5nV2FybmluZz4gewogcHVibGljOgogI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKLSAg
ICBzdGF0aWMgUmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4gY3JlYXRlKFdlYkNvcmU6OlVSTCYmIHVy
bCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQorICAgIHN0YXRpYyBSZWY8U2FmZUJy
b3dzaW5nV2FybmluZz4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBTU0JTZXJ2aWNl
TG9va3VwUmVzdWx0ICpyZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTYWZlQnJvd3NpbmdSZXN1bHQoV1RGTW92ZSh1cmwpLCByZXN1bHQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2FmZUJyb3dzaW5nV2FybmluZyh1cmwsIHJlc3VsdCkpOworICAg
IH0KKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHN0YXRpYyBSZWY8U2FmZUJyb3dz
aW5nV2FybmluZz4gY3JlYXRlKFN0cmluZyYmIHRpdGxlLCBTdHJpbmcmJiB3YXJuaW5nLCBSZXRh
aW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiYmIGRldGFpbHMpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTYWZlQnJvd3NpbmdXYXJuaW5nKFdURk1vdmUodGl0bGUpLCBXVEZN
b3ZlKHdhcm5pbmcpLCBXVEZNb3ZlKGRldGFpbHMpKSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBi
b29sIGlzUGhpc2hpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzUGhpc2hpbmc7IH0KLSAgICBib29s
IGlzTWFsd2FyZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNYWx3YXJlOyB9Ci0gICAgYm9vbCBpc1Vu
d2FudGVkU29mdHdhcmUoKSBjb25zdCB7IHJldHVybiBtX2lzVW53YW50ZWRTb2Z0d2FyZTsgfQot
Ci0gICAgY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQot
ICAgIGNvbnN0IFN0cmluZyYgcHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Byb3ZpZGVyOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRQcm92aWRlck5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2xvY2FsaXplZFByb3ZpZGVyTmFtZTsgfQotICAgIGNvbnN0IFN0cmluZyYgbWFsd2FyZURl
dGFpbHNVUkxCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9tYWx3YXJlRGV0YWlsc1VSTEJhc2U7IH0K
LSAgICBjb25zdCBTdHJpbmcmIHJlcG9ydEFuRXJyb3JVUkxCYXNlKCkgY29uc3QgeyByZXR1cm4g
bV9yZXBvcnRBbkVycm9yVVJMQmFzZTsgfQotICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgbGVhcm5N
b3JlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9sZWFybk1vcmVVUkw7IH0KLQotICAgIGJvb2wgbmVl
ZHNTYWZlQnJvd3NpbmdXYXJuaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1BoaXNoaW5nIHx8IG1f
aXNNYWx3YXJlIHx8IG1faXNVbndhbnRlZFNvZnR3YXJlOyB9CisgICAgY29uc3QgU3RyaW5nJiB0
aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGU7IH0KKyAgICBjb25zdCBTdHJpbmcmIHdhcm5p
bmcoKSBjb25zdCB7IHJldHVybiBtX3dhcm5pbmc7IH0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBkZXRhaWxzKCkgY29uc3QgeyByZXR1cm4g
bV9kZXRhaWxzOyB9CisjZW5kaWYKIAorICAgIHN0YXRpYyBOU1VSTCAqdmlzaXRVbnNhZmVXZWJz
aXRlU2VudGluZWwoKTsKKyAgICBzdGF0aWMgTlNVUkwgKmNvbmZpcm1NYWx3YXJlU2VudGluZWwo
KTsKKyAgICAKIHByaXZhdGU6CiAjaWYgSEFWRShTQUZFX0JST1dTSU5HKQotICAgIFNhZmVCcm93
c2luZ1Jlc3VsdChXZWJDb3JlOjpVUkwmJiwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqKTsKKyAg
ICBTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFNTQlNlcnZpY2VMb29r
dXBSZXN1bHQgKik7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBTYWZlQnJvd3Np
bmdXYXJuaW5nKFN0cmluZyYmLCBTdHJpbmcmJiwgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmlu
Zz4mJik7CisjZW5kaWYKKworICAgIFN0cmluZyBtX3RpdGxlOworICAgIFN0cmluZyBtX3dhcm5p
bmc7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmlu
Zz4gbV9kZXRhaWxzOwogI2VuZGlmCi0gICAgV2ViQ29yZTo6VVJMIG1fdXJsOwotICAgIGJvb2wg
bV9pc1BoaXNoaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNNYWx3YXJlIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faXNVbndhbnRlZFNvZnR3YXJlIHsgZmFsc2UgfTsKLQotICAgIFN0cmluZyBt
X3Byb3ZpZGVyOwotICAgIFN0cmluZyBtX2xvY2FsaXplZFByb3ZpZGVyTmFtZTsKLSAgICBTdHJp
bmcgbV9tYWx3YXJlRGV0YWlsc1VSTEJhc2U7Ci0gICAgU3RyaW5nIG1fcmVwb3J0QW5FcnJvclVS
TEJhc2U7Ci0gICAgV2ViQ29yZTo6VVJMIG1fbGVhcm5Nb3JlVVJMOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAJKHJldmlzaW9uIDIzODExNCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgi
CiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIkFQSVdlYnNpdGVQ
b2xpY2llcy5oIgotI2luY2x1ZGUgIlNhZmVCcm93c2luZ1Jlc3VsdC5oIgorI2luY2x1ZGUgIlNh
ZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCiAjaW5jbHVk
ZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVQb2xpY2llc0RhdGEuaCIK
QEAgLTQ1LDIxICs0NSwyMSBAQCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OldlYkZyYW1l
UG9sCiAKIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6fldlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eSgpID0gZGVmYXVsdDsKIAotdm9pZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6
OmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKFZlY3RvcjxSZWY8U2FmZUJyb3dzaW5nUmVz
dWx0Pj4mJiBzYWZlQnJvd3NpbmdSZXN1bHRzKQordm9pZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHk6OmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKFJlZlB0cjxTYWZlQnJvd3NpbmdX
YXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcpCiB7Ci0gICAgQVNTRVJUKCFtX3NhZmVCcm93
c2luZ1Jlc3VsdHMpOworICAgIEFTU0VSVCghbV9zYWZlQnJvd3NpbmdXYXJuaW5nKTsKICAgICBp
ZiAobV9wb2xpY3lSZXN1bHQpIHsKICAgICAgICAgaWYgKG1fcmVwbHkpCi0gICAgICAgICAgICBt
X3JlcGx5KFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6VXNlLCBtX3BvbGljeVJlc3VsdC0+Zmlyc3Qu
Z2V0KCksIG1fcG9saWN5UmVzdWx0LT5zZWNvbmQsIFdURk1vdmUoc2FmZUJyb3dzaW5nUmVzdWx0
cykpOworICAgICAgICAgICAgbV9yZXBseShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZSwgbV9w
b2xpY3lSZXN1bHQtPmZpcnN0LmdldCgpLCBtX3BvbGljeVJlc3VsdC0+c2Vjb25kLCBXVEZNb3Zl
KHNhZmVCcm93c2luZ1dhcm5pbmcpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9zYWZlQnJvd3Np
bmdSZXN1bHRzID0gV1RGTW92ZShzYWZlQnJvd3NpbmdSZXN1bHRzKTsKKyAgICAgICAgbV9zYWZl
QnJvd3NpbmdXYXJuaW5nID0gV1RGTW92ZShzYWZlQnJvd3NpbmdXYXJuaW5nKTsKIH0KIAogdm9p
ZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OnVzZShBUEk6OldlYnNpdGVQb2xpY2llcyog
cG9saWNpZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCkKIHsKLSAgICBpZiAobV9zYWZlQnJvd3NpbmdSZXN1bHRzKSB7CisgICAgaWYg
KG1fc2FmZUJyb3dzaW5nV2FybmluZykgewogICAgICAgICBpZiAobV9yZXBseSkKLSAgICAgICAg
ICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2UsIHBvbGljaWVzLCBwcm9jZXNz
U3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKCptX3NhZmVCcm93c2luZ1Jlc3VsdHMpKTsK
KyAgICAgICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2UsIHBvbGljaWVz
LCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKCptX3NhZmVCcm93c2luZ1dh
cm5pbmcpKTsKICAgICB9IGVsc2UgaWYgKCFtX3BvbGljeVJlc3VsdCkKICAgICAgICAgbV9wb2xp
Y3lSZXN1bHQgPSB7eyBwb2xpY2llcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCB9fTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9s
aWN5TGlzdGVuZXJQcm94eS5oCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBlbnVtIGNsYXNzIFBvbGljeUFjdGlvbiA6IHVpbnQ4X3Q7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1jbGFzcyBTYWZlQnJvd3NpbmdSZXN1bHQ7CitjbGFzcyBTYWZlQnJv
d3NpbmdXYXJuaW5nOwogCiBlbnVtIGNsYXNzIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQg
eyBObywgWWVzIH07CiBlbnVtIGNsYXNzIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCB7
IE5vLCBZZXMgfTsKQEAgLTQ3LDcgKzQ3LDcgQEAgZW51bSBjbGFzcyBTaG91bGRFeHBlY3RTYWZl
QnJvd3NpbmdSZXN1bAogY2xhc3MgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5IDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6RnJhbWVQb2xpY3lMaXN0ZW5lcj4g
ewogcHVibGljOgogCi0gICAgdXNpbmcgUmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYpPjsKKyAg
ICB1c2luZyBSZXBseSA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0
aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQs
IFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmKT47CiAgICAgc3RhdGljIFJlZjxXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHk+IGNyZWF0ZShSZXBseSYmIHJlcGx5LCBTaG91bGRFeHBlY3RT
YWZlQnJvd3NpbmdSZXN1bHQgZXhwZWN0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFdURk1vdmUocmVwbHkpLCBleHBlY3Qp
KTsKQEAgLTU4LDEzICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkb3dubG9hZCgpOwogICAg
IHZvaWQgaWdub3JlKCk7CiAgICAgCi0gICAgdm9pZCBkaWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVz
dWx0cyhWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYpOworICAgIHZvaWQgZGlkUmVj
ZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYpOwog
CiBwcml2YXRlOgogICAgIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eShSZXBseSYmLCBTaG91
bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQpOwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBh
aXI8UmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNs
aWVudD4+IG1fcG9saWN5UmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFJlZjxTYWZl
QnJvd3NpbmdSZXN1bHQ+Pj4gbV9zYWZlQnJvd3NpbmdSZXN1bHRzOworICAgIHN0ZDo6b3B0aW9u
YWw8UmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+PiBtX3NhZmVCcm93c2luZ1dhcm5pbmc7CiAg
ICAgUmVwbHkgbV9yZXBseTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkZyYW1lUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkZyYW1lUHJveHkuY3BwCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJGcmFtZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotV2ViRnJhbWVQ
cm94eTo6V2ViRnJhbWVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UsIHVpbnQ2NF90IGZyYW1lSUQp
Ci0gICAgOiBtX3BhZ2UocGFnZSkKK1dlYkZyYW1lUHJveHk6OldlYkZyYW1lUHJveHkoV2ViUGFn
ZVByb3h5JiBwYWdlLCB1aW50NjRfdCBmcmFtZUlEKQorICAgIDogbV9wYWdlKG1ha2VXZWFrUHRy
KHBhZ2UpKQogICAgICwgbV9pc0ZyYW1lU2V0KGZhbHNlKQogICAgICwgbV9mcmFtZUlEKGZyYW1l
SUQpCiB7CkBAIC0xNzcsMTIgKzE3NywxMiBAQCB2b2lkIFdlYkZyYW1lUHJveHk6OmRpZENoYW5n
ZVRpdGxlKGNvbnN0CiAgICAgbV90aXRsZSA9IHRpdGxlOwogfQogCi1XZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHkmIFdlYkZyYW1lUHJveHk6OnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9s
aWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93
c2luZ1Jlc3VsdD4+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBTaG91bGRFeHBlY3RTYWZlQnJv
d3NpbmdSZXN1bHQgZXhwZWN0KQorV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBXZWJGcmFt
ZVByb3h5OjpzZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChX
ZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyLCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhwZWN0KQogewog
ICAgIGlmIChtX2FjdGl2ZUxpc3RlbmVyKQogICAgICAgICBtX2FjdGl2ZUxpc3RlbmVyLT5pZ25v
cmUoKTsKLSAgICBtX2FjdGl2ZUxpc3RlbmVyID0gV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5
OjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFdlYkNvcmU6OlBvbGljeUFj
dGlvbiBhY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVm
PFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYgc2FmZUJyb3dzaW5nUmVzdWx0cykgbXV0YWJsZSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFjdGlvbiwgcG9saWNpZXMsIHByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQsIFdURk1vdmUoc2FmZUJyb3dzaW5nUmVzdWx0cykpOworICAgIG1fYWN0
aXZlTGlzdGVuZXIgPSBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OmNyZWF0ZShbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoV2ViQ29yZTo6UG9saWN5QWN0aW9uIGFjdGlvbiwgQVBJ
OjpXZWJzaXRlUG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50
IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5n
PiYmIHNhZmVCcm93c2luZ1dhcm5pbmcpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihhY3Rpb24sIHBvbGljaWVzLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZN
b3ZlKHNhZmVCcm93c2luZ1dhcm5pbmcpKTsKICAgICAgICAgbV9hY3RpdmVMaXN0ZW5lciA9IG51
bGxwdHI7CiAgICAgfSwgZXhwZWN0KTsKICAgICByZXR1cm4gKm1fYWN0aXZlTGlzdGVuZXI7CkBA
IC0yMzEsNyArMjMxLDcgQEAgYm9vbCBXZWJGcmFtZVByb3h5OjpkaWRIYW5kbGVDb250ZW50Rmls
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVmUHRyPFdlYlBhZ2VQcm94
eT4gcGFnZSB7IG1fcGFnZSB9OworICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IHBhZ2UgeyBtX3Bh
Z2UuZ2V0KCkgfTsKICAgICBBU1NFUlQocGFnZSk7CiAgICAgbV9jb250ZW50RmlsdGVyVW5ibG9j
a0hhbmRsZXIucmVxdWVzdFVuYmxvY2tBc3luYyhbcGFnZV0oYm9vbCB1bmJsb2NrZWQpIHsKICAg
ICAgICAgaWYgKHVuYmxvY2tlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZy
YW1lUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFt
ZVByb3h5LmgJKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkZyYW1lUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBEZWNv
ZGVyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsK
K2NsYXNzIFNhZmVCcm93c2luZ1dhcm5pbmc7CiBjbGFzcyBXZWJDZXJ0aWZpY2F0ZUluZm87CiBj
bGFzcyBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBA
IC02MSw3ICs2MSw3IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6RGF0YSo+IERhdGEK
IAogY2xhc3MgV2ViRnJhbWVQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmpl
Y3Q6OlR5cGU6OkZyYW1lPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJGcmFtZVByb3h5
PiBjcmVhdGUoV2ViUGFnZVByb3h5KiBwYWdlLCB1aW50NjRfdCBmcmFtZUlEKQorICAgIHN0YXRp
YyBSZWY8V2ViRnJhbWVQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgdWludDY0X3Qg
ZnJhbWVJRCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkZyYW1lUHJv
eHkocGFnZSwgZnJhbWVJRCkpOwogICAgIH0KQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgfldlYkZyYW1lUHJveHkoKTsKIAogICAgIHVpbnQ2NF90IGZyYW1lSUQoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lSUQ7IH0KLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7
IHJldHVybiBtX3BhZ2U7IH0KKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2UuZ2V0KCk7IH0KIAogICAgIHZvaWQgd2ViUHJvY2Vzc1dpbGxTaHV0RG93bigpOwog
CkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkU2FtZURvY3VtZW50TmF2
aWdhdGlvbihjb25zdCBXZWJDb3JlOjpVUkwmKTsgLy8gZWcuIGFuY2hvciBuYXZpZ2F0aW9uLCBz
ZXNzaW9uIHN0YXRlIGNoYW5nZS4KICAgICB2b2lkIGRpZENoYW5nZVRpdGxlKGNvbnN0IFN0cmlu
ZyYpOwogCi0gICAgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBzZXRVcFBvbGljeUxpc3Rl
bmVyUHJveHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQ
STo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgVmVjdG9y
PFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+PiYmKT4mJiwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5n
UmVzdWx0KTsKKyAgICBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkmIHNldFVwUG9saWN5TGlz
dGVuZXJQcm94eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwg
QVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQ
dHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJik+JiYsIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jl
c3VsdCk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9GSUxURVJJTkcpCiAgICAgdm9pZCBjb250ZW50
RmlsdGVyRGlkQmxvY2tMb2FkKFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlciBj
b250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIpIHsgbV9jb250ZW50RmlsdGVyVW5ibG9ja0hhbmRs
ZXIgPSBXVEZNb3ZlKGNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcik7IH0KQEAgLTEyOSw5ICsx
MjksOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBXZWJGcmFtZVByb3h5KFdl
YlBhZ2VQcm94eSogcGFnZSwgdWludDY0X3QgZnJhbWVJRCk7CisgICAgV2ViRnJhbWVQcm94eShX
ZWJQYWdlUHJveHkmLCB1aW50NjRfdCBmcmFtZUlEKTsKIAotICAgIFdlYlBhZ2VQcm94eSogbV9w
YWdlOworICAgIFdlYWtQdHI8V2ViUGFnZVByb3h5PiBtX3BhZ2U7CiAKICAgICBGcmFtZUxvYWRT
dGF0ZSBtX2ZyYW1lTG9hZFN0YXRlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAKICNp
bmNsdWRlICJQbHVnaW5JbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiUHJpbnRJbmZvLmgiCi0jaW5jbHVkZSAiU2FmZUJyb3dzaW5nUmVz
dWx0LmgiCisjaW5jbHVkZSAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgogI2luY2x1ZGUgIlNoYXJl
U2hlZXRDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyRGF0YVJlZmVyZW5jZS5o
IgogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCkBAIC03NjEsNyArNzYxLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnN3YXBUb1dlYlByb2Nlc3MoUmVmPAogICAgIGlmIChkZXN0aW5hdGlvblN1c3Bl
bmRlZFBhZ2UpIHsKICAgICAgICAgQVNTRVJUKCFtX21haW5GcmFtZSk7CiAgICAgICAgIEFTU0VS
VCgmZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlLT5wcm9jZXNzKCkgPT0gbV9wcm9jZXNzLnB0cigp
KTsKLSAgICAgICAgbV9tYWluRnJhbWUgPSBXZWJGcmFtZVByb3h5OjpjcmVhdGUodGhpcywgZGVz
dGluYXRpb25TdXNwZW5kZWRQYWdlLT5tYWluRnJhbWVJRCgpKTsKKyAgICAgICAgbV9tYWluRnJh
bWUgPSBXZWJGcmFtZVByb3h5OjpjcmVhdGUoKnRoaXMsIGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFn
ZS0+bWFpbkZyYW1lSUQoKSk7CiAgICAgICAgIG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKGRlc3Rp
bmF0aW9uU3VzcGVuZGVkUGFnZS0+bWFpbkZyYW1lSUQoKSwgKm1fbWFpbkZyYW1lKTsKICAgICB9
CiAKQEAgLTM0NjQsNyArMzQ2NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVNYWlu
RnJhbWUodWkKICAgICBNRVNTQUdFX0NIRUNLKCFtX21haW5GcmFtZSk7CiAgICAgTUVTU0FHRV9D
SEVDSyhtX3Byb2Nlc3MtPmNhbkNyZWF0ZUZyYW1lKGZyYW1lSUQpKTsKIAotICAgIG1fbWFpbkZy
YW1lID0gV2ViRnJhbWVQcm94eTo6Y3JlYXRlKHRoaXMsIGZyYW1lSUQpOworICAgIG1fbWFpbkZy
YW1lID0gV2ViRnJhbWVQcm94eTo6Y3JlYXRlKCp0aGlzLCBmcmFtZUlEKTsKIAogICAgIC8vIEFk
ZCB0aGUgZnJhbWUgdG8gdGhlIHByb2Nlc3Mgd2lkZSBtYXAuCiAgICAgbV9wcm9jZXNzLT5mcmFt
ZUNyZWF0ZWQoZnJhbWVJRCwgKm1fbWFpbkZyYW1lKTsKQEAgLTM0ODksNyArMzQ4OSw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVTdWJmcmFtZSh1aW4KIAogICAgIE1FU1NBR0VfQ0hF
Q0sobV9wcm9jZXNzLT5jYW5DcmVhdGVGcmFtZShmcmFtZUlEKSk7CiAgICAgCi0gICAgUmVmUHRy
PFdlYkZyYW1lUHJveHk+IHN1YkZyYW1lID0gV2ViRnJhbWVQcm94eTo6Y3JlYXRlKHRoaXMsIGZy
YW1lSUQpOworICAgIFJlZlB0cjxXZWJGcmFtZVByb3h5PiBzdWJGcmFtZSA9IFdlYkZyYW1lUHJv
eHk6OmNyZWF0ZSgqdGhpcywgZnJhbWVJRCk7CiAKICAgICAvLyBBZGQgdGhlIGZyYW1lIHRvIHRo
ZSBwcm9jZXNzIHdpZGUgbWFwLgogICAgIG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKGZyYW1lSUQs
ICpzdWJGcmFtZSk7CkBAIC00MTU2LDcgKzQxNTYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhCiAgICAgaWYgKCFtX3ByZWZlcmVuY2VzLT5zYWZlQnJvd3NpbmdF
bmFibGVkKCkpCiAgICAgICAgIHNob3VsZFNraXBTYWZlQnJvd3NpbmdDaGVjayA9IFNob3VsZFNr
aXBTYWZlQnJvd3NpbmdDaGVjazo6WWVzOwogCi0gICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYo
ZnJhbWUuc2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGZyYW1lID0gbWFrZVJlZihmcmFtZSksIHNlbmRlciA9IFdURk1vdmUoc2Vu
ZGVyKSwgbmF2aWdhdGlvbl0gKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQ
STo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jl
c3VsdD4+JiYgc2FmZUJyb3dzaW5nUmVzdWx0cykgbXV0YWJsZSB7CisgICAgYXV0byBsaXN0ZW5l
ciA9IG1ha2VSZWYoZnJhbWUuc2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lID0gbWFrZVJlZihmcmFtZSksIHNlbmRlciA9
IFdURk1vdmUoc2VuZGVyKSwgbmF2aWdhdGlvbl0gKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xp
Y3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJy
b3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nKSBtdXRhYmxlIHsKICAgICAgICAg
CiAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IHByb3RlY3RlZFRoaXMuY29weVJlZigpLCBmcmFtZSA9IGZyYW1lLmNvcHlSZWYoKSwgc2VuZGVy
ID0gV1RGTW92ZShzZW5kZXIpLCBuYXZpZ2F0aW9uID0gV1RGTW92ZShuYXZpZ2F0aW9uKSwgcHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgcG9saWNpZXMgPSBtYWtlUmVmUHRyKHBvbGljaWVz
KV0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pIG11dGFibGUgewogICAgICAgICAgICAgcmVj
ZWl2ZWROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLmdl
dCgpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBmcmFtZSwgcG9saWNpZXMuZ2V0KCks
IFdURk1vdmUoc2VuZGVyKSk7CkBAIC00MTY3LDEwICs0MTY3LDggQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYQogCiAgICAgICAgIG1fcGFnZUNsaWVudC0+Y2xlYXJT
YWZlQnJvd3NpbmdXYXJuaW5nKCk7CiAKLSAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiBzYWZl
QnJvd3NpbmdSZXN1bHRzKSB7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC0+bmVlZHNTYWZlQnJv
d3NpbmdXYXJuaW5nKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBt
X3BhZ2VDbGllbnQtPnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKHJlc3VsdCwgW3Byb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBwb2xpY3lBY3Rpb25dIChhdXRvJiYgcmVzdWx0KSBtdXRhYmxl
IHsKKyAgICAgICAgaWYgKHNhZmVCcm93c2luZ1dhcm5pbmcpIHsKKyAgICAgICAgICAgIG1fcGFn
ZUNsaWVudC0+c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcoKnNhZmVCcm93c2luZ1dhcm5pbmcsIFtw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcG9saWN5QWN0aW9uXSAoYXV0byYmIHJlc3Vs
dCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoT24ocmVzdWx0LCBbJl0gKGNvbnN0
IFVSTCYgdXJsKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBvbGlj
eUFjdGlvbjo6SWdub3JlKTsKICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bG9h
ZFJlcXVlc3QoeyB1cmwgfSk7CkBAIC00MjUwLDEwICs0MjQ4LDEwIEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW4KICAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKICAg
ICBNRVNTQUdFX0NIRUNLX1VSTChyZXF1ZXN0LnVybCgpKTsKIAotICAgIGF1dG8gbGlzdGVuZXIg
PSBtYWtlUmVmKGZyYW1lLT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbGlzdGVuZXJJRCwgZnJhbWVJRF0gKFdlYkNvcmU6OlBv
bGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3
YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8
UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYgc2FmZUJyb3dzaW5nUmVzdWx0cykgbXV0YWJsZSB7
CisgICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUtPnNldFVwUG9saWN5TGlzdGVuZXJQ
cm94eShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsaXN0ZW5lcklELCBm
cmFtZUlEXSAoV2ViQ29yZTo6UG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRl
UG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dh
cm5pbmcpIG11dGFibGUgewogICAgICAgICAvLyBGSVhNRTogQXNzZXJ0IHRoZSBBUEk6OldlYnNp
dGVQb2xpY2llcyogaXMgbnVsbHB0ciBoZXJlIG9uY2UgY2xpZW50cyBvZiBXS0ZyYW1lUG9saWN5
TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMgZ28gYXdheS4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50OjpObyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nUmVzdWx0cywgc2Fm
ZUJyb3dzaW5nUmVzdWx0cy5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVC
cm93c2luZ1dhcm5pbmcsICFzYWZlQnJvd3NpbmdXYXJuaW5nKTsKICAgICAgICAgcmVjZWl2ZWRQ
b2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwgUG9saWN5
RGVjaXNpb25TZW5kZXI6OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyksIGZyYW1lSUQsIGxpc3RlbmVySURdIChhdXRvLi4uIGFyZ3MpIHsKICAgICAg
ICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2ZVBvbGlj
eURlY2lzaW9uKGZyYW1lSUQsIGxpc3RlbmVySUQsIGFyZ3MuLi4pLCBtX3BhZ2VJRCk7CiAgICAg
ICAgIH0pKTsKQEAgLTQyODgsMTAgKzQyODYsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lk
ZVBvbGljeUZvclJlc3BvbgogICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKHJlc3BvbnNlLnVybCgpKTsK
IAogICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSUQg
PyBtX25hdmlnYXRpb25TdGF0ZS0+bmF2aWdhdGlvbihuYXZpZ2F0aW9uSUQpIDogbnVsbHB0cjsK
LSAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclBy
b3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lSUQsIGxpc3Rl
bmVySUQsIG5hdmlnYXRpb24gPSBXVEZNb3ZlKG5hdmlnYXRpb24pXSAoV2ViQ29yZTo6UG9saWN5
QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFZlY3RvcjxSZWY8
U2FmZUJyb3dzaW5nUmVzdWx0Pj4mJiBzYWZlQnJvd3NpbmdSZXN1bHRzKSBtdXRhYmxlIHsKKyAg
ICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lSUQsIGxpc3RlbmVy
SUQsIG5hdmlnYXRpb24gPSBXVEZNb3ZlKG5hdmlnYXRpb24pXSAoV2ViQ29yZTo6UG9saWN5QWN0
aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVl
c3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJv
d3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcpIG11dGFibGUgewogICAgICAgICAv
LyBGSVhNRTogQXNzZXJ0IHRoZSBBUEk6OldlYnNpdGVQb2xpY2llcyogaXMgbnVsbHB0ciBoZXJl
IG9uY2UgY2xpZW50cyBvZiBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMgZ28g
YXdheS4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50OjpObyk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoc2FmZUJyb3dzaW5nUmVzdWx0cywgc2FmZUJyb3dzaW5nUmVzdWx0cy5pc0VtcHR5KCkp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVCcm93c2luZ1dhcm5pbmcsICFzYWZlQnJvd3Np
bmdXYXJuaW5nKTsKICAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24s
IG5hdmlnYXRpb24uZ2V0KCksIHN0ZDo6bnVsbG9wdCwgUG9saWN5RGVjaXNpb25TZW5kZXI6OmNy
ZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGZyYW1l
SUQsIGxpc3RlbmVySURdIChhdXRvLi4uIGFyZ3MpIHsKICAgICAgICAgICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKGZyYW1lSUQs
IGxpc3RlbmVySUQsIGFyZ3MuLi4pLCBtX3BhZ2VJRCk7CiAgICAgICAgIH0pKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNp
b24gMjM4MTE1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDEyIEBACiAjaW1wb3J0ICJMb2dnaW5n
LmgiCiAjaW1wb3J0ICJOYXZpZ2F0aW9uU3RhdGUuaCIKICNpbXBvcnQgIk9iakNPYmplY3RHcmFw
aC5oIgorI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlU2Ny
b2xsaW5nUGVyZm9ybWFuY2VEYXRhLmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbi5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQgIlJlbW90
ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcu
aCIKICNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgog
I2ltcG9ydCAiVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCIKQEAgLTEyNzcsOSArMTI3OSwxMyBA
QCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBbdWlEZWxlZ2F0ZSBfd2Vi
VmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbkZv
ckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAKLS0gKHZvaWQpX3Nob3dT
YWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYpcmVz
dWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2Vi
S2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhh
bmRsZXIKKy0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOihOU1N0cmlu
ZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2FybmluZyBkZXRhaWxzOihOU0F0dHJpYnV0
ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wsIE5TVVJM
ICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBhZG9w
dE5TKFtbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGFsbG9jXSBpbml0V2l0aEZyYW1lOnNlbGYuYm91
bmRzIHNhZmVCcm93c2luZ1Jlc3VsdDpyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6W3dlYWtTZWxm
ID0gV2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgIAor
fQorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJy
b3dzaW5nV2FybmluZyYpd2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+
JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBh
ZG9wdE5TKFtbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGFsbG9jXSBpbml0V2l0aEZyYW1lOnNlbGYu
Ym91bmRzIHNhZmVCcm93c2luZ1dhcm5pbmc6d2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjpbd2Vh
a1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CiAg
ICAgICAgIGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKICAgICAgICAgICAg
IFtzdGQ6OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRy
KSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShyZXN1bHQpKTsKQEAgLTQ3MzIsNiArNDczOCwzOCBAQCArIChCT09MKV9oYW5kbGVzU2FmZUJy
b3dzaW5nCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdX
YXJuaW5nV2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2Fy
bmluZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkKF4pKEJPT0wsIE5TVVJMICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0
byBzYWZlQnJvd3NpbmdXYXJuaW5nID0gV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjcmVh
dGUodGl0bGUsIHdhcm5pbmcsIGRldGFpbHMpOworICAgIGF1dG8gd3JhcHBlciA9IFtjb21wbGV0
aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChWYXJpYW50PFdl
YktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYgdmFyaWFudCkgeworICAg
ICAgICBzd2l0Y2hPbih2YXJpYW50LCBbJl0gKGF1dG8gY29udGludWVVbnNhZmVMb2FkKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGNvbnRpbnVlVW5zYWZlTG9hZCkgeworICAgICAgICAgICAgY2Fz
ZSBXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzOgorICAgICAgICAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcihZRVMsIG5pbCk7CisgICAgICAgICAgICBjYXNlIFdlYktpdDo6
Q29udGludWVVbnNhZmVMb2FkOjpObzoKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoTk8sIG5pbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIFsmXSAoV2ViQ29y
ZTo6VVJMIHVybCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKE5PLCB1
cmwpOworICAgICAgICB9KTsKKyAgICB9OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBfaW1wbC0+
c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcoc2FmZUJyb3dzaW5nV2FybmluZywgV1RGTW92ZSh3cmFw
cGVyKSk7CisjZWxzZQorICAgIFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpzYWZlQnJv
d3NpbmdXYXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUod3JhcHBlcildOworI2VuZGlm
Cit9CisKKysgKE5TVVJMICopX2NvbmZpcm1NYWx3YXJlU2VudGluZWwKK3sKKyAgICByZXR1cm4g
V2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCk7Cit9
CisKKysgKE5TVVJMICopX3Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsCit7CisgICAgcmV0dXJu
IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6dmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwo
KTsKK30KKwogLSAodm9pZClfZXZhbHVhdGVKYXZhU2NyaXB0V2l0aG91dFVzZXJHZXN0dXJlOihO
U1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKGlk
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgW3NlbGYgX2V2YWx1YXRlSmF2
YVNjcmlwdDpqYXZhU2NyaXB0U3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6Tk8gY29tcGxldGlvbkhh
bmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDIzODEx
NSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIGNsYXNzIEF0dGFjaG1lbnQ7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogZW51bSBjbGFzcyBDb250aW51ZVVuc2FmZUxvYWQgOiBib29s
OwotY2xhc3MgU2FmZUJyb3dzaW5nUmVzdWx0OworY2xhc3MgU2FmZUJyb3dzaW5nV2FybmluZzsK
IGNsYXNzIFZpZXdTbmFwc2hvdDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludElu
Zm87CkBAIC0xNzksNyArMTc5LDcgQEAgY2xhc3MgVVJMOwogLSAodm9pZClfZGlkSW5zZXJ0QXR0
YWNobWVudDooQVBJOjpBdHRhY2htZW50JilhdHRhY2htZW50IHdpdGhTb3VyY2U6KE5TU3RyaW5n
ICopc291cmNlOwogI2VuZGlmCiAKLS0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihj
b25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVy
OihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxv
YWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKV9zaG93
U2FmZUJyb3dzaW5nV2FybmluZzooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nJil3
YXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8
V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlv
bkhhbmRsZXI7CiAtICh2b2lkKV9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmc7CiAKIC0gKHN0ZDo6
b3B0aW9uYWw8Qk9PTD4pX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlv
bkZvclRlc3Rpbmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMyw2ICsxMDMsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
UmVjdEVkCiBAY2xhc3MgX1dLSWNvbkxvYWRpbmdEZWxlZ2F0ZTsKIEBjbGFzcyBfV0tJbnNwZWN0
b3I7CiBAY2xhc3MgX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk7CitAY2xhc3MgX1dLU2FmZUJyb3dz
aW5nV2FybmluZzsKIEBjbGFzcyBfV0tTZXNzaW9uU3RhdGU7CiBAY2xhc3MgX1dLVGh1bWJuYWls
VmlldzsKIEBjbGFzcyBfV0tXZWJzaXRlUG9saWNpZXM7CkBAIC0xODcsNiArMTg4LDkgQEAgdHlw
ZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZAogLSAoX1dLQXR0YWNobWVudCAq
KV9hdHRhY2htZW50Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiArIChCT09M
KV9oYW5kbGVzU2FmZUJyb3dzaW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworKyAoTlNVUkwgKilfY29uZmlybU1hbHdhcmVTZW50aW5lbCBX
S19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKysg
KE5TVVJMICopX3Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2hvd1NhZmVCcm93
c2luZ1dhcm5pbmdXaXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcg
Kil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikoQk9PTCwgTlNVUkwgKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC0gKElC
QWN0aW9uKV9hbGlnbkNlbnRlcjooaWQpc2VuZGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAoSUJBY3Rpb24pX2FsaWduSnVzdGlmaWVk
OihpZClzZW5kZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3Np
bmdSZXN1bHRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9TYWZlQnJvd3NpbmdSZXN1bHRDb2NvYS5tbQkocmV2aXNpb24gMjM4MTE0KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nUmVzdWx0Q29jb2EubW0JKG5v
bmV4aXN0ZW50KQpAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJTYWZlQnJvd3NpbmdSZXN1bHQuaCIKLQotI2ltcG9ydCAiU2FmZUJyb3dz
aW5nU1BJLmgiCi0jaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLSNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCi0KLS8vIEZJWE1FOiBUaGVz
ZSBvdWdodCB0byBiZSBBUEkgY2FsbHMgdG8gdGhlIFNhZmFyaVNhZmVCcm93c2luZyBmcmFtZXdv
cmsgd2hlbiBzdWNoIFNQSSBpcyBhdmFpbGFibGUuCi1zdGF0aWMgY29uc3QgY2hhciogbWFsd2Fy
ZURldGFpbHNCYXNlKGNvbnN0IFN0cmluZyYgcHJvdmlkZXIpCi17Ci0gICAgaWYgKHByb3ZpZGVy
ID09IFN0cmluZyhTU0JQcm92aWRlclRlbmNlbnQpKQotICAgICAgICByZXR1cm4gImh0dHBzOi8v
d3d3LnVybHNlYy5xcS5jb20vY2hlY2suaHRtbD90cGw9c2FmYXJpIjsKLSAgICByZXR1cm4gImh0
dHBzOi8vZ29vZ2xlLmNvbS9zYWZlYnJvd3NpbmcvZGlhZ25vc3RpYz90cGw9c2FmYXJpIjsKLX0K
LQotc3RhdGljIFdlYkNvcmU6OlVSTCBsZWFybk1vcmUoY29uc3QgU3RyaW5nJiBwcm92aWRlcikK
LXsKLSAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3ZpZGVyVGVuY2VudCkpCi0gICAg
ICAgIHJldHVybiB7eyB9LCAiaHR0cHM6Ly93d3cudXJsc2VjLnFxLmNvbS9zdGFuZGFyZC9zMS5o
dG1sP3RwbD1zYWZhcmkifTsKLSAgICByZXR1cm4ge3sgfSwgImh0dHBzOi8vd3d3Lmdvb2dsZS5j
b20vc3VwcG9ydC9iaW4vYW5zd2VyLnB5P2Fuc3dlcj0xMDYzMTgifTsKLX0KLQotc3RhdGljIGNv
bnN0IGNoYXIqIHJlcG9ydEFuRXJyb3JCYXNlKGNvbnN0IFN0cmluZyYgcHJvdmlkZXIpCi17Ci0g
ICAgaWYgKHByb3ZpZGVyID09IFN0cmluZyhTU0JQcm92aWRlclRlbmNlbnQpKQotICAgICAgICBy
ZXR1cm4gImh0dHBzOi8vd3d3LnVybHNlYy5xcS5jb20vY29tcGxhaW4uaHRtbD90cGw9c2FmYXJp
IjsKLSAgICByZXR1cm4gImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2FmZWJyb3dzaW5nL3JlcG9y
dF9lcnJvci8/dHBsPXNhZmFyaSI7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgbG9jYWxpemVkUHJvdmlk
ZXIoY29uc3QgU3RyaW5nJiBwcm92aWRlcikKLXsKLSAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5n
KFNTQlByb3ZpZGVyVGVuY2VudCkpCi0gICAgICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJU
ZW5jZW50IFNhZmUgQnJvd3NpbmciLCAiVGVuY2VudCBTYWZlIEJyb3dzaW5nIik7Ci0gICAgcmV0
dXJuIFdFQl9VSV9OU1NUUklORyhAIkdvb2dsZSBTYWZlIEJyb3dzaW5nIiwgIkdvb2dsZSBTYWZl
IEJyb3dzaW5nIik7Ci19Ci0KLVNhZmVCcm93c2luZ1Jlc3VsdDo6U2FmZUJyb3dzaW5nUmVzdWx0
KFdlYkNvcmU6OlVSTCYmIHVybCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQotICAg
IDogbV91cmwoV1RGTW92ZSh1cmwpKQotICAgICwgbV9pc1BoaXNoaW5nKFtyZXN1bHQgaXNQaGlz
aGluZ10pCi0gICAgLCBtX2lzTWFsd2FyZShbcmVzdWx0IGlzTWFsd2FyZV0pCi0gICAgLCBtX2lz
VW53YW50ZWRTb2Z0d2FyZShbcmVzdWx0IGlzVW53YW50ZWRTb2Z0d2FyZV0pCi0gICAgLCBtX3By
b3ZpZGVyKFtyZXN1bHQgcHJvdmlkZXJdKQotICAgICwgbV9sb2NhbGl6ZWRQcm92aWRlck5hbWUo
bG9jYWxpemVkUHJvdmlkZXIoW3Jlc3VsdCBwcm92aWRlcl0pKQotICAgICwgbV9tYWx3YXJlRGV0
YWlsc1VSTEJhc2UobWFsd2FyZURldGFpbHNCYXNlKFtyZXN1bHQgcHJvdmlkZXJdKSkKLSAgICAs
IG1fcmVwb3J0QW5FcnJvclVSTEJhc2UocmVwb3J0QW5FcnJvckJhc2UoW3Jlc3VsdCBwcm92aWRl
cl0pKQotICAgICwgbV9sZWFybk1vcmVVUkwobGVhcm5Nb3JlKFtyZXN1bHQgcHJvdmlkZXJdKSkK
LXsKLX0KLSNlbmRpZgotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdSZXN1bHRDb2NvYS5tbQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0
ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NhZmVC
cm93c2luZ1dhcm5pbmdDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0JKHJldmlzaW9uIDIzODExNCkJ
KGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nUmVzdWx0Q29j
b2EubW06MjM4MTE0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dz
aW5nV2FybmluZ0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNhZmVCcm93c2luZ1Jlc3VsdC5o
IgorCisjaW1wb3J0ICJTYWZlQnJvd3NpbmdTUEkuaCIKKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxp
emVkU3RyaW5ncy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmIEhBVkUoU0FGRV9CUk9X
U0lORykKKworLy8gRklYTUU6IFRoZXNlIG91Z2h0IHRvIGJlIEFQSSBjYWxscyB0byB0aGUgU2Fm
YXJpU2FmZUJyb3dzaW5nIGZyYW1ld29yayB3aGVuIHN1Y2ggU1BJIGlzIGF2YWlsYWJsZS4KK3N0
YXRpYyBjb25zdCBjaGFyKiBtYWx3YXJlRGV0YWlsc0Jhc2UoY29uc3QgU3RyaW5nJiBwcm92aWRl
cikKK3sKKyAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3ZpZGVyVGVuY2VudCkpCisg
ICAgICAgIHJldHVybiAiaHR0cHM6Ly93d3cudXJsc2VjLnFxLmNvbS9jaGVjay5odG1sP3RwbD1z
YWZhcmkiOworICAgIHJldHVybiAiaHR0cHM6Ly9nb29nbGUuY29tL3NhZmVicm93c2luZy9kaWFn
bm9zdGljP3RwbD1zYWZhcmkiOworfQorCitzdGF0aWMgV2ViQ29yZTo6VVJMIGxlYXJuTW9yZShj
b25zdCBTdHJpbmcmIHByb3ZpZGVyKQoreworICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmcoU1NC
UHJvdmlkZXJUZW5jZW50KSkKKyAgICAgICAgcmV0dXJuIHt7IH0sICJodHRwczovL3d3dy51cmxz
ZWMucXEuY29tL3N0YW5kYXJkL3MxLmh0bWw/dHBsPXNhZmFyaSJ9OworICAgIHJldHVybiB7eyB9
LCAiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zdXBwb3J0L2Jpbi9hbnN3ZXIucHk/YW5zd2VyPTEw
NjMxOCJ9OworfQorCitzdGF0aWMgY29uc3QgY2hhciogcmVwb3J0QW5FcnJvckJhc2UoY29uc3Qg
U3RyaW5nJiBwcm92aWRlcikKK3sKKyAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3Zp
ZGVyVGVuY2VudCkpCisgICAgICAgIHJldHVybiAiaHR0cHM6Ly93d3cudXJsc2VjLnFxLmNvbS9j
b21wbGFpbi5odG1sP3RwbD1zYWZhcmkiOworICAgIHJldHVybiAiaHR0cHM6Ly93d3cuZ29vZ2xl
LmNvbS9zYWZlYnJvd3NpbmcvcmVwb3J0X2Vycm9yLz90cGw9c2FmYXJpIjsKK30KKworc3RhdGlj
IFN0cmluZyBsb2NhbGl6ZWRQcm92aWRlcihjb25zdCBTdHJpbmcmIHByb3ZpZGVyKQoreworICAg
IGlmIChwcm92aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlkZXJUZW5jZW50KSkKKyAgICAgICAgcmV0
dXJuIFdFQl9VSV9OU1NUUklORyhAIlRlbmNlbnQgU2FmZSBCcm93c2luZyIsICJUZW5jZW50IFNh
ZmUgQnJvd3NpbmciKTsKKyAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiR29vZ2xlIFNhZmUg
QnJvd3NpbmciLCAiR29vZ2xlIFNhZmUgQnJvd3NpbmciKTsKK30KKworU2FmZUJyb3dzaW5nUmVz
dWx0OjpTYWZlQnJvd3NpbmdSZXN1bHQoV2ViQ29yZTo6VVJMJiYgdXJsLCBTU0JTZXJ2aWNlTG9v
a3VwUmVzdWx0ICpyZXN1bHQpCisgICAgOiBtX3VybChXVEZNb3ZlKHVybCkpCisgICAgLCBtX2lz
UGhpc2hpbmcoW3Jlc3VsdCBpc1BoaXNoaW5nXSkKKyAgICAsIG1faXNNYWx3YXJlKFtyZXN1bHQg
aXNNYWx3YXJlXSkKKyAgICAsIG1faXNVbndhbnRlZFNvZnR3YXJlKFtyZXN1bHQgaXNVbndhbnRl
ZFNvZnR3YXJlXSkKKyAgICAsIG1fcHJvdmlkZXIoW3Jlc3VsdCBwcm92aWRlcl0pCisgICAgLCBt
X2xvY2FsaXplZFByb3ZpZGVyTmFtZShsb2NhbGl6ZWRQcm92aWRlcihbcmVzdWx0IHByb3ZpZGVy
XSkpCisgICAgLCBtX21hbHdhcmVEZXRhaWxzVVJMQmFzZShtYWx3YXJlRGV0YWlsc0Jhc2UoW3Jl
c3VsdCBwcm92aWRlcl0pKQorICAgICwgbV9yZXBvcnRBbkVycm9yVVJMQmFzZShyZXBvcnRBbkVy
cm9yQmFzZShbcmVzdWx0IHByb3ZpZGVyXSkpCisgICAgLCBtX2xlYXJuTW9yZVVSTChsZWFybk1v
cmUoW3Jlc3VsdCBwcm92aWRlcl0pKQoreworfQorI2VuZGlmCisKK30KClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1dhcm5pbmdD
b2NvYS5tbQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25h
dGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nV2FybmluZ0NvY29h
Lm1tCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
YWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDU2ICsyNCwx
NTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlNhZmVCcm93c2luZ1Jl
c3VsdC5oIgorI2ltcG9ydCAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgogCiAjaW1wb3J0ICJTYWZl
QnJvd3NpbmdTUEkuaCIKICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2lt
cG9ydCA8d3RmL0xhbmd1YWdlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAjaWYgSEFWRShT
QUZFX0JST1dTSU5HKQogCi0vLyBGSVhNRTogVGhlc2Ugb3VnaHQgdG8gYmUgQVBJIGNhbGxzIHRv
IHRoZSBTYWZhcmlTYWZlQnJvd3NpbmcgZnJhbWV3b3JrIHdoZW4gc3VjaCBTUEkgaXMgYXZhaWxh
YmxlLgotc3RhdGljIGNvbnN0IGNoYXIqIG1hbHdhcmVEZXRhaWxzQmFzZShjb25zdCBTdHJpbmcm
IHByb3ZpZGVyKQorLy8gRklYTUU6IFRoZXNlIGZvdXIgZnVuY3Rpb25zIG91Z2h0IHRvIGJlIEFQ
SSBjYWxscyB0byB0aGUgU2FmYXJpU2FmZUJyb3dzaW5nIGZyYW1ld29yayB3aGVuIHN1Y2ggU1BJ
IGlzIGF2YWlsYWJsZS4KKy8vIFRoYXQgd2F5IFdlYktpdCBkb2VzIG5vdCBuZWVkIHRvIGtub3cg
YWJvdXQgdGhlIFNhZmFyaVNhZmVCcm93c2luZyBmcmFtZXdvcmsncyBwb3NzaWJsZSBwcm92aWRl
cnMuCitzdGF0aWMgY29uc3QgY2hhciogbWFsd2FyZURldGFpbHNCYXNlKFNTQlNlcnZpY2VMb29r
dXBSZXN1bHQgKnJlc3VsdCkKIHsKLSAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3Zp
ZGVyVGVuY2VudCkpCisgICAgaWYgKFtyZXN1bHQucHJvdmlkZXIgaXNFcXVhbFRvU3RyaW5nOlNT
QlByb3ZpZGVyVGVuY2VudF0pCiAgICAgICAgIHJldHVybiAiaHR0cHM6Ly93d3cudXJsc2VjLnFx
LmNvbS9jaGVjay5odG1sP3RwbD1zYWZhcmkiOwogICAgIHJldHVybiAiaHR0cHM6Ly9nb29nbGUu
Y29tL3NhZmVicm93c2luZy9kaWFnbm9zdGljP3RwbD1zYWZhcmkiOwogfQogCi1zdGF0aWMgV2Vi
Q29yZTo6VVJMIGxlYXJuTW9yZShjb25zdCBTdHJpbmcmIHByb3ZpZGVyKQorc3RhdGljIE5TVVJM
ICpsZWFybk1vcmVVUkwoU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQogewotICAgIGlm
IChwcm92aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlkZXJUZW5jZW50KSkKLSAgICAgICAgcmV0dXJu
IHt7IH0sICJodHRwczovL3d3dy51cmxzZWMucXEuY29tL3N0YW5kYXJkL3MxLmh0bWw/dHBsPXNh
ZmFyaSJ9OwotICAgIHJldHVybiB7eyB9LCAiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zdXBwb3J0
L2Jpbi9hbnN3ZXIucHk/YW5zd2VyPTEwNjMxOCJ9OworICAgIGlmIChbcmVzdWx0LnByb3ZpZGVy
IGlzRXF1YWxUb1N0cmluZzpTU0JQcm92aWRlclRlbmNlbnRdKQorICAgICAgICByZXR1cm4gW05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy51cmxzZWMucXEuY29tL3N0YW5kYXJkL3Mx
Lmh0bWw/dHBsPXNhZmFyaSJdOworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0
dHBzOi8vd3d3Lmdvb2dsZS5jb20vc3VwcG9ydC9iaW4vYW5zd2VyLnB5P2Fuc3dlcj0xMDYzMTgi
XTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIHJlcG9ydEFuRXJyb3JCYXNlKGNvbnN0IFN0cmlu
ZyYgcHJvdmlkZXIpCitzdGF0aWMgY29uc3QgY2hhciogcmVwb3J0QW5FcnJvckJhc2UoU1NCU2Vy
dmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQogewotICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmco
U1NCUHJvdmlkZXJUZW5jZW50KSkKKyAgICBpZiAoW3Jlc3VsdC5wcm92aWRlciBpc0VxdWFsVG9T
dHJpbmc6U1NCUHJvdmlkZXJUZW5jZW50XSkKICAgICAgICAgcmV0dXJuICJodHRwczovL3d3dy51
cmxzZWMucXEuY29tL2NvbXBsYWluLmh0bWw/dHBsPXNhZmFyaSI7CiAgICAgcmV0dXJuICJodHRw
czovL3d3dy5nb29nbGUuY29tL3NhZmVicm93c2luZy9yZXBvcnRfZXJyb3IvP3RwbD1zYWZhcmki
OwogfQogCi1zdGF0aWMgU3RyaW5nIGxvY2FsaXplZFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgcHJv
dmlkZXIpCitzdGF0aWMgU3RyaW5nIGxvY2FsaXplZFByb3ZpZGVyKFNTQlNlcnZpY2VMb29rdXBS
ZXN1bHQgKnJlc3VsdCkKIHsKLSAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3ZpZGVy
VGVuY2VudCkpCisgICAgaWYgKFtyZXN1bHQucHJvdmlkZXIgaXNFcXVhbFRvU3RyaW5nOlNTQlBy
b3ZpZGVyVGVuY2VudF0pCiAgICAgICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJUZW5jZW50
IFNhZmUgQnJvd3NpbmciLCAiVGVuY2VudCBTYWZlIEJyb3dzaW5nIik7CiAgICAgcmV0dXJuIFdF
Ql9VSV9OU1NUUklORyhAIkdvb2dsZSBTYWZlIEJyb3dzaW5nIiwgIkdvb2dsZSBTYWZlIEJyb3dz
aW5nIik7CiB9CiAKLVNhZmVCcm93c2luZ1Jlc3VsdDo6U2FmZUJyb3dzaW5nUmVzdWx0KFdlYkNv
cmU6OlVSTCYmIHVybCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQotICAgIDogbV91
cmwoV1RGTW92ZSh1cmwpKQotICAgICwgbV9pc1BoaXNoaW5nKFtyZXN1bHQgaXNQaGlzaGluZ10p
Ci0gICAgLCBtX2lzTWFsd2FyZShbcmVzdWx0IGlzTWFsd2FyZV0pCi0gICAgLCBtX2lzVW53YW50
ZWRTb2Z0d2FyZShbcmVzdWx0IGlzVW53YW50ZWRTb2Z0d2FyZV0pCi0gICAgLCBtX3Byb3ZpZGVy
KFtyZXN1bHQgcHJvdmlkZXJdKQotICAgICwgbV9sb2NhbGl6ZWRQcm92aWRlck5hbWUobG9jYWxp
emVkUHJvdmlkZXIoW3Jlc3VsdCBwcm92aWRlcl0pKQotICAgICwgbV9tYWx3YXJlRGV0YWlsc1VS
TEJhc2UobWFsd2FyZURldGFpbHNCYXNlKFtyZXN1bHQgcHJvdmlkZXJdKSkKLSAgICAsIG1fcmVw
b3J0QW5FcnJvclVSTEJhc2UocmVwb3J0QW5FcnJvckJhc2UoW3Jlc3VsdCBwcm92aWRlcl0pKQot
ICAgICwgbV9sZWFybk1vcmVVUkwobGVhcm5Nb3JlKFtyZXN1bHQgcHJvdmlkZXJdKSkKKworTlNV
UkwgKlNhZmVCcm93c2luZ1dhcm5pbmc6OnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkKK3sK
KyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNl
bnRpbmVsIl07Cit9CisKK05TVVJMICpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjb25maXJtTWFsd2Fy
ZVNlbnRpbmVsKCkKK3sKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS0NvbmZp
cm1NYWx3YXJlU2VudGluZWwiXTsKK30KKworc3RhdGljIHZvaWQgcmVwbGFjZShOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIE5TU3RyaW5nICp0b1JlcGxhY2UsIE5TU3RyaW5nICpy
ZXBsYWNlV2l0aCkKK3sKKyAgICBbc3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3Ry
aW5nLnN0cmluZyByYW5nZU9mU3RyaW5nOnRvUmVwbGFjZV0gd2l0aFN0cmluZzpyZXBsYWNlV2l0
aF07Cit9CisKK3N0YXRpYyB2b2lkIGFkZExpbmtBbmRSZXBsYWNlKE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgKnN0cmluZywgTlNTdHJpbmcgKnRvUmVwbGFjZSwgTlNTdHJpbmcgKnJlcGxhY2VX
aXRoLCBOU1VSTCAqbGlua1RhcmdldCkKK3sKKyAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
ICpzdHJpbmdXaXRoTGluayA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoU3RyaW5nOnJlcGxhY2VXaXRoXSBhdXRvcmVsZWFzZV07CisgICAgW3N0cmluZ1dpdGhM
aW5rIGFkZEF0dHJpYnV0ZXM6QHsKKyAgICAgICAgTlNMaW5rQXR0cmlidXRlTmFtZTogbGlua1Rh
cmdldCwKKyAgICAgICAgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWU6IEAxCisgICAgfSBy
YW5nZTpOU01ha2VSYW5nZSgwLCByZXBsYWNlV2l0aC5sZW5ndGgpXTsKKyAgICBbc3RyaW5nIHJl
cGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3RyaW5nLnN0cmluZyByYW5nZU9mU3RyaW5nOnRvUmVw
bGFjZV0gd2l0aEF0dHJpYnV0ZWRTdHJpbmc6c3RyaW5nV2l0aExpbmtdOworfQorCitzdGF0aWMg
TlNVUkwgKnJlcG9ydEFuRXJyb3JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwsIFNTQlNlcnZp
Y2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6VVJMKHsgfSwg
bWFrZVN0cmluZyhyZXBvcnRBbkVycm9yQmFzZShyZXN1bHQpLCAiJnVybD0iLCBlbmNvZGVXaXRo
VVJMRXNjYXBlU2VxdWVuY2VzKHVybCksICImaGw9IiwgZGVmYXVsdExhbmd1YWdlKCkpKTsKK30K
Kworc3RhdGljIE5TVVJMICptYWx3YXJlRGV0YWlsc1VSTChjb25zdCBXZWJDb3JlOjpVUkwmIHVy
bCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQoreworICAgIHJldHVybiBXZWJDb3Jl
OjpVUkwoeyB9LCBtYWtlU3RyaW5nKG1hbHdhcmVEZXRhaWxzQmFzZShyZXN1bHQpLCAiJnNpdGU9
IiwgdXJsLmhvc3QoKSwgIiZobD0iLCBkZWZhdWx0TGFuZ3VhZ2UoKSkpOworfQorCitzdGF0aWMg
TlNTdHJpbmcgKnNhZmVCcm93c2luZ1RpdGxlVGV4dChTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpy
ZXN1bHQpCit7CisgICAgaWYgKHJlc3VsdC5pc1BoaXNoaW5nKQorICAgICAgICByZXR1cm4gV0VC
X1VJX05TU1RSSU5HKEAiRGVjZXB0aXZlIFdlYnNpdGUgV2FybmluZyIsICJQaGlzaGluZyB3YXJu
aW5nIHRpdGxlIik7CisgICAgaWYgKHJlc3VsdC5pc01hbHdhcmUpCisgICAgICAgIHJldHVybiBX
RUJfVUlfTlNTVFJJTkcoQCJNYWx3YXJlIFdlYnNpdGUgV2FybmluZyIsICJNYWx3YXJlIHdhcm5p
bmcgdGl0bGUiKTsKKyAgICBBU1NFUlQocmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSk7CisgICAg
cmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIldlYnNpdGUgV2l0aCBIYXJtZnVsIFNvZnR3YXJlIFdh
cm5pbmciLCAiVW53YW50ZWQgc29mdHdhcmUgd2FybmluZyB0aXRsZSIpOworfQorCitzdGF0aWMg
TlNTdHJpbmcgKnNhZmVCcm93c2luZ1dhcm5pbmdUZXh0KFNTQlNlcnZpY2VMb29rdXBSZXN1bHQg
KnJlc3VsdCkKK3sKKyAgICBpZiAocmVzdWx0LmlzUGhpc2hpbmcpCisgICAgICAgIHJldHVybiBX
RUJfVUlfTlNTVFJJTkcoQCJUaGlzIHdlYnNpdGUgbWF5IHRyeSB0byB0cmljayB5b3UgaW50byBk
b2luZyBzb21ldGhpbmcgZGFuZ2Vyb3VzLCBsaWtlIGluc3RhbGxpbmcgc29mdHdhcmUgb3IgZGlz
Y2xvc2luZyBwZXJzb25hbCBvciBmaW5hbmNpYWwgaW5mb3JtYXRpb24sIGxpa2UgcGFzc3dvcmRz
LCBwaG9uZSBudW1iZXJzLCBvciBjcmVkaXQgY2FyZHMuIiwgIlBoaXNoaW5nIHdhcm5pbmciKTsK
KyAgICBpZiAocmVzdWx0LmlzTWFsd2FyZSkKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9OU1NUUklO
RyhAIlRoaXMgd2Vic2l0ZSBtYXkgYXR0ZW1wdCB0byBpbnN0YWxsIGRhbmdlcm91cyBzb2Z0d2Fy
ZSwgd2hpY2ggY291bGQgaGFybSB5b3VyIGNvbXB1dGVyIG9yIHN0ZWFsIHlvdXIgcGVyc29uYWwg
b3IgZmluYW5jaWFsIGluZm9ybWF0aW9uLCBsaWtlIHBhc3N3b3JkcywgcGhvdG9zLCBvciBjcmVk
aXQgY2FyZHMuIiwgIk1hbHdhcmUgd2FybmluZyIpOworCisgICAgQVNTRVJUKHJlc3VsdC5pc1Vu
d2FudGVkU29mdHdhcmUpOworICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJUaGlzIHdlYnNp
dGUgbWF5IHRyeSB0byB0cmljayB5b3UgaW50byBpbnN0YWxsaW5nIHNvZnR3YXJlIHRoYXQgaGFy
bXMgeW91ciBicm93c2luZyBleHBlcmllbmNlLCBsaWtlIGNoYW5naW5nIHlvdXIgc2V0dGluZ3Mg
d2l0aG91dCB5b3VyIHBlcm1pc3Npb24gb3Igc2hvd2luZyB5b3UgdW53YW50ZWQgYWRzLiBPbmNl
IGluc3RhbGxlZCwgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byByZW1vdmUuIiwgIlVud2FudGVkIHNv
ZnR3YXJlIHdhcm5pbmciKTsKK30KKworc3RhdGljIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcg
KnNhZmVCcm93c2luZ0RldGFpbHNUZXh0KGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBTU0JTZXJ2
aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCit7CisgICAgaWYgKHJlc3VsdC5pc1BoaXNoaW5nKSB7
CisgICAgICAgIE5TU3RyaW5nICpwaGlzaGluZ0Rlc2NyaXB0aW9uID0gV0VCX1VJX05TU1RSSU5H
KEAiV2FybmluZ3MgYXJlIHNob3duIGZvciB3ZWJzaXRlcyB0aGF0IGhhdmUgYmVlbiByZXBvcnRl
ZCBhcyBkZWNlcHRpdmUuIERlY2VwdGl2ZSB3ZWJzaXRlcyB0cnkgdG8gdHJpY2sgeW91IGludG8g
YmVsaWV2aW5nIHRoZXkgYXJlIGxlZ2l0aW1hdGUgd2Vic2l0ZXMgeW91IHRydXN0LiIsICJQaGlz
aGluZyB3YXJuaW5nIGRlc2NyaXB0aW9uIik7CisgICAgICAgIE5TU3RyaW5nICpsZWFybk1vcmUg
PSBXRUJfVUlfTlNTVFJJTkcoQCJMZWFybiBtb3Jl4oCmIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJv
d3Npbmcgd2FybmluZyIpOworICAgICAgICBOU1N0cmluZyAqcGhpc2hpbmdBY3Rpb25zID0gV0VC
X1VJX05TU1RSSU5HKEAiSWYgeW91IGJlbGlldmUgdGhpcyB3ZWJzaXRlIGlzIHNhZmUsIHlvdSBj
YW4gJXJlcG9ydC1hbi1lcnJvciUuIE9yLCBpZiB5b3UgdW5kZXJzdGFuZCB0aGUgcmlza3MgaW52
b2x2ZWQsIHlvdSBjYW4gJWJ5cGFzcy1saW5rJS4iLCAiUGhpc2hpbmcgd2FybmluZyBkZXNjcmlw
dGlvbiIpOworICAgICAgICBOU1N0cmluZyAqcmVwb3J0QW5FcnJvciA9IFdFQl9VSV9OU1NUUklO
RyhAInJlcG9ydCBhbiBlcnJvciIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmci
KTsKKyAgICAgICAgTlNTdHJpbmcgKnZpc2l0VW5zYWZlV2Vic2l0ZSA9IFdFQl9VSV9OU1NUUklO
RyhAInZpc2l0IHRoaXMgdW5zYWZlIHdlYnNpdGUiLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2lu
ZyB3YXJuaW5nIik7CisKKyAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZFN0cmluZyA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgJUBcblxuJUAiLCBwaGlzaGlu
Z0Rlc2NyaXB0aW9uLCBsZWFybk1vcmUsIHBoaXNoaW5nQWN0aW9uc11dIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgYWRkTGlua0FuZFJlcGxhY2UoYXR0cmlidXRlZFN0cmluZywgbGVhcm5Nb3JlLCBs
ZWFybk1vcmUsIGxlYXJuTW9yZVVSTChyZXN1bHQpKTsKKyAgICAgICAgYWRkTGlua0FuZFJlcGxh
Y2UoYXR0cmlidXRlZFN0cmluZywgQCIlcmVwb3J0LWFuLWVycm9yJSIsIHJlcG9ydEFuRXJyb3Is
IHJlcG9ydEFuRXJyb3JVUkwodXJsLCByZXN1bHQpKTsKKyAgICAgICAgYWRkTGlua0FuZFJlcGxh
Y2UoYXR0cmlidXRlZFN0cmluZywgQCIlYnlwYXNzLWxpbmslIiwgdmlzaXRVbnNhZmVXZWJzaXRl
LCBTYWZlQnJvd3NpbmdXYXJuaW5nOjp2aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCgpKTsKKyAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgfQorCisgICAgYXV0byBtYWx3YXJl
T3JVbndhbnRlZFNvZnR3YXJlRGV0YWlscyA9IFsmXSAoTlNTdHJpbmcgKmRlc2NyaXB0aW9uLCBO
U1N0cmluZyAqc3RhdHVzU3RyaW5nVG9SZXBsYWNlLCBib29sIGNvbmZpcm1NYWx3YXJlKSB7Cisg
ICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKm1hbHdhcmVEZXNjcmlwdGlvbiA9IFtb
W05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmRlc2NyaXB0
aW9uXSBhdXRvcmVsZWFzZV07CisgICAgICAgIHJlcGxhY2UobWFsd2FyZURlc2NyaXB0aW9uLCBA
IiVzYWZlQnJvd3NpbmdQcm92aWRlciUiLCBsb2NhbGl6ZWRQcm92aWRlcihyZXN1bHQpKTsKKyAg
ICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RhdHVzTGluayA9IFtbW05TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOldFQl9VSV9OU1NUUklORyhA
InRoZSBzdGF0dXMgb2Yg4oCcJXNpdGUl4oCdIiwgIlBhcnQgb2YgbWFsd2FyZSBkZXNjcmlwdGlv
biIpXSBhdXRvcmVsZWFzZV07CisgICAgICAgIHJlcGxhY2Uoc3RhdHVzTGluaywgQCIlc2l0ZSUi
LCB1cmwuaG9zdCgpLnRvU3RyaW5nKCkpOworICAgICAgICBhZGRMaW5rQW5kUmVwbGFjZShtYWx3
YXJlRGVzY3JpcHRpb24sIHN0YXR1c1N0cmluZ1RvUmVwbGFjZSwgc3RhdHVzTGluay5zdHJpbmcs
IG1hbHdhcmVEZXRhaWxzVVJMKHVybCwgcmVzdWx0KSk7CisKKyAgICAgICAgTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyAqaWZZb3VVbmRlcnN0YW5kID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6V0VCX1VJX05TU1RSSU5HKEAiSWYgeW91IHVuZGVy
c3RhbmQgdGhlIHJpc2tzIGludm9sdmVkLCB5b3UgY2FuICV2aXNpdC10aGlzLXVuc2FmZS1zaXRl
LWxpbmslLiIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKV0gYXV0b3JlbGVh
c2VdOworICAgICAgICBhZGRMaW5rQW5kUmVwbGFjZShpZllvdVVuZGVyc3RhbmQsIEAiJXZpc2l0
LXRoaXMtdW5zYWZlLXNpdGUtbGluayUiLCBXRUJfVUlfTlNTVFJJTkcoQCJ2aXNpdCB0aGlzIHVu
c2FmZSB3ZWJzaXRlIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIpLCBjb25m
aXJtTWFsd2FyZSA/IFNhZmVCcm93c2luZ1dhcm5pbmc6OmNvbmZpcm1NYWx3YXJlU2VudGluZWwo
KSA6IFNhZmVCcm93c2luZ1dhcm5pbmc6OnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkpOwor
CisgICAgICAgIFttYWx3YXJlRGVzY3JpcHRpb24gYXBwZW5kQXR0cmlidXRlZFN0cmluZzpbW1tO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIlxuXG4iXSBh
dXRvcmVsZWFzZV1dOworICAgICAgICBbbWFsd2FyZURlc2NyaXB0aW9uIGFwcGVuZEF0dHJpYnV0
ZWRTdHJpbmc6aWZZb3VVbmRlcnN0YW5kXTsKKyAgICAgICAgcmV0dXJuIG1hbHdhcmVEZXNjcmlw
dGlvbjsKKyAgICB9OworCisgICAgaWYgKHJlc3VsdC5pc01hbHdhcmUpCisgICAgICAgIHJldHVy
biBtYWx3YXJlT3JVbndhbnRlZFNvZnR3YXJlRGV0YWlscyhXRUJfVUlfTlNTVFJJTkcoQCJXYXJu
aW5ncyBhcmUgc2hvd24gZm9yIHdlYnNpdGVzIHdoZXJlIG1hbGljaW91cyBzb2Z0d2FyZSBoYXMg
YmVlbiBkZXRlY3RlZC4gWW91IGNhbiBjaGVjayB0aGUgJXN0YXR1cy1saW5rJSBvbiB0aGUgJXNh
ZmVCcm93c2luZ1Byb3ZpZGVyJSBkaWFnbm9zdGljIHBhZ2UuIiwgIk1hbHdhcmUgd2FybmluZyBk
ZXNjcmlwdGlvbiIpLCBAIiVzdGF0dXMtbGluayUiLCB0cnVlKTsKKyAgICBBU1NFUlQocmVzdWx0
LmlzVW53YW50ZWRTb2Z0d2FyZSk7CisgICAgcmV0dXJuIG1hbHdhcmVPclVud2FudGVkU29mdHdh
cmVEZXRhaWxzKFdFQl9VSV9OU1NUUklORyhAIldhcm5pbmdzIGFyZSBzaG93biBmb3Igd2Vic2l0
ZXMgd2hlcmUgaGFybWZ1bCBzb2Z0d2FyZSBoYXMgYmVlbiBkZXRlY3RlZC4gWW91IGNhbiBjaGVj
ayAldGhlLXN0YXR1cy1vZi1zaXRlJSBvbiB0aGUgJXNhZmVCcm93c2luZ1Byb3ZpZGVyJSBkaWFn
bm9zdGljIHBhZ2UuIiwgIlVud2FudGVkIHNvZnR3YXJlIHdhcm5pbmcgZGVzY3JpcHRpb24iKSwg
QCIldGhlLXN0YXR1cy1vZi1zaXRlJSIsIGZhbHNlKTsKK30KKworU2FmZUJyb3dzaW5nV2Fybmlu
Zzo6U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgU1NCU2Vydmlj
ZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQorICAgIDogbV90aXRsZShzYWZlQnJvd3NpbmdUaXRsZVRl
eHQocmVzdWx0KSkKKyAgICAsIG1fd2FybmluZyhzYWZlQnJvd3NpbmdXYXJuaW5nVGV4dChyZXN1
bHQpKQorICAgICwgbV9kZXRhaWxzKHNhZmVCcm93c2luZ0RldGFpbHNUZXh0KHVybCwgcmVzdWx0
KSkKIHsKIH0KICNlbmRpZgogCitTYWZlQnJvd3NpbmdXYXJuaW5nOjpTYWZlQnJvd3NpbmdXYXJu
aW5nKFN0cmluZyYmIHRpdGxlLCBTdHJpbmcmJiB3YXJuaW5nLCBSZXRhaW5QdHI8TlNBdHRyaWJ1
dGVkU3RyaW5nPiYmIGRldGFpbHMpCisgICAgOiBtX3RpdGxlKFdURk1vdmUodGl0bGUpKQorICAg
ICwgbV93YXJuaW5nKFdURk1vdmUod2FybmluZykpCisgICAgLCBtX2RldGFpbHMoV1RGTW92ZShk
ZXRhaWxzKSkKK3sKK30KKwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgJKHJldmlzaW9uIDIzODExNSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFVSTDsKIH0KIAogbmFtZXNwYWNl
IFdlYktpdCB7Ci1jbGFzcyBTYWZlQnJvd3NpbmdSZXN1bHQ7CitjbGFzcyBTYWZlQnJvd3NpbmdX
YXJuaW5nOwogZW51bSBjbGFzcyBDb250aW51ZVVuc2FmZUxvYWQgOiBib29sOwogfQogCkBAIC01
NiwxMCArNTYsMTAgQEAgdXNpbmcgUmVjdFR5cGUgPSBDR1JlY3Q7CiB7CiBAcGFja2FnZQogICAg
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9h
ZCwgV2ViQ29yZTo6VVJMPiYmKT4gX2NvbXBsZXRpb25IYW5kbGVyOwotICAgIFJlZlB0cjxjb25z
dCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdD4gX3Jlc3VsdDsKKyAgICBSZWZQdHI8Y29uc3Qg
V2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nPiBfd2FybmluZzsKICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk8V0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqPj4gX3RleHRWaWV3czsKIH0KIAot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KFJlY3RUeXBlKWZyYW1lIHNhZmVCcm93c2lu
Z1Jlc3VsdDooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQmKXJlc3VsdCBjb21wbGV0
aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGlu
dWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyOworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KFJlY3RUeXBlKWZyYW1lIHNhZmVCcm93c2luZ1dh
cm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZyYpd2FybmluZyBjb21wbGV0
aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGlu
dWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyOwogCiBA
ZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dh
cm5pbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tT
YWZlQnJvd3NpbmdXYXJuaW5nLm1tCShyZXZpc2lvbiAyMzgxMzMpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKICNpbXBvcnQgIldLU2FmZUJyb3dzaW5nV2FybmluZy5oIgogCiAj
aW1wb3J0ICJQYWdlQ2xpZW50LmgiCi0jaW1wb3J0ICJTYWZlQnJvd3NpbmdSZXN1bHQuaCIKKyNp
bXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVk
U3RyaW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9VUkwuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0
ci5oPgpAQCAtNzEsMTYgKzcxLDYgQEAgZW51bSBjbGFzcyBXYXJuaW5nSXRlbSA6IHVpbnQ4X3Qg
ewogICAgIEdvQmFja0J1dHRvbgogfTsKIAotc3RhdGljIE5TVVJMICpjb25maXJtTWFsd2FyZVNl
bnRpbmVsKCkKLXsKLSAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS0NvbmZpcm1N
YWx3YXJlU2VudGluZWwiXTsKLX0KLQotc3RhdGljIE5TVVJMICp2aXNpdFVuc2FmZVdlYnNpdGVT
ZW50aW5lbCgpCi17Ci0gICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tWaXNpdFVu
c2FmZVdlYnNpdGVTZW50aW5lbCJdOwotfQotCiBzdGF0aWMgQ29sb3JUeXBlICpjb2xvckZvckl0
ZW0oV2FybmluZ0l0ZW0gaXRlbSwgVmlld1R5cGUgKndhcm5pbmcpCiB7CiAgICAgQVNTRVJUKFt3
YXJuaW5nIGlzS2luZE9mQ2xhc3M6W1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGFzc11dKTsKQEAg
LTEzNCwyMSArMTI0LDYgQEAgc3RhdGljIENvbG9yVHlwZSAqY29sb3JGb3JJdGVtKFdhcm5pbmdJ
dAogICAgIHJldHVybiBuaWw7CiB9CiAKLXN0YXRpYyB2b2lkIHJlcGxhY2UoTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyAqc3RyaW5nLCBOU1N0cmluZyAqdG9SZXBsYWNlLCBOU1N0cmluZyAqcmVw
bGFjZVdpdGgpCi17Ci0gICAgW3N0cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmlu
Zy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0b1JlcGxhY2VdIHdpdGhTdHJpbmc6cmVwbGFjZVdpdGhd
OwotfQotCi1zdGF0aWMgdm9pZCBhZGRMaW5rQW5kUmVwbGFjZShOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nICpzdHJpbmcsIE5TU3RyaW5nICp0b1JlcGxhY2UsIE5TU3RyaW5nICpyZXBsYWNlV2l0
aCwgTlNVUkwgKmxpbmtUYXJnZXQpCi17Ci0gICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAq
c3RyaW5nV2l0aExpbmsgPSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFN0cmluZzpyZXBsYWNlV2l0aF0gYXV0b3JlbGVhc2VdOwotICAgIFtzdHJpbmdXaXRoTGlu
ayBhZGRBdHRyaWJ1dGVzOkB7Ci0gICAgICAgIE5TTGlua0F0dHJpYnV0ZU5hbWU6IGxpbmtUYXJn
ZXQsCi0gICAgICAgIE5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lOiBAMQotICAgIH0gcmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgcmVwbGFjZVdpdGgubGVuZ3RoKV07Ci0gICAgW3N0cmluZyByZXBs
YWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0b1JlcGxh
Y2VdIHdpdGhBdHRyaWJ1dGVkU3RyaW5nOnN0cmluZ1dpdGhMaW5rXTsKLX0KLQogQGludGVyZmFj
ZSBXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9pbnQgOiBWaWV3VHlwZQogQGVuZAogCkBAIC0x
OTgsNzMgKzE3Myw2IEBAIC0gKE5TU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6ZQogCiBAZW5kCiAK
LXN0YXRpYyBOU1VSTCAqcmVwb3J0QW5FcnJvclVSTChjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2lu
Z1Jlc3VsdCYgcmVzdWx0KQotewotICAgIHJldHVybiBXZWJDb3JlOjpVUkwoeyB9LCBtYWtlU3Ry
aW5nKHJlc3VsdC5yZXBvcnRBbkVycm9yVVJMQmFzZSgpLCAiJnVybD0iLCBlbmNvZGVXaXRoVVJM
RXNjYXBlU2VxdWVuY2VzKHJlc3VsdC51cmwoKSksICImaGw9IiwgZGVmYXVsdExhbmd1YWdlKCkp
KTsKLX0KLQotc3RhdGljIE5TVVJMICptYWx3YXJlRGV0YWlsc1VSTChjb25zdCBXZWJLaXQ6OlNh
ZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0KQotewotICAgIHJldHVybiBXZWJDb3JlOjpVUkwoeyB9
LCBtYWtlU3RyaW5nKHJlc3VsdC5tYWx3YXJlRGV0YWlsc1VSTEJhc2UoKSwgIiZzaXRlPSIsIHJl
c3VsdC51cmwoKS5ob3N0KCksICImaGw9IiwgZGVmYXVsdExhbmd1YWdlKCkpKTsKLX0KLQotc3Rh
dGljIE5TU3RyaW5nICp0aXRsZVRleHQoY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQm
IHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0LmlzUGhpc2hpbmcoKSkKLSAgICAgICAgcmV0dXJu
IFdFQl9VSV9OU1NUUklORyhAIkRlY2VwdGl2ZSBXZWJzaXRlIFdhcm5pbmciLCAiUGhpc2hpbmcg
d2FybmluZyB0aXRsZSIpOwotICAgIGlmIChyZXN1bHQuaXNNYWx3YXJlKCkpCi0gICAgICAgIHJl
dHVybiBXRUJfVUlfTlNTVFJJTkcoQCJNYWx3YXJlIFdlYnNpdGUgV2FybmluZyIsICJNYWx3YXJl
IHdhcm5pbmcgdGl0bGUiKTsKLSAgICBBU1NFUlQocmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSgp
KTsKLSAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiV2Vic2l0ZSBXaXRoIEhhcm1mdWwgU29m
dHdhcmUgV2FybmluZyIsICJVbndhbnRlZCBzb2Z0d2FyZSB3YXJuaW5nIHRpdGxlIik7Ci19Ci0K
LXN0YXRpYyBOU1N0cmluZyAqd2FybmluZ1RleHQoY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdS
ZXN1bHQmIHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0LmlzUGhpc2hpbmcoKSkKLSAgICAgICAg
cmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIlRoaXMgd2Vic2l0ZSBtYXkgdHJ5IHRvIHRyaWNrIHlv
dSBpbnRvIGRvaW5nIHNvbWV0aGluZyBkYW5nZXJvdXMsIGxpa2UgaW5zdGFsbGluZyBzb2Z0d2Fy
ZSBvciBkaXNjbG9zaW5nIHBlcnNvbmFsIG9yIGZpbmFuY2lhbCBpbmZvcm1hdGlvbiwgbGlrZSBw
YXNzd29yZHMsIHBob25lIG51bWJlcnMsIG9yIGNyZWRpdCBjYXJkcy4iLCAiUGhpc2hpbmcgd2Fy
bmluZyIpOwotICAgIGlmIChyZXN1bHQuaXNNYWx3YXJlKCkpCi0gICAgICAgIHJldHVybiBXRUJf
VUlfTlNTVFJJTkcoQCJUaGlzIHdlYnNpdGUgbWF5IGF0dGVtcHQgdG8gaW5zdGFsbCBkYW5nZXJv
dXMgc29mdHdhcmUsIHdoaWNoIGNvdWxkIGhhcm0geW91ciBjb21wdXRlciBvciBzdGVhbCB5b3Vy
IHBlcnNvbmFsIG9yIGZpbmFuY2lhbCBpbmZvcm1hdGlvbiwgbGlrZSBwYXNzd29yZHMsIHBob3Rv
cywgb3IgY3JlZGl0IGNhcmRzLiIsICJNYWx3YXJlIHdhcm5pbmciKTsKLSAgICBBU1NFUlQocmVz
dWx0LmlzVW53YW50ZWRTb2Z0d2FyZSgpKTsKLSAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAi
VGhpcyB3ZWJzaXRlIG1heSB0cnkgdG8gdHJpY2sgeW91IGludG8gaW5zdGFsbGluZyBzb2Z0d2Fy
ZSB0aGF0IGhhcm1zIHlvdXIgYnJvd3NpbmcgZXhwZXJpZW5jZSwgbGlrZSBjaGFuZ2luZyB5b3Vy
IHNldHRpbmdzIHdpdGhvdXQgeW91ciBwZXJtaXNzaW9uIG9yIHNob3dpbmcgeW91IHVud2FudGVk
IGFkcy4gT25jZSBpbnN0YWxsZWQsIGl0IG1heSBiZSBkaWZmaWN1bHQgdG8gcmVtb3ZlLiIsICJV
bndhbnRlZCBzb2Z0d2FyZSB3YXJuaW5nIik7Ci19Ci0KLXN0YXRpYyBOU011dGFibGVBdHRyaWJ1
dGVkU3RyaW5nICpkZXRhaWxzVGV4dChjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYg
cmVzdWx0KQotewotICAgIGlmIChyZXN1bHQuaXNQaGlzaGluZygpKSB7Ci0gICAgICAgIE5TU3Ry
aW5nICpwaGlzaGluZ0Rlc2NyaXB0aW9uID0gV0VCX1VJX05TU1RSSU5HKEAiV2FybmluZ3MgYXJl
IHNob3duIGZvciB3ZWJzaXRlcyB0aGF0IGhhdmUgYmVlbiByZXBvcnRlZCBhcyBkZWNlcHRpdmUu
IERlY2VwdGl2ZSB3ZWJzaXRlcyB0cnkgdG8gdHJpY2sgeW91IGludG8gYmVsaWV2aW5nIHRoZXkg
YXJlIGxlZ2l0aW1hdGUgd2Vic2l0ZXMgeW91IHRydXN0LiIsICJQaGlzaGluZyB3YXJuaW5nIGRl
c2NyaXB0aW9uIik7Ci0gICAgICAgIE5TU3RyaW5nICpsZWFybk1vcmUgPSBXRUJfVUlfTlNTVFJJ
TkcoQCJMZWFybiBtb3Jl4oCmIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIp
OwotICAgICAgICBOU1N0cmluZyAqcGhpc2hpbmdBY3Rpb25zID0gV0VCX1VJX05TU1RSSU5HKEAi
SWYgeW91IGJlbGlldmUgdGhpcyB3ZWJzaXRlIGlzIHNhZmUsIHlvdSBjYW4gJXJlcG9ydC1hbi1l
cnJvciUuIE9yLCBpZiB5b3UgdW5kZXJzdGFuZCB0aGUgcmlza3MgaW52b2x2ZWQsIHlvdSBjYW4g
JWJ5cGFzcy1saW5rJS4iLCAiUGhpc2hpbmcgd2FybmluZyBkZXNjcmlwdGlvbiIpOwotICAgICAg
ICBOU1N0cmluZyAqcmVwb3J0QW5FcnJvciA9IFdFQl9VSV9OU1NUUklORyhAInJlcG9ydCBhbiBl
cnJvciIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKLSAgICAgICAgTlNT
dHJpbmcgKnZpc2l0VW5zYWZlV2Vic2l0ZSA9IFdFQl9VSV9OU1NUUklORyhAInZpc2l0IHRoaXMg
dW5zYWZlIHdlYnNpdGUiLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIik7Ci0g
ICAgICAgIAotICAgICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3Ry
aW5nID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlQFxuXG4lQCIsIHBoaXNoaW5nRGVzY3Jp
cHRpb24sIGxlYXJuTW9yZSwgcGhpc2hpbmdBY3Rpb25zXV0gYXV0b3JlbGVhc2VdOwotICAgICAg
ICBhZGRMaW5rQW5kUmVwbGFjZShhdHRyaWJ1dGVkU3RyaW5nLCBsZWFybk1vcmUsIGxlYXJuTW9y
ZSwgcmVzdWx0LmxlYXJuTW9yZVVSTCgpKTsKLSAgICAgICAgYWRkTGlua0FuZFJlcGxhY2UoYXR0
cmlidXRlZFN0cmluZywgQCIlcmVwb3J0LWFuLWVycm9yJSIsIHJlcG9ydEFuRXJyb3IsIHJlcG9y
dEFuRXJyb3JVUkwocmVzdWx0KSk7Ci0gICAgICAgIGFkZExpbmtBbmRSZXBsYWNlKGF0dHJpYnV0
ZWRTdHJpbmcsIEAiJWJ5cGFzcy1saW5rJSIsIHZpc2l0VW5zYWZlV2Vic2l0ZSwgdmlzaXRVbnNh
ZmVXZWJzaXRlU2VudGluZWwoKSk7Ci0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOwot
ICAgIH0KLSAgICAKLSAgICBhdXRvIG1hbHdhcmVPclVud2FudGVkU29mdHdhcmVEZXRhaWxzID0g
W10gKGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQsIE5TU3RyaW5nICpk
ZXNjcmlwdGlvbiwgTlNTdHJpbmcgKnN0YXR1c1N0cmluZ1RvUmVwbGFjZSwgYm9vbCBjb25maXJt
TWFsd2FyZSkgewotICAgICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICptYWx3YXJlRGVz
Y3JpcHRpb24gPSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpkZXNjcmlwdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgICAgICByZXBsYWNlKG1hbHdhcmVE
ZXNjcmlwdGlvbiwgQCIlc2FmZUJyb3dzaW5nUHJvdmlkZXIlIiwgcmVzdWx0LmxvY2FsaXplZFBy
b3ZpZGVyTmFtZSgpKTsKLSAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RhdHVz
TGluayA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
OldFQl9VSV9OU1NUUklORyhAInRoZSBzdGF0dXMgb2Yg4oCcJXNpdGUl4oCdIiwgIlBhcnQgb2Yg
bWFsd2FyZSBkZXNjcmlwdGlvbiIpXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIHJlcGxhY2Uoc3Rh
dHVzTGluaywgQCIlc2l0ZSUiLCByZXN1bHQudXJsKCkuaG9zdCgpLnRvU3RyaW5nKCkpOwotICAg
ICAgICBhZGRMaW5rQW5kUmVwbGFjZShtYWx3YXJlRGVzY3JpcHRpb24sIHN0YXR1c1N0cmluZ1Rv
UmVwbGFjZSwgc3RhdHVzTGluay5zdHJpbmcsIG1hbHdhcmVEZXRhaWxzVVJMKHJlc3VsdCkpOwot
ICAgICAgICAKLSAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqaWZZb3VVbmRlcnN0
YW5kID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
V0VCX1VJX05TU1RSSU5HKEAiSWYgeW91IHVuZGVyc3RhbmQgdGhlIHJpc2tzIGludm9sdmVkLCB5
b3UgY2FuICV2aXNpdC10aGlzLXVuc2FmZS1zaXRlLWxpbmslLiIsICJBY3Rpb24gZnJvbSBzYWZl
IGJyb3dzaW5nIHdhcm5pbmciKV0gYXV0b3JlbGVhc2VdOwotICAgICAgICBhZGRMaW5rQW5kUmVw
bGFjZShpZllvdVVuZGVyc3RhbmQsIEAiJXZpc2l0LXRoaXMtdW5zYWZlLXNpdGUtbGluayUiLCBX
RUJfVUlfTlNTVFJJTkcoQCJ2aXNpdCB0aGlzIHVuc2FmZSB3ZWJzaXRlIiwgIkFjdGlvbiBmcm9t
IHNhZmUgYnJvd3Npbmcgd2FybmluZyIpLCBjb25maXJtTWFsd2FyZSA/IGNvbmZpcm1NYWx3YXJl
U2VudGluZWwoKSA6IHZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkpOwotICAgICAgICAKLSAg
ICAgICAgW21hbHdhcmVEZXNjcmlwdGlvbiBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltbW05TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiXG5cbiJdIGF1dG9y
ZWxlYXNlXV07Ci0gICAgICAgIFttYWx3YXJlRGVzY3JpcHRpb24gYXBwZW5kQXR0cmlidXRlZFN0
cmluZzppZllvdVVuZGVyc3RhbmRdOwotICAgICAgICByZXR1cm4gbWFsd2FyZURlc2NyaXB0aW9u
OwotICAgIH07Ci0gICAgCi0gICAgaWYgKHJlc3VsdC5pc01hbHdhcmUoKSkKLSAgICAgICAgcmV0
dXJuIG1hbHdhcmVPclVud2FudGVkU29mdHdhcmVEZXRhaWxzKHJlc3VsdCwgV0VCX1VJX05TU1RS
SU5HKEAiV2FybmluZ3MgYXJlIHNob3duIGZvciB3ZWJzaXRlcyB3aGVyZSBtYWxpY2lvdXMgc29m
dHdhcmUgaGFzIGJlZW4gZGV0ZWN0ZWQuIFlvdSBjYW4gY2hlY2sgdGhlICVzdGF0dXMtbGluayUg
b24gdGhlICVzYWZlQnJvd3NpbmdQcm92aWRlciUgZGlhZ25vc3RpYyBwYWdlLiIsICJNYWx3YXJl
IHdhcm5pbmcgZGVzY3JpcHRpb24iKSwgQCIlc3RhdHVzLWxpbmslIiwgdHJ1ZSk7Ci0gICAgQVNT
RVJUKHJlc3VsdC5pc1Vud2FudGVkU29mdHdhcmUoKSk7Ci0gICAgcmV0dXJuIG1hbHdhcmVPclVu
d2FudGVkU29mdHdhcmVEZXRhaWxzKHJlc3VsdCwgV0VCX1VJX05TU1RSSU5HKEAiV2FybmluZ3Mg
YXJlIHNob3duIGZvciB3ZWJzaXRlcyB3aGVyZSBoYXJtZnVsIHNvZnR3YXJlIGhhcyBiZWVuIGRl
dGVjdGVkLiBZb3UgY2FuIGNoZWNrICV0aGUtc3RhdHVzLW9mLXNpdGUlIG9uIHRoZSAlc2FmZUJy
b3dzaW5nUHJvdmlkZXIlIGRpYWdub3N0aWMgcGFnZS4iLCAiVW53YW50ZWQgc29mdHdhcmUgd2Fy
bmluZyBkZXNjcmlwdGlvbiIpLCBAIiV0aGUtc3RhdHVzLW9mLXNpdGUlIiwgZmFsc2UpOwotfQot
CiBzdGF0aWMgQnV0dG9uVHlwZSAqbWFrZUJ1dHRvbihXYXJuaW5nSXRlbSBpdGVtLCBXS1NhZmVC
cm93c2luZ1dhcm5pbmcgKndhcm5pbmcsIFNFTCBhY3Rpb24pCiB7CiAgICAgTlNTdHJpbmcgKnRp
dGxlID0gbmlsOwpAQCAtMzI1LDE0ICsyMzMsMTQgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
QXR0cmlidXRlZFN0cmluZwogCiBAaW1wbGVtZW50YXRpb24gV0tTYWZlQnJvd3NpbmdXYXJuaW5n
CiAKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihSZWN0VHlwZSlmcmFtZSBzYWZlQnJv
d3NpbmdSZXN1bHQ6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29t
cGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNv
bnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcgor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KFJlY3RUeXBlKWZyYW1lIHNhZmVCcm93c2lu
Z1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZyYpd2FybmluZyBjb21w
bGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29u
dGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyCiB7
CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXSkpIHsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7CiAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogICAgIF9jb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpOwotICAgIF9yZXN1bHQgPSBtYWtlUmVmKHJlc3VsdCk7Cisg
ICAgX3dhcm5pbmcgPSBtYWtlUmVmKHdhcm5pbmcpOwogICAgIHNldEJhY2tncm91bmQoc2VsZiwg
Y29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpCYWNrZ3JvdW5kLCBzZWxmKSk7CiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgIFtzZWxmIGFkZENvbnRlbnRdOwpAQCAtMzQzLDggKzI1MSw4IEBAIC0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihSZWN0VHlwZSkKIC0gKHZvaWQpYWRkQ29udGVudAog
ewogICAgIGF1dG8gZXhjbGFtYXRpb25Qb2ludCA9IFtbV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlv
blBvaW50IG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1dG8gdGl0bGUgPSBtYWtlVGl0bGVMYWJl
bCh0aXRsZVRleHQoKl9yZXN1bHQpLCBzZWxmKTsKLSAgICBhdXRvIHdhcm5pbmcgPSBbW1tXS1Nh
ZmVCcm93c2luZ1RleHRWaWV3IGFsbG9jXSBpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp3YXJuaW5nVGV4dCgqX3Jlc3Vs
dCkgYXR0cmlidXRlczpAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250
T2ZTaXplOnRleHRTaXplXSB9XSBhdXRvcmVsZWFzZV0gZm9yV2FybmluZzpzZWxmXSBhdXRvcmVs
ZWFzZV07CisgICAgYXV0byB0aXRsZSA9IG1ha2VUaXRsZUxhYmVsKF93YXJuaW5nLT50aXRsZSgp
LCBzZWxmKTsKKyAgICBhdXRvIHdhcm5pbmcgPSBbW1tXS1NhZmVCcm93c2luZ1RleHRWaWV3IGFs
bG9jXSBpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzpfd2FybmluZy0+d2FybmluZygpIGF0dHJpYnV0ZXM6QHsgTlNGb250
QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0gfV0gYXV0
b3JlbGVhc2VdIGZvcldhcm5pbmc6c2VsZl0gYXV0b3JlbGVhc2VdOwogICAgIGF1dG8gc2hvd0Rl
dGFpbHMgPSBtYWtlQnV0dG9uKFdhcm5pbmdJdGVtOjpTaG93RGV0YWlsc0J1dHRvbiwgc2VsZiwg
QHNlbGVjdG9yKHNob3dEZXRhaWxzQ2xpY2tlZCkpOwogICAgIGF1dG8gZ29CYWNrID0gbWFrZUJ1
dHRvbihXYXJuaW5nSXRlbTo6R29CYWNrQnV0dG9uLCBzZWxmLCBAc2VsZWN0b3IoZ29CYWNrQ2xp
Y2tlZCkpOwogICAgIGF1dG8gYm94ID0gW1tWaWV3VHlwZSBuZXddIGF1dG9yZWxlYXNlXTsKQEAg
LTM5NSw3ICszMDMsNyBAQCAtICh2b2lkKXNob3dEZXRhaWxzQ2xpY2tlZAogICAgIEJ1dHRvblR5
cGUgKnNob3dEZXRhaWxzID0gYm94LnN1YnZpZXdzLmxhc3RPYmplY3Q7CiAgICAgW3Nob3dEZXRh
aWxzIHJlbW92ZUZyb21TdXBlcnZpZXddOwogCi0gICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyAqdGV4dCA9IGRldGFpbHNUZXh0KCpfcmVzdWx0KTsKKyAgICBOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nICp0ZXh0ID0gW1tfd2FybmluZy0+ZGV0YWlscygpIG11dGFibGVDb3B5XSBhdXRvcmVs
ZWFzZV07CiAgICAgW3RleHQgYWRkQXR0cmlidXRlczpAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltG
b250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXSB9IHJhbmdlOk5TTWFrZVJhbmdlKDAs
IHRleHQubGVuZ3RoKV07CiAgICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqZGV0YWlscyA9IFtb
W1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgYWxsb2NdIGluaXRXaXRoQXR0cmlidXRlZFN0cmluZzp0
ZXh0IGZvcldhcm5pbmc6c2VsZl0gYXV0b3JlbGVhc2VdOwogICAgIFtfdGV4dFZpZXdzIGFkZE9i
amVjdDpkZXRhaWxzXTsKQEAgLTUwMywxMCArNDExLDEwIEBAIC0gKHZvaWQpY2xpY2tlZE9uTGlu
azooTlNVUkwgKilsaW5rCiAgICAgaWYgKCFfY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChbbGluayBpc0VxdWFsOnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVs
KCldKQorICAgIGlmIChbbGluayBpc0VxdWFsOldlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6
dmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKV0pCiAgICAgICAgIHJldHVybiBfY29tcGxldGlv
bkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7CiAKLSAgICBpZiAoW2xp
bmsgaXNFcXVhbDpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCldKSB7CisgICAgaWYgKFtsaW5rIGlz
RXF1YWw6V2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjb25maXJtTWFsd2FyZVNlbnRpbmVs
KCldKSB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBhdXRvIGFsZXJ0ID0gYWRvcHROUyhb
TlNBbGVydCBuZXddKTsKICAgICAgICAgW2FsZXJ0IHNldE1lc3NhZ2VUZXh0OldFQl9VSV9OU1NU
UklORyhAIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBnbyB0byB0aGlzIHNpdGU/IiwgIk1hbHdh
cmUgY29uZmlybWF0aW9uIGRpYWxvZyB0aXRsZSIpXTsKQEAgLTU0MSw3ICs0NDksNyBAQCAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nCiAgICAgc2VsZi5kZWxlZ2F0ZSA9
IHdhcm5pbmc7CiAKICAgICBDb2xvclR5cGUgKmZvcmVncm91bmRDb2xvciA9IGNvbG9yRm9ySXRl
bShXYXJuaW5nSXRlbTo6TWVzc2FnZVRleHQsIHdhcm5pbmcpOwotICAgIE5TTXV0YWJsZUF0dHJp
YnV0ZWRTdHJpbmcgKnN0cmluZyA9IFthdHRyaWJ1dGVkU3RyaW5nIG11dGFibGVDb3B5XTsKKyAg
ICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbW2F0dHJpYnV0ZWRTdHJpbmcg
bXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZXM6QHsg
TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH0gcmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCldOwogICAgIFtzZWxmIHNldEJhY2tncm91bmRD
b2xvcjpjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkJveEJhY2tncm91bmQsIHdhcm5pbmcpXTsK
ICAgICBbc2VsZiBzZXRMaW5rVGV4dEF0dHJpYnV0ZXM6QHsgTlNGb3JlZ3JvdW5kQ29sb3JBdHRy
aWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH1dOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0JKHJldmlzaW9uIDIzODEx
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW1wb3J0ICJEYXRhRGV0ZWN0aW9u
UmVzdWx0LmgiCiAjaW1wb3J0ICJMb2FkUGFyYW1ldGVycy5oIgogI2ltcG9ydCAiUGFnZUNsaWVu
dC5oIgotI2ltcG9ydCAiU2FmZUJyb3dzaW5nUmVzdWx0LmgiCiAjaW1wb3J0ICJTYWZlQnJvd3Np
bmdTUEkuaCIKKyNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbXBvcnQgIldlYlBy
b2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29yZS9EcmFnSXRlbS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpAQCAtODQsMTIgKzg0LDEzIEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpiZWdpblNhZmVCcm93c2luZ0NoZWMKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIE5TQXJyYXk8U1NCU2VydmljZUxvb2t1cFJlc3VsdCAq
PiAqcmVzdWx0cyA9IFtyZXN1bHQgc2VydmljZUxvb2t1cFJlc3VsdHNdOwotICAgICAgICAgICAg
VmVjdG9yPFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+PiByZXN1bHRzVmVjdG9yOwotICAgICAgICAg
ICAgcmVzdWx0c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KFtyZXN1bHRzIGNvdW50XSk7
Ci0gICAgICAgICAgICBmb3IgKFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCBpbiByZXN1
bHRzKQotICAgICAgICAgICAgICAgIHJlc3VsdHNWZWN0b3IudW5jaGVja2VkQXBwZW5kKFNhZmVC
cm93c2luZ1Jlc3VsdDo6Y3JlYXRlKFVSTCh1cmwpLCByZXN1bHQpKTsKLSAgICAgICAgICAgIGxp
c3RlbmVyLT5kaWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyhXVEZNb3ZlKHJlc3VsdHNWZWN0
b3IpKTsKKyAgICAgICAgICAgIGZvciAoU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqbG9va3VwUmVz
dWx0IGluIFtyZXN1bHQgc2VydmljZUxvb2t1cFJlc3VsdHNdKSB7CisgICAgICAgICAgICAgICAg
aWYgKGxvb2t1cFJlc3VsdC5pc1BoaXNoaW5nIHx8IGxvb2t1cFJlc3VsdC5pc01hbHdhcmUgfHwg
bG9va3VwUmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSkgeworICAgICAgICAgICAgICAgICAgICBs
aXN0ZW5lci0+ZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoU2FmZUJyb3dzaW5nV2Fybmlu
Zzo6Y3JlYXRlKHVybCwgbG9va3VwUmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaXN0ZW5l
ci0+ZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoeyB9KTsKICAgICAgICAgfSk7CiAgICAg
fSkuZ2V0KCldOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjM4MTE0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdTY2FsZShDR0Zsb2F0KTsKICAgICBDR0Zsb2F0IHZp
ZXdTY2FsZSgpIGNvbnN0OwogCi0gICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25z
dCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8Q29u
dGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKTsKKyAgICB2b2lkIHNob3dTYWZl
QnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1dhcm5pbmcmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZhcmlhbnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYm
KTsKICAgICB2b2lkIGNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpOwogCiAgICAgV0tMYXlvdXRN
b2RlIGxheW91dE1vZGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlZpZXdJbXBsLm1tCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYwNiwx
MiArMTYwNiwxMiBAQCBib29sIFdlYlZpZXdJbXBsOjpyZXNpZ25GaXJzdFJlc3BvbmRlcigpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdX
YXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZhcmlhbnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJWaWV3SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5p
bmcoY29uc3QgU2FmZUJyb3dzaW5nV2FybmluZyYgd2FybmluZywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWYXJpYW50PENvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIW1fdmlldykKICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsKIAotICAgIG1fc2FmZUJyb3dz
aW5nV2FybmluZyA9IGFkb3B0TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6W21fdmlldyBib3VuZHNdIHNhZmVCcm93c2luZ1Jlc3VsdDpyZXN1bHQgY29tcGxl
dGlvbkhhbmRsZXI6W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJs
ZSB7CisgICAgbV9zYWZlQnJvd3NpbmdXYXJuaW5nID0gYWRvcHROUyhbW1dLU2FmZUJyb3dzaW5n
V2FybmluZyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbbV92aWV3IGJvdW5kc10gc2FmZUJyb3dzaW5n
V2FybmluZzp3YXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOlt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KGF1dG8mJiByZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAod2Vha1RoaXMpCiAgICAgICAg
ICAgICBbc3RkOjpleGNoYW5nZSh3ZWFrVGhpcy0+bV9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxs
cHRyKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShyZXN1bHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5oCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcg
KzExNSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclRleHRJbmRpY2F0b3IoV2ViQ29yZTo6
VGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3NhbEFuaW1hdGlvbikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJvZ3Jlc3MoZmxvYXQpIG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxv
YWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2hvd1NhZmVCcm93
c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nV2FybmluZyYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYm
KT4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBM
YXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCShyZXZpc2lvbiAyMzgxMTUpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQ3MywxMCArNDczLDEwIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmVudGVyQWNj
ZWxlcmF0ZWRDb20KIHsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJM
PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dTYWZl
QnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1dhcm5pbmcmIHdhcm5pbmcsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2Vi
Q29yZTo6VVJMPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoYXV0byB3ZWJW
aWV3ID0gbV93ZWJWaWV3LmdldCgpKQotICAgICAgICBbd2ViVmlldyBfc2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmc6cmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXTsKKyAgICAgICAgW3dlYlZpZXcgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOndhcm5pbmcg
Y29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildOwogICAgIGVsc2UK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpObyk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMu
aAkocmV2aXNpb24gMjM4MTE0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcmVzZXRTZWN1cmVJbnB1dFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBu
b3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzZWxlY3Rpb25EaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNob3dTYWZl
QnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJM
PiYmKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25z
dCBTYWZlQnJvd3NpbmdXYXJuaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdl
YktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKSBvdmVycmlkZTsK
ICAgICB2b2lkIGNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpIG92ZXJyaWRlOwogICAgIAogI2lm
IFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGxNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tCShyZXZpc2lvbiAyMzgxMTUpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4
OSwxMSArNDg5LDExIEBAIFJlZjxWYWxpZGF0aW9uQnViYmxlPiBQYWdlQ2xpZW50SW1wbDo6Y3IK
ICAgICByZXR1cm4gVmFsaWRhdGlvbkJ1YmJsZTo6Y3JlYXRlKG1fdmlldywgbWVzc2FnZSwgc2V0
dGluZ3MpOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2Fybmlu
Zyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nV2FybmluZyYgd2FybmluZywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpV
Ukw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghbV9pbXBsKQogICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZZXMpOwotICAg
IG1faW1wbC0+c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcocmVzdWx0LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CisgICAgbV9pbXBsLT5zaG93U2FmZUJyb3dzaW5nV2FybmluZyh3YXJuaW5n
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6
OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRv
d25NYWMubW0JKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKSAmJiBVU0UoQVBQ
S0lUKQogCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvSW50UmVj
dC5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU0NvbG9yU1BJLmg+CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjM4MTE0KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTA1OCw3ICsxMDU4LDcgQEAKIAkJNUM5RTU2ODMxREY3RjFC
MzAwQzlFRTMzIC8qIFdLV2Vic2l0ZVBvbGljaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTY4MTFERjdGMDU1MDBDOUVFMzMgLyogV0tXZWJz
aXRlUG9saWNpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1Q0EyNkQ4MTIxN0FCRDVCMDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0EyNkQ4
MDIxN0FCQkI2MDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmggKi87IH07CiAJCTVD
QTI2RDgzMjE3QUQxQjgwMEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0EyNkQ3RjIxN0FCQkI2
MDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tICovOyB9OwotCQk1Q0E5ODU0QTIx
MEJFQjY0MDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyog
U2FmZUJyb3dzaW5nUmVzdWx0LmggKi87IH07CisJCTVDQTk4NTRBMjEwQkVCNjQwMDU3RUI2QiAv
KiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2Fy
bmluZy5oICovOyB9OwogCQk1Q0FEREUwNTIxNTA0NkJEMDA2N0QzMDkgLyogV0tXZWJQcm9jZXNz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qzc0MzAw
RTIxNTAwNDkyMDA0QkZBMTcgLyogV0tXZWJQcm9jZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNBRkRFNDUyMTMwODQ2MzAwQjFGN0UxIC8q
IF9XS0luc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNBRkRFNDIyMTMwODQzNTAwQjFGN0UxIC8qIF9XS0luc3BlY3Rvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDQUZERTQ3MjEzMDg0
NkEwMEIxRjdFMSAvKiBfV0tJbnNwZWN0b3JJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNBRkRFNDQyMTMwODQzNjAwQjFGN0UxIC8qIF9X
S0luc3BlY3RvckludGVybmFsLmggKi87IH07CkBAIC0zNDM1LDggKzM0MzUsOCBAQAogCQk1QzlF
NTY4MTFERjdGMDU1MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlUG9saWNpZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUNBMjZEN0YyMTdBQkJCNjAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5n
V2FybmluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLU2Fm
ZUJyb3dzaW5nV2FybmluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNBMjZE
ODAyMTdBQkJCNjAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5nV2FybmluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS1NhZmVCcm93c2luZ1dhcm5pbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNBOTg1NDkyMTBCRUI1QTAwNTdFQjZCIC8qIFNhZmVCcm93
c2luZ1Jlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYWZlQnJvd3Np
bmdSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNBOTg1NEIyMTBCRUI3
MzAwNTdFQjZCIC8qIFNhZmVCcm93c2luZ1Jlc3VsdENvY29hLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2FmZUJyb3dzaW5nUmVzdWx0Q29jb2EubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQTk4NTQ5MjEwQkVCNUEwMDU3RUI2QiAvKiBTYWZl
QnJvd3NpbmdXYXJuaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhZmVC
cm93c2luZ1dhcm5pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNBOTg1NEIy
MTBCRUI3MzAwNTdFQjZCIC8qIFNhZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNhZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNBRERFMEQyMTUxQUEwMTAwNjdEMzA5
IC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbi5oOyBw
YXRoID0gQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0FGREU0MjIxMzA4NDM1MDBCMUY3RTEg
LyogX1dLSW5zcGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0lu
c3BlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0FGREU0MzIxMzA4NDM2
MDBCMUY3RTEgLyogX1dLSW5zcGVjdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gX1dLSW5zcGVjdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTI2NCw3ICs1MjY0LDcgQEAKIAkJCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCUNEQTI5QTFGMUNC
RUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJ
ODM3QTY2MDAyMEUyQUQ4NDAwQTlEQkQ4IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZUNvY29hLm1tICovLAotCQkJCTVDQTk4NTRCMjEwQkVCNzMwMDU3RUI2QiAvKiBTYWZlQnJv
d3NpbmdSZXN1bHRDb2NvYS5tbSAqLywKKwkJCQk1Q0E5ODU0QjIxMEJFQjczMDA1N0VCNkIgLyog
U2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tICovLAogCQkJCTFBMDAyRDQ3MTk2QjM0NUQwMEI5
QUQ0NCAvKiBTZXNzaW9uU3RhdGVDb2RpbmcuaCAqLywKIAkJCQkxQTAwMkQ0NjE5NkIzNDVEMDBC
OUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLm1tICovLAogCQkJCTMxNTcxMzVDMjA0MEE5QjIw
MDg0RjlDRiAvKiBTeXN0ZW1QcmV2aWV3Q29udHJvbGxlckNvY29hLm1tICovLApAQCAtNzI1Miw3
ICs3MjUyLDcgQEAKIAkJCQk1MUU2QzE2MTFGMjkzNUNEMDBGRDM0MzcgLyogUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggKi8sCiAJCQkJQkMxMTFCMDgxMTJGNUUzQzAw
MzM3QkFCIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuY3BwICovLAogCQkJCTFBMzAwNjZDMTExMEY0
RjcwMDMxOTM3QyAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmggKi8sCi0JCQkJNUNBOTg1NDkyMTBC
RUI1QTAwNTdFQjZCIC8qIFNhZmVCcm93c2luZ1Jlc3VsdC5oICovLAorCQkJCTVDQTk4NTQ5MjEw
QkVCNUEwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggKi8sCiAJCQkJNDE0REVERDYx
RjlFRERFMDAwNDdDNDBEIC8qIFNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkuY3BwICovLAogCQkJ
CTQxNERFREQ1MUY5RUREREYwMDQ3QzQwRCAvKiBTZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5Lmgg
Ki8sCiAJCQkJNTFBNEQ1QTgxNkNBQzRGRjAwMEU2MTVFIC8qIFN0YXRpc3RpY3NSZXF1ZXN0LmNw
cCAqLywKQEAgLTkxNjEsOCArOTE2MSw4IEBACiAJCQkJNTFFNkMxNjQxRjI5MzVERDAwRkQzNDM3
IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzMDA2NkUxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxMDQ4MkNFMURERDMyNEYwMEYwMDZEMCAvKiBSVENOZXR3
b3JrLmggaW4gSGVhZGVycyAqLywKLQkJCQk1Q0E5ODU0QTIxMEJFQjY0MDA1N0VCNkIgLyogU2Fm
ZUJyb3dzaW5nUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRTk3RDc0RDIwMEU5MDA0MDBC
RjY2NDMgLyogU2FmZUJyb3dzaW5nU1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0E5ODU0QTIx
MEJFQjY0MDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMyRDAyMTcxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFCNEE4RDEyOTZGMEEyMDAyMzk1MkYgLyogU2FuZGJv
eEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFNTUyQzUxNkFFMDY1RjAwNEVENjUz
IC8qIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gMjM4MTQ5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTgtMTEtMTMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBBZGQgU1BJIHRvIHNob3cgYSBzYWZlIGJyb3dzaW5nIHdhcm5pbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTYwNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW06CisgICAgICAgIChURVNU
KToKKwogMjAxOC0xMS0xMyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBbaU9TXSBEbyBub3Qgc2hvdyBzZWxlY3Rpb24gVUkgZm9yIGVkaXRhYmxlIGVs
ZW1lbnRzIHdpdGggb3BhY2l0eSBuZWFyIHplcm8KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tCShyZXZpc2lvbiAy
MzgxMTUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhZmVCcm93
c2luZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw0NCBAQCBURVNUKFNhZmVCcm93
c2luZywgTmF2aWdhdGlvbkNsZWFyc1dhcm5pCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNwaW5SdW5Mb29wKCk7CiB9CiAKK1RFU1QoU2FmZUJyb3dzaW5nLCBTaG93V2FybmluZ1NQSSkK
K3sKKyAgICBfX2Jsb2NrIGJvb2wgY29tcGxldGlvbkhhbmRsZXJDYWxsZWQgPSBmYWxzZTsKKyAg
ICBfX2Jsb2NrIEJPT0wgc2hvdWxkQ29udGludWU7CisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNV
Ukw+IHVybENsaWNrZWQ7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbV0tXZWJWaWV3IG5l
d10pOworICAgIGF1dG8gc2hvd1dhcm5pbmcgPSBeeworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
ckNhbGxlZCA9IGZhbHNlOworICAgICAgICBbd2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmdXaXRoVGl0bGU6QCJ0ZXN0IHRpdGxlIiB3YXJuaW5nOkAidGVzdCB3YXJuaW5nIiBkZXRhaWxz
OltbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJ0ZXN0IGRldGFp
bHMiXSBhdXRvcmVsZWFzZV0gY29tcGxldGlvbkhhbmRsZXI6XihCT09MIGZpcnN0UGFyYW1ldGVy
LCBOU1VSTCAqc2Vjb25kUGFyYW1ldGVyKSB7CisgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9
IGZpcnN0UGFyYW1ldGVyOworICAgICAgICAgICAgdXJsQ2xpY2tlZCA9IHNlY29uZFBhcmFtZXRl
cjsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAg
fV07CisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICAgICAgW1t3ZWJWaWV3IF9zYWZlQnJvd3NpbmdX
YXJuaW5nRm9yVGVzdGluZ10gZGlkTW92ZVRvV2luZG93XTsKKyNlbmRpZgorICAgIH07CisKKyAg
ICBzaG93V2FybmluZygpOworICAgIGNoZWNrVGl0bGVBbmRDbGljayhbd2ViVmlldyBfc2FmZUJy
b3dzaW5nV2FybmluZ0ZvclRlc3RpbmddLnN1YnZpZXdzLmZpcnN0T2JqZWN0LnN1YnZpZXdzWzNd
LCAiR28gQmFjayIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY29tcGxldGlvbkhh
bmRsZXJDYWxsZWQpOworICAgIEVYUEVDVF9GQUxTRShzaG91bGRDb250aW51ZSk7CisgICAgRVhQ
RUNUX1RSVUUoIXVybENsaWNrZWQpOworICAgIAorICAgIHNob3dXYXJuaW5nKCk7CisgICAgU0VM
IGNsaWNrZWRPbkxpbmsgPSBOU1NlbGVjdG9yRnJvbVN0cmluZyhAImNsaWNrZWRPbkxpbms6Iik7
CisgICAgW1t3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10gcGVyZm9ybVNl
bGVjdG9yOmNsaWNrZWRPbkxpbmsgd2l0aE9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0
dHA6Ly93ZWJraXQub3JnL3Rlc3RsaW5rIl1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmY29tcGxldGlvbkhhbmRsZXJDYWxsZWQpOworICAgIEVYUEVDVF9GQUxTRShzaG91bGRDb250
aW51ZSk7CisgICAgRVhQRUNUX1NUUkVRKFt1cmxDbGlja2VkIGFic29sdXRlU3RyaW5nXS5VVEY4
U3RyaW5nLCAiaHR0cDovL3dlYmtpdC5vcmcvdGVzdGxpbmsiKTsKKyAgICAKKyAgICBzaG93V2Fy
bmluZygpOworICAgIFtbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3RpbmddIHBl
cmZvcm1TZWxlY3RvcjpjbGlja2VkT25MaW5rIHdpdGhPYmplY3Q6W1dLV2ViVmlldyBfdmlzaXRV
bnNhZmVXZWJzaXRlU2VudGluZWxdXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNv
bXBsZXRpb25IYW5kbGVyQ2FsbGVkKTsKKyAgICBFWFBFQ1RfVFJVRShzaG91bGRDb250aW51ZSk7
CisgICAgRVhQRUNUX1RSVUUoIXVybENsaWNrZWQpOworfQorCiBAaW50ZXJmYWNlIE51bGxMb29r
dXBDb250ZXh0IDogTlNPYmplY3QKIEBlbmQKIEBpbXBsZW1lbnRhdGlvbiBOdWxsTG9va3VwQ29u
dGV4dAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354721</attachid>
            <date>2018-11-13 16:02:11 -0800</date>
            <delta_ts>2018-11-14 10:36:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191604-20181113160210.patch</filename>
            <type>text/plain</type>
            <size>86588</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzgxMzMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxOC0xMS0xMyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBTUEkgdG8g
c2hvdyBhIHNhZmUgYnJvd3Npbmcgd2FybmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNjA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2FmYXJpIGhhcyBhIGNhc2Ugd2hlcmUgaXQgc2hvd3Mgc2Fm
ZSBicm93c2luZyB3YXJuaW5ncyBmb3IgYSByZWFzb24gb3RoZXIgdGhhbiBiZWluZyB0b2xkIHRv
IGJ5IHRoZSBTYWZlQnJvd3NpbmcgZnJhbWV3b3JrLgorICAgICAgICBCZWNhdXNlIHNhZmUgYnJv
d3NpbmcgaXMgbW92aW5nIHRvIFdlYktpdCwgd2Ugd2lsbCBoYXZlIFNhZmFyaSBjYWxsIHRoaXMg
V2ViS2l0IFNQSSBpbiB0aGF0IGNhc2UuCisgICAgICAgIFRoZSB3YXJuaW5nIGxvb2tzIGEgbGl0
dGxlIGRpZmZlcmVudCwgc28gSSBoYWQgdG8gY2hhbmdlIHRoZSBzdHJ1Y3R1cmUgb2YgYSBTYWZl
QnJvd3NpbmdSZXN1bHQgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RyaW5nIHByb2Nlc3Npbmcs
CisgICAgICAgIGJ1dCB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgdmVyaWZp
ZWQgYnkgZXhpc3RpbmcgdW5pdCB0ZXN0cy4gIEkgYWRkZWQgYSB1bml0IHRlc3QgdG8gdmVyaWZ5
IGJlaGF2aW9yIG9mIHRoZSBuZXcgU1BJLgorCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhUaXRsZTp3YXJuaW5nOmRldGFp
bHM6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVC
cm93c2luZ1dhcm5pbmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgrW1dLV2ViVmll
dyBfY29uZmlybU1hbHdhcmVTZW50aW5lbF0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX3Zpc2l0
VW5zYWZlV2Vic2l0ZVNlbnRpbmVsXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdSZXN1
bHRDb2NvYS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dz
aW5nV2FybmluZ0NvY29hLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9TYWZlQnJvd3NpbmdSZXN1bHRDb2NvYS5tbS4KKyAgICAgICAgKFdlYktpdDo6bWFsd2Fy
ZURldGFpbHNCYXNlKToKKyAgICAgICAgKFdlYktpdDo6bGVhcm5Nb3JlVVJMKToKKyAgICAgICAg
KFdlYktpdDo6cmVwb3J0QW5FcnJvckJhc2UpOgorICAgICAgICAoV2ViS2l0Ojpsb2NhbGl6ZWRQ
cm92aWRlcik6CisgICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OnZpc2l0VW5z
YWZlV2Vic2l0ZVNlbnRpbmVsKToKKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nV2Fybmlu
Zzo6Y29uZmlybU1hbHdhcmVTZW50aW5lbCk6CisgICAgICAgIChXZWJLaXQ6OnJlcGxhY2UpOgor
ICAgICAgICAoV2ViS2l0OjphZGRMaW5rQW5kUmVwbGFjZSk6CisgICAgICAgIChXZWJLaXQ6OnJl
cG9ydEFuRXJyb3JVUkwpOgorICAgICAgICAoV2ViS2l0OjptYWx3YXJlRGV0YWlsc1VSTCk6Cisg
ICAgICAgIChXZWJLaXQ6OnNhZmVCcm93c2luZ1RpdGxlVGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OnNhZmVCcm93c2luZ1dhcm5pbmdUZXh0KToKKyAgICAgICAgKFdlYktpdDo6c2FmZUJyb3dzaW5n
RGV0YWlsc1RleHQpOgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpTYWZl
QnJvd3NpbmdXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6bGVhcm5Nb3JlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0OjpTYWZlQnJvd3NpbmdSZXN1bHQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5p
bmcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1t
OgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJv
d3NpbmdXYXJuaW5nOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1NhZmVCcm93
c2luZ1dhcm5pbmcgYWRkQ29udGVudF0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1dhcm5p
bmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2Fybmlu
ZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3IGlu
aXRXaXRoQXR0cmlidXRlZFN0cmluZzpmb3JXYXJuaW5nOl0pOgorICAgICAgICAoY29uZmlybU1h
bHdhcmVTZW50aW5lbCk6IERlbGV0ZWQuCisgICAgICAgICh2aXNpdFVuc2FmZVdlYnNpdGVTZW50
aW5lbCk6IERlbGV0ZWQuCisgICAgICAgIChyZXBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKGFk
ZExpbmtBbmRSZXBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKHJlcG9ydEFuRXJyb3JVUkwpOiBE
ZWxldGVkLgorICAgICAgICAobWFsd2FyZURldGFpbHNVUkwpOiBEZWxldGVkLgorICAgICAgICAo
dGl0bGVUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKHdhcm5pbmdUZXh0KTogRGVsZXRlZC4KKyAg
ICAgICAgKGRldGFpbHNUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdX
YXJuaW5nIGluaXRXaXRoRnJhbWU6c2FmZUJyb3dzaW5nUmVzdWx0OmNvbXBsZXRpb25IYW5kbGVy
Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2Nv
YS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpiZWdpblNhZmVCcm93c2luZ0No
ZWNrKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudDo6c2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9TYWZlQnJvd3NpbmdSZXN1bHQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvU2FmZUJyb3dzaW5nV2FybmluZy5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdSZXN1bHQuaC4KKyAgICAg
ICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6U2FmZUJyb3dzaW5nV2FybmluZzo6dGl0bGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpT
YWZlQnJvd3NpbmdXYXJuaW5nOjp3YXJuaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2Fm
ZUJyb3dzaW5nV2FybmluZzo6ZGV0YWlscyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNhZmVC
cm93c2luZ1Jlc3VsdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2FmZUJy
b3dzaW5nUmVzdWx0Ojppc1BoaXNoaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6U2FmZUJyb3dzaW5nUmVzdWx0Ojppc01hbHdhcmUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ6OmlzVW53YW50ZWRTb2Z0d2FyZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdDo6dXJsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0Ojpwcm92aWRl
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdDo6
bG9jYWxpemVkUHJvdmlkZXJOYW1lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
U2FmZUJyb3dzaW5nUmVzdWx0OjptYWx3YXJlRGV0YWlsc1VSTEJhc2UgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ6OnJlcG9ydEFuRXJyb3JVUkxC
YXNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0
OjpsZWFybk1vcmVVUkwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJv
d3NpbmdSZXN1bHQ6Om5lZWRzU2FmZUJyb3dzaW5nV2FybmluZyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHk6OmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojp1c2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRnJh
bWVQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OldlYkZyYW1lUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZVByb3h5OjpzZXRVcFBvbGljeUxpc3RlbmVy
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZVByb3h5OjpkaWRIYW5kbGVDb250ZW50
RmlsdGVyVW5ibG9ja05hdmlnYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVBy
b3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OnBhZ2UgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN3YXBU
b1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENyZWF0ZU1h
aW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ3JlYXRlU3ViZnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGlj
eUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVj
aWRlUG9saWN5Rm9yUmVzcG9uc2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVu
dEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1t
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5p
bmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLm1tOgorICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4LTExLTEzICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IGlu
dGVybmFsIGJ1aWxkcyBhZnRlciByMjM4MTE1CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NvdXJjZXND
b2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CShy
ZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTMyMiw3ICszMjIsNyBAQCBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0
YXRlLm1tCiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQogVUlQcm9jZXNz
L0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbQogVUlQcm9jZXNzL0NvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tCi1VSVByb2Nlc3MvQ29jb2Ev
U2FmZUJyb3dzaW5nUmVzdWx0Q29jb2EubW0KK1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdX
YXJuaW5nQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2NvYS9TZXNzaW9uU3RhdGVDb2RpbmcubW0KIFVJ
UHJvY2Vzcy9Db2NvYS9TeXN0ZW1QcmV2aWV3Q29udHJvbGxlckNvY29hLm1tCiBVSVByb2Nlc3Mv
Q29jb2EvVUlEZWxlZ2F0ZS5tbQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAkocmV2aXNpb24gMjM4MTE0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgY2xhc3MgTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudDsKIGNsYXNzIE5hdGl2ZVdlYk1vdXNlRXZlbnQ7CiBjbGFzcyBOYXRpdmVXZWJX
aGVlbEV2ZW50OwogY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247Ci1jbGFzcyBTYWZl
QnJvd3NpbmdSZXN1bHQ7CitjbGFzcyBTYWZlQnJvd3NpbmdXYXJuaW5nOwogY2xhc3MgVXNlckRh
dGE7CiBjbGFzcyBWaWV3U25hcHNob3Q7CiBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOwpA
QCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VD
b250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOwogCi0gICAgdmlydHVhbCB2
b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6
OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIoQ29udGlu
dWVVbnNhZmVMb2FkOjpZZXMpOyB9CisgICAgdmlydHVhbCB2b2lkIHNob3dTYWZlQnJvd3NpbmdX
YXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1dhcm5pbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZhcmlhbnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSB7IGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSB7IH0KICAgICAK
ICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
U2FmZUJyb3dzaW5nUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvU2FmZUJyb3dzaW5nUmVzdWx0LmgJKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1Jlc3VsdC5oCShub25leGlzdGVudCkKQEAgLTEsNzQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8V2ViQ29yZS9V
UkwuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1PQkpDX0NMQVNTIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQ7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBTYWZlQnJvd3NpbmdSZXN1bHQgOiBwdWJsaWMgUmVmQ291
bnRlZDxTYWZlQnJvd3NpbmdSZXN1bHQ+IHsKLXB1YmxpYzoKLSNpZiBIQVZFKFNBRkVfQlJPV1NJ
TkcpCi0gICAgc3RhdGljIFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+IGNyZWF0ZShXZWJDb3JlOjpV
UkwmJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNhZmVCcm93c2luZ1Jlc3VsdChXVEZNb3ZlKHVybCksIHJl
c3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYm9vbCBpc1BoaXNoaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1BoaXNoaW5nOyB9Ci0gICAgYm9vbCBpc01hbHdhcmUoKSBjb25zdCB7IHJldHVy
biBtX2lzTWFsd2FyZTsgfQotICAgIGJvb2wgaXNVbndhbnRlZFNvZnR3YXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1Vud2FudGVkU29mdHdhcmU7IH0KLQotICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYg
dXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KLSAgICBjb25zdCBTdHJpbmcmIHByb3ZpZGVy
KCkgY29uc3QgeyByZXR1cm4gbV9wcm92aWRlcjsgfQotICAgIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkUHJvdmlkZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGl6ZWRQcm92aWRlck5hbWU7
IH0KLSAgICBjb25zdCBTdHJpbmcmIG1hbHdhcmVEZXRhaWxzVVJMQmFzZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFsd2FyZURldGFpbHNVUkxCYXNlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiByZXBvcnRB
bkVycm9yVVJMQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0QW5FcnJvclVSTEJhc2U7IH0K
LSAgICBjb25zdCBXZWJDb3JlOjpVUkwmIGxlYXJuTW9yZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVhcm5Nb3JlVVJMOyB9Ci0KLSAgICBib29sIG5lZWRzU2FmZUJyb3dzaW5nV2FybmluZygpIGNv
bnN0IHsgcmV0dXJuIG1faXNQaGlzaGluZyB8fCBtX2lzTWFsd2FyZSB8fCBtX2lzVW53YW50ZWRT
b2Z0d2FyZTsgfQotCi1wcml2YXRlOgotI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKLSAgICBTYWZl
QnJvd3NpbmdSZXN1bHQoV2ViQ29yZTo6VVJMJiYsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKik7
Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpVUkwgbV91cmw7Ci0gICAgYm9vbCBtX2lzUGhpc2hpbmcg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc01hbHdhcmUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9p
c1Vud2FudGVkU29mdHdhcmUgeyBmYWxzZSB9OwotCi0gICAgU3RyaW5nIG1fcHJvdmlkZXI7Ci0g
ICAgU3RyaW5nIG1fbG9jYWxpemVkUHJvdmlkZXJOYW1lOwotICAgIFN0cmluZyBtX21hbHdhcmVE
ZXRhaWxzVVJMQmFzZTsKLSAgICBTdHJpbmcgbV9yZXBvcnRBbkVycm9yVVJMQmFzZTsKLSAgICBX
ZWJDb3JlOjpVUkwgbV9sZWFybk1vcmVVUkw7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2lu
Z1Jlc3VsdC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMj
Ci1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvU2FmZUJyb3dzaW5nV2FybmluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1dhcm5pbmcuaAkocmV2aXNpb24gMjM4MTE0
KQkoZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdSZXN1bHQuaDoyMzgx
MTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdXYXJuaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NMQVNTIFNTQlNlcnZpY2VM
b29rdXBSZXN1bHQ7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTYWZlQnJvd3NpbmdS
ZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYWZlQnJvd3NpbmdSZXN1bHQ+IHsKK3B1YmxpYzoK
KyNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCisgICAgc3RhdGljIFJlZjxTYWZlQnJvd3NpbmdSZXN1
bHQ+IGNyZWF0ZShXZWJDb3JlOjpVUkwmJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJl
c3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNhZmVCcm93c2luZ1Jl
c3VsdChXVEZNb3ZlKHVybCksIHJlc3VsdCkpOworICAgIH0KKyNlbmRpZgorCisgICAgYm9vbCBp
c1BoaXNoaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1BoaXNoaW5nOyB9CisgICAgYm9vbCBpc01h
bHdhcmUoKSBjb25zdCB7IHJldHVybiBtX2lzTWFsd2FyZTsgfQorICAgIGJvb2wgaXNVbndhbnRl
ZFNvZnR3YXJlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Vud2FudGVkU29mdHdhcmU7IH0KKworICAg
IGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBj
b25zdCBTdHJpbmcmIHByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9wcm92aWRlcjsgfQorICAg
IGNvbnN0IFN0cmluZyYgbG9jYWxpemVkUHJvdmlkZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhbGl6ZWRQcm92aWRlck5hbWU7IH0KKyAgICBjb25zdCBTdHJpbmcmIG1hbHdhcmVEZXRhaWxz
VVJMQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFsd2FyZURldGFpbHNVUkxCYXNlOyB9CisgICAg
Y29uc3QgU3RyaW5nJiByZXBvcnRBbkVycm9yVVJMQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
b3J0QW5FcnJvclVSTEJhc2U7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpVUkwmIGxlYXJuTW9yZVVS
TCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVhcm5Nb3JlVVJMOyB9CisKKyAgICBib29sIG5lZWRzU2Fm
ZUJyb3dzaW5nV2FybmluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNQaGlzaGluZyB8fCBtX2lzTWFs
d2FyZSB8fCBtX2lzVW53YW50ZWRTb2Z0d2FyZTsgfQorCitwcml2YXRlOgorI2lmIEhBVkUoU0FG
RV9CUk9XU0lORykKKyAgICBTYWZlQnJvd3NpbmdSZXN1bHQoV2ViQ29yZTo6VVJMJiYsIFNTQlNl
cnZpY2VMb29rdXBSZXN1bHQgKik7CisjZW5kaWYKKyAgICBXZWJDb3JlOjpVUkwgbV91cmw7Cisg
ICAgYm9vbCBtX2lzUGhpc2hpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc01hbHdhcmUgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc1Vud2FudGVkU29mdHdhcmUgeyBmYWxzZSB9OworCisgICAg
U3RyaW5nIG1fcHJvdmlkZXI7CisgICAgU3RyaW5nIG1fbG9jYWxpemVkUHJvdmlkZXJOYW1lOwor
ICAgIFN0cmluZyBtX21hbHdhcmVEZXRhaWxzVVJMQmFzZTsKKyAgICBTdHJpbmcgbV9yZXBvcnRB
bkVycm9yVVJMQmFzZTsKKyAgICBXZWJDb3JlOjpVUkwgbV9sZWFybk1vcmVVUkw7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1NhZmVCcm93c2luZ1dhcm5pbmcuaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdXYXJuaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2FmZUJyb3dzaW5nV2Fybmlu
Zy5oCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJv
d3NpbmdXYXJuaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQ4ICsyNyw1MiBAQAogCiAjaW5j
bHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAor
T0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CitPQkpDX0NMQVNTIE5TVVJMOwogT0JKQ19D
TEFTUyBTU0JTZXJ2aWNlTG9va3VwUmVzdWx0OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xh
c3MgU2FmZUJyb3dzaW5nUmVzdWx0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FmZUJyb3dzaW5nUmVz
dWx0PiB7CitjbGFzcyBTYWZlQnJvd3NpbmdXYXJuaW5nIDogcHVibGljIFJlZkNvdW50ZWQ8U2Fm
ZUJyb3dzaW5nV2FybmluZz4gewogcHVibGljOgogI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKLSAg
ICBzdGF0aWMgUmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4gY3JlYXRlKFdlYkNvcmU6OlVSTCYmIHVy
bCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQorICAgIHN0YXRpYyBSZWY8U2FmZUJy
b3dzaW5nV2FybmluZz4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBTU0JTZXJ2aWNl
TG9va3VwUmVzdWx0ICpyZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTYWZlQnJvd3NpbmdSZXN1bHQoV1RGTW92ZSh1cmwpLCByZXN1bHQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2FmZUJyb3dzaW5nV2FybmluZyh1cmwsIHJlc3VsdCkpOworICAg
IH0KKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHN0YXRpYyBSZWY8U2FmZUJyb3dz
aW5nV2FybmluZz4gY3JlYXRlKFN0cmluZyYmIHRpdGxlLCBTdHJpbmcmJiB3YXJuaW5nLCBSZXRh
aW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiYmIGRldGFpbHMpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTYWZlQnJvd3NpbmdXYXJuaW5nKFdURk1vdmUodGl0bGUpLCBXVEZN
b3ZlKHdhcm5pbmcpLCBXVEZNb3ZlKGRldGFpbHMpKSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBi
b29sIGlzUGhpc2hpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzUGhpc2hpbmc7IH0KLSAgICBib29s
IGlzTWFsd2FyZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNYWx3YXJlOyB9Ci0gICAgYm9vbCBpc1Vu
d2FudGVkU29mdHdhcmUoKSBjb25zdCB7IHJldHVybiBtX2lzVW53YW50ZWRTb2Z0d2FyZTsgfQot
Ci0gICAgY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQot
ICAgIGNvbnN0IFN0cmluZyYgcHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Byb3ZpZGVyOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRQcm92aWRlck5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2xvY2FsaXplZFByb3ZpZGVyTmFtZTsgfQotICAgIGNvbnN0IFN0cmluZyYgbWFsd2FyZURl
dGFpbHNVUkxCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9tYWx3YXJlRGV0YWlsc1VSTEJhc2U7IH0K
LSAgICBjb25zdCBTdHJpbmcmIHJlcG9ydEFuRXJyb3JVUkxCYXNlKCkgY29uc3QgeyByZXR1cm4g
bV9yZXBvcnRBbkVycm9yVVJMQmFzZTsgfQotICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgbGVhcm5N
b3JlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9sZWFybk1vcmVVUkw7IH0KLQotICAgIGJvb2wgbmVl
ZHNTYWZlQnJvd3NpbmdXYXJuaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1BoaXNoaW5nIHx8IG1f
aXNNYWx3YXJlIHx8IG1faXNVbndhbnRlZFNvZnR3YXJlOyB9CisgICAgY29uc3QgU3RyaW5nJiB0
aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGU7IH0KKyAgICBjb25zdCBTdHJpbmcmIHdhcm5p
bmcoKSBjb25zdCB7IHJldHVybiBtX3dhcm5pbmc7IH0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBkZXRhaWxzKCkgY29uc3QgeyByZXR1cm4g
bV9kZXRhaWxzOyB9CisjZW5kaWYKIAorICAgIHN0YXRpYyBOU1VSTCAqdmlzaXRVbnNhZmVXZWJz
aXRlU2VudGluZWwoKTsKKyAgICBzdGF0aWMgTlNVUkwgKmNvbmZpcm1NYWx3YXJlU2VudGluZWwo
KTsKKyAgICAKIHByaXZhdGU6CiAjaWYgSEFWRShTQUZFX0JST1dTSU5HKQotICAgIFNhZmVCcm93
c2luZ1Jlc3VsdChXZWJDb3JlOjpVUkwmJiwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqKTsKKyAg
ICBTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFNTQlNlcnZpY2VMb29r
dXBSZXN1bHQgKik7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBTYWZlQnJvd3Np
bmdXYXJuaW5nKFN0cmluZyYmLCBTdHJpbmcmJiwgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmlu
Zz4mJik7CisjZW5kaWYKKworICAgIFN0cmluZyBtX3RpdGxlOworICAgIFN0cmluZyBtX3dhcm5p
bmc7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmlu
Zz4gbV9kZXRhaWxzOwogI2VuZGlmCi0gICAgV2ViQ29yZTo6VVJMIG1fdXJsOwotICAgIGJvb2wg
bV9pc1BoaXNoaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNNYWx3YXJlIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faXNVbndhbnRlZFNvZnR3YXJlIHsgZmFsc2UgfTsKLQotICAgIFN0cmluZyBt
X3Byb3ZpZGVyOwotICAgIFN0cmluZyBtX2xvY2FsaXplZFByb3ZpZGVyTmFtZTsKLSAgICBTdHJp
bmcgbV9tYWx3YXJlRGV0YWlsc1VSTEJhc2U7Ci0gICAgU3RyaW5nIG1fcmVwb3J0QW5FcnJvclVS
TEJhc2U7Ci0gICAgV2ViQ29yZTo6VVJMIG1fbGVhcm5Nb3JlVVJMOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAJKHJldmlzaW9uIDIzODExNCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgi
CiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIkFQSVdlYnNpdGVQ
b2xpY2llcy5oIgotI2luY2x1ZGUgIlNhZmVCcm93c2luZ1Jlc3VsdC5oIgorI2luY2x1ZGUgIlNh
ZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCiAjaW5jbHVk
ZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVQb2xpY2llc0RhdGEuaCIK
QEAgLTQ1LDIxICs0NSwyMSBAQCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OldlYkZyYW1l
UG9sCiAKIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6fldlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eSgpID0gZGVmYXVsdDsKIAotdm9pZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6
OmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKFZlY3RvcjxSZWY8U2FmZUJyb3dzaW5nUmVz
dWx0Pj4mJiBzYWZlQnJvd3NpbmdSZXN1bHRzKQordm9pZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHk6OmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKFJlZlB0cjxTYWZlQnJvd3NpbmdX
YXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcpCiB7Ci0gICAgQVNTRVJUKCFtX3NhZmVCcm93
c2luZ1Jlc3VsdHMpOworICAgIEFTU0VSVCghbV9zYWZlQnJvd3NpbmdXYXJuaW5nKTsKICAgICBp
ZiAobV9wb2xpY3lSZXN1bHQpIHsKICAgICAgICAgaWYgKG1fcmVwbHkpCi0gICAgICAgICAgICBt
X3JlcGx5KFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6VXNlLCBtX3BvbGljeVJlc3VsdC0+Zmlyc3Qu
Z2V0KCksIG1fcG9saWN5UmVzdWx0LT5zZWNvbmQsIFdURk1vdmUoc2FmZUJyb3dzaW5nUmVzdWx0
cykpOworICAgICAgICAgICAgbV9yZXBseShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZSwgbV9w
b2xpY3lSZXN1bHQtPmZpcnN0LmdldCgpLCBtX3BvbGljeVJlc3VsdC0+c2Vjb25kLCBXVEZNb3Zl
KHNhZmVCcm93c2luZ1dhcm5pbmcpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9zYWZlQnJvd3Np
bmdSZXN1bHRzID0gV1RGTW92ZShzYWZlQnJvd3NpbmdSZXN1bHRzKTsKKyAgICAgICAgbV9zYWZl
QnJvd3NpbmdXYXJuaW5nID0gV1RGTW92ZShzYWZlQnJvd3NpbmdXYXJuaW5nKTsKIH0KIAogdm9p
ZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OnVzZShBUEk6OldlYnNpdGVQb2xpY2llcyog
cG9saWNpZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCkKIHsKLSAgICBpZiAobV9zYWZlQnJvd3NpbmdSZXN1bHRzKSB7CisgICAgaWYg
KG1fc2FmZUJyb3dzaW5nV2FybmluZykgewogICAgICAgICBpZiAobV9yZXBseSkKLSAgICAgICAg
ICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2UsIHBvbGljaWVzLCBwcm9jZXNz
U3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKCptX3NhZmVCcm93c2luZ1Jlc3VsdHMpKTsK
KyAgICAgICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2UsIHBvbGljaWVz
LCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKCptX3NhZmVCcm93c2luZ1dh
cm5pbmcpKTsKICAgICB9IGVsc2UgaWYgKCFtX3BvbGljeVJlc3VsdCkKICAgICAgICAgbV9wb2xp
Y3lSZXN1bHQgPSB7eyBwb2xpY2llcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCB9fTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9s
aWN5TGlzdGVuZXJQcm94eS5oCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBlbnVtIGNsYXNzIFBvbGljeUFjdGlvbiA6IHVpbnQ4X3Q7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1jbGFzcyBTYWZlQnJvd3NpbmdSZXN1bHQ7CitjbGFzcyBTYWZlQnJv
d3NpbmdXYXJuaW5nOwogCiBlbnVtIGNsYXNzIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQg
eyBObywgWWVzIH07CiBlbnVtIGNsYXNzIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCB7
IE5vLCBZZXMgfTsKQEAgLTQ3LDcgKzQ3LDcgQEAgZW51bSBjbGFzcyBTaG91bGRFeHBlY3RTYWZl
QnJvd3NpbmdSZXN1bAogY2xhc3MgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5IDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6RnJhbWVQb2xpY3lMaXN0ZW5lcj4g
ewogcHVibGljOgogCi0gICAgdXNpbmcgUmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYpPjsKKyAg
ICB1c2luZyBSZXBseSA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0
aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQs
IFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmKT47CiAgICAgc3RhdGljIFJlZjxXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHk+IGNyZWF0ZShSZXBseSYmIHJlcGx5LCBTaG91bGRFeHBlY3RT
YWZlQnJvd3NpbmdSZXN1bHQgZXhwZWN0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFdURk1vdmUocmVwbHkpLCBleHBlY3Qp
KTsKQEAgLTU4LDEzICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkb3dubG9hZCgpOwogICAg
IHZvaWQgaWdub3JlKCk7CiAgICAgCi0gICAgdm9pZCBkaWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVz
dWx0cyhWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYpOworICAgIHZvaWQgZGlkUmVj
ZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYpOwog
CiBwcml2YXRlOgogICAgIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eShSZXBseSYmLCBTaG91
bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQpOwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBh
aXI8UmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNs
aWVudD4+IG1fcG9saWN5UmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFJlZjxTYWZl
QnJvd3NpbmdSZXN1bHQ+Pj4gbV9zYWZlQnJvd3NpbmdSZXN1bHRzOworICAgIHN0ZDo6b3B0aW9u
YWw8UmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+PiBtX3NhZmVCcm93c2luZ1dhcm5pbmc7CiAg
ICAgUmVwbHkgbV9yZXBseTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkZyYW1lUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkZyYW1lUHJveHkuY3BwCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJGcmFtZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotV2ViRnJhbWVQ
cm94eTo6V2ViRnJhbWVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UsIHVpbnQ2NF90IGZyYW1lSUQp
Ci0gICAgOiBtX3BhZ2UocGFnZSkKK1dlYkZyYW1lUHJveHk6OldlYkZyYW1lUHJveHkoV2ViUGFn
ZVByb3h5JiBwYWdlLCB1aW50NjRfdCBmcmFtZUlEKQorICAgIDogbV9wYWdlKG1ha2VXZWFrUHRy
KHBhZ2UpKQogICAgICwgbV9pc0ZyYW1lU2V0KGZhbHNlKQogICAgICwgbV9mcmFtZUlEKGZyYW1l
SUQpCiB7CkBAIC0xNzcsMTIgKzE3NywxMiBAQCB2b2lkIFdlYkZyYW1lUHJveHk6OmRpZENoYW5n
ZVRpdGxlKGNvbnN0CiAgICAgbV90aXRsZSA9IHRpdGxlOwogfQogCi1XZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHkmIFdlYkZyYW1lUHJveHk6OnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9s
aWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93
c2luZ1Jlc3VsdD4+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBTaG91bGRFeHBlY3RTYWZlQnJv
d3NpbmdSZXN1bHQgZXhwZWN0KQorV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBXZWJGcmFt
ZVByb3h5OjpzZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChX
ZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyLCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhwZWN0KQogewog
ICAgIGlmIChtX2FjdGl2ZUxpc3RlbmVyKQogICAgICAgICBtX2FjdGl2ZUxpc3RlbmVyLT5pZ25v
cmUoKTsKLSAgICBtX2FjdGl2ZUxpc3RlbmVyID0gV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5
OjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFdlYkNvcmU6OlBvbGljeUFj
dGlvbiBhY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVm
PFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYgc2FmZUJyb3dzaW5nUmVzdWx0cykgbXV0YWJsZSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFjdGlvbiwgcG9saWNpZXMsIHByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQsIFdURk1vdmUoc2FmZUJyb3dzaW5nUmVzdWx0cykpOworICAgIG1fYWN0
aXZlTGlzdGVuZXIgPSBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OmNyZWF0ZShbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoV2ViQ29yZTo6UG9saWN5QWN0aW9uIGFjdGlvbiwgQVBJ
OjpXZWJzaXRlUG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50
IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5n
PiYmIHNhZmVCcm93c2luZ1dhcm5pbmcpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihhY3Rpb24sIHBvbGljaWVzLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZN
b3ZlKHNhZmVCcm93c2luZ1dhcm5pbmcpKTsKICAgICAgICAgbV9hY3RpdmVMaXN0ZW5lciA9IG51
bGxwdHI7CiAgICAgfSwgZXhwZWN0KTsKICAgICByZXR1cm4gKm1fYWN0aXZlTGlzdGVuZXI7CkBA
IC0yMzEsNyArMjMxLDcgQEAgYm9vbCBXZWJGcmFtZVByb3h5OjpkaWRIYW5kbGVDb250ZW50Rmls
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVmUHRyPFdlYlBhZ2VQcm94
eT4gcGFnZSB7IG1fcGFnZSB9OworICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IHBhZ2UgeyBtX3Bh
Z2UuZ2V0KCkgfTsKICAgICBBU1NFUlQocGFnZSk7CiAgICAgbV9jb250ZW50RmlsdGVyVW5ibG9j
a0hhbmRsZXIucmVxdWVzdFVuYmxvY2tBc3luYyhbcGFnZV0oYm9vbCB1bmJsb2NrZWQpIHsKICAg
ICAgICAgaWYgKHVuYmxvY2tlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZy
YW1lUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFt
ZVByb3h5LmgJKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkZyYW1lUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBEZWNv
ZGVyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsK
K2NsYXNzIFNhZmVCcm93c2luZ1dhcm5pbmc7CiBjbGFzcyBXZWJDZXJ0aWZpY2F0ZUluZm87CiBj
bGFzcyBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBA
IC02MSw3ICs2MSw3IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6RGF0YSo+IERhdGEK
IAogY2xhc3MgV2ViRnJhbWVQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmpl
Y3Q6OlR5cGU6OkZyYW1lPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJGcmFtZVByb3h5
PiBjcmVhdGUoV2ViUGFnZVByb3h5KiBwYWdlLCB1aW50NjRfdCBmcmFtZUlEKQorICAgIHN0YXRp
YyBSZWY8V2ViRnJhbWVQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgdWludDY0X3Qg
ZnJhbWVJRCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkZyYW1lUHJv
eHkocGFnZSwgZnJhbWVJRCkpOwogICAgIH0KQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgfldlYkZyYW1lUHJveHkoKTsKIAogICAgIHVpbnQ2NF90IGZyYW1lSUQoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lSUQ7IH0KLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7
IHJldHVybiBtX3BhZ2U7IH0KKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2UuZ2V0KCk7IH0KIAogICAgIHZvaWQgd2ViUHJvY2Vzc1dpbGxTaHV0RG93bigpOwog
CkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkU2FtZURvY3VtZW50TmF2
aWdhdGlvbihjb25zdCBXZWJDb3JlOjpVUkwmKTsgLy8gZWcuIGFuY2hvciBuYXZpZ2F0aW9uLCBz
ZXNzaW9uIHN0YXRlIGNoYW5nZS4KICAgICB2b2lkIGRpZENoYW5nZVRpdGxlKGNvbnN0IFN0cmlu
ZyYpOwogCi0gICAgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBzZXRVcFBvbGljeUxpc3Rl
bmVyUHJveHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQ
STo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgVmVjdG9y
PFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+PiYmKT4mJiwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5n
UmVzdWx0KTsKKyAgICBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkmIHNldFVwUG9saWN5TGlz
dGVuZXJQcm94eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwg
QVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQ
dHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJik+JiYsIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jl
c3VsdCk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9GSUxURVJJTkcpCiAgICAgdm9pZCBjb250ZW50
RmlsdGVyRGlkQmxvY2tMb2FkKFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlciBj
b250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIpIHsgbV9jb250ZW50RmlsdGVyVW5ibG9ja0hhbmRs
ZXIgPSBXVEZNb3ZlKGNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcik7IH0KQEAgLTEyOSw5ICsx
MjksOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBXZWJGcmFtZVByb3h5KFdl
YlBhZ2VQcm94eSogcGFnZSwgdWludDY0X3QgZnJhbWVJRCk7CisgICAgV2ViRnJhbWVQcm94eShX
ZWJQYWdlUHJveHkmLCB1aW50NjRfdCBmcmFtZUlEKTsKIAotICAgIFdlYlBhZ2VQcm94eSogbV9w
YWdlOworICAgIFdlYWtQdHI8V2ViUGFnZVByb3h5PiBtX3BhZ2U7CiAKICAgICBGcmFtZUxvYWRT
dGF0ZSBtX2ZyYW1lTG9hZFN0YXRlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAKICNp
bmNsdWRlICJQbHVnaW5JbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiUHJpbnRJbmZvLmgiCi0jaW5jbHVkZSAiU2FmZUJyb3dzaW5nUmVz
dWx0LmgiCisjaW5jbHVkZSAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgogI2luY2x1ZGUgIlNoYXJl
U2hlZXRDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyRGF0YVJlZmVyZW5jZS5o
IgogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCkBAIC03NjEsNyArNzYxLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnN3YXBUb1dlYlByb2Nlc3MoUmVmPAogICAgIGlmIChkZXN0aW5hdGlvblN1c3Bl
bmRlZFBhZ2UpIHsKICAgICAgICAgQVNTRVJUKCFtX21haW5GcmFtZSk7CiAgICAgICAgIEFTU0VS
VCgmZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlLT5wcm9jZXNzKCkgPT0gbV9wcm9jZXNzLnB0cigp
KTsKLSAgICAgICAgbV9tYWluRnJhbWUgPSBXZWJGcmFtZVByb3h5OjpjcmVhdGUodGhpcywgZGVz
dGluYXRpb25TdXNwZW5kZWRQYWdlLT5tYWluRnJhbWVJRCgpKTsKKyAgICAgICAgbV9tYWluRnJh
bWUgPSBXZWJGcmFtZVByb3h5OjpjcmVhdGUoKnRoaXMsIGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFn
ZS0+bWFpbkZyYW1lSUQoKSk7CiAgICAgICAgIG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKGRlc3Rp
bmF0aW9uU3VzcGVuZGVkUGFnZS0+bWFpbkZyYW1lSUQoKSwgKm1fbWFpbkZyYW1lKTsKICAgICB9
CiAKQEAgLTM0NjQsNyArMzQ2NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVNYWlu
RnJhbWUodWkKICAgICBNRVNTQUdFX0NIRUNLKCFtX21haW5GcmFtZSk7CiAgICAgTUVTU0FHRV9D
SEVDSyhtX3Byb2Nlc3MtPmNhbkNyZWF0ZUZyYW1lKGZyYW1lSUQpKTsKIAotICAgIG1fbWFpbkZy
YW1lID0gV2ViRnJhbWVQcm94eTo6Y3JlYXRlKHRoaXMsIGZyYW1lSUQpOworICAgIG1fbWFpbkZy
YW1lID0gV2ViRnJhbWVQcm94eTo6Y3JlYXRlKCp0aGlzLCBmcmFtZUlEKTsKIAogICAgIC8vIEFk
ZCB0aGUgZnJhbWUgdG8gdGhlIHByb2Nlc3Mgd2lkZSBtYXAuCiAgICAgbV9wcm9jZXNzLT5mcmFt
ZUNyZWF0ZWQoZnJhbWVJRCwgKm1fbWFpbkZyYW1lKTsKQEAgLTM0ODksNyArMzQ4OSw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVTdWJmcmFtZSh1aW4KIAogICAgIE1FU1NBR0VfQ0hF
Q0sobV9wcm9jZXNzLT5jYW5DcmVhdGVGcmFtZShmcmFtZUlEKSk7CiAgICAgCi0gICAgUmVmUHRy
PFdlYkZyYW1lUHJveHk+IHN1YkZyYW1lID0gV2ViRnJhbWVQcm94eTo6Y3JlYXRlKHRoaXMsIGZy
YW1lSUQpOworICAgIFJlZlB0cjxXZWJGcmFtZVByb3h5PiBzdWJGcmFtZSA9IFdlYkZyYW1lUHJv
eHk6OmNyZWF0ZSgqdGhpcywgZnJhbWVJRCk7CiAKICAgICAvLyBBZGQgdGhlIGZyYW1lIHRvIHRo
ZSBwcm9jZXNzIHdpZGUgbWFwLgogICAgIG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKGZyYW1lSUQs
ICpzdWJGcmFtZSk7CkBAIC00MTU2LDcgKzQxNTYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhCiAgICAgaWYgKCFtX3ByZWZlcmVuY2VzLT5zYWZlQnJvd3NpbmdF
bmFibGVkKCkpCiAgICAgICAgIHNob3VsZFNraXBTYWZlQnJvd3NpbmdDaGVjayA9IFNob3VsZFNr
aXBTYWZlQnJvd3NpbmdDaGVjazo6WWVzOwogCi0gICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYo
ZnJhbWUuc2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGZyYW1lID0gbWFrZVJlZihmcmFtZSksIHNlbmRlciA9IFdURk1vdmUoc2Vu
ZGVyKSwgbmF2aWdhdGlvbl0gKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQ
STo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jl
c3VsdD4+JiYgc2FmZUJyb3dzaW5nUmVzdWx0cykgbXV0YWJsZSB7CisgICAgYXV0byBsaXN0ZW5l
ciA9IG1ha2VSZWYoZnJhbWUuc2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lID0gbWFrZVJlZihmcmFtZSksIHNlbmRlciA9
IFdURk1vdmUoc2VuZGVyKSwgbmF2aWdhdGlvbl0gKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xp
Y3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJy
b3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nKSBtdXRhYmxlIHsKICAgICAgICAg
CiAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IHByb3RlY3RlZFRoaXMuY29weVJlZigpLCBmcmFtZSA9IGZyYW1lLmNvcHlSZWYoKSwgc2VuZGVy
ID0gV1RGTW92ZShzZW5kZXIpLCBuYXZpZ2F0aW9uID0gV1RGTW92ZShuYXZpZ2F0aW9uKSwgcHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgcG9saWNpZXMgPSBtYWtlUmVmUHRyKHBvbGljaWVz
KV0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pIG11dGFibGUgewogICAgICAgICAgICAgcmVj
ZWl2ZWROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLmdl
dCgpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBmcmFtZSwgcG9saWNpZXMuZ2V0KCks
IFdURk1vdmUoc2VuZGVyKSk7CkBAIC00MTY3LDEwICs0MTY3LDggQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYQogCiAgICAgICAgIG1fcGFnZUNsaWVudC0+Y2xlYXJT
YWZlQnJvd3NpbmdXYXJuaW5nKCk7CiAKLSAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiBzYWZl
QnJvd3NpbmdSZXN1bHRzKSB7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC0+bmVlZHNTYWZlQnJv
d3NpbmdXYXJuaW5nKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBt
X3BhZ2VDbGllbnQtPnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKHJlc3VsdCwgW3Byb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBwb2xpY3lBY3Rpb25dIChhdXRvJiYgcmVzdWx0KSBtdXRhYmxl
IHsKKyAgICAgICAgaWYgKHNhZmVCcm93c2luZ1dhcm5pbmcpIHsKKyAgICAgICAgICAgIG1fcGFn
ZUNsaWVudC0+c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcoKnNhZmVCcm93c2luZ1dhcm5pbmcsIFtw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcG9saWN5QWN0aW9uXSAoYXV0byYmIHJlc3Vs
dCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoT24ocmVzdWx0LCBbJl0gKGNvbnN0
IFVSTCYgdXJsKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBvbGlj
eUFjdGlvbjo6SWdub3JlKTsKICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bG9h
ZFJlcXVlc3QoeyB1cmwgfSk7CkBAIC00MjUwLDEwICs0MjQ4LDEwIEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW4KICAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKICAg
ICBNRVNTQUdFX0NIRUNLX1VSTChyZXF1ZXN0LnVybCgpKTsKIAotICAgIGF1dG8gbGlzdGVuZXIg
PSBtYWtlUmVmKGZyYW1lLT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbGlzdGVuZXJJRCwgZnJhbWVJRF0gKFdlYkNvcmU6OlBv
bGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3
YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8
UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYgc2FmZUJyb3dzaW5nUmVzdWx0cykgbXV0YWJsZSB7
CisgICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUtPnNldFVwUG9saWN5TGlzdGVuZXJQ
cm94eShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsaXN0ZW5lcklELCBm
cmFtZUlEXSAoV2ViQ29yZTo6UG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRl
UG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dh
cm5pbmcpIG11dGFibGUgewogICAgICAgICAvLyBGSVhNRTogQXNzZXJ0IHRoZSBBUEk6OldlYnNp
dGVQb2xpY2llcyogaXMgbnVsbHB0ciBoZXJlIG9uY2UgY2xpZW50cyBvZiBXS0ZyYW1lUG9saWN5
TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMgZ28gYXdheS4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50OjpObyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nUmVzdWx0cywgc2Fm
ZUJyb3dzaW5nUmVzdWx0cy5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVC
cm93c2luZ1dhcm5pbmcsICFzYWZlQnJvd3NpbmdXYXJuaW5nKTsKICAgICAgICAgcmVjZWl2ZWRQ
b2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwgUG9saWN5
RGVjaXNpb25TZW5kZXI6OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyksIGZyYW1lSUQsIGxpc3RlbmVySURdIChhdXRvLi4uIGFyZ3MpIHsKICAgICAg
ICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2ZVBvbGlj
eURlY2lzaW9uKGZyYW1lSUQsIGxpc3RlbmVySUQsIGFyZ3MuLi4pLCBtX3BhZ2VJRCk7CiAgICAg
ICAgIH0pKTsKQEAgLTQyODgsMTAgKzQyODYsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lk
ZVBvbGljeUZvclJlc3BvbgogICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKHJlc3BvbnNlLnVybCgpKTsK
IAogICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSUQg
PyBtX25hdmlnYXRpb25TdGF0ZS0+bmF2aWdhdGlvbihuYXZpZ2F0aW9uSUQpIDogbnVsbHB0cjsK
LSAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclBy
b3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lSUQsIGxpc3Rl
bmVySUQsIG5hdmlnYXRpb24gPSBXVEZNb3ZlKG5hdmlnYXRpb24pXSAoV2ViQ29yZTo6UG9saWN5
QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFZlY3RvcjxSZWY8
U2FmZUJyb3dzaW5nUmVzdWx0Pj4mJiBzYWZlQnJvd3NpbmdSZXN1bHRzKSBtdXRhYmxlIHsKKyAg
ICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lSUQsIGxpc3RlbmVy
SUQsIG5hdmlnYXRpb24gPSBXVEZNb3ZlKG5hdmlnYXRpb24pXSAoV2ViQ29yZTo6UG9saWN5QWN0
aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVl
c3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJv
d3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcpIG11dGFibGUgewogICAgICAgICAv
LyBGSVhNRTogQXNzZXJ0IHRoZSBBUEk6OldlYnNpdGVQb2xpY2llcyogaXMgbnVsbHB0ciBoZXJl
IG9uY2UgY2xpZW50cyBvZiBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMgZ28g
YXdheS4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50OjpObyk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoc2FmZUJyb3dzaW5nUmVzdWx0cywgc2FmZUJyb3dzaW5nUmVzdWx0cy5pc0VtcHR5KCkp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVCcm93c2luZ1dhcm5pbmcsICFzYWZlQnJvd3Np
bmdXYXJuaW5nKTsKICAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24s
IG5hdmlnYXRpb24uZ2V0KCksIHN0ZDo6bnVsbG9wdCwgUG9saWN5RGVjaXNpb25TZW5kZXI6OmNy
ZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGZyYW1l
SUQsIGxpc3RlbmVySURdIChhdXRvLi4uIGFyZ3MpIHsKICAgICAgICAgICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKGZyYW1lSUQs
IGxpc3RlbmVySUQsIGFyZ3MuLi4pLCBtX3BhZ2VJRCk7CiAgICAgICAgIH0pKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNp
b24gMjM4MTE1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDEyIEBACiAjaW1wb3J0ICJMb2dnaW5n
LmgiCiAjaW1wb3J0ICJOYXZpZ2F0aW9uU3RhdGUuaCIKICNpbXBvcnQgIk9iakNPYmplY3RHcmFw
aC5oIgorI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlU2Ny
b2xsaW5nUGVyZm9ybWFuY2VEYXRhLmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbi5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQgIlJlbW90
ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcu
aCIKICNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgog
I2ltcG9ydCAiVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCIKQEAgLTEyNzcsOSArMTI3OSwxMyBA
QCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBbdWlEZWxlZ2F0ZSBfd2Vi
VmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbkZv
ckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAKLS0gKHZvaWQpX3Nob3dT
YWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYpcmVz
dWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2Vi
S2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhh
bmRsZXIKKy0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOihOU1N0cmlu
ZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2FybmluZyBkZXRhaWxzOihOU0F0dHJpYnV0
ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wsIE5TVVJM
ICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBhZG9w
dE5TKFtbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGFsbG9jXSBpbml0V2l0aEZyYW1lOnNlbGYuYm91
bmRzIHNhZmVCcm93c2luZ1Jlc3VsdDpyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6W3dlYWtTZWxm
ID0gV2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgIAor
fQorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJy
b3dzaW5nV2FybmluZyYpd2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+
JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBh
ZG9wdE5TKFtbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGFsbG9jXSBpbml0V2l0aEZyYW1lOnNlbGYu
Ym91bmRzIHNhZmVCcm93c2luZ1dhcm5pbmc6d2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjpbd2Vh
a1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CiAg
ICAgICAgIGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKICAgICAgICAgICAg
IFtzdGQ6OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRy
KSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShyZXN1bHQpKTsKQEAgLTQ3MzIsNiArNDczOCwzOCBAQCArIChCT09MKV9oYW5kbGVzU2FmZUJy
b3dzaW5nCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdX
YXJuaW5nV2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2Fy
bmluZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkKF4pKEJPT0wsIE5TVVJMICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0
byBzYWZlQnJvd3NpbmdXYXJuaW5nID0gV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjcmVh
dGUodGl0bGUsIHdhcm5pbmcsIGRldGFpbHMpOworICAgIGF1dG8gd3JhcHBlciA9IFtjb21wbGV0
aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChWYXJpYW50PFdl
YktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYgdmFyaWFudCkgeworICAg
ICAgICBzd2l0Y2hPbih2YXJpYW50LCBbJl0gKGF1dG8gY29udGludWVVbnNhZmVMb2FkKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGNvbnRpbnVlVW5zYWZlTG9hZCkgeworICAgICAgICAgICAgY2Fz
ZSBXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzOgorICAgICAgICAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcihZRVMsIG5pbCk7CisgICAgICAgICAgICBjYXNlIFdlYktpdDo6
Q29udGludWVVbnNhZmVMb2FkOjpObzoKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoTk8sIG5pbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIFsmXSAoV2ViQ29y
ZTo6VVJMIHVybCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKE5PLCB1
cmwpOworICAgICAgICB9KTsKKyAgICB9OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBfaW1wbC0+
c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcoc2FmZUJyb3dzaW5nV2FybmluZywgV1RGTW92ZSh3cmFw
cGVyKSk7CisjZWxzZQorICAgIFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpzYWZlQnJv
d3NpbmdXYXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUod3JhcHBlcildOworI2VuZGlm
Cit9CisKKysgKE5TVVJMICopX2NvbmZpcm1NYWx3YXJlU2VudGluZWwKK3sKKyAgICByZXR1cm4g
V2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCk7Cit9
CisKKysgKE5TVVJMICopX3Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsCit7CisgICAgcmV0dXJu
IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6dmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwo
KTsKK30KKwogLSAodm9pZClfZXZhbHVhdGVKYXZhU2NyaXB0V2l0aG91dFVzZXJHZXN0dXJlOihO
U1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKGlk
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgW3NlbGYgX2V2YWx1YXRlSmF2
YVNjcmlwdDpqYXZhU2NyaXB0U3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6Tk8gY29tcGxldGlvbkhh
bmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDIzODEx
NSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIGNsYXNzIEF0dGFjaG1lbnQ7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogZW51bSBjbGFzcyBDb250aW51ZVVuc2FmZUxvYWQgOiBib29s
OwotY2xhc3MgU2FmZUJyb3dzaW5nUmVzdWx0OworY2xhc3MgU2FmZUJyb3dzaW5nV2FybmluZzsK
IGNsYXNzIFZpZXdTbmFwc2hvdDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludElu
Zm87CkBAIC0xNzksNyArMTc5LDcgQEAgY2xhc3MgVVJMOwogLSAodm9pZClfZGlkSW5zZXJ0QXR0
YWNobWVudDooQVBJOjpBdHRhY2htZW50JilhdHRhY2htZW50IHdpdGhTb3VyY2U6KE5TU3RyaW5n
ICopc291cmNlOwogI2VuZGlmCiAKLS0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihj
b25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVy
OihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxv
YWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKV9zaG93
U2FmZUJyb3dzaW5nV2FybmluZzooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nJil3
YXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8
V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlv
bkhhbmRsZXI7CiAtICh2b2lkKV9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmc7CiAKIC0gKHN0ZDo6
b3B0aW9uYWw8Qk9PTD4pX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlv
bkZvclRlc3Rpbmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMyw2ICsxMDMsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
UmVjdEVkCiBAY2xhc3MgX1dLSWNvbkxvYWRpbmdEZWxlZ2F0ZTsKIEBjbGFzcyBfV0tJbnNwZWN0
b3I7CiBAY2xhc3MgX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk7CitAY2xhc3MgX1dLU2FmZUJyb3dz
aW5nV2FybmluZzsKIEBjbGFzcyBfV0tTZXNzaW9uU3RhdGU7CiBAY2xhc3MgX1dLVGh1bWJuYWls
VmlldzsKIEBjbGFzcyBfV0tXZWJzaXRlUG9saWNpZXM7CkBAIC0xODcsNiArMTg4LDkgQEAgdHlw
ZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZAogLSAoX1dLQXR0YWNobWVudCAq
KV9hdHRhY2htZW50Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiArIChCT09M
KV9oYW5kbGVzU2FmZUJyb3dzaW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworKyAoTlNVUkwgKilfY29uZmlybU1hbHdhcmVTZW50aW5lbCBX
S19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKysg
KE5TVVJMICopX3Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2hvd1NhZmVCcm93
c2luZ1dhcm5pbmdXaXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcg
Kil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikoQk9PTCwgTlNVUkwgKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC0gKElC
QWN0aW9uKV9hbGlnbkNlbnRlcjooaWQpc2VuZGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAoSUJBY3Rpb24pX2FsaWduSnVzdGlmaWVk
OihpZClzZW5kZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3Np
bmdSZXN1bHRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9TYWZlQnJvd3NpbmdSZXN1bHRDb2NvYS5tbQkocmV2aXNpb24gMjM4MTE0KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nUmVzdWx0Q29jb2EubW0JKG5v
bmV4aXN0ZW50KQpAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJTYWZlQnJvd3NpbmdSZXN1bHQuaCIKLQotI2ltcG9ydCAiU2FmZUJyb3dz
aW5nU1BJLmgiCi0jaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLSNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCi0KLS8vIEZJWE1FOiBUaGVz
ZSBvdWdodCB0byBiZSBBUEkgY2FsbHMgdG8gdGhlIFNhZmFyaVNhZmVCcm93c2luZyBmcmFtZXdv
cmsgd2hlbiBzdWNoIFNQSSBpcyBhdmFpbGFibGUuCi1zdGF0aWMgY29uc3QgY2hhciogbWFsd2Fy
ZURldGFpbHNCYXNlKGNvbnN0IFN0cmluZyYgcHJvdmlkZXIpCi17Ci0gICAgaWYgKHByb3ZpZGVy
ID09IFN0cmluZyhTU0JQcm92aWRlclRlbmNlbnQpKQotICAgICAgICByZXR1cm4gImh0dHBzOi8v
d3d3LnVybHNlYy5xcS5jb20vY2hlY2suaHRtbD90cGw9c2FmYXJpIjsKLSAgICByZXR1cm4gImh0
dHBzOi8vZ29vZ2xlLmNvbS9zYWZlYnJvd3NpbmcvZGlhZ25vc3RpYz90cGw9c2FmYXJpIjsKLX0K
LQotc3RhdGljIFdlYkNvcmU6OlVSTCBsZWFybk1vcmUoY29uc3QgU3RyaW5nJiBwcm92aWRlcikK
LXsKLSAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3ZpZGVyVGVuY2VudCkpCi0gICAg
ICAgIHJldHVybiB7eyB9LCAiaHR0cHM6Ly93d3cudXJsc2VjLnFxLmNvbS9zdGFuZGFyZC9zMS5o
dG1sP3RwbD1zYWZhcmkifTsKLSAgICByZXR1cm4ge3sgfSwgImh0dHBzOi8vd3d3Lmdvb2dsZS5j
b20vc3VwcG9ydC9iaW4vYW5zd2VyLnB5P2Fuc3dlcj0xMDYzMTgifTsKLX0KLQotc3RhdGljIGNv
bnN0IGNoYXIqIHJlcG9ydEFuRXJyb3JCYXNlKGNvbnN0IFN0cmluZyYgcHJvdmlkZXIpCi17Ci0g
ICAgaWYgKHByb3ZpZGVyID09IFN0cmluZyhTU0JQcm92aWRlclRlbmNlbnQpKQotICAgICAgICBy
ZXR1cm4gImh0dHBzOi8vd3d3LnVybHNlYy5xcS5jb20vY29tcGxhaW4uaHRtbD90cGw9c2FmYXJp
IjsKLSAgICByZXR1cm4gImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2FmZWJyb3dzaW5nL3JlcG9y
dF9lcnJvci8/dHBsPXNhZmFyaSI7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgbG9jYWxpemVkUHJvdmlk
ZXIoY29uc3QgU3RyaW5nJiBwcm92aWRlcikKLXsKLSAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5n
KFNTQlByb3ZpZGVyVGVuY2VudCkpCi0gICAgICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJU
ZW5jZW50IFNhZmUgQnJvd3NpbmciLCAiVGVuY2VudCBTYWZlIEJyb3dzaW5nIik7Ci0gICAgcmV0
dXJuIFdFQl9VSV9OU1NUUklORyhAIkdvb2dsZSBTYWZlIEJyb3dzaW5nIiwgIkdvb2dsZSBTYWZl
IEJyb3dzaW5nIik7Ci19Ci0KLVNhZmVCcm93c2luZ1Jlc3VsdDo6U2FmZUJyb3dzaW5nUmVzdWx0
KFdlYkNvcmU6OlVSTCYmIHVybCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQotICAg
IDogbV91cmwoV1RGTW92ZSh1cmwpKQotICAgICwgbV9pc1BoaXNoaW5nKFtyZXN1bHQgaXNQaGlz
aGluZ10pCi0gICAgLCBtX2lzTWFsd2FyZShbcmVzdWx0IGlzTWFsd2FyZV0pCi0gICAgLCBtX2lz
VW53YW50ZWRTb2Z0d2FyZShbcmVzdWx0IGlzVW53YW50ZWRTb2Z0d2FyZV0pCi0gICAgLCBtX3By
b3ZpZGVyKFtyZXN1bHQgcHJvdmlkZXJdKQotICAgICwgbV9sb2NhbGl6ZWRQcm92aWRlck5hbWUo
bG9jYWxpemVkUHJvdmlkZXIoW3Jlc3VsdCBwcm92aWRlcl0pKQotICAgICwgbV9tYWx3YXJlRGV0
YWlsc1VSTEJhc2UobWFsd2FyZURldGFpbHNCYXNlKFtyZXN1bHQgcHJvdmlkZXJdKSkKLSAgICAs
IG1fcmVwb3J0QW5FcnJvclVSTEJhc2UocmVwb3J0QW5FcnJvckJhc2UoW3Jlc3VsdCBwcm92aWRl
cl0pKQotICAgICwgbV9sZWFybk1vcmVVUkwobGVhcm5Nb3JlKFtyZXN1bHQgcHJvdmlkZXJdKSkK
LXsKLX0KLSNlbmRpZgotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdSZXN1bHRDb2NvYS5tbQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0
ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NhZmVC
cm93c2luZ1dhcm5pbmdDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0JKHJldmlzaW9uIDIzODExNCkJ
KGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nUmVzdWx0Q29j
b2EubW06MjM4MTE0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dz
aW5nV2FybmluZ0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNhZmVCcm93c2luZ1Jlc3VsdC5o
IgorCisjaW1wb3J0ICJTYWZlQnJvd3NpbmdTUEkuaCIKKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxp
emVkU3RyaW5ncy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmIEhBVkUoU0FGRV9CUk9X
U0lORykKKworLy8gRklYTUU6IFRoZXNlIG91Z2h0IHRvIGJlIEFQSSBjYWxscyB0byB0aGUgU2Fm
YXJpU2FmZUJyb3dzaW5nIGZyYW1ld29yayB3aGVuIHN1Y2ggU1BJIGlzIGF2YWlsYWJsZS4KK3N0
YXRpYyBjb25zdCBjaGFyKiBtYWx3YXJlRGV0YWlsc0Jhc2UoY29uc3QgU3RyaW5nJiBwcm92aWRl
cikKK3sKKyAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3ZpZGVyVGVuY2VudCkpCisg
ICAgICAgIHJldHVybiAiaHR0cHM6Ly93d3cudXJsc2VjLnFxLmNvbS9jaGVjay5odG1sP3RwbD1z
YWZhcmkiOworICAgIHJldHVybiAiaHR0cHM6Ly9nb29nbGUuY29tL3NhZmVicm93c2luZy9kaWFn
bm9zdGljP3RwbD1zYWZhcmkiOworfQorCitzdGF0aWMgV2ViQ29yZTo6VVJMIGxlYXJuTW9yZShj
b25zdCBTdHJpbmcmIHByb3ZpZGVyKQoreworICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmcoU1NC
UHJvdmlkZXJUZW5jZW50KSkKKyAgICAgICAgcmV0dXJuIHt7IH0sICJodHRwczovL3d3dy51cmxz
ZWMucXEuY29tL3N0YW5kYXJkL3MxLmh0bWw/dHBsPXNhZmFyaSJ9OworICAgIHJldHVybiB7eyB9
LCAiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zdXBwb3J0L2Jpbi9hbnN3ZXIucHk/YW5zd2VyPTEw
NjMxOCJ9OworfQorCitzdGF0aWMgY29uc3QgY2hhciogcmVwb3J0QW5FcnJvckJhc2UoY29uc3Qg
U3RyaW5nJiBwcm92aWRlcikKK3sKKyAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3Zp
ZGVyVGVuY2VudCkpCisgICAgICAgIHJldHVybiAiaHR0cHM6Ly93d3cudXJsc2VjLnFxLmNvbS9j
b21wbGFpbi5odG1sP3RwbD1zYWZhcmkiOworICAgIHJldHVybiAiaHR0cHM6Ly93d3cuZ29vZ2xl
LmNvbS9zYWZlYnJvd3NpbmcvcmVwb3J0X2Vycm9yLz90cGw9c2FmYXJpIjsKK30KKworc3RhdGlj
IFN0cmluZyBsb2NhbGl6ZWRQcm92aWRlcihjb25zdCBTdHJpbmcmIHByb3ZpZGVyKQoreworICAg
IGlmIChwcm92aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlkZXJUZW5jZW50KSkKKyAgICAgICAgcmV0
dXJuIFdFQl9VSV9OU1NUUklORyhAIlRlbmNlbnQgU2FmZSBCcm93c2luZyIsICJUZW5jZW50IFNh
ZmUgQnJvd3NpbmciKTsKKyAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiR29vZ2xlIFNhZmUg
QnJvd3NpbmciLCAiR29vZ2xlIFNhZmUgQnJvd3NpbmciKTsKK30KKworU2FmZUJyb3dzaW5nUmVz
dWx0OjpTYWZlQnJvd3NpbmdSZXN1bHQoV2ViQ29yZTo6VVJMJiYgdXJsLCBTU0JTZXJ2aWNlTG9v
a3VwUmVzdWx0ICpyZXN1bHQpCisgICAgOiBtX3VybChXVEZNb3ZlKHVybCkpCisgICAgLCBtX2lz
UGhpc2hpbmcoW3Jlc3VsdCBpc1BoaXNoaW5nXSkKKyAgICAsIG1faXNNYWx3YXJlKFtyZXN1bHQg
aXNNYWx3YXJlXSkKKyAgICAsIG1faXNVbndhbnRlZFNvZnR3YXJlKFtyZXN1bHQgaXNVbndhbnRl
ZFNvZnR3YXJlXSkKKyAgICAsIG1fcHJvdmlkZXIoW3Jlc3VsdCBwcm92aWRlcl0pCisgICAgLCBt
X2xvY2FsaXplZFByb3ZpZGVyTmFtZShsb2NhbGl6ZWRQcm92aWRlcihbcmVzdWx0IHByb3ZpZGVy
XSkpCisgICAgLCBtX21hbHdhcmVEZXRhaWxzVVJMQmFzZShtYWx3YXJlRGV0YWlsc0Jhc2UoW3Jl
c3VsdCBwcm92aWRlcl0pKQorICAgICwgbV9yZXBvcnRBbkVycm9yVVJMQmFzZShyZXBvcnRBbkVy
cm9yQmFzZShbcmVzdWx0IHByb3ZpZGVyXSkpCisgICAgLCBtX2xlYXJuTW9yZVVSTChsZWFybk1v
cmUoW3Jlc3VsdCBwcm92aWRlcl0pKQoreworfQorI2VuZGlmCisKK30KClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1dhcm5pbmdD
b2NvYS5tbQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25h
dGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nV2FybmluZ0NvY29h
Lm1tCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
YWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDU2ICsyNCwx
NTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlNhZmVCcm93c2luZ1Jl
c3VsdC5oIgorI2ltcG9ydCAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgogCiAjaW1wb3J0ICJTYWZl
QnJvd3NpbmdTUEkuaCIKICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2lt
cG9ydCA8d3RmL0xhbmd1YWdlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAjaWYgSEFWRShT
QUZFX0JST1dTSU5HKQogCi0vLyBGSVhNRTogVGhlc2Ugb3VnaHQgdG8gYmUgQVBJIGNhbGxzIHRv
IHRoZSBTYWZhcmlTYWZlQnJvd3NpbmcgZnJhbWV3b3JrIHdoZW4gc3VjaCBTUEkgaXMgYXZhaWxh
YmxlLgotc3RhdGljIGNvbnN0IGNoYXIqIG1hbHdhcmVEZXRhaWxzQmFzZShjb25zdCBTdHJpbmcm
IHByb3ZpZGVyKQorLy8gRklYTUU6IFRoZXNlIGZvdXIgZnVuY3Rpb25zIG91Z2h0IHRvIGJlIEFQ
SSBjYWxscyB0byB0aGUgU2FmYXJpU2FmZUJyb3dzaW5nIGZyYW1ld29yayB3aGVuIHN1Y2ggU1BJ
IGlzIGF2YWlsYWJsZS4KKy8vIFRoYXQgd2F5IFdlYktpdCBkb2VzIG5vdCBuZWVkIHRvIGtub3cg
YWJvdXQgdGhlIFNhZmFyaVNhZmVCcm93c2luZyBmcmFtZXdvcmsncyBwb3NzaWJsZSBwcm92aWRl
cnMuCitzdGF0aWMgY29uc3QgY2hhciogbWFsd2FyZURldGFpbHNCYXNlKFNTQlNlcnZpY2VMb29r
dXBSZXN1bHQgKnJlc3VsdCkKIHsKLSAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3Zp
ZGVyVGVuY2VudCkpCisgICAgaWYgKFtyZXN1bHQucHJvdmlkZXIgaXNFcXVhbFRvU3RyaW5nOlNT
QlByb3ZpZGVyVGVuY2VudF0pCiAgICAgICAgIHJldHVybiAiaHR0cHM6Ly93d3cudXJsc2VjLnFx
LmNvbS9jaGVjay5odG1sP3RwbD1zYWZhcmkiOwogICAgIHJldHVybiAiaHR0cHM6Ly9nb29nbGUu
Y29tL3NhZmVicm93c2luZy9kaWFnbm9zdGljP3RwbD1zYWZhcmkiOwogfQogCi1zdGF0aWMgV2Vi
Q29yZTo6VVJMIGxlYXJuTW9yZShjb25zdCBTdHJpbmcmIHByb3ZpZGVyKQorc3RhdGljIE5TVVJM
ICpsZWFybk1vcmVVUkwoU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQogewotICAgIGlm
IChwcm92aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlkZXJUZW5jZW50KSkKLSAgICAgICAgcmV0dXJu
IHt7IH0sICJodHRwczovL3d3dy51cmxzZWMucXEuY29tL3N0YW5kYXJkL3MxLmh0bWw/dHBsPXNh
ZmFyaSJ9OwotICAgIHJldHVybiB7eyB9LCAiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zdXBwb3J0
L2Jpbi9hbnN3ZXIucHk/YW5zd2VyPTEwNjMxOCJ9OworICAgIGlmIChbcmVzdWx0LnByb3ZpZGVy
IGlzRXF1YWxUb1N0cmluZzpTU0JQcm92aWRlclRlbmNlbnRdKQorICAgICAgICByZXR1cm4gW05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy51cmxzZWMucXEuY29tL3N0YW5kYXJkL3Mx
Lmh0bWw/dHBsPXNhZmFyaSJdOworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0
dHBzOi8vd3d3Lmdvb2dsZS5jb20vc3VwcG9ydC9iaW4vYW5zd2VyLnB5P2Fuc3dlcj0xMDYzMTgi
XTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIHJlcG9ydEFuRXJyb3JCYXNlKGNvbnN0IFN0cmlu
ZyYgcHJvdmlkZXIpCitzdGF0aWMgY29uc3QgY2hhciogcmVwb3J0QW5FcnJvckJhc2UoU1NCU2Vy
dmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQogewotICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmco
U1NCUHJvdmlkZXJUZW5jZW50KSkKKyAgICBpZiAoW3Jlc3VsdC5wcm92aWRlciBpc0VxdWFsVG9T
dHJpbmc6U1NCUHJvdmlkZXJUZW5jZW50XSkKICAgICAgICAgcmV0dXJuICJodHRwczovL3d3dy51
cmxzZWMucXEuY29tL2NvbXBsYWluLmh0bWw/dHBsPXNhZmFyaSI7CiAgICAgcmV0dXJuICJodHRw
czovL3d3dy5nb29nbGUuY29tL3NhZmVicm93c2luZy9yZXBvcnRfZXJyb3IvP3RwbD1zYWZhcmki
OwogfQogCi1zdGF0aWMgU3RyaW5nIGxvY2FsaXplZFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgcHJv
dmlkZXIpCitzdGF0aWMgU3RyaW5nIGxvY2FsaXplZFByb3ZpZGVyKFNTQlNlcnZpY2VMb29rdXBS
ZXN1bHQgKnJlc3VsdCkKIHsKLSAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3ZpZGVy
VGVuY2VudCkpCisgICAgaWYgKFtyZXN1bHQucHJvdmlkZXIgaXNFcXVhbFRvU3RyaW5nOlNTQlBy
b3ZpZGVyVGVuY2VudF0pCiAgICAgICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJUZW5jZW50
IFNhZmUgQnJvd3NpbmciLCAiVGVuY2VudCBTYWZlIEJyb3dzaW5nIik7CiAgICAgcmV0dXJuIFdF
Ql9VSV9OU1NUUklORyhAIkdvb2dsZSBTYWZlIEJyb3dzaW5nIiwgIkdvb2dsZSBTYWZlIEJyb3dz
aW5nIik7CiB9CiAKLVNhZmVCcm93c2luZ1Jlc3VsdDo6U2FmZUJyb3dzaW5nUmVzdWx0KFdlYkNv
cmU6OlVSTCYmIHVybCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQotICAgIDogbV91
cmwoV1RGTW92ZSh1cmwpKQotICAgICwgbV9pc1BoaXNoaW5nKFtyZXN1bHQgaXNQaGlzaGluZ10p
Ci0gICAgLCBtX2lzTWFsd2FyZShbcmVzdWx0IGlzTWFsd2FyZV0pCi0gICAgLCBtX2lzVW53YW50
ZWRTb2Z0d2FyZShbcmVzdWx0IGlzVW53YW50ZWRTb2Z0d2FyZV0pCi0gICAgLCBtX3Byb3ZpZGVy
KFtyZXN1bHQgcHJvdmlkZXJdKQotICAgICwgbV9sb2NhbGl6ZWRQcm92aWRlck5hbWUobG9jYWxp
emVkUHJvdmlkZXIoW3Jlc3VsdCBwcm92aWRlcl0pKQotICAgICwgbV9tYWx3YXJlRGV0YWlsc1VS
TEJhc2UobWFsd2FyZURldGFpbHNCYXNlKFtyZXN1bHQgcHJvdmlkZXJdKSkKLSAgICAsIG1fcmVw
b3J0QW5FcnJvclVSTEJhc2UocmVwb3J0QW5FcnJvckJhc2UoW3Jlc3VsdCBwcm92aWRlcl0pKQot
ICAgICwgbV9sZWFybk1vcmVVUkwobGVhcm5Nb3JlKFtyZXN1bHQgcHJvdmlkZXJdKSkKKworc3Rh
dGljIHZvaWQgcmVwbGFjZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIE5TU3Ry
aW5nICp0b1JlcGxhY2UsIE5TU3RyaW5nICpyZXBsYWNlV2l0aCkKK3sKKyAgICBbc3RyaW5nIHJl
cGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3RyaW5nLnN0cmluZyByYW5nZU9mU3RyaW5nOnRvUmVw
bGFjZV0gd2l0aFN0cmluZzpyZXBsYWNlV2l0aF07Cit9CisKK3N0YXRpYyB2b2lkIGFkZExpbmtB
bmRSZXBsYWNlKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgTlNTdHJpbmcgKnRv
UmVwbGFjZSwgTlNTdHJpbmcgKnJlcGxhY2VXaXRoLCBOU1VSTCAqbGlua1RhcmdldCkKK3sKKyAg
ICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmdXaXRoTGluayA9IFtbW05TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnJlcGxhY2VXaXRoXSBhdXRv
cmVsZWFzZV07CisgICAgW3N0cmluZ1dpdGhMaW5rIGFkZEF0dHJpYnV0ZXM6QHsKKyAgICAgICAg
TlNMaW5rQXR0cmlidXRlTmFtZTogbGlua1RhcmdldCwKKyAgICAgICAgTlNVbmRlcmxpbmVTdHls
ZUF0dHJpYnV0ZU5hbWU6IEAxCisgICAgfSByYW5nZTpOU01ha2VSYW5nZSgwLCByZXBsYWNlV2l0
aC5sZW5ndGgpXTsKKyAgICBbc3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3RyaW5n
LnN0cmluZyByYW5nZU9mU3RyaW5nOnRvUmVwbGFjZV0gd2l0aEF0dHJpYnV0ZWRTdHJpbmc6c3Ry
aW5nV2l0aExpbmtdOworfQorCitzdGF0aWMgTlNVUkwgKnJlcG9ydEFuRXJyb3JVUkwoY29uc3Qg
V2ViQ29yZTo6VVJMJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKK3sKKyAg
ICByZXR1cm4gV2ViQ29yZTo6VVJMKHsgfSwgbWFrZVN0cmluZyhyZXBvcnRBbkVycm9yQmFzZShy
ZXN1bHQpLCAiJnVybD0iLCBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHVybCksICImaGw9
IiwgZGVmYXVsdExhbmd1YWdlKCkpKTsKK30KKworc3RhdGljIE5TVVJMICptYWx3YXJlRGV0YWls
c1VSTChjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVz
dWx0KQoreworICAgIHJldHVybiBXZWJDb3JlOjpVUkwoeyB9LCBtYWtlU3RyaW5nKG1hbHdhcmVE
ZXRhaWxzQmFzZShyZXN1bHQpLCAiJnNpdGU9IiwgdXJsLmhvc3QoKSwgIiZobD0iLCBkZWZhdWx0
TGFuZ3VhZ2UoKSkpOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnNhZmVCcm93c2luZ1RpdGxlVGV4
dChTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCit7CisgICAgaWYgKHJlc3VsdC5pc1Bo
aXNoaW5nKQorICAgICAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiRGVjZXB0aXZlIFdlYnNp
dGUgV2FybmluZyIsICJQaGlzaGluZyB3YXJuaW5nIHRpdGxlIik7CisgICAgaWYgKHJlc3VsdC5p
c01hbHdhcmUpCisgICAgICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJNYWx3YXJlIFdlYnNp
dGUgV2FybmluZyIsICJNYWx3YXJlIHdhcm5pbmcgdGl0bGUiKTsKKyAgICBBU1NFUlQocmVzdWx0
LmlzVW53YW50ZWRTb2Z0d2FyZSk7CisgICAgcmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIldlYnNp
dGUgV2l0aCBIYXJtZnVsIFNvZnR3YXJlIFdhcm5pbmciLCAiVW53YW50ZWQgc29mdHdhcmUgd2Fy
bmluZyB0aXRsZSIpOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnNhZmVCcm93c2luZ1dhcm5pbmdU
ZXh0KFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKK3sKKyAgICBpZiAocmVzdWx0Lmlz
UGhpc2hpbmcpCisgICAgICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJUaGlzIHdlYnNpdGUg
bWF5IHRyeSB0byB0cmljayB5b3UgaW50byBkb2luZyBzb21ldGhpbmcgZGFuZ2Vyb3VzLCBsaWtl
IGluc3RhbGxpbmcgc29mdHdhcmUgb3IgZGlzY2xvc2luZyBwZXJzb25hbCBvciBmaW5hbmNpYWwg
aW5mb3JtYXRpb24sIGxpa2UgcGFzc3dvcmRzLCBwaG9uZSBudW1iZXJzLCBvciBjcmVkaXQgY2Fy
ZHMuIiwgIlBoaXNoaW5nIHdhcm5pbmciKTsKKyAgICBpZiAocmVzdWx0LmlzTWFsd2FyZSkKKyAg
ICAgICAgcmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIlRoaXMgd2Vic2l0ZSBtYXkgYXR0ZW1wdCB0
byBpbnN0YWxsIGRhbmdlcm91cyBzb2Z0d2FyZSwgd2hpY2ggY291bGQgaGFybSB5b3VyIGNvbXB1
dGVyIG9yIHN0ZWFsIHlvdXIgcGVyc29uYWwgb3IgZmluYW5jaWFsIGluZm9ybWF0aW9uLCBsaWtl
IHBhc3N3b3JkcywgcGhvdG9zLCBvciBjcmVkaXQgY2FyZHMuIiwgIk1hbHdhcmUgd2FybmluZyIp
OworCisgICAgQVNTRVJUKHJlc3VsdC5pc1Vud2FudGVkU29mdHdhcmUpOworICAgIHJldHVybiBX
RUJfVUlfTlNTVFJJTkcoQCJUaGlzIHdlYnNpdGUgbWF5IHRyeSB0byB0cmljayB5b3UgaW50byBp
bnN0YWxsaW5nIHNvZnR3YXJlIHRoYXQgaGFybXMgeW91ciBicm93c2luZyBleHBlcmllbmNlLCBs
aWtlIGNoYW5naW5nIHlvdXIgc2V0dGluZ3Mgd2l0aG91dCB5b3VyIHBlcm1pc3Npb24gb3Igc2hv
d2luZyB5b3UgdW53YW50ZWQgYWRzLiBPbmNlIGluc3RhbGxlZCwgaXQgbWF5IGJlIGRpZmZpY3Vs
dCB0byByZW1vdmUuIiwgIlVud2FudGVkIHNvZnR3YXJlIHdhcm5pbmciKTsKK30KKworc3RhdGlj
IE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnNhZmVCcm93c2luZ0RldGFpbHNUZXh0KGNvbnN0
IFdlYkNvcmU6OlVSTCYgdXJsLCBTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCit7Cisg
ICAgaWYgKHJlc3VsdC5pc1BoaXNoaW5nKSB7CisgICAgICAgIE5TU3RyaW5nICpwaGlzaGluZ0Rl
c2NyaXB0aW9uID0gV0VCX1VJX05TU1RSSU5HKEAiV2FybmluZ3MgYXJlIHNob3duIGZvciB3ZWJz
aXRlcyB0aGF0IGhhdmUgYmVlbiByZXBvcnRlZCBhcyBkZWNlcHRpdmUuIERlY2VwdGl2ZSB3ZWJz
aXRlcyB0cnkgdG8gdHJpY2sgeW91IGludG8gYmVsaWV2aW5nIHRoZXkgYXJlIGxlZ2l0aW1hdGUg
d2Vic2l0ZXMgeW91IHRydXN0LiIsICJQaGlzaGluZyB3YXJuaW5nIGRlc2NyaXB0aW9uIik7Cisg
ICAgICAgIE5TU3RyaW5nICpsZWFybk1vcmUgPSBXRUJfVUlfTlNTVFJJTkcoQCJMZWFybiBtb3Jl
4oCmIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIpOworICAgICAgICBOU1N0
cmluZyAqcGhpc2hpbmdBY3Rpb25zID0gV0VCX1VJX05TU1RSSU5HKEAiSWYgeW91IGJlbGlldmUg
dGhpcyB3ZWJzaXRlIGlzIHNhZmUsIHlvdSBjYW4gJXJlcG9ydC1hbi1lcnJvciUuIE9yLCBpZiB5
b3UgdW5kZXJzdGFuZCB0aGUgcmlza3MgaW52b2x2ZWQsIHlvdSBjYW4gJWJ5cGFzcy1saW5rJS4i
LCAiUGhpc2hpbmcgd2FybmluZyBkZXNjcmlwdGlvbiIpOworICAgICAgICBOU1N0cmluZyAqcmVw
b3J0QW5FcnJvciA9IFdFQl9VSV9OU1NUUklORyhAInJlcG9ydCBhbiBlcnJvciIsICJBY3Rpb24g
ZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKKyAgICAgICAgTlNTdHJpbmcgKnZpc2l0VW5z
YWZlV2Vic2l0ZSA9IFdFQl9VSV9OU1NUUklORyhAInZpc2l0IHRoaXMgdW5zYWZlIHdlYnNpdGUi
LCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIik7CisKKyAgICAgICAgTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtbW05TTXV0YWJsZUF0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiJUAgJUBcblxuJUAiLCBwaGlzaGluZ0Rlc2NyaXB0aW9uLCBsZWFybk1vcmUsIHBoaXNo
aW5nQWN0aW9uc11dIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgYWRkTGlua0FuZFJlcGxhY2UoYXR0
cmlidXRlZFN0cmluZywgbGVhcm5Nb3JlLCBsZWFybk1vcmUsIGxlYXJuTW9yZVVSTChyZXN1bHQp
KTsKKyAgICAgICAgYWRkTGlua0FuZFJlcGxhY2UoYXR0cmlidXRlZFN0cmluZywgQCIlcmVwb3J0
LWFuLWVycm9yJSIsIHJlcG9ydEFuRXJyb3IsIHJlcG9ydEFuRXJyb3JVUkwodXJsLCByZXN1bHQp
KTsKKyAgICAgICAgYWRkTGlua0FuZFJlcGxhY2UoYXR0cmlidXRlZFN0cmluZywgQCIlYnlwYXNz
LWxpbmslIiwgdmlzaXRVbnNhZmVXZWJzaXRlLCBTYWZlQnJvd3NpbmdXYXJuaW5nOjp2aXNpdFVu
c2FmZVdlYnNpdGVTZW50aW5lbCgpKTsKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7
CisgICAgfQorCisgICAgYXV0byBtYWx3YXJlT3JVbndhbnRlZFNvZnR3YXJlRGV0YWlscyA9IFsm
XSAoTlNTdHJpbmcgKmRlc2NyaXB0aW9uLCBOU1N0cmluZyAqc3RhdHVzU3RyaW5nVG9SZXBsYWNl
LCBib29sIGNvbmZpcm1NYWx3YXJlKSB7CisgICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgKm1hbHdhcmVEZXNjcmlwdGlvbiA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOmRlc2NyaXB0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgICAgIHJl
cGxhY2UobWFsd2FyZURlc2NyaXB0aW9uLCBAIiVzYWZlQnJvd3NpbmdQcm92aWRlciUiLCBsb2Nh
bGl6ZWRQcm92aWRlcihyZXN1bHQpKTsKKyAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyAqc3RhdHVzTGluayA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOldFQl9VSV9OU1NUUklORyhAInRoZSBzdGF0dXMgb2Yg4oCcJXNpdGUl4oCdIiwg
IlBhcnQgb2YgbWFsd2FyZSBkZXNjcmlwdGlvbiIpXSBhdXRvcmVsZWFzZV07CisgICAgICAgIHJl
cGxhY2Uoc3RhdHVzTGluaywgQCIlc2l0ZSUiLCB1cmwuaG9zdCgpLnRvU3RyaW5nKCkpOworICAg
ICAgICBhZGRMaW5rQW5kUmVwbGFjZShtYWx3YXJlRGVzY3JpcHRpb24sIHN0YXR1c1N0cmluZ1Rv
UmVwbGFjZSwgc3RhdHVzTGluay5zdHJpbmcsIG1hbHdhcmVEZXRhaWxzVVJMKHVybCwgcmVzdWx0
KSk7CisKKyAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqaWZZb3VVbmRlcnN0YW5k
ID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6V0VC
X1VJX05TU1RSSU5HKEAiSWYgeW91IHVuZGVyc3RhbmQgdGhlIHJpc2tzIGludm9sdmVkLCB5b3Ug
Y2FuICV2aXNpdC10aGlzLXVuc2FmZS1zaXRlLWxpbmslLiIsICJBY3Rpb24gZnJvbSBzYWZlIGJy
b3dzaW5nIHdhcm5pbmciKV0gYXV0b3JlbGVhc2VdOworICAgICAgICBhZGRMaW5rQW5kUmVwbGFj
ZShpZllvdVVuZGVyc3RhbmQsIEAiJXZpc2l0LXRoaXMtdW5zYWZlLXNpdGUtbGluayUiLCBXRUJf
VUlfTlNTVFJJTkcoQCJ2aXNpdCB0aGlzIHVuc2FmZSB3ZWJzaXRlIiwgIkFjdGlvbiBmcm9tIHNh
ZmUgYnJvd3Npbmcgd2FybmluZyIpLCBjb25maXJtTWFsd2FyZSA/IFNhZmVCcm93c2luZ1dhcm5p
bmc6OmNvbmZpcm1NYWx3YXJlU2VudGluZWwoKSA6IFNhZmVCcm93c2luZ1dhcm5pbmc6OnZpc2l0
VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkpOworCisgICAgICAgIFttYWx3YXJlRGVzY3JpcHRpb24g
YXBwZW5kQXR0cmlidXRlZFN0cmluZzpbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzpAIlxuXG4iXSBhdXRvcmVsZWFzZV1dOworICAgICAgICBbbWFsd2Fy
ZURlc2NyaXB0aW9uIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6aWZZb3VVbmRlcnN0YW5kXTsKKyAg
ICAgICAgcmV0dXJuIG1hbHdhcmVEZXNjcmlwdGlvbjsKKyAgICB9OworCisgICAgaWYgKHJlc3Vs
dC5pc01hbHdhcmUpCisgICAgICAgIHJldHVybiBtYWx3YXJlT3JVbndhbnRlZFNvZnR3YXJlRGV0
YWlscyhXRUJfVUlfTlNTVFJJTkcoQCJXYXJuaW5ncyBhcmUgc2hvd24gZm9yIHdlYnNpdGVzIHdo
ZXJlIG1hbGljaW91cyBzb2Z0d2FyZSBoYXMgYmVlbiBkZXRlY3RlZC4gWW91IGNhbiBjaGVjayB0
aGUgJXN0YXR1cy1saW5rJSBvbiB0aGUgJXNhZmVCcm93c2luZ1Byb3ZpZGVyJSBkaWFnbm9zdGlj
IHBhZ2UuIiwgIk1hbHdhcmUgd2FybmluZyBkZXNjcmlwdGlvbiIpLCBAIiVzdGF0dXMtbGluayUi
LCB0cnVlKTsKKyAgICBBU1NFUlQocmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSk7CisgICAgcmV0
dXJuIG1hbHdhcmVPclVud2FudGVkU29mdHdhcmVEZXRhaWxzKFdFQl9VSV9OU1NUUklORyhAIldh
cm5pbmdzIGFyZSBzaG93biBmb3Igd2Vic2l0ZXMgd2hlcmUgaGFybWZ1bCBzb2Z0d2FyZSBoYXMg
YmVlbiBkZXRlY3RlZC4gWW91IGNhbiBjaGVjayAldGhlLXN0YXR1cy1vZi1zaXRlJSBvbiB0aGUg
JXNhZmVCcm93c2luZ1Byb3ZpZGVyJSBkaWFnbm9zdGljIHBhZ2UuIiwgIlVud2FudGVkIHNvZnR3
YXJlIHdhcm5pbmcgZGVzY3JpcHRpb24iKSwgQCIldGhlLXN0YXR1cy1vZi1zaXRlJSIsIGZhbHNl
KTsKK30KKworU2FmZUJyb3dzaW5nV2FybmluZzo6U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBX
ZWJDb3JlOjpVUkwmIHVybCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQorICAgIDog
bV90aXRsZShzYWZlQnJvd3NpbmdUaXRsZVRleHQocmVzdWx0KSkKKyAgICAsIG1fd2FybmluZyhz
YWZlQnJvd3NpbmdXYXJuaW5nVGV4dChyZXN1bHQpKQorICAgICwgbV9kZXRhaWxzKHNhZmVCcm93
c2luZ0RldGFpbHNUZXh0KHVybCwgcmVzdWx0KSkKIHsKIH0KICNlbmRpZgogCitTYWZlQnJvd3Np
bmdXYXJuaW5nOjpTYWZlQnJvd3NpbmdXYXJuaW5nKFN0cmluZyYmIHRpdGxlLCBTdHJpbmcmJiB3
YXJuaW5nLCBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiYmIGRldGFpbHMpCisgICAgOiBt
X3RpdGxlKFdURk1vdmUodGl0bGUpKQorICAgICwgbV93YXJuaW5nKFdURk1vdmUod2FybmluZykp
CisgICAgLCBtX2RldGFpbHMoV1RGTW92ZShkZXRhaWxzKSkKK3sKK30KKworTlNVUkwgKlNhZmVC
cm93c2luZ1dhcm5pbmc6OnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkKK3sKKyAgICByZXR1
cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIl07
Cit9CisKK05TVVJMICpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjb25maXJtTWFsd2FyZVNlbnRpbmVs
KCkKK3sKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS0NvbmZpcm1NYWx3YXJl
U2VudGluZWwiXTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgJKHJldmlzaW9uIDIzODExNSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFVSTDsKIH0KIAogbmFtZXNwYWNl
IFdlYktpdCB7Ci1jbGFzcyBTYWZlQnJvd3NpbmdSZXN1bHQ7CitjbGFzcyBTYWZlQnJvd3NpbmdX
YXJuaW5nOwogZW51bSBjbGFzcyBDb250aW51ZVVuc2FmZUxvYWQgOiBib29sOwogfQogCkBAIC01
NiwxMCArNTYsMTAgQEAgdXNpbmcgUmVjdFR5cGUgPSBDR1JlY3Q7CiB7CiBAcGFja2FnZQogICAg
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9h
ZCwgV2ViQ29yZTo6VVJMPiYmKT4gX2NvbXBsZXRpb25IYW5kbGVyOwotICAgIFJlZlB0cjxjb25z
dCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdD4gX3Jlc3VsdDsKKyAgICBSZWZQdHI8Y29uc3Qg
V2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nPiBfd2FybmluZzsKICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk8V0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqPj4gX3RleHRWaWV3czsKIH0KIAot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KFJlY3RUeXBlKWZyYW1lIHNhZmVCcm93c2lu
Z1Jlc3VsdDooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQmKXJlc3VsdCBjb21wbGV0
aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGlu
dWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyOworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KFJlY3RUeXBlKWZyYW1lIHNhZmVCcm93c2luZ1dh
cm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZyYpd2FybmluZyBjb21wbGV0
aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGlu
dWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyOwogCiBA
ZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dh
cm5pbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tT
YWZlQnJvd3NpbmdXYXJuaW5nLm1tCShyZXZpc2lvbiAyMzgxMzMpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKICNpbXBvcnQgIldLU2FmZUJyb3dzaW5nV2FybmluZy5oIgogCiAj
aW1wb3J0ICJQYWdlQ2xpZW50LmgiCi0jaW1wb3J0ICJTYWZlQnJvd3NpbmdSZXN1bHQuaCIKKyNp
bXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVk
U3RyaW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9VUkwuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0
ci5oPgpAQCAtNzEsMTYgKzcxLDYgQEAgZW51bSBjbGFzcyBXYXJuaW5nSXRlbSA6IHVpbnQ4X3Qg
ewogICAgIEdvQmFja0J1dHRvbgogfTsKIAotc3RhdGljIE5TVVJMICpjb25maXJtTWFsd2FyZVNl
bnRpbmVsKCkKLXsKLSAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS0NvbmZpcm1N
YWx3YXJlU2VudGluZWwiXTsKLX0KLQotc3RhdGljIE5TVVJMICp2aXNpdFVuc2FmZVdlYnNpdGVT
ZW50aW5lbCgpCi17Ci0gICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tWaXNpdFVu
c2FmZVdlYnNpdGVTZW50aW5lbCJdOwotfQotCiBzdGF0aWMgQ29sb3JUeXBlICpjb2xvckZvckl0
ZW0oV2FybmluZ0l0ZW0gaXRlbSwgVmlld1R5cGUgKndhcm5pbmcpCiB7CiAgICAgQVNTRVJUKFt3
YXJuaW5nIGlzS2luZE9mQ2xhc3M6W1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGFzc11dKTsKQEAg
LTEzNCwyMSArMTI0LDYgQEAgc3RhdGljIENvbG9yVHlwZSAqY29sb3JGb3JJdGVtKFdhcm5pbmdJ
dAogICAgIHJldHVybiBuaWw7CiB9CiAKLXN0YXRpYyB2b2lkIHJlcGxhY2UoTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyAqc3RyaW5nLCBOU1N0cmluZyAqdG9SZXBsYWNlLCBOU1N0cmluZyAqcmVw
bGFjZVdpdGgpCi17Ci0gICAgW3N0cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmlu
Zy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0b1JlcGxhY2VdIHdpdGhTdHJpbmc6cmVwbGFjZVdpdGhd
OwotfQotCi1zdGF0aWMgdm9pZCBhZGRMaW5rQW5kUmVwbGFjZShOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nICpzdHJpbmcsIE5TU3RyaW5nICp0b1JlcGxhY2UsIE5TU3RyaW5nICpyZXBsYWNlV2l0
aCwgTlNVUkwgKmxpbmtUYXJnZXQpCi17Ci0gICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAq
c3RyaW5nV2l0aExpbmsgPSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFN0cmluZzpyZXBsYWNlV2l0aF0gYXV0b3JlbGVhc2VdOwotICAgIFtzdHJpbmdXaXRoTGlu
ayBhZGRBdHRyaWJ1dGVzOkB7Ci0gICAgICAgIE5TTGlua0F0dHJpYnV0ZU5hbWU6IGxpbmtUYXJn
ZXQsCi0gICAgICAgIE5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lOiBAMQotICAgIH0gcmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgcmVwbGFjZVdpdGgubGVuZ3RoKV07Ci0gICAgW3N0cmluZyByZXBs
YWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0b1JlcGxh
Y2VdIHdpdGhBdHRyaWJ1dGVkU3RyaW5nOnN0cmluZ1dpdGhMaW5rXTsKLX0KLQogQGludGVyZmFj
ZSBXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9pbnQgOiBWaWV3VHlwZQogQGVuZAogCkBAIC0x
OTgsNzMgKzE3Myw2IEBAIC0gKE5TU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6ZQogCiBAZW5kCiAK
LXN0YXRpYyBOU1VSTCAqcmVwb3J0QW5FcnJvclVSTChjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2lu
Z1Jlc3VsdCYgcmVzdWx0KQotewotICAgIHJldHVybiBXZWJDb3JlOjpVUkwoeyB9LCBtYWtlU3Ry
aW5nKHJlc3VsdC5yZXBvcnRBbkVycm9yVVJMQmFzZSgpLCAiJnVybD0iLCBlbmNvZGVXaXRoVVJM
RXNjYXBlU2VxdWVuY2VzKHJlc3VsdC51cmwoKSksICImaGw9IiwgZGVmYXVsdExhbmd1YWdlKCkp
KTsKLX0KLQotc3RhdGljIE5TVVJMICptYWx3YXJlRGV0YWlsc1VSTChjb25zdCBXZWJLaXQ6OlNh
ZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0KQotewotICAgIHJldHVybiBXZWJDb3JlOjpVUkwoeyB9
LCBtYWtlU3RyaW5nKHJlc3VsdC5tYWx3YXJlRGV0YWlsc1VSTEJhc2UoKSwgIiZzaXRlPSIsIHJl
c3VsdC51cmwoKS5ob3N0KCksICImaGw9IiwgZGVmYXVsdExhbmd1YWdlKCkpKTsKLX0KLQotc3Rh
dGljIE5TU3RyaW5nICp0aXRsZVRleHQoY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQm
IHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0LmlzUGhpc2hpbmcoKSkKLSAgICAgICAgcmV0dXJu
IFdFQl9VSV9OU1NUUklORyhAIkRlY2VwdGl2ZSBXZWJzaXRlIFdhcm5pbmciLCAiUGhpc2hpbmcg
d2FybmluZyB0aXRsZSIpOwotICAgIGlmIChyZXN1bHQuaXNNYWx3YXJlKCkpCi0gICAgICAgIHJl
dHVybiBXRUJfVUlfTlNTVFJJTkcoQCJNYWx3YXJlIFdlYnNpdGUgV2FybmluZyIsICJNYWx3YXJl
IHdhcm5pbmcgdGl0bGUiKTsKLSAgICBBU1NFUlQocmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSgp
KTsKLSAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiV2Vic2l0ZSBXaXRoIEhhcm1mdWwgU29m
dHdhcmUgV2FybmluZyIsICJVbndhbnRlZCBzb2Z0d2FyZSB3YXJuaW5nIHRpdGxlIik7Ci19Ci0K
LXN0YXRpYyBOU1N0cmluZyAqd2FybmluZ1RleHQoY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdS
ZXN1bHQmIHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0LmlzUGhpc2hpbmcoKSkKLSAgICAgICAg
cmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIlRoaXMgd2Vic2l0ZSBtYXkgdHJ5IHRvIHRyaWNrIHlv
dSBpbnRvIGRvaW5nIHNvbWV0aGluZyBkYW5nZXJvdXMsIGxpa2UgaW5zdGFsbGluZyBzb2Z0d2Fy
ZSBvciBkaXNjbG9zaW5nIHBlcnNvbmFsIG9yIGZpbmFuY2lhbCBpbmZvcm1hdGlvbiwgbGlrZSBw
YXNzd29yZHMsIHBob25lIG51bWJlcnMsIG9yIGNyZWRpdCBjYXJkcy4iLCAiUGhpc2hpbmcgd2Fy
bmluZyIpOwotICAgIGlmIChyZXN1bHQuaXNNYWx3YXJlKCkpCi0gICAgICAgIHJldHVybiBXRUJf
VUlfTlNTVFJJTkcoQCJUaGlzIHdlYnNpdGUgbWF5IGF0dGVtcHQgdG8gaW5zdGFsbCBkYW5nZXJv
dXMgc29mdHdhcmUsIHdoaWNoIGNvdWxkIGhhcm0geW91ciBjb21wdXRlciBvciBzdGVhbCB5b3Vy
IHBlcnNvbmFsIG9yIGZpbmFuY2lhbCBpbmZvcm1hdGlvbiwgbGlrZSBwYXNzd29yZHMsIHBob3Rv
cywgb3IgY3JlZGl0IGNhcmRzLiIsICJNYWx3YXJlIHdhcm5pbmciKTsKLSAgICBBU1NFUlQocmVz
dWx0LmlzVW53YW50ZWRTb2Z0d2FyZSgpKTsKLSAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAi
VGhpcyB3ZWJzaXRlIG1heSB0cnkgdG8gdHJpY2sgeW91IGludG8gaW5zdGFsbGluZyBzb2Z0d2Fy
ZSB0aGF0IGhhcm1zIHlvdXIgYnJvd3NpbmcgZXhwZXJpZW5jZSwgbGlrZSBjaGFuZ2luZyB5b3Vy
IHNldHRpbmdzIHdpdGhvdXQgeW91ciBwZXJtaXNzaW9uIG9yIHNob3dpbmcgeW91IHVud2FudGVk
IGFkcy4gT25jZSBpbnN0YWxsZWQsIGl0IG1heSBiZSBkaWZmaWN1bHQgdG8gcmVtb3ZlLiIsICJV
bndhbnRlZCBzb2Z0d2FyZSB3YXJuaW5nIik7Ci19Ci0KLXN0YXRpYyBOU011dGFibGVBdHRyaWJ1
dGVkU3RyaW5nICpkZXRhaWxzVGV4dChjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYg
cmVzdWx0KQotewotICAgIGlmIChyZXN1bHQuaXNQaGlzaGluZygpKSB7Ci0gICAgICAgIE5TU3Ry
aW5nICpwaGlzaGluZ0Rlc2NyaXB0aW9uID0gV0VCX1VJX05TU1RSSU5HKEAiV2FybmluZ3MgYXJl
IHNob3duIGZvciB3ZWJzaXRlcyB0aGF0IGhhdmUgYmVlbiByZXBvcnRlZCBhcyBkZWNlcHRpdmUu
IERlY2VwdGl2ZSB3ZWJzaXRlcyB0cnkgdG8gdHJpY2sgeW91IGludG8gYmVsaWV2aW5nIHRoZXkg
YXJlIGxlZ2l0aW1hdGUgd2Vic2l0ZXMgeW91IHRydXN0LiIsICJQaGlzaGluZyB3YXJuaW5nIGRl
c2NyaXB0aW9uIik7Ci0gICAgICAgIE5TU3RyaW5nICpsZWFybk1vcmUgPSBXRUJfVUlfTlNTVFJJ
TkcoQCJMZWFybiBtb3Jl4oCmIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIp
OwotICAgICAgICBOU1N0cmluZyAqcGhpc2hpbmdBY3Rpb25zID0gV0VCX1VJX05TU1RSSU5HKEAi
SWYgeW91IGJlbGlldmUgdGhpcyB3ZWJzaXRlIGlzIHNhZmUsIHlvdSBjYW4gJXJlcG9ydC1hbi1l
cnJvciUuIE9yLCBpZiB5b3UgdW5kZXJzdGFuZCB0aGUgcmlza3MgaW52b2x2ZWQsIHlvdSBjYW4g
JWJ5cGFzcy1saW5rJS4iLCAiUGhpc2hpbmcgd2FybmluZyBkZXNjcmlwdGlvbiIpOwotICAgICAg
ICBOU1N0cmluZyAqcmVwb3J0QW5FcnJvciA9IFdFQl9VSV9OU1NUUklORyhAInJlcG9ydCBhbiBl
cnJvciIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKLSAgICAgICAgTlNT
dHJpbmcgKnZpc2l0VW5zYWZlV2Vic2l0ZSA9IFdFQl9VSV9OU1NUUklORyhAInZpc2l0IHRoaXMg
dW5zYWZlIHdlYnNpdGUiLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIik7Ci0g
ICAgICAgIAotICAgICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3Ry
aW5nID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlQFxuXG4lQCIsIHBoaXNoaW5nRGVzY3Jp
cHRpb24sIGxlYXJuTW9yZSwgcGhpc2hpbmdBY3Rpb25zXV0gYXV0b3JlbGVhc2VdOwotICAgICAg
ICBhZGRMaW5rQW5kUmVwbGFjZShhdHRyaWJ1dGVkU3RyaW5nLCBsZWFybk1vcmUsIGxlYXJuTW9y
ZSwgcmVzdWx0LmxlYXJuTW9yZVVSTCgpKTsKLSAgICAgICAgYWRkTGlua0FuZFJlcGxhY2UoYXR0
cmlidXRlZFN0cmluZywgQCIlcmVwb3J0LWFuLWVycm9yJSIsIHJlcG9ydEFuRXJyb3IsIHJlcG9y
dEFuRXJyb3JVUkwocmVzdWx0KSk7Ci0gICAgICAgIGFkZExpbmtBbmRSZXBsYWNlKGF0dHJpYnV0
ZWRTdHJpbmcsIEAiJWJ5cGFzcy1saW5rJSIsIHZpc2l0VW5zYWZlV2Vic2l0ZSwgdmlzaXRVbnNh
ZmVXZWJzaXRlU2VudGluZWwoKSk7Ci0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOwot
ICAgIH0KLSAgICAKLSAgICBhdXRvIG1hbHdhcmVPclVud2FudGVkU29mdHdhcmVEZXRhaWxzID0g
W10gKGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQsIE5TU3RyaW5nICpk
ZXNjcmlwdGlvbiwgTlNTdHJpbmcgKnN0YXR1c1N0cmluZ1RvUmVwbGFjZSwgYm9vbCBjb25maXJt
TWFsd2FyZSkgewotICAgICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICptYWx3YXJlRGVz
Y3JpcHRpb24gPSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpkZXNjcmlwdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgICAgICByZXBsYWNlKG1hbHdhcmVE
ZXNjcmlwdGlvbiwgQCIlc2FmZUJyb3dzaW5nUHJvdmlkZXIlIiwgcmVzdWx0LmxvY2FsaXplZFBy
b3ZpZGVyTmFtZSgpKTsKLSAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RhdHVz
TGluayA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
OldFQl9VSV9OU1NUUklORyhAInRoZSBzdGF0dXMgb2Yg4oCcJXNpdGUl4oCdIiwgIlBhcnQgb2Yg
bWFsd2FyZSBkZXNjcmlwdGlvbiIpXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIHJlcGxhY2Uoc3Rh
dHVzTGluaywgQCIlc2l0ZSUiLCByZXN1bHQudXJsKCkuaG9zdCgpLnRvU3RyaW5nKCkpOwotICAg
ICAgICBhZGRMaW5rQW5kUmVwbGFjZShtYWx3YXJlRGVzY3JpcHRpb24sIHN0YXR1c1N0cmluZ1Rv
UmVwbGFjZSwgc3RhdHVzTGluay5zdHJpbmcsIG1hbHdhcmVEZXRhaWxzVVJMKHJlc3VsdCkpOwot
ICAgICAgICAKLSAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqaWZZb3VVbmRlcnN0
YW5kID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
V0VCX1VJX05TU1RSSU5HKEAiSWYgeW91IHVuZGVyc3RhbmQgdGhlIHJpc2tzIGludm9sdmVkLCB5
b3UgY2FuICV2aXNpdC10aGlzLXVuc2FmZS1zaXRlLWxpbmslLiIsICJBY3Rpb24gZnJvbSBzYWZl
IGJyb3dzaW5nIHdhcm5pbmciKV0gYXV0b3JlbGVhc2VdOwotICAgICAgICBhZGRMaW5rQW5kUmVw
bGFjZShpZllvdVVuZGVyc3RhbmQsIEAiJXZpc2l0LXRoaXMtdW5zYWZlLXNpdGUtbGluayUiLCBX
RUJfVUlfTlNTVFJJTkcoQCJ2aXNpdCB0aGlzIHVuc2FmZSB3ZWJzaXRlIiwgIkFjdGlvbiBmcm9t
IHNhZmUgYnJvd3Npbmcgd2FybmluZyIpLCBjb25maXJtTWFsd2FyZSA/IGNvbmZpcm1NYWx3YXJl
U2VudGluZWwoKSA6IHZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkpOwotICAgICAgICAKLSAg
ICAgICAgW21hbHdhcmVEZXNjcmlwdGlvbiBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltbW05TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiXG5cbiJdIGF1dG9y
ZWxlYXNlXV07Ci0gICAgICAgIFttYWx3YXJlRGVzY3JpcHRpb24gYXBwZW5kQXR0cmlidXRlZFN0
cmluZzppZllvdVVuZGVyc3RhbmRdOwotICAgICAgICByZXR1cm4gbWFsd2FyZURlc2NyaXB0aW9u
OwotICAgIH07Ci0gICAgCi0gICAgaWYgKHJlc3VsdC5pc01hbHdhcmUoKSkKLSAgICAgICAgcmV0
dXJuIG1hbHdhcmVPclVud2FudGVkU29mdHdhcmVEZXRhaWxzKHJlc3VsdCwgV0VCX1VJX05TU1RS
SU5HKEAiV2FybmluZ3MgYXJlIHNob3duIGZvciB3ZWJzaXRlcyB3aGVyZSBtYWxpY2lvdXMgc29m
dHdhcmUgaGFzIGJlZW4gZGV0ZWN0ZWQuIFlvdSBjYW4gY2hlY2sgdGhlICVzdGF0dXMtbGluayUg
b24gdGhlICVzYWZlQnJvd3NpbmdQcm92aWRlciUgZGlhZ25vc3RpYyBwYWdlLiIsICJNYWx3YXJl
IHdhcm5pbmcgZGVzY3JpcHRpb24iKSwgQCIlc3RhdHVzLWxpbmslIiwgdHJ1ZSk7Ci0gICAgQVNT
RVJUKHJlc3VsdC5pc1Vud2FudGVkU29mdHdhcmUoKSk7Ci0gICAgcmV0dXJuIG1hbHdhcmVPclVu
d2FudGVkU29mdHdhcmVEZXRhaWxzKHJlc3VsdCwgV0VCX1VJX05TU1RSSU5HKEAiV2FybmluZ3Mg
YXJlIHNob3duIGZvciB3ZWJzaXRlcyB3aGVyZSBoYXJtZnVsIHNvZnR3YXJlIGhhcyBiZWVuIGRl
dGVjdGVkLiBZb3UgY2FuIGNoZWNrICV0aGUtc3RhdHVzLW9mLXNpdGUlIG9uIHRoZSAlc2FmZUJy
b3dzaW5nUHJvdmlkZXIlIGRpYWdub3N0aWMgcGFnZS4iLCAiVW53YW50ZWQgc29mdHdhcmUgd2Fy
bmluZyBkZXNjcmlwdGlvbiIpLCBAIiV0aGUtc3RhdHVzLW9mLXNpdGUlIiwgZmFsc2UpOwotfQot
CiBzdGF0aWMgQnV0dG9uVHlwZSAqbWFrZUJ1dHRvbihXYXJuaW5nSXRlbSBpdGVtLCBXS1NhZmVC
cm93c2luZ1dhcm5pbmcgKndhcm5pbmcsIFNFTCBhY3Rpb24pCiB7CiAgICAgTlNTdHJpbmcgKnRp
dGxlID0gbmlsOwpAQCAtMzI1LDE0ICsyMzMsMTQgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
QXR0cmlidXRlZFN0cmluZwogCiBAaW1wbGVtZW50YXRpb24gV0tTYWZlQnJvd3NpbmdXYXJuaW5n
CiAKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihSZWN0VHlwZSlmcmFtZSBzYWZlQnJv
d3NpbmdSZXN1bHQ6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29t
cGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNv
bnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcgor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KFJlY3RUeXBlKWZyYW1lIHNhZmVCcm93c2lu
Z1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZyYpd2FybmluZyBjb21w
bGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29u
dGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyCiB7
CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXSkpIHsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7CiAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogICAgIF9jb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpOwotICAgIF9yZXN1bHQgPSBtYWtlUmVmKHJlc3VsdCk7Cisg
ICAgX3dhcm5pbmcgPSBtYWtlUmVmKHdhcm5pbmcpOwogICAgIHNldEJhY2tncm91bmQoc2VsZiwg
Y29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpCYWNrZ3JvdW5kLCBzZWxmKSk7CiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgIFtzZWxmIGFkZENvbnRlbnRdOwpAQCAtMzQzLDggKzI1MSw4IEBAIC0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihSZWN0VHlwZSkKIC0gKHZvaWQpYWRkQ29udGVudAog
ewogICAgIGF1dG8gZXhjbGFtYXRpb25Qb2ludCA9IFtbV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlv
blBvaW50IG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1dG8gdGl0bGUgPSBtYWtlVGl0bGVMYWJl
bCh0aXRsZVRleHQoKl9yZXN1bHQpLCBzZWxmKTsKLSAgICBhdXRvIHdhcm5pbmcgPSBbW1tXS1Nh
ZmVCcm93c2luZ1RleHRWaWV3IGFsbG9jXSBpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp3YXJuaW5nVGV4dCgqX3Jlc3Vs
dCkgYXR0cmlidXRlczpAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250
T2ZTaXplOnRleHRTaXplXSB9XSBhdXRvcmVsZWFzZV0gZm9yV2FybmluZzpzZWxmXSBhdXRvcmVs
ZWFzZV07CisgICAgYXV0byB0aXRsZSA9IG1ha2VUaXRsZUxhYmVsKF93YXJuaW5nLT50aXRsZSgp
LCBzZWxmKTsKKyAgICBhdXRvIHdhcm5pbmcgPSBbW1tXS1NhZmVCcm93c2luZ1RleHRWaWV3IGFs
bG9jXSBpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzpfd2FybmluZy0+d2FybmluZygpIGF0dHJpYnV0ZXM6QHsgTlNGb250
QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0gfV0gYXV0
b3JlbGVhc2VdIGZvcldhcm5pbmc6c2VsZl0gYXV0b3JlbGVhc2VdOwogICAgIGF1dG8gc2hvd0Rl
dGFpbHMgPSBtYWtlQnV0dG9uKFdhcm5pbmdJdGVtOjpTaG93RGV0YWlsc0J1dHRvbiwgc2VsZiwg
QHNlbGVjdG9yKHNob3dEZXRhaWxzQ2xpY2tlZCkpOwogICAgIGF1dG8gZ29CYWNrID0gbWFrZUJ1
dHRvbihXYXJuaW5nSXRlbTo6R29CYWNrQnV0dG9uLCBzZWxmLCBAc2VsZWN0b3IoZ29CYWNrQ2xp
Y2tlZCkpOwogICAgIGF1dG8gYm94ID0gW1tWaWV3VHlwZSBuZXddIGF1dG9yZWxlYXNlXTsKQEAg
LTM5NSw3ICszMDMsNyBAQCAtICh2b2lkKXNob3dEZXRhaWxzQ2xpY2tlZAogICAgIEJ1dHRvblR5
cGUgKnNob3dEZXRhaWxzID0gYm94LnN1YnZpZXdzLmxhc3RPYmplY3Q7CiAgICAgW3Nob3dEZXRh
aWxzIHJlbW92ZUZyb21TdXBlcnZpZXddOwogCi0gICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyAqdGV4dCA9IGRldGFpbHNUZXh0KCpfcmVzdWx0KTsKKyAgICBOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nICp0ZXh0ID0gW1tfd2FybmluZy0+ZGV0YWlscygpIG11dGFibGVDb3B5XSBhdXRvcmVs
ZWFzZV07CiAgICAgW3RleHQgYWRkQXR0cmlidXRlczpAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltG
b250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXSB9IHJhbmdlOk5TTWFrZVJhbmdlKDAs
IHRleHQubGVuZ3RoKV07CiAgICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqZGV0YWlscyA9IFtb
W1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgYWxsb2NdIGluaXRXaXRoQXR0cmlidXRlZFN0cmluZzp0
ZXh0IGZvcldhcm5pbmc6c2VsZl0gYXV0b3JlbGVhc2VdOwogICAgIFtfdGV4dFZpZXdzIGFkZE9i
amVjdDpkZXRhaWxzXTsKQEAgLTUwMywxMCArNDExLDEwIEBAIC0gKHZvaWQpY2xpY2tlZE9uTGlu
azooTlNVUkwgKilsaW5rCiAgICAgaWYgKCFfY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChbbGluayBpc0VxdWFsOnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVs
KCldKQorICAgIGlmIChbbGluayBpc0VxdWFsOldlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6
dmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKV0pCiAgICAgICAgIHJldHVybiBfY29tcGxldGlv
bkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7CiAKLSAgICBpZiAoW2xp
bmsgaXNFcXVhbDpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCldKSB7CisgICAgaWYgKFtsaW5rIGlz
RXF1YWw6V2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjb25maXJtTWFsd2FyZVNlbnRpbmVs
KCldKSB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBhdXRvIGFsZXJ0ID0gYWRvcHROUyhb
TlNBbGVydCBuZXddKTsKICAgICAgICAgW2FsZXJ0IHNldE1lc3NhZ2VUZXh0OldFQl9VSV9OU1NU
UklORyhAIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBnbyB0byB0aGlzIHNpdGU/IiwgIk1hbHdh
cmUgY29uZmlybWF0aW9uIGRpYWxvZyB0aXRsZSIpXTsKQEAgLTU0MSw3ICs0NDksNyBAQCAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nCiAgICAgc2VsZi5kZWxlZ2F0ZSA9
IHdhcm5pbmc7CiAKICAgICBDb2xvclR5cGUgKmZvcmVncm91bmRDb2xvciA9IGNvbG9yRm9ySXRl
bShXYXJuaW5nSXRlbTo6TWVzc2FnZVRleHQsIHdhcm5pbmcpOwotICAgIE5TTXV0YWJsZUF0dHJp
YnV0ZWRTdHJpbmcgKnN0cmluZyA9IFthdHRyaWJ1dGVkU3RyaW5nIG11dGFibGVDb3B5XTsKKyAg
ICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbW2F0dHJpYnV0ZWRTdHJpbmcg
bXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZXM6QHsg
TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH0gcmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCldOwogICAgIFtzZWxmIHNldEJhY2tncm91bmRD
b2xvcjpjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkJveEJhY2tncm91bmQsIHdhcm5pbmcpXTsK
ICAgICBbc2VsZiBzZXRMaW5rVGV4dEF0dHJpYnV0ZXM6QHsgTlNGb3JlZ3JvdW5kQ29sb3JBdHRy
aWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH1dOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0JKHJldmlzaW9uIDIzODEx
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW1wb3J0ICJEYXRhRGV0ZWN0aW9u
UmVzdWx0LmgiCiAjaW1wb3J0ICJMb2FkUGFyYW1ldGVycy5oIgogI2ltcG9ydCAiUGFnZUNsaWVu
dC5oIgotI2ltcG9ydCAiU2FmZUJyb3dzaW5nUmVzdWx0LmgiCiAjaW1wb3J0ICJTYWZlQnJvd3Np
bmdTUEkuaCIKKyNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbXBvcnQgIldlYlBy
b2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29yZS9EcmFnSXRlbS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpAQCAtODQsMTIgKzg0LDEzIEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpiZWdpblNhZmVCcm93c2luZ0NoZWMKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIE5TQXJyYXk8U1NCU2VydmljZUxvb2t1cFJlc3VsdCAq
PiAqcmVzdWx0cyA9IFtyZXN1bHQgc2VydmljZUxvb2t1cFJlc3VsdHNdOwotICAgICAgICAgICAg
VmVjdG9yPFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+PiByZXN1bHRzVmVjdG9yOwotICAgICAgICAg
ICAgcmVzdWx0c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KFtyZXN1bHRzIGNvdW50XSk7
Ci0gICAgICAgICAgICBmb3IgKFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCBpbiByZXN1
bHRzKQotICAgICAgICAgICAgICAgIHJlc3VsdHNWZWN0b3IudW5jaGVja2VkQXBwZW5kKFNhZmVC
cm93c2luZ1Jlc3VsdDo6Y3JlYXRlKFVSTCh1cmwpLCByZXN1bHQpKTsKLSAgICAgICAgICAgIGxp
c3RlbmVyLT5kaWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyhXVEZNb3ZlKHJlc3VsdHNWZWN0
b3IpKTsKKyAgICAgICAgICAgIGZvciAoU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqbG9va3VwUmVz
dWx0IGluIFtyZXN1bHQgc2VydmljZUxvb2t1cFJlc3VsdHNdKSB7CisgICAgICAgICAgICAgICAg
aWYgKGxvb2t1cFJlc3VsdC5pc1BoaXNoaW5nIHx8IGxvb2t1cFJlc3VsdC5pc01hbHdhcmUgfHwg
bG9va3VwUmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSkgeworICAgICAgICAgICAgICAgICAgICBs
aXN0ZW5lci0+ZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoU2FmZUJyb3dzaW5nV2Fybmlu
Zzo6Y3JlYXRlKHVybCwgbG9va3VwUmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaXN0ZW5l
ci0+ZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoeyB9KTsKICAgICAgICAgfSk7CiAgICAg
fSkuZ2V0KCldOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjM4MTE0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdTY2FsZShDR0Zsb2F0KTsKICAgICBDR0Zsb2F0IHZp
ZXdTY2FsZSgpIGNvbnN0OwogCi0gICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25z
dCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8Q29u
dGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKTsKKyAgICB2b2lkIHNob3dTYWZl
QnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1dhcm5pbmcmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZhcmlhbnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYm
KTsKICAgICB2b2lkIGNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpOwogCiAgICAgV0tMYXlvdXRN
b2RlIGxheW91dE1vZGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlZpZXdJbXBsLm1tCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYwNiwx
MiArMTYwNiwxMiBAQCBib29sIFdlYlZpZXdJbXBsOjpyZXNpZ25GaXJzdFJlc3BvbmRlcigpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdX
YXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZhcmlhbnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJWaWV3SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5p
bmcoY29uc3QgU2FmZUJyb3dzaW5nV2FybmluZyYgd2FybmluZywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWYXJpYW50PENvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIW1fdmlldykKICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsKIAotICAgIG1fc2FmZUJyb3dz
aW5nV2FybmluZyA9IGFkb3B0TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6W21fdmlldyBib3VuZHNdIHNhZmVCcm93c2luZ1Jlc3VsdDpyZXN1bHQgY29tcGxl
dGlvbkhhbmRsZXI6W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJs
ZSB7CisgICAgbV9zYWZlQnJvd3NpbmdXYXJuaW5nID0gYWRvcHROUyhbW1dLU2FmZUJyb3dzaW5n
V2FybmluZyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbbV92aWV3IGJvdW5kc10gc2FmZUJyb3dzaW5n
V2FybmluZzp3YXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOlt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KGF1dG8mJiByZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAod2Vha1RoaXMpCiAgICAgICAg
ICAgICBbc3RkOjpleGNoYW5nZSh3ZWFrVGhpcy0+bV9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxs
cHRyKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShyZXN1bHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5oCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcg
KzExNSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclRleHRJbmRpY2F0b3IoV2ViQ29yZTo6
VGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3NhbEFuaW1hdGlvbikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJvZ3Jlc3MoZmxvYXQpIG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxv
YWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2hvd1NhZmVCcm93
c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nV2FybmluZyYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYm
KT4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBM
YXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCShyZXZpc2lvbiAyMzgxMTUpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQ3MywxMCArNDczLDEwIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmVudGVyQWNj
ZWxlcmF0ZWRDb20KIHsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJM
PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dTYWZl
QnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1dhcm5pbmcmIHdhcm5pbmcsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2Vi
Q29yZTo6VVJMPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoYXV0byB3ZWJW
aWV3ID0gbV93ZWJWaWV3LmdldCgpKQotICAgICAgICBbd2ViVmlldyBfc2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmc6cmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXTsKKyAgICAgICAgW3dlYlZpZXcgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOndhcm5pbmcg
Y29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildOwogICAgIGVsc2UK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpObyk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMu
aAkocmV2aXNpb24gMjM4MTE0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcmVzZXRTZWN1cmVJbnB1dFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBu
b3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzZWxlY3Rpb25EaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNob3dTYWZl
QnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJM
PiYmKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25z
dCBTYWZlQnJvd3NpbmdXYXJuaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdl
YktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKSBvdmVycmlkZTsK
ICAgICB2b2lkIGNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpIG92ZXJyaWRlOwogICAgIAogI2lm
IFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGxNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tCShyZXZpc2lvbiAyMzgxMTUpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4
OSwxMSArNDg5LDExIEBAIFJlZjxWYWxpZGF0aW9uQnViYmxlPiBQYWdlQ2xpZW50SW1wbDo6Y3IK
ICAgICByZXR1cm4gVmFsaWRhdGlvbkJ1YmJsZTo6Y3JlYXRlKG1fdmlldywgbWVzc2FnZSwgc2V0
dGluZ3MpOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2Fybmlu
Zyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nV2FybmluZyYgd2FybmluZywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpV
Ukw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghbV9pbXBsKQogICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZZXMpOwotICAg
IG1faW1wbC0+c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcocmVzdWx0LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CisgICAgbV9pbXBsLT5zaG93U2FmZUJyb3dzaW5nV2FybmluZyh3YXJuaW5n
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6
OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRv
d25NYWMubW0JKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKSAmJiBVU0UoQVBQ
S0lUKQogCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvSW50UmVj
dC5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU0NvbG9yU1BJLmg+CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjM4MTE0KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTA1OCw3ICsxMDU4LDcgQEAKIAkJNUM5RTU2ODMxREY3RjFC
MzAwQzlFRTMzIC8qIFdLV2Vic2l0ZVBvbGljaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTY4MTFERjdGMDU1MDBDOUVFMzMgLyogV0tXZWJz
aXRlUG9saWNpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1Q0EyNkQ4MTIxN0FCRDVCMDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0EyNkQ4
MDIxN0FCQkI2MDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmggKi87IH07CiAJCTVD
QTI2RDgzMjE3QUQxQjgwMEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0EyNkQ3RjIxN0FCQkI2
MDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tICovOyB9OwotCQk1Q0E5ODU0QTIx
MEJFQjY0MDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyog
U2FmZUJyb3dzaW5nUmVzdWx0LmggKi87IH07CisJCTVDQTk4NTRBMjEwQkVCNjQwMDU3RUI2QiAv
KiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2Fy
bmluZy5oICovOyB9OwogCQk1Q0FEREUwNTIxNTA0NkJEMDA2N0QzMDkgLyogV0tXZWJQcm9jZXNz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qzc0MzAw
RTIxNTAwNDkyMDA0QkZBMTcgLyogV0tXZWJQcm9jZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNBRkRFNDUyMTMwODQ2MzAwQjFGN0UxIC8q
IF9XS0luc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNBRkRFNDIyMTMwODQzNTAwQjFGN0UxIC8qIF9XS0luc3BlY3Rvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDQUZERTQ3MjEzMDg0
NkEwMEIxRjdFMSAvKiBfV0tJbnNwZWN0b3JJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNBRkRFNDQyMTMwODQzNjAwQjFGN0UxIC8qIF9X
S0luc3BlY3RvckludGVybmFsLmggKi87IH07CkBAIC0zNDM1LDggKzM0MzUsOCBAQAogCQk1QzlF
NTY4MTFERjdGMDU1MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlUG9saWNpZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUNBMjZEN0YyMTdBQkJCNjAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5n
V2FybmluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLU2Fm
ZUJyb3dzaW5nV2FybmluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNBMjZE
ODAyMTdBQkJCNjAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5nV2FybmluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS1NhZmVCcm93c2luZ1dhcm5pbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNBOTg1NDkyMTBCRUI1QTAwNTdFQjZCIC8qIFNhZmVCcm93
c2luZ1Jlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYWZlQnJvd3Np
bmdSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNBOTg1NEIyMTBCRUI3
MzAwNTdFQjZCIC8qIFNhZmVCcm93c2luZ1Jlc3VsdENvY29hLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2FmZUJyb3dzaW5nUmVzdWx0Q29jb2EubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQTk4NTQ5MjEwQkVCNUEwMDU3RUI2QiAvKiBTYWZl
QnJvd3NpbmdXYXJuaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhZmVC
cm93c2luZ1dhcm5pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNBOTg1NEIy
MTBCRUI3MzAwNTdFQjZCIC8qIFNhZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNhZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNBRERFMEQyMTUxQUEwMTAwNjdEMzA5
IC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbi5oOyBw
YXRoID0gQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0FGREU0MjIxMzA4NDM1MDBCMUY3RTEg
LyogX1dLSW5zcGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0lu
c3BlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0FGREU0MzIxMzA4NDM2
MDBCMUY3RTEgLyogX1dLSW5zcGVjdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gX1dLSW5zcGVjdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTI2NCw3ICs1MjY0LDcgQEAKIAkJCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCUNEQTI5QTFGMUNC
RUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJ
ODM3QTY2MDAyMEUyQUQ4NDAwQTlEQkQ4IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZUNvY29hLm1tICovLAotCQkJCTVDQTk4NTRCMjEwQkVCNzMwMDU3RUI2QiAvKiBTYWZlQnJv
d3NpbmdSZXN1bHRDb2NvYS5tbSAqLywKKwkJCQk1Q0E5ODU0QjIxMEJFQjczMDA1N0VCNkIgLyog
U2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tICovLAogCQkJCTFBMDAyRDQ3MTk2QjM0NUQwMEI5
QUQ0NCAvKiBTZXNzaW9uU3RhdGVDb2RpbmcuaCAqLywKIAkJCQkxQTAwMkQ0NjE5NkIzNDVEMDBC
OUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLm1tICovLAogCQkJCTMxNTcxMzVDMjA0MEE5QjIw
MDg0RjlDRiAvKiBTeXN0ZW1QcmV2aWV3Q29udHJvbGxlckNvY29hLm1tICovLApAQCAtNzI1Miw3
ICs3MjUyLDcgQEAKIAkJCQk1MUU2QzE2MTFGMjkzNUNEMDBGRDM0MzcgLyogUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggKi8sCiAJCQkJQkMxMTFCMDgxMTJGNUUzQzAw
MzM3QkFCIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuY3BwICovLAogCQkJCTFBMzAwNjZDMTExMEY0
RjcwMDMxOTM3QyAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmggKi8sCi0JCQkJNUNBOTg1NDkyMTBC
RUI1QTAwNTdFQjZCIC8qIFNhZmVCcm93c2luZ1Jlc3VsdC5oICovLAorCQkJCTVDQTk4NTQ5MjEw
QkVCNUEwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggKi8sCiAJCQkJNDE0REVERDYx
RjlFRERFMDAwNDdDNDBEIC8qIFNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkuY3BwICovLAogCQkJ
CTQxNERFREQ1MUY5RUREREYwMDQ3QzQwRCAvKiBTZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5Lmgg
Ki8sCiAJCQkJNTFBNEQ1QTgxNkNBQzRGRjAwMEU2MTVFIC8qIFN0YXRpc3RpY3NSZXF1ZXN0LmNw
cCAqLywKQEAgLTkxNjEsOCArOTE2MSw4IEBACiAJCQkJNTFFNkMxNjQxRjI5MzVERDAwRkQzNDM3
IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzMDA2NkUxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxMDQ4MkNFMURERDMyNEYwMEYwMDZEMCAvKiBSVENOZXR3
b3JrLmggaW4gSGVhZGVycyAqLywKLQkJCQk1Q0E5ODU0QTIxMEJFQjY0MDA1N0VCNkIgLyogU2Fm
ZUJyb3dzaW5nUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRTk3RDc0RDIwMEU5MDA0MDBC
RjY2NDMgLyogU2FmZUJyb3dzaW5nU1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0E5ODU0QTIx
MEJFQjY0MDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMyRDAyMTcxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFCNEE4RDEyOTZGMEEyMDAyMzk1MkYgLyogU2FuZGJv
eEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFNTUyQzUxNkFFMDY1RjAwNEVENjUz
IC8qIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gMjM4MTQ5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTgtMTEtMTMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBBZGQgU1BJIHRvIHNob3cgYSBzYWZlIGJyb3dzaW5nIHdhcm5pbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTYwNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW06CisgICAgICAgIChURVNU
KToKKwogMjAxOC0xMS0xMyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBbaU9TXSBEbyBub3Qgc2hvdyBzZWxlY3Rpb24gVUkgZm9yIGVkaXRhYmxlIGVs
ZW1lbnRzIHdpdGggb3BhY2l0eSBuZWFyIHplcm8KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tCShyZXZpc2lvbiAy
MzgxMTUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhZmVCcm93
c2luZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw0NCBAQCBURVNUKFNhZmVCcm93
c2luZywgTmF2aWdhdGlvbkNsZWFyc1dhcm5pCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNwaW5SdW5Mb29wKCk7CiB9CiAKK1RFU1QoU2FmZUJyb3dzaW5nLCBTaG93V2FybmluZ1NQSSkK
K3sKKyAgICBfX2Jsb2NrIGJvb2wgY29tcGxldGlvbkhhbmRsZXJDYWxsZWQgPSBmYWxzZTsKKyAg
ICBfX2Jsb2NrIEJPT0wgc2hvdWxkQ29udGludWU7CisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNV
Ukw+IHVybENsaWNrZWQ7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbV0tXZWJWaWV3IG5l
d10pOworICAgIGF1dG8gc2hvd1dhcm5pbmcgPSBeeworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
ckNhbGxlZCA9IGZhbHNlOworICAgICAgICBbd2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmdXaXRoVGl0bGU6QCJ0ZXN0IHRpdGxlIiB3YXJuaW5nOkAidGVzdCB3YXJuaW5nIiBkZXRhaWxz
OltbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJ0ZXN0IGRldGFp
bHMiXSBhdXRvcmVsZWFzZV0gY29tcGxldGlvbkhhbmRsZXI6XihCT09MIGZpcnN0UGFyYW1ldGVy
LCBOU1VSTCAqc2Vjb25kUGFyYW1ldGVyKSB7CisgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9
IGZpcnN0UGFyYW1ldGVyOworICAgICAgICAgICAgdXJsQ2xpY2tlZCA9IHNlY29uZFBhcmFtZXRl
cjsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAg
fV07CisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICAgICAgW1t3ZWJWaWV3IF9zYWZlQnJvd3NpbmdX
YXJuaW5nRm9yVGVzdGluZ10gZGlkTW92ZVRvV2luZG93XTsKKyNlbmRpZgorICAgIH07CisKKyAg
ICBzaG93V2FybmluZygpOworICAgIGNoZWNrVGl0bGVBbmRDbGljayhbd2ViVmlldyBfc2FmZUJy
b3dzaW5nV2FybmluZ0ZvclRlc3RpbmddLnN1YnZpZXdzLmZpcnN0T2JqZWN0LnN1YnZpZXdzWzNd
LCAiR28gQmFjayIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY29tcGxldGlvbkhh
bmRsZXJDYWxsZWQpOworICAgIEVYUEVDVF9GQUxTRShzaG91bGRDb250aW51ZSk7CisgICAgRVhQ
RUNUX1RSVUUoIXVybENsaWNrZWQpOworICAgIAorICAgIHNob3dXYXJuaW5nKCk7CisgICAgU0VM
IGNsaWNrZWRPbkxpbmsgPSBOU1NlbGVjdG9yRnJvbVN0cmluZyhAImNsaWNrZWRPbkxpbms6Iik7
CisgICAgW1t3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10gcGVyZm9ybVNl
bGVjdG9yOmNsaWNrZWRPbkxpbmsgd2l0aE9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0
dHA6Ly93ZWJraXQub3JnL3Rlc3RsaW5rIl1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmY29tcGxldGlvbkhhbmRsZXJDYWxsZWQpOworICAgIEVYUEVDVF9GQUxTRShzaG91bGRDb250
aW51ZSk7CisgICAgRVhQRUNUX1NUUkVRKFt1cmxDbGlja2VkIGFic29sdXRlU3RyaW5nXS5VVEY4
U3RyaW5nLCAiaHR0cDovL3dlYmtpdC5vcmcvdGVzdGxpbmsiKTsKKyAgICAKKyAgICBzaG93V2Fy
bmluZygpOworICAgIFtbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3RpbmddIHBl
cmZvcm1TZWxlY3RvcjpjbGlja2VkT25MaW5rIHdpdGhPYmplY3Q6W1dLV2ViVmlldyBfdmlzaXRV
bnNhZmVXZWJzaXRlU2VudGluZWxdXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNv
bXBsZXRpb25IYW5kbGVyQ2FsbGVkKTsKKyAgICBFWFBFQ1RfVFJVRShzaG91bGRDb250aW51ZSk7
CisgICAgRVhQRUNUX1RSVUUoIXVybENsaWNrZWQpOworfQorCiBAaW50ZXJmYWNlIE51bGxMb29r
dXBDb250ZXh0IDogTlNPYmplY3QKIEBlbmQKIEBpbXBsZW1lbnRhdGlvbiBOdWxsTG9va3VwQ29u
dGV4dAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354832</attachid>
            <date>2018-11-14 10:36:54 -0800</date>
            <delta_ts>2018-11-14 10:49:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191604-20181114103653.patch</filename>
            <type>text/plain</type>
            <size>85439</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzgxNTQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxOC0xMS0xNCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBTUEkgdG8g
c2hvdyBhIHNhZmUgYnJvd3Npbmcgd2FybmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNjA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5keSBF
c3Rlcy4KKworICAgICAgICBTYWZhcmkgaGFzIGEgY2FzZSB3aGVyZSBpdCBzaG93cyBzYWZlIGJy
b3dzaW5nIHdhcm5pbmdzIGZvciBhIHJlYXNvbiBvdGhlciB0aGFuIGJlaW5nIHRvbGQgdG8gYnkg
dGhlIFNhZmVCcm93c2luZyBmcmFtZXdvcmsuCisgICAgICAgIEJlY2F1c2Ugc2FmZSBicm93c2lu
ZyBpcyBtb3ZpbmcgdG8gV2ViS2l0LCB3ZSB3aWxsIGhhdmUgU2FmYXJpIGNhbGwgdGhpcyBXZWJL
aXQgU1BJIGluIHRoYXQgY2FzZS4KKyAgICAgICAgVGhlIHdhcm5pbmcgbG9va3MgYSBsaXR0bGUg
ZGlmZmVyZW50LCBzbyBJIGhhZCB0byBjaGFuZ2UgdGhlIHN0cnVjdHVyZSBvZiBhIFNhZmVCcm93
c2luZ1Jlc3VsdCBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBzdHJpbmcgcHJvY2Vzc2luZywKKyAg
ICAgICAgYnV0IHRoZSBleGlzdGluZyBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyB2ZXJpZmllZCBi
eSBleGlzdGluZyB1bml0IHRlc3RzLiAgSSBhZGRlZCBhIHVuaXQgdGVzdCB0byB2ZXJpZnkgYmVo
YXZpb3Igb2YgdGhlIG5ldyBTUEkuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOndhcm5pbmc6ZGV0YWlsczpj
b21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93U2FmZUJyb3dz
aW5nV2FybmluZzpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKCtbV0tXZWJWaWV3IF9j
b25maXJtTWFsd2FyZVNlbnRpbmVsXSk6CisgICAgICAgICgrW1dLV2ViVmlldyBfdmlzaXRVbnNh
ZmVXZWJzaXRlU2VudGluZWxdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQ
cml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1Jlc3VsdENv
Y29hLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdX
YXJuaW5nQ29jb2EubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1NhZmVCcm93c2luZ1Jlc3VsdENvY29hLm1tLgorICAgICAgICAoV2ViS2l0OjptYWx3YXJlRGV0
YWlsc0Jhc2UpOgorICAgICAgICAoV2ViS2l0OjpsZWFybk1vcmVVUkwpOgorICAgICAgICAoV2Vi
S2l0OjpyZXBvcnRBbkVycm9yQmFzZSk6CisgICAgICAgIChXZWJLaXQ6OmxvY2FsaXplZFByb3Zp
ZGVyKToKKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6dmlzaXRVbnNhZmVX
ZWJzaXRlU2VudGluZWwpOgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpj
b25maXJtTWFsd2FyZVNlbnRpbmVsKToKKyAgICAgICAgKFdlYktpdDo6cmVwbGFjZSk6CisgICAg
ICAgIChXZWJLaXQ6OmFkZExpbmtBbmRSZXBsYWNlKToKKyAgICAgICAgKFdlYktpdDo6cmVwb3J0
QW5FcnJvclVSTCk6CisgICAgICAgIChXZWJLaXQ6Om1hbHdhcmVEZXRhaWxzVVJMKToKKyAgICAg
ICAgKFdlYktpdDo6c2FmZUJyb3dzaW5nVGl0bGVUZXh0KToKKyAgICAgICAgKFdlYktpdDo6c2Fm
ZUJyb3dzaW5nV2FybmluZ1RleHQpOgorICAgICAgICAoV2ViS2l0OjpzYWZlQnJvd3NpbmdEZXRh
aWxzVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OlNhZmVCcm93
c2luZ1dhcm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpsZWFybk1vcmUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ6OlNhZmVCcm93c2luZ1Jlc3VsdCk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW06Cisg
ICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBpbml0V2l0aEZyYW1lOnNhZmVCcm93c2lu
Z1dhcm5pbmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5n
V2FybmluZyBhZGRDb250ZW50XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBz
aG93RGV0YWlsc0NsaWNrZWRdKToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGNs
aWNrZWRPbkxpbms6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW5pdFdp
dGhBdHRyaWJ1dGVkU3RyaW5nOmZvcldhcm5pbmc6XSk6CisgICAgICAgIChjb25maXJtTWFsd2Fy
ZVNlbnRpbmVsKTogRGVsZXRlZC4KKyAgICAgICAgKHZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVs
KTogRGVsZXRlZC4KKyAgICAgICAgKHJlcGxhY2UpOiBEZWxldGVkLgorICAgICAgICAoYWRkTGlu
a0FuZFJlcGxhY2UpOiBEZWxldGVkLgorICAgICAgICAocmVwb3J0QW5FcnJvclVSTCk6IERlbGV0
ZWQuCisgICAgICAgIChtYWx3YXJlRGV0YWlsc1VSTCk6IERlbGV0ZWQuCisgICAgICAgICh0aXRs
ZVRleHQpOiBEZWxldGVkLgorICAgICAgICAod2FybmluZ1RleHQpOiBEZWxldGVkLgorICAgICAg
ICAoZGV0YWlsc1RleHQpOiBEZWxldGVkLgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1dhcm5p
bmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmJlZ2luU2FmZUJyb3dzaW5nQ2hlY2sp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNs
aWVudC5oOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50OjpzaG93U2FmZUJyb3dzaW5nV2Fy
bmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1NhZmVCcm93c2luZ1Jlc3VsdC5oOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9TYWZlQnJvd3NpbmdXYXJuaW5nLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1Jlc3VsdC5oLgorICAgICAgICAo
V2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpT
YWZlQnJvd3NpbmdXYXJuaW5nOjp0aXRsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNhZmVC
cm93c2luZ1dhcm5pbmc6Ondhcm5pbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJv
d3NpbmdXYXJuaW5nOjpkZXRhaWxzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dz
aW5nUmVzdWx0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3Np
bmdSZXN1bHQ6OmlzUGhpc2hpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpT
YWZlQnJvd3NpbmdSZXN1bHQ6OmlzTWFsd2FyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdDo6aXNVbndhbnRlZFNvZnR3YXJlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0Ojp1cmwgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ6OnByb3ZpZGVyIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0Ojpsb2Nh
bGl6ZWRQcm92aWRlck5hbWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTYWZl
QnJvd3NpbmdSZXN1bHQ6Om1hbHdhcmVEZXRhaWxzVVJMQmFzZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdDo6cmVwb3J0QW5FcnJvclVSTEJhc2Ug
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ6Omxl
YXJuTW9yZVVSTCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2lu
Z1Jlc3VsdDo6bmVlZHNTYWZlQnJvd3NpbmdXYXJuaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94
eTo6ZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OnVzZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkZy
YW1lUG9saWN5TGlzdGVuZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6V2ViRnJhbWVQcm94eSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OnNldFVwUG9saWN5TGlzdGVuZXJQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OmRpZEhhbmRsZUNvbnRlbnRGaWx0
ZXJVbmJsb2NrTmF2aWdhdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkZyYW1lUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVQcm94eTo6cGFnZSBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3dhcFRvV2Vi
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ3JlYXRlTWFpbkZy
YW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDcmVhdGVTdWJmcmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9y
TmV3V2luZG93QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQ
b2xpY3lGb3JSZXNwb25zZSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW06CisgICAgICAgICog
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTgtMTEtMTMgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gRG8gbm90IHNo
b3cgc2VsZWN0aW9uIFVJIGZvciBlZGl0YWJsZSBlbGVtZW50cyB3aXRoIG9wYWNpdHkgbmVhciB6
ZXJvCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw3ICszMjIs
NyBAQCBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCiBVSVByb2Nlc3MvQ29jb2Ev
UGFnZUNsaWVudEltcGxDb2NvYS5tbQogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tbQogVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZUNvY29hLm1tCi1VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nUmVzdWx0Q29jb2Eu
bW0KK1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0KIFVJUHJvY2Vz
cy9Db2NvYS9TZXNzaW9uU3RhdGVDb2RpbmcubW0KIFVJUHJvY2Vzcy9Db2NvYS9TeXN0ZW1QcmV2
aWV3Q29udHJvbGxlckNvY29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMjM4MTE0KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTAsNyArMTEwLDcgQEAgY2xhc3MgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIE5hdGl2
ZVdlYk1vdXNlRXZlbnQ7CiBjbGFzcyBOYXRpdmVXZWJXaGVlbEV2ZW50OwogY2xhc3MgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb247Ci1jbGFzcyBTYWZlQnJvd3NpbmdSZXN1bHQ7CitjbGFzcyBT
YWZlQnJvd3NpbmdXYXJuaW5nOwogY2xhc3MgVXNlckRhdGE7CiBjbGFzcyBWaWV3U25hcHNob3Q7
CiBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOwpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJu
aW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFy
aWFudDxDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZZXMpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2lu
Z1dhcm5pbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8Q29udGludWVVbnNhZmVM
b2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRpb25I
YW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsgfQogICAgIHZpcnR1YWwgdm9pZCBjbGVh
clNhZmVCcm93c2luZ1dhcm5pbmcoKSB7IH0KICAgICAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JU
KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2FmZUJyb3dzaW5nUmVzdWx0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2FmZUJyb3dzaW5nUmVzdWx0LmgJ
KHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2lu
Z1Jlc3VsdC5oCShub25leGlzdGVudCkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1PQkpDX0NMQVNT
IFNTQlNlcnZpY2VMb29rdXBSZXN1bHQ7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBT
YWZlQnJvd3NpbmdSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYWZlQnJvd3NpbmdSZXN1bHQ+
IHsKLXB1YmxpYzoKLSNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCi0gICAgc3RhdGljIFJlZjxTYWZl
QnJvd3NpbmdSZXN1bHQ+IGNyZWF0ZShXZWJDb3JlOjpVUkwmJiB1cmwsIFNTQlNlcnZpY2VMb29r
dXBSZXN1bHQgKnJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNh
ZmVCcm93c2luZ1Jlc3VsdChXVEZNb3ZlKHVybCksIHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgYm9vbCBpc1BoaXNoaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1BoaXNoaW5nOyB9Ci0g
ICAgYm9vbCBpc01hbHdhcmUoKSBjb25zdCB7IHJldHVybiBtX2lzTWFsd2FyZTsgfQotICAgIGJv
b2wgaXNVbndhbnRlZFNvZnR3YXJlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Vud2FudGVkU29mdHdh
cmU7IH0KLQotICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91
cmw7IH0KLSAgICBjb25zdCBTdHJpbmcmIHByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9wcm92
aWRlcjsgfQotICAgIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkUHJvdmlkZXJOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbGl6ZWRQcm92aWRlck5hbWU7IH0KLSAgICBjb25zdCBTdHJpbmcmIG1h
bHdhcmVEZXRhaWxzVVJMQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFsd2FyZURldGFpbHNVUkxC
YXNlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiByZXBvcnRBbkVycm9yVVJMQmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwb3J0QW5FcnJvclVSTEJhc2U7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpVUkwm
IGxlYXJuTW9yZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVhcm5Nb3JlVVJMOyB9Ci0KLSAgICBi
b29sIG5lZWRzU2FmZUJyb3dzaW5nV2FybmluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNQaGlzaGlu
ZyB8fCBtX2lzTWFsd2FyZSB8fCBtX2lzVW53YW50ZWRTb2Z0d2FyZTsgfQotCi1wcml2YXRlOgot
I2lmIEhBVkUoU0FGRV9CUk9XU0lORykKLSAgICBTYWZlQnJvd3NpbmdSZXN1bHQoV2ViQ29yZTo6
VVJMJiYsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKik7Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpV
UkwgbV91cmw7Ci0gICAgYm9vbCBtX2lzUGhpc2hpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9p
c01hbHdhcmUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Vud2FudGVkU29mdHdhcmUgeyBmYWxz
ZSB9OwotCi0gICAgU3RyaW5nIG1fcHJvdmlkZXI7Ci0gICAgU3RyaW5nIG1fbG9jYWxpemVkUHJv
dmlkZXJOYW1lOwotICAgIFN0cmluZyBtX21hbHdhcmVEZXRhaWxzVVJMQmFzZTsKLSAgICBTdHJp
bmcgbV9yZXBvcnRBbkVycm9yVVJMQmFzZTsKLSAgICBXZWJDb3JlOjpVUkwgbV9sZWFybk1vcmVV
Ukw7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1Jlc3VsdC5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVs
ZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2FmZUJyb3dz
aW5nV2FybmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVC
cm93c2luZ1dhcm5pbmcuaAkocmV2aXNpb24gMjM4MTE0KQkoZnJvbSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9TYWZlQnJvd3NpbmdSZXN1bHQuaDoyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9TYWZlQnJvd3NpbmdXYXJuaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9VUkwu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCitPQkpDX0NMQVNTIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQ7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBTYWZlQnJvd3NpbmdSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxTYWZlQnJvd3NpbmdSZXN1bHQ+IHsKK3B1YmxpYzoKKyNpZiBIQVZFKFNBRkVfQlJPV1NJTkcp
CisgICAgc3RhdGljIFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+IGNyZWF0ZShXZWJDb3JlOjpVUkwm
JiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNhZmVCcm93c2luZ1Jlc3VsdChXVEZNb3ZlKHVybCksIHJlc3Vs
dCkpOworICAgIH0KKyNlbmRpZgorCisgICAgYm9vbCBpc1BoaXNoaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9pc1BoaXNoaW5nOyB9CisgICAgYm9vbCBpc01hbHdhcmUoKSBjb25zdCB7IHJldHVybiBt
X2lzTWFsd2FyZTsgfQorICAgIGJvb2wgaXNVbndhbnRlZFNvZnR3YXJlKCkgY29uc3QgeyByZXR1
cm4gbV9pc1Vud2FudGVkU29mdHdhcmU7IH0KKworICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJs
KCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBjb25zdCBTdHJpbmcmIHByb3ZpZGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm92aWRlcjsgfQorICAgIGNvbnN0IFN0cmluZyYgbG9jYWxpemVk
UHJvdmlkZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGl6ZWRQcm92aWRlck5hbWU7IH0K
KyAgICBjb25zdCBTdHJpbmcmIG1hbHdhcmVEZXRhaWxzVVJMQmFzZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFsd2FyZURldGFpbHNVUkxCYXNlOyB9CisgICAgY29uc3QgU3RyaW5nJiByZXBvcnRBbkVy
cm9yVVJMQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0QW5FcnJvclVSTEJhc2U7IH0KKyAg
ICBjb25zdCBXZWJDb3JlOjpVUkwmIGxlYXJuTW9yZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVh
cm5Nb3JlVVJMOyB9CisKKyAgICBib29sIG5lZWRzU2FmZUJyb3dzaW5nV2FybmluZygpIGNvbnN0
IHsgcmV0dXJuIG1faXNQaGlzaGluZyB8fCBtX2lzTWFsd2FyZSB8fCBtX2lzVW53YW50ZWRTb2Z0
d2FyZTsgfQorCitwcml2YXRlOgorI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKKyAgICBTYWZlQnJv
d3NpbmdSZXN1bHQoV2ViQ29yZTo6VVJMJiYsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKik7Cisj
ZW5kaWYKKyAgICBXZWJDb3JlOjpVUkwgbV91cmw7CisgICAgYm9vbCBtX2lzUGhpc2hpbmcgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc01hbHdhcmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1Vu
d2FudGVkU29mdHdhcmUgeyBmYWxzZSB9OworCisgICAgU3RyaW5nIG1fcHJvdmlkZXI7CisgICAg
U3RyaW5nIG1fbG9jYWxpemVkUHJvdmlkZXJOYW1lOworICAgIFN0cmluZyBtX21hbHdhcmVEZXRh
aWxzVVJMQmFzZTsKKyAgICBTdHJpbmcgbV9yZXBvcnRBbkVycm9yVVJMQmFzZTsKKyAgICBXZWJD
b3JlOjpVUkwgbV9sZWFybk1vcmVVUkw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1dh
cm5pbmcuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25h
dGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdXYXJuaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvU2FmZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyMzgxMTQpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdXYXJuaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDQ4ICsyNyw1MiBAQAogCiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorT0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRT
dHJpbmc7CitPQkpDX0NMQVNTIE5TVVJMOwogT0JKQ19DTEFTUyBTU0JTZXJ2aWNlTG9va3VwUmVz
dWx0OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgU2FmZUJyb3dzaW5nUmVzdWx0IDog
cHVibGljIFJlZkNvdW50ZWQ8U2FmZUJyb3dzaW5nUmVzdWx0PiB7CitjbGFzcyBTYWZlQnJvd3Np
bmdXYXJuaW5nIDogcHVibGljIFJlZkNvdW50ZWQ8U2FmZUJyb3dzaW5nV2FybmluZz4gewogcHVi
bGljOgogI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKLSAgICBzdGF0aWMgUmVmPFNhZmVCcm93c2lu
Z1Jlc3VsdD4gY3JlYXRlKFdlYkNvcmU6OlVSTCYmIHVybCwgU1NCU2VydmljZUxvb2t1cFJlc3Vs
dCAqcmVzdWx0KQorICAgIHN0YXRpYyBSZWY8U2FmZUJyb3dzaW5nV2FybmluZz4gY3JlYXRlKGNv
bnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTYWZlQnJvd3NpbmdSZXN1bHQoV1RG
TW92ZSh1cmwpLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2FmZUJy
b3dzaW5nV2FybmluZyh1cmwsIHJlc3VsdCkpOworICAgIH0KKyNlbmRpZgorI2lmIFBMQVRGT1JN
KENPQ09BKQorICAgIHN0YXRpYyBSZWY8U2FmZUJyb3dzaW5nV2FybmluZz4gY3JlYXRlKFN0cmlu
ZyYmIHRpdGxlLCBTdHJpbmcmJiB3YXJuaW5nLCBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5n
PiYmIGRldGFpbHMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTYWZlQnJv
d3NpbmdXYXJuaW5nKFdURk1vdmUodGl0bGUpLCBXVEZNb3ZlKHdhcm5pbmcpLCBXVEZNb3ZlKGRl
dGFpbHMpKSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBib29sIGlzUGhpc2hpbmcoKSBjb25zdCB7
IHJldHVybiBtX2lzUGhpc2hpbmc7IH0KLSAgICBib29sIGlzTWFsd2FyZSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNNYWx3YXJlOyB9Ci0gICAgYm9vbCBpc1Vud2FudGVkU29mdHdhcmUoKSBjb25zdCB7
IHJldHVybiBtX2lzVW53YW50ZWRTb2Z0d2FyZTsgfQotCi0gICAgY29uc3QgV2ViQ29yZTo6VVJM
JiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQotICAgIGNvbnN0IFN0cmluZyYgcHJvdmlk
ZXIoKSBjb25zdCB7IHJldHVybiBtX3Byb3ZpZGVyOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBsb2Nh
bGl6ZWRQcm92aWRlck5hbWUoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsaXplZFByb3ZpZGVyTmFt
ZTsgfQotICAgIGNvbnN0IFN0cmluZyYgbWFsd2FyZURldGFpbHNVUkxCYXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYWx3YXJlRGV0YWlsc1VSTEJhc2U7IH0KLSAgICBjb25zdCBTdHJpbmcmIHJlcG9y
dEFuRXJyb3JVUkxCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXBvcnRBbkVycm9yVVJMQmFzZTsg
fQotICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgbGVhcm5Nb3JlVVJMKCkgY29uc3QgeyByZXR1cm4g
bV9sZWFybk1vcmVVUkw7IH0KLQotICAgIGJvb2wgbmVlZHNTYWZlQnJvd3NpbmdXYXJuaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1BoaXNoaW5nIHx8IG1faXNNYWx3YXJlIHx8IG1faXNVbndhbnRl
ZFNvZnR3YXJlOyB9CisgICAgY29uc3QgU3RyaW5nJiB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGl0bGU7IH0KKyAgICBjb25zdCBTdHJpbmcmIHdhcm5pbmcoKSBjb25zdCB7IHJldHVybiBtX3dh
cm5pbmc7IH0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVk
U3RyaW5nPiBkZXRhaWxzKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhaWxzOyB9CisjZW5kaWYKIAor
ICAgIHN0YXRpYyBOU1VSTCAqdmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKTsKKyAgICBzdGF0
aWMgTlNVUkwgKmNvbmZpcm1NYWx3YXJlU2VudGluZWwoKTsKKyAgICAKIHByaXZhdGU6CiAjaWYg
SEFWRShTQUZFX0JST1dTSU5HKQotICAgIFNhZmVCcm93c2luZ1Jlc3VsdChXZWJDb3JlOjpVUkwm
JiwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqKTsKKyAgICBTYWZlQnJvd3NpbmdXYXJuaW5nKGNv
bnN0IFdlYkNvcmU6OlVSTCYsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKik7CisjZW5kaWYKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICBTYWZlQnJvd3NpbmdXYXJuaW5nKFN0cmluZyYmLCBTdHJp
bmcmJiwgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4mJik7CisjZW5kaWYKKworICAgIFN0
cmluZyBtX3RpdGxlOworICAgIFN0cmluZyBtX3dhcm5pbmc7CisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gbV9kZXRhaWxzOwogI2VuZGlmCi0g
ICAgV2ViQ29yZTo6VVJMIG1fdXJsOwotICAgIGJvb2wgbV9pc1BoaXNoaW5nIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faXNNYWx3YXJlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNVbndhbnRlZFNv
ZnR3YXJlIHsgZmFsc2UgfTsKLQotICAgIFN0cmluZyBtX3Byb3ZpZGVyOwotICAgIFN0cmluZyBt
X2xvY2FsaXplZFByb3ZpZGVyTmFtZTsKLSAgICBTdHJpbmcgbV9tYWx3YXJlRGV0YWlsc1VSTEJh
c2U7Ci0gICAgU3RyaW5nIG1fcmVwb3J0QW5FcnJvclVSTEJhc2U7Ci0gICAgV2ViQ29yZTo6VVJM
IG1fbGVhcm5Nb3JlVVJMOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eS5jcHAJKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKICNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURh
dGFTdG9yZS5oIgogI2luY2x1ZGUgIkFQSVdlYnNpdGVQb2xpY2llcy5oIgotI2luY2x1ZGUgIlNh
ZmVCcm93c2luZ1Jlc3VsdC5oIgorI2luY2x1ZGUgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKICNp
bmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgog
I2luY2x1ZGUgIldlYnNpdGVQb2xpY2llc0RhdGEuaCIKQEAgLTQ1LDIxICs0NSwyMSBAQCBXZWJG
cmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OldlYkZyYW1lUG9sCiAKIFdlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eTo6fldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSgpID0gZGVmYXVsdDsKIAot
dm9pZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdS
ZXN1bHRzKFZlY3RvcjxSZWY8U2FmZUJyb3dzaW5nUmVzdWx0Pj4mJiBzYWZlQnJvd3NpbmdSZXN1
bHRzKQordm9pZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OmRpZFJlY2VpdmVTYWZlQnJv
d3NpbmdSZXN1bHRzKFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dh
cm5pbmcpCiB7Ci0gICAgQVNTRVJUKCFtX3NhZmVCcm93c2luZ1Jlc3VsdHMpOworICAgIEFTU0VS
VCghbV9zYWZlQnJvd3NpbmdXYXJuaW5nKTsKICAgICBpZiAobV9wb2xpY3lSZXN1bHQpIHsKICAg
ICAgICAgaWYgKG1fcmVwbHkpCi0gICAgICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBvbGljeUFj
dGlvbjo6VXNlLCBtX3BvbGljeVJlc3VsdC0+Zmlyc3QuZ2V0KCksIG1fcG9saWN5UmVzdWx0LT5z
ZWNvbmQsIFdURk1vdmUoc2FmZUJyb3dzaW5nUmVzdWx0cykpOworICAgICAgICAgICAgbV9yZXBs
eShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZSwgbV9wb2xpY3lSZXN1bHQtPmZpcnN0LmdldCgp
LCBtX3BvbGljeVJlc3VsdC0+c2Vjb25kLCBXVEZNb3ZlKHNhZmVCcm93c2luZ1dhcm5pbmcpKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgbV9zYWZlQnJvd3NpbmdSZXN1bHRzID0gV1RGTW92ZShzYWZl
QnJvd3NpbmdSZXN1bHRzKTsKKyAgICAgICAgbV9zYWZlQnJvd3NpbmdXYXJuaW5nID0gV1RGTW92
ZShzYWZlQnJvd3NpbmdXYXJuaW5nKTsKIH0KIAogdm9pZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHk6OnVzZShBUEk6OldlYnNpdGVQb2xpY2llcyogcG9saWNpZXMsIFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCkKIHsKLSAgICBpZiAo
bV9zYWZlQnJvd3NpbmdSZXN1bHRzKSB7CisgICAgaWYgKG1fc2FmZUJyb3dzaW5nV2FybmluZykg
ewogICAgICAgICBpZiAobV9yZXBseSkKLSAgICAgICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9s
aWN5QWN0aW9uOjpVc2UsIHBvbGljaWVzLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBX
VEZNb3ZlKCptX3NhZmVCcm93c2luZ1Jlc3VsdHMpKTsKKyAgICAgICAgICAgIG1fcmVwbHkoV2Vi
Q29yZTo6UG9saWN5QWN0aW9uOjpVc2UsIHBvbGljaWVzLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5
Q2xpZW50LCBXVEZNb3ZlKCptX3NhZmVCcm93c2luZ1dhcm5pbmcpKTsKICAgICB9IGVsc2UgaWYg
KCFtX3BvbGljeVJlc3VsdCkKICAgICAgICAgbV9wb2xpY3lSZXN1bHQgPSB7eyBwb2xpY2llcywg
cHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCB9fTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oCShyZXZp
c2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBlbnVtIGNsYXNz
IFBvbGljeUFjdGlvbiA6IHVpbnQ4X3Q7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBT
YWZlQnJvd3NpbmdSZXN1bHQ7CitjbGFzcyBTYWZlQnJvd3NpbmdXYXJuaW5nOwogCiBlbnVtIGNs
YXNzIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgeyBObywgWWVzIH07CiBlbnVtIGNsYXNz
IFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCB7IE5vLCBZZXMgfTsKQEAgLTQ3LDcgKzQ3
LDcgQEAgZW51bSBjbGFzcyBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bAogY2xhc3MgV2Vi
RnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9i
amVjdDo6VHlwZTo6RnJhbWVQb2xpY3lMaXN0ZW5lcj4gewogcHVibGljOgogCi0gICAgdXNpbmcg
UmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJ
OjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8
UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYpPjsKKyAgICB1c2luZyBSZXBseSA9IENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2ll
cyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJu
aW5nPiYmKT47CiAgICAgc3RhdGljIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+IGNy
ZWF0ZShSZXBseSYmIHJlcGx5LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhwZWN0
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViRnJhbWVQb2xpY3lMaXN0
ZW5lclByb3h5KFdURk1vdmUocmVwbHkpLCBleHBlY3QpKTsKQEAgLTU4LDEzICs1OCwxMyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkb3dubG9hZCgpOwogICAgIHZvaWQgaWdub3JlKCk7CiAgICAgCi0g
ICAgdm9pZCBkaWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyhWZWN0b3I8UmVmPFNhZmVCcm93
c2luZ1Jlc3VsdD4+JiYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMo
UmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYpOwogCiBwcml2YXRlOgogICAgIFdlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eShSZXBseSYmLCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1
bHQpOwogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UmVmUHRyPEFQSTo6V2Vic2l0ZVBv
bGljaWVzPiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudD4+IG1fcG9saWN5UmVzdWx0Owot
ICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+Pj4gbV9zYWZl
QnJvd3NpbmdSZXN1bHRzOworICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFNhZmVCcm93c2luZ1dh
cm5pbmc+PiBtX3NhZmVCcm93c2luZ1dhcm5pbmc7CiAgICAgUmVwbHkgbV9yZXBseTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCShyZXZpc2lv
biAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotV2ViRnJhbWVQcm94eTo6V2ViRnJhbWVQcm94eShXZWJQ
YWdlUHJveHkqIHBhZ2UsIHVpbnQ2NF90IGZyYW1lSUQpCi0gICAgOiBtX3BhZ2UocGFnZSkKK1dl
YkZyYW1lUHJveHk6OldlYkZyYW1lUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCB1aW50NjRfdCBm
cmFtZUlEKQorICAgIDogbV9wYWdlKG1ha2VXZWFrUHRyKHBhZ2UpKQogICAgICwgbV9pc0ZyYW1l
U2V0KGZhbHNlKQogICAgICwgbV9mcmFtZUlEKGZyYW1lSUQpCiB7CkBAIC0xNzcsMTIgKzE3Nywx
MiBAQCB2b2lkIFdlYkZyYW1lUHJveHk6OmRpZENoYW5nZVRpdGxlKGNvbnN0CiAgICAgbV90aXRs
ZSA9IHRpdGxlOwogfQogCi1XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkmIFdlYkZyYW1lUHJv
eHk6OnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OlBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVl
c3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyLCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhwZWN0KQorV2Vi
RnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBXZWJGcmFtZVByb3h5OjpzZXRVcFBvbGljeUxpc3Rl
bmVyUHJveHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQ
STo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRy
PFNhZmVCcm93c2luZ1dhcm5pbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBTaG91bGRFeHBl
Y3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhwZWN0KQogewogICAgIGlmIChtX2FjdGl2ZUxpc3RlbmVy
KQogICAgICAgICBtX2FjdGl2ZUxpc3RlbmVyLT5pZ25vcmUoKTsKLSAgICBtX2FjdGl2ZUxpc3Rl
bmVyID0gV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpjcmVhdGUoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBhY3Rpb24sIEFQSTo6V2Vic2l0
ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNz
U3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYg
c2FmZUJyb3dzaW5nUmVzdWx0cykgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGFjdGlvbiwgcG9saWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUo
c2FmZUJyb3dzaW5nUmVzdWx0cykpOworICAgIG1fYWN0aXZlTGlzdGVuZXIgPSBXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHk6OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
V2ViQ29yZTo6UG9saWN5QWN0aW9uIGFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqIHBvbGlj
aWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlD
bGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcp
IG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihhY3Rpb24sIHBvbGljaWVzLCBw
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKHNhZmVCcm93c2luZ1dhcm5pbmcp
KTsKICAgICAgICAgbV9hY3RpdmVMaXN0ZW5lciA9IG51bGxwdHI7CiAgICAgfSwgZXhwZWN0KTsK
ICAgICByZXR1cm4gKm1fYWN0aXZlTGlzdGVuZXI7CkBAIC0yMzEsNyArMjMxLDcgQEAgYm9vbCBX
ZWJGcmFtZVByb3h5OjpkaWRIYW5kbGVDb250ZW50RmlsdAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gcGFnZSB7IG1fcGFnZSB9OworICAg
IFJlZlB0cjxXZWJQYWdlUHJveHk+IHBhZ2UgeyBtX3BhZ2UuZ2V0KCkgfTsKICAgICBBU1NFUlQo
cGFnZSk7CiAgICAgbV9jb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIucmVxdWVzdFVuYmxvY2tB
c3luYyhbcGFnZV0oYm9vbCB1bmJsb2NrZWQpIHsKICAgICAgICAgaWYgKHVuYmxvY2tlZCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmgJKHJldmlzaW9uIDIzODEx
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBEZWNvZGVyOwogfQogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKLWNsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKK2NsYXNzIFNhZmVCcm93c2luZ1dhcm5p
bmc7CiBjbGFzcyBXZWJDZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJGcmFtZVBvbGljeUxpc3Rl
bmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC02MSw3ICs2MSw3IEBAIHR5cGVkZWYg
R2VuZXJpY0NhbGxiYWNrPEFQSTo6RGF0YSo+IERhdGEKIAogY2xhc3MgV2ViRnJhbWVQcm94eSA6
IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkZyYW1lPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxXZWJGcmFtZVByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5KiBw
YWdlLCB1aW50NjRfdCBmcmFtZUlEKQorICAgIHN0YXRpYyBSZWY8V2ViRnJhbWVQcm94eT4gY3Jl
YXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgdWludDY0X3QgZnJhbWVJRCkKICAgICB7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkZyYW1lUHJveHkocGFnZSwgZnJhbWVJRCkpOwogICAg
IH0KQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldlYkZyYW1lUHJveHko
KTsKIAogICAgIHVpbnQ2NF90IGZyYW1lSUQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lSUQ7IH0K
LSAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2U7IH0KKyAgICBX
ZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2UuZ2V0KCk7IH0KIAogICAg
IHZvaWQgd2ViUHJvY2Vzc1dpbGxTaHV0RG93bigpOwogCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbihjb25zdCBXZWJDb3JlOjpV
UkwmKTsgLy8gZWcuIGFuY2hvciBuYXZpZ2F0aW9uLCBzZXNzaW9uIHN0YXRlIGNoYW5nZS4KICAg
ICB2b2lkIGRpZENoYW5nZVRpdGxlKGNvbnN0IFN0cmluZyYpOwogCi0gICAgV2ViRnJhbWVQb2xp
Y3lMaXN0ZW5lclByb3h5JiBzZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgVmVjdG9yPFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+
PiYmKT4mJiwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0KTsKKyAgICBXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHkmIHNldFVwUG9saWN5TGlzdGVuZXJQcm94eShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQ
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4m
Jik+JiYsIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCk7CiAKICNpZiBFTkFCTEUoQ09O
VEVOVF9GSUxURVJJTkcpCiAgICAgdm9pZCBjb250ZW50RmlsdGVyRGlkQmxvY2tMb2FkKFdlYkNv
cmU6OkNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlciBjb250ZW50RmlsdGVyVW5ibG9ja0hhbmRs
ZXIpIHsgbV9jb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIgPSBXVEZNb3ZlKGNvbnRlbnRGaWx0
ZXJVbmJsb2NrSGFuZGxlcik7IH0KQEAgLTEyOSw5ICsxMjksOSBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogcHJpdmF0ZToKLSAgICBXZWJGcmFtZVByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSwgdWludDY0
X3QgZnJhbWVJRCk7CisgICAgV2ViRnJhbWVQcm94eShXZWJQYWdlUHJveHkmLCB1aW50NjRfdCBm
cmFtZUlEKTsKIAotICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOworICAgIFdlYWtQdHI8V2ViUGFn
ZVByb3h5PiBtX3BhZ2U7CiAKICAgICBGcmFtZUxvYWRTdGF0ZSBtX2ZyYW1lTG9hZFN0YXRlOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9u
IDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAKICNpbmNsdWRlICJQbHVnaW5JbmZvcm1hdGlv
bi5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUHJpbnRJ
bmZvLmgiCi0jaW5jbHVkZSAiU2FmZUJyb3dzaW5nUmVzdWx0LmgiCisjaW5jbHVkZSAiU2FmZUJy
b3dzaW5nV2FybmluZy5oIgogI2luY2x1ZGUgIlNoYXJlU2hlZXRDYWxsYmFja0lELmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2Vy
LmgiCkBAIC03NjEsNyArNzYxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN3YXBUb1dlYlByb2Nl
c3MoUmVmPAogICAgIGlmIChkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UpIHsKICAgICAgICAgQVNT
RVJUKCFtX21haW5GcmFtZSk7CiAgICAgICAgIEFTU0VSVCgmZGVzdGluYXRpb25TdXNwZW5kZWRQ
YWdlLT5wcm9jZXNzKCkgPT0gbV9wcm9jZXNzLnB0cigpKTsKLSAgICAgICAgbV9tYWluRnJhbWUg
PSBXZWJGcmFtZVByb3h5OjpjcmVhdGUodGhpcywgZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlLT5t
YWluRnJhbWVJRCgpKTsKKyAgICAgICAgbV9tYWluRnJhbWUgPSBXZWJGcmFtZVByb3h5OjpjcmVh
dGUoKnRoaXMsIGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZS0+bWFpbkZyYW1lSUQoKSk7CiAgICAg
ICAgIG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZS0+bWFp
bkZyYW1lSUQoKSwgKm1fbWFpbkZyYW1lKTsKICAgICB9CiAKQEAgLTM0NjQsNyArMzQ2NCw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVNYWluRnJhbWUodWkKICAgICBNRVNTQUdFX0NI
RUNLKCFtX21haW5GcmFtZSk7CiAgICAgTUVTU0FHRV9DSEVDSyhtX3Byb2Nlc3MtPmNhbkNyZWF0
ZUZyYW1lKGZyYW1lSUQpKTsKIAotICAgIG1fbWFpbkZyYW1lID0gV2ViRnJhbWVQcm94eTo6Y3Jl
YXRlKHRoaXMsIGZyYW1lSUQpOworICAgIG1fbWFpbkZyYW1lID0gV2ViRnJhbWVQcm94eTo6Y3Jl
YXRlKCp0aGlzLCBmcmFtZUlEKTsKIAogICAgIC8vIEFkZCB0aGUgZnJhbWUgdG8gdGhlIHByb2Nl
c3Mgd2lkZSBtYXAuCiAgICAgbV9wcm9jZXNzLT5mcmFtZUNyZWF0ZWQoZnJhbWVJRCwgKm1fbWFp
bkZyYW1lKTsKQEAgLTM0ODksNyArMzQ4OSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDcmVh
dGVTdWJmcmFtZSh1aW4KIAogICAgIE1FU1NBR0VfQ0hFQ0sobV9wcm9jZXNzLT5jYW5DcmVhdGVG
cmFtZShmcmFtZUlEKSk7CiAgICAgCi0gICAgUmVmUHRyPFdlYkZyYW1lUHJveHk+IHN1YkZyYW1l
ID0gV2ViRnJhbWVQcm94eTo6Y3JlYXRlKHRoaXMsIGZyYW1lSUQpOworICAgIFJlZlB0cjxXZWJG
cmFtZVByb3h5PiBzdWJGcmFtZSA9IFdlYkZyYW1lUHJveHk6OmNyZWF0ZSgqdGhpcywgZnJhbWVJ
RCk7CiAKICAgICAvLyBBZGQgdGhlIGZyYW1lIHRvIHRoZSBwcm9jZXNzIHdpZGUgbWFwLgogICAg
IG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKGZyYW1lSUQsICpzdWJGcmFtZSk7CkBAIC00MTU2LDcg
KzQxNTYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhCiAgICAg
aWYgKCFtX3ByZWZlcmVuY2VzLT5zYWZlQnJvd3NpbmdFbmFibGVkKCkpCiAgICAgICAgIHNob3Vs
ZFNraXBTYWZlQnJvd3NpbmdDaGVjayA9IFNob3VsZFNraXBTYWZlQnJvd3NpbmdDaGVjazo6WWVz
OwogCi0gICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUuc2V0VXBQb2xpY3lMaXN0ZW5l
clByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lID0gbWFr
ZVJlZihmcmFtZSksIHNlbmRlciA9IFdURk1vdmUoc2VuZGVyKSwgbmF2aWdhdGlvbl0gKFdlYkNv
cmU6OlBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xp
Y2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5
Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+JiYgc2FmZUJyb3dzaW5nUmVz
dWx0cykgbXV0YWJsZSB7CisgICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUuc2V0VXBQ
b2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGZyYW1lID0gbWFrZVJlZihmcmFtZSksIHNlbmRlciA9IFdURk1vdmUoc2VuZGVyKSwgbmF2aWdh
dGlvbl0gKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBv
bGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dh
cFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJv
d3NpbmdXYXJuaW5nKSBtdXRhYmxlIHsKICAgICAgICAgCiAgICAgICAgIGF1dG8gY29tcGxldGlv
bkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3RlZFRoaXMuY29weVJlZigp
LCBmcmFtZSA9IGZyYW1lLmNvcHlSZWYoKSwgc2VuZGVyID0gV1RGTW92ZShzZW5kZXIpLCBuYXZp
Z2F0aW9uID0gV1RGTW92ZShuYXZpZ2F0aW9uKSwgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCwgcG9saWNpZXMgPSBtYWtlUmVmUHRyKHBvbGljaWVzKV0gKFBvbGljeUFjdGlvbiBwb2xpY3lB
Y3Rpb24pIG11dGFibGUgewogICAgICAgICAgICAgcmVjZWl2ZWROYXZpZ2F0aW9uUG9saWN5RGVj
aXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLmdldCgpLCBwcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50LCBmcmFtZSwgcG9saWNpZXMuZ2V0KCksIFdURk1vdmUoc2VuZGVyKSk7CkBAIC00
MTY3LDEwICs0MTY3LDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmln
YQogCiAgICAgICAgIG1fcGFnZUNsaWVudC0+Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCk7CiAK
LSAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiBzYWZlQnJvd3NpbmdSZXN1bHRzKSB7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3VsdC0+bmVlZHNTYWZlQnJvd3NpbmdXYXJuaW5nKCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX3BhZ2VDbGllbnQtPnNob3dTYWZlQnJv
d3NpbmdXYXJuaW5nKHJlc3VsdCwgW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBwb2xp
Y3lBY3Rpb25dIChhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKHNhZmVCcm93
c2luZ1dhcm5pbmcpIHsKKyAgICAgICAgICAgIG1fcGFnZUNsaWVudC0+c2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmcoKnNhZmVCcm93c2luZ1dhcm5pbmcsIFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShw
cm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgcG9saWN5QWN0aW9uXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAg
ICAgICAgc3dpdGNoT24ocmVzdWx0LCBbJl0gKGNvbnN0IFVSTCYgdXJsKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBvbGljeUFjdGlvbjo6SWdub3JlKTsKICAgICAg
ICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bG9hZFJlcXVlc3QoeyB1cmwgfSk7CkBAIC00
MjUwLDEwICs0MjQ4LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdX
aW4KICAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKICAgICBNRVNTQUdFX0NIRUNLX1VSTChyZXF1
ZXN0LnVybCgpKTsKIAotICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtlUmVmKGZyYW1lLT5zZXRVcFBv
bGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
bGlzdGVuZXJJRCwgZnJhbWVJRF0gKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24s
IEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9j
ZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+
JiYgc2FmZUJyb3dzaW5nUmVzdWx0cykgbXV0YWJsZSB7CisgICAgYXV0byBsaXN0ZW5lciA9IG1h
a2VSZWYoZnJhbWUtPnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBsaXN0ZW5lcklELCBmcmFtZUlEXSAoV2ViQ29yZTo6UG9saWN5
QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZl
QnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcpIG11dGFibGUgewogICAgICAg
ICAvLyBGSVhNRTogQXNzZXJ0IHRoZSBBUEk6OldlYnNpdGVQb2xpY2llcyogaXMgbnVsbHB0ciBo
ZXJlIG9uY2UgY2xpZW50cyBvZiBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMg
Z28gYXdheS4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNs
aWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50OjpObyk7Ci0gICAgICAgIEFTU0VS
VF9VTlVTRUQoc2FmZUJyb3dzaW5nUmVzdWx0cywgc2FmZUJyb3dzaW5nUmVzdWx0cy5pc0VtcHR5
KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVCcm93c2luZ1dhcm5pbmcsICFzYWZlQnJv
d3NpbmdXYXJuaW5nKTsKICAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rp
b24sIG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwgUG9saWN5RGVjaXNpb25TZW5kZXI6OmNyZWF0ZShb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGZyYW1lSUQsIGxp
c3RlbmVySURdIChhdXRvLi4uIGFyZ3MpIHsKICAgICAgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKGZyYW1lSUQsIGxpc3Rl
bmVySUQsIGFyZ3MuLi4pLCBtX3BhZ2VJRCk7CiAgICAgICAgIH0pKTsKQEAgLTQyODgsMTAgKzQy
ODYsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvclJlc3BvbgogICAgIE1F
U1NBR0VfQ0hFQ0tfVVJMKHJlc3BvbnNlLnVybCgpKTsKIAogICAgIFJlZlB0cjxBUEk6Ok5hdmln
YXRpb24+IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSUQgPyBtX25hdmlnYXRpb25TdGF0ZS0+bmF2
aWdhdGlvbihuYXZpZ2F0aW9uSUQpIDogbnVsbHB0cjsKLSAgICBhdXRvIGxpc3RlbmVyID0gbWFr
ZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGZyYW1lSUQsIGxpc3RlbmVySUQsIG5hdmlnYXRpb24gPSBXVEZN
b3ZlKG5hdmlnYXRpb24pXSAoV2ViQ29yZTo6UG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJ
OjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQsIFZlY3RvcjxSZWY8U2FmZUJyb3dzaW5nUmVzdWx0Pj4mJiBz
YWZlQnJvd3NpbmdSZXN1bHRzKSBtdXRhYmxlIHsKKyAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJl
ZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGZyYW1lSUQsIGxpc3RlbmVySUQsIG5hdmlnYXRpb24gPSBXVEZNb3Zl
KG5hdmlnYXRpb24pXSAoV2ViQ29yZTo6UG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpX
ZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93
c2luZ1dhcm5pbmcpIG11dGFibGUgewogICAgICAgICAvLyBGSVhNRTogQXNzZXJ0IHRoZSBBUEk6
OldlYnNpdGVQb2xpY2llcyogaXMgbnVsbHB0ciBoZXJlIG9uY2UgY2xpZW50cyBvZiBXS0ZyYW1l
UG9saWN5TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMgZ28gYXdheS4KICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50OjpObyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nUmVzdWx0
cywgc2FmZUJyb3dzaW5nUmVzdWx0cy5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHNhZmVCcm93c2luZ1dhcm5pbmcsICFzYWZlQnJvd3NpbmdXYXJuaW5nKTsKICAgICAgICAgcmVj
ZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24uZ2V0KCksIHN0ZDo6
bnVsbG9wdCwgUG9saWN5RGVjaXNpb25TZW5kZXI6OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGZyYW1lSUQsIGxpc3RlbmVySURdIChhdXRvLi4u
IGFyZ3MpIHsKICAgICAgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKGZyYW1lSUQsIGxpc3RlbmVySUQsIGFyZ3MuLi4pLCBt
X3BhZ2VJRCk7CiAgICAgICAgIH0pKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMjM4MTE1KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTAgKzQyLDEyIEBACiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJOYXZpZ2F0aW9u
U3RhdGUuaCIKICNpbXBvcnQgIk9iakNPYmplY3RHcmFwaC5oIgorI2ltcG9ydCAiUGFnZUNsaWVu
dC5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLmgi
CiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgogI2ltcG9ydCAiUmVtb3Rl
T2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQgIlJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMu
aCIKKyNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbXBvcnQgIlN0cmluZ1V0aWxp
dGllcy5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVXNlck1lZGlhUHJvY2Vz
c01hbmFnZXIuaCIKQEAgLTEyNzcsOSArMTI3OSw5IEBAIC0gKHZvaWQpX2RpZENoYW5nZUVkaXRv
clN0YXRlCiAgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3OnNlbGYgZWRpdG9yU3RhdGVEaWRD
aGFuZ2U6ZGljdGlvbmFyeVJlcHJlc2VudGF0aW9uRm9yRWRpdG9yU3RhdGUoX3BhZ2UtPmVkaXRv
clN0YXRlKCkpXTsKIH0KIAotLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6KGNvbnN0
IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwg
V2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClfc2hvd1NhZmVC
cm93c2luZ1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZyYpd2Fybmlu
ZyBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktp
dDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5k
bGVyCiB7Ci0gICAgX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBhZG9wdE5TKFtbV0tTYWZlQnJvd3Np
bmdXYXJuaW5nIGFsbG9jXSBpbml0V2l0aEZyYW1lOnNlbGYuYm91bmRzIHNhZmVCcm93c2luZ1Jl
c3VsdDpyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6W3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tX
ZWJWaWV3PihzZWxmKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgIF9zYWZlQnJvd3NpbmdXYXJuaW5n
ID0gYWRvcHROUyhbW1dLU2FmZUJyb3dzaW5nV2FybmluZyBhbGxvY10gaW5pdFdpdGhGcmFtZTpz
ZWxmLmJvdW5kcyBzYWZlQnJvd3NpbmdXYXJuaW5nOndhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6
W3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXN1bHQpIG11dGFibGUg
ewogICAgICAgICBpZiAoYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCkpCiAgICAgICAg
ICAgICBbc3RkOjpleGNoYW5nZShzdHJvbmdTZWxmLT5fc2FmZUJyb3dzaW5nV2FybmluZywgbnVs
bHB0cikgcmVtb3ZlRnJvbVN1cGVydmlld107CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUocmVzdWx0KSk7CkBAIC00NzMyLDYgKzQ3MzQsMjggQEAgKyAoQk9PTClfaGFuZGxlc1Nh
ZmVCcm93c2luZwogICAgIHJldHVybiB0cnVlOwogfQogCistICh2b2lkKV9zaG93U2FmZUJyb3dz
aW5nV2FybmluZ1dpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3YXJuaW5nOihOU1N0cmluZyAq
KXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5nICopZGV0YWlscyBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCheKShOU1VSTCAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGF1dG8g
c2FmZUJyb3dzaW5nV2FybmluZyA9IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6Y3JlYXRl
KHRpdGxlLCB3YXJuaW5nLCBkZXRhaWxzKTsKKyAgICBhdXRvIHdyYXBwZXIgPSBbY29tcGxldGlv
bkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoVmFyaWFudDxXZWJL
aXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmIHZhcmlhbnQpIHsKKyAgICAg
ICAgc3dpdGNoT24odmFyaWFudCwgWyZdIChXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCkgewor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICAgICAgfSwgWyZdIChXZWJD
b3JlOjpVUkwgdXJsKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih1cmwpOworICAg
ICAgICB9KTsKKyAgICB9OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBfaW1wbC0+c2hvd1NhZmVC
cm93c2luZ1dhcm5pbmcoc2FmZUJyb3dzaW5nV2FybmluZywgV1RGTW92ZSh3cmFwcGVyKSk7Cisj
ZWxzZQorICAgIFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpzYWZlQnJvd3NpbmdXYXJu
aW5nIGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUod3JhcHBlcildOworI2VuZGlmCit9CisKKysg
KE5TVVJMICopX2NvbmZpcm1NYWx3YXJlU2VudGluZWwKK3sKKyAgICByZXR1cm4gV2ViS2l0OjpT
YWZlQnJvd3NpbmdXYXJuaW5nOjpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCk7Cit9CisKIC0gKHZv
aWQpX2V2YWx1YXRlSmF2YVNjcmlwdFdpdGhvdXRVc2VyR2VzdHVyZTooTlNTdHJpbmcgKilqYXZh
U2NyaXB0U3RyaW5nIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShpZCwgTlNFcnJvciAqKSlj
b21wbGV0aW9uSGFuZGxlcgogewogICAgIFtzZWxmIF9ldmFsdWF0ZUphdmFTY3JpcHQ6amF2YVNj
cmlwdFN0cmluZyBmb3JjZVVzZXJHZXN0dXJlOk5PIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRp
b25IYW5kbGVyXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAyMzgxMTUpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCBjbGFzcyBBdHRhY2htZW50OwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIGVudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2FkIDogYm9vbDsKLWNsYXNzIFNhZmVC
cm93c2luZ1Jlc3VsdDsKK2NsYXNzIFNhZmVCcm93c2luZ1dhcm5pbmc7CiBjbGFzcyBWaWV3U25h
cHNob3Q7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiBzdHJ1Y3QgUHJpbnRJbmZvOwpAQCAtMTc5LDcg
KzE3OSw3IEBAIGNsYXNzIFVSTDsKIC0gKHZvaWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6
QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZTsKICNl
bmRpZgogCi0tICh2b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZzooY29uc3QgV2ViS2l0OjpT
YWZlQnJvd3NpbmdSZXN1bHQmKXJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpV
Ukw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dh
cm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZyYpd2FybmluZyBjb21wbGV0
aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGlu
dWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyOwogLSAo
dm9pZClfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nOwogCiAtIChzdGQ6Om9wdGlvbmFsPEJPT0w+
KV9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRpb25Gb3JUZXN0aW5nOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiAr
MTAzLDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZAogQGNsYXNz
IF9XS0ljb25Mb2FkaW5nRGVsZWdhdGU7CiBAY2xhc3MgX1dLSW5zcGVjdG9yOwogQGNsYXNzIF9X
S1JlbW90ZU9iamVjdFJlZ2lzdHJ5OworQGNsYXNzIF9XS1NhZmVCcm93c2luZ1dhcm5pbmc7CiBA
Y2xhc3MgX1dLU2Vzc2lvblN0YXRlOwogQGNsYXNzIF9XS1RodW1ibmFpbFZpZXc7CiBAY2xhc3Mg
X1dLV2Vic2l0ZVBvbGljaWVzOwpAQCAtMTg3LDYgKzE4OCw4IEBAIHR5cGVkZWYgTlNfT1BUSU9O
UyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWQKIC0gKF9XS0F0dGFjaG1lbnQgKilfYXR0YWNobWVudEZv
cklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBXS19BUElfQVZBSUxBQkxFKG1hY29z
eChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogKyAoQk9PTClfaGFuZGxlc1NhZmVC
cm93c2luZyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKKysgKE5TVVJMICopX2NvbmZpcm1NYWx3YXJlU2VudGluZWwgV0tfQVBJX0FWQUlMQUJM
RShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zaG93U2Fm
ZUJyb3dzaW5nV2FybmluZ1dpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3YXJuaW5nOihOU1N0
cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5nICopZGV0YWlscyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCheKShOU1VSTCAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogLSAoSUJB
Y3Rpb24pX2FsaWduQ2VudGVyOihpZClzZW5kZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtIChJQkFjdGlvbilfYWxpZ25KdXN0aWZpZWQ6
KGlkKXNlbmRlciBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2lu
Z1Jlc3VsdENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1NhZmVCcm93c2luZ1Jlc3VsdENvY29hLm1tCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdSZXN1bHRDb2NvYS5tbQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlNhZmVCcm93c2luZ1Jlc3VsdC5oIgotCi0jaW1wb3J0ICJTYWZlQnJvd3Np
bmdTUEkuaCIKLSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKLQotLy8gRklYTUU6IFRoZXNl
IG91Z2h0IHRvIGJlIEFQSSBjYWxscyB0byB0aGUgU2FmYXJpU2FmZUJyb3dzaW5nIGZyYW1ld29y
ayB3aGVuIHN1Y2ggU1BJIGlzIGF2YWlsYWJsZS4KLXN0YXRpYyBjb25zdCBjaGFyKiBtYWx3YXJl
RGV0YWlsc0Jhc2UoY29uc3QgU3RyaW5nJiBwcm92aWRlcikKLXsKLSAgICBpZiAocHJvdmlkZXIg
PT0gU3RyaW5nKFNTQlByb3ZpZGVyVGVuY2VudCkpCi0gICAgICAgIHJldHVybiAiaHR0cHM6Ly93
d3cudXJsc2VjLnFxLmNvbS9jaGVjay5odG1sP3RwbD1zYWZhcmkiOwotICAgIHJldHVybiAiaHR0
cHM6Ly9nb29nbGUuY29tL3NhZmVicm93c2luZy9kaWFnbm9zdGljP3RwbD1zYWZhcmkiOwotfQot
Ci1zdGF0aWMgV2ViQ29yZTo6VVJMIGxlYXJuTW9yZShjb25zdCBTdHJpbmcmIHByb3ZpZGVyKQot
ewotICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlkZXJUZW5jZW50KSkKLSAgICAg
ICAgcmV0dXJuIHt7IH0sICJodHRwczovL3d3dy51cmxzZWMucXEuY29tL3N0YW5kYXJkL3MxLmh0
bWw/dHBsPXNhZmFyaSJ9OwotICAgIHJldHVybiB7eyB9LCAiaHR0cHM6Ly93d3cuZ29vZ2xlLmNv
bS9zdXBwb3J0L2Jpbi9hbnN3ZXIucHk/YW5zd2VyPTEwNjMxOCJ9OwotfQotCi1zdGF0aWMgY29u
c3QgY2hhciogcmVwb3J0QW5FcnJvckJhc2UoY29uc3QgU3RyaW5nJiBwcm92aWRlcikKLXsKLSAg
ICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3ZpZGVyVGVuY2VudCkpCi0gICAgICAgIHJl
dHVybiAiaHR0cHM6Ly93d3cudXJsc2VjLnFxLmNvbS9jb21wbGFpbi5odG1sP3RwbD1zYWZhcmki
OwotICAgIHJldHVybiAiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zYWZlYnJvd3NpbmcvcmVwb3J0
X2Vycm9yLz90cGw9c2FmYXJpIjsKLX0KLQotc3RhdGljIFN0cmluZyBsb2NhbGl6ZWRQcm92aWRl
cihjb25zdCBTdHJpbmcmIHByb3ZpZGVyKQotewotICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmco
U1NCUHJvdmlkZXJUZW5jZW50KSkKLSAgICAgICAgcmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIlRl
bmNlbnQgU2FmZSBCcm93c2luZyIsICJUZW5jZW50IFNhZmUgQnJvd3NpbmciKTsKLSAgICByZXR1
cm4gV0VCX1VJX05TU1RSSU5HKEAiR29vZ2xlIFNhZmUgQnJvd3NpbmciLCAiR29vZ2xlIFNhZmUg
QnJvd3NpbmciKTsKLX0KLQotU2FmZUJyb3dzaW5nUmVzdWx0OjpTYWZlQnJvd3NpbmdSZXN1bHQo
V2ViQ29yZTo6VVJMJiYgdXJsLCBTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCi0gICAg
OiBtX3VybChXVEZNb3ZlKHVybCkpCi0gICAgLCBtX2lzUGhpc2hpbmcoW3Jlc3VsdCBpc1BoaXNo
aW5nXSkKLSAgICAsIG1faXNNYWx3YXJlKFtyZXN1bHQgaXNNYWx3YXJlXSkKLSAgICAsIG1faXNV
bndhbnRlZFNvZnR3YXJlKFtyZXN1bHQgaXNVbndhbnRlZFNvZnR3YXJlXSkKLSAgICAsIG1fcHJv
dmlkZXIoW3Jlc3VsdCBwcm92aWRlcl0pCi0gICAgLCBtX2xvY2FsaXplZFByb3ZpZGVyTmFtZShs
b2NhbGl6ZWRQcm92aWRlcihbcmVzdWx0IHByb3ZpZGVyXSkpCi0gICAgLCBtX21hbHdhcmVEZXRh
aWxzVVJMQmFzZShtYWx3YXJlRGV0YWlsc0Jhc2UoW3Jlc3VsdCBwcm92aWRlcl0pKQotICAgICwg
bV9yZXBvcnRBbkVycm9yVVJMQmFzZShyZXBvcnRBbkVycm9yQmFzZShbcmVzdWx0IHByb3ZpZGVy
XSkpCi0gICAgLCBtX2xlYXJuTW9yZVVSTChsZWFybk1vcmUoW3Jlc3VsdCBwcm92aWRlcl0pKQot
ewotfQotI2VuZGlmCi0KLX0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1Jlc3VsdENvY29hLm1tCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRl
ZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJy
b3dzaW5nV2FybmluZ0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1NhZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5tbQkocmV2aXNpb24gMjM4MTE0KQko
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdSZXN1bHRDb2Nv
YS5tbToyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3Np
bmdXYXJuaW5nQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiU2FmZUJyb3dzaW5nUmVzdWx0Lmgi
CisKKyNpbXBvcnQgIlNhZmVCcm93c2luZ1NQSS5oIgorI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6
ZWRTdHJpbmdzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYgSEFWRShTQUZFX0JST1dT
SU5HKQorCisvLyBGSVhNRTogVGhlc2Ugb3VnaHQgdG8gYmUgQVBJIGNhbGxzIHRvIHRoZSBTYWZh
cmlTYWZlQnJvd3NpbmcgZnJhbWV3b3JrIHdoZW4gc3VjaCBTUEkgaXMgYXZhaWxhYmxlLgorc3Rh
dGljIGNvbnN0IGNoYXIqIG1hbHdhcmVEZXRhaWxzQmFzZShjb25zdCBTdHJpbmcmIHByb3ZpZGVy
KQoreworICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlkZXJUZW5jZW50KSkKKyAg
ICAgICAgcmV0dXJuICJodHRwczovL3d3dy51cmxzZWMucXEuY29tL2NoZWNrLmh0bWw/dHBsPXNh
ZmFyaSI7CisgICAgcmV0dXJuICJodHRwczovL2dvb2dsZS5jb20vc2FmZWJyb3dzaW5nL2RpYWdu
b3N0aWM/dHBsPXNhZmFyaSI7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpVUkwgbGVhcm5Nb3JlKGNv
bnN0IFN0cmluZyYgcHJvdmlkZXIpCit7CisgICAgaWYgKHByb3ZpZGVyID09IFN0cmluZyhTU0JQ
cm92aWRlclRlbmNlbnQpKQorICAgICAgICByZXR1cm4ge3sgfSwgImh0dHBzOi8vd3d3LnVybHNl
Yy5xcS5jb20vc3RhbmRhcmQvczEuaHRtbD90cGw9c2FmYXJpIn07CisgICAgcmV0dXJuIHt7IH0s
ICJodHRwczovL3d3dy5nb29nbGUuY29tL3N1cHBvcnQvYmluL2Fuc3dlci5weT9hbnN3ZXI9MTA2
MzE4In07Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiByZXBvcnRBbkVycm9yQmFzZShjb25zdCBT
dHJpbmcmIHByb3ZpZGVyKQoreworICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlk
ZXJUZW5jZW50KSkKKyAgICAgICAgcmV0dXJuICJodHRwczovL3d3dy51cmxzZWMucXEuY29tL2Nv
bXBsYWluLmh0bWw/dHBsPXNhZmFyaSI7CisgICAgcmV0dXJuICJodHRwczovL3d3dy5nb29nbGUu
Y29tL3NhZmVicm93c2luZy9yZXBvcnRfZXJyb3IvP3RwbD1zYWZhcmkiOworfQorCitzdGF0aWMg
U3RyaW5nIGxvY2FsaXplZFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgcHJvdmlkZXIpCit7CisgICAg
aWYgKHByb3ZpZGVyID09IFN0cmluZyhTU0JQcm92aWRlclRlbmNlbnQpKQorICAgICAgICByZXR1
cm4gV0VCX1VJX05TU1RSSU5HKEAiVGVuY2VudCBTYWZlIEJyb3dzaW5nIiwgIlRlbmNlbnQgU2Fm
ZSBCcm93c2luZyIpOworICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJHb29nbGUgU2FmZSBC
cm93c2luZyIsICJHb29nbGUgU2FmZSBCcm93c2luZyIpOworfQorCitTYWZlQnJvd3NpbmdSZXN1
bHQ6OlNhZmVCcm93c2luZ1Jlc3VsdChXZWJDb3JlOjpVUkwmJiB1cmwsIFNTQlNlcnZpY2VMb29r
dXBSZXN1bHQgKnJlc3VsdCkKKyAgICA6IG1fdXJsKFdURk1vdmUodXJsKSkKKyAgICAsIG1faXNQ
aGlzaGluZyhbcmVzdWx0IGlzUGhpc2hpbmddKQorICAgICwgbV9pc01hbHdhcmUoW3Jlc3VsdCBp
c01hbHdhcmVdKQorICAgICwgbV9pc1Vud2FudGVkU29mdHdhcmUoW3Jlc3VsdCBpc1Vud2FudGVk
U29mdHdhcmVdKQorICAgICwgbV9wcm92aWRlcihbcmVzdWx0IHByb3ZpZGVyXSkKKyAgICAsIG1f
bG9jYWxpemVkUHJvdmlkZXJOYW1lKGxvY2FsaXplZFByb3ZpZGVyKFtyZXN1bHQgcHJvdmlkZXJd
KSkKKyAgICAsIG1fbWFsd2FyZURldGFpbHNVUkxCYXNlKG1hbHdhcmVEZXRhaWxzQmFzZShbcmVz
dWx0IHByb3ZpZGVyXSkpCisgICAgLCBtX3JlcG9ydEFuRXJyb3JVUkxCYXNlKHJlcG9ydEFuRXJy
b3JCYXNlKFtyZXN1bHQgcHJvdmlkZXJdKSkKKyAgICAsIG1fbGVhcm5Nb3JlVVJMKGxlYXJuTW9y
ZShbcmVzdWx0IHByb3ZpZGVyXSkpCit7Cit9CisjZW5kaWYKKworfQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nV2FybmluZ0Nv
Y29hLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdXYXJuaW5nQ29jb2Eu
bW0JKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Nh
ZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsNTYgKzI0LDE1
MyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2FmZUJyb3dzaW5nUmVz
dWx0LmgiCisjaW1wb3J0ICJTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCiAKICNpbXBvcnQgIlNhZmVC
cm93c2luZ1NQSS5oIgogI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1w
b3J0IDx3dGYvTGFuZ3VhZ2UuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBIQVZFKFNB
RkVfQlJPV1NJTkcpCiAKLS8vIEZJWE1FOiBUaGVzZSBvdWdodCB0byBiZSBBUEkgY2FsbHMgdG8g
dGhlIFNhZmFyaVNhZmVCcm93c2luZyBmcmFtZXdvcmsgd2hlbiBzdWNoIFNQSSBpcyBhdmFpbGFi
bGUuCi1zdGF0aWMgY29uc3QgY2hhciogbWFsd2FyZURldGFpbHNCYXNlKGNvbnN0IFN0cmluZyYg
cHJvdmlkZXIpCisvLyBGSVhNRTogVGhlc2UgZm91ciBmdW5jdGlvbnMgb3VnaHQgdG8gYmUgQVBJ
IGNhbGxzIHRvIHRoZSBTYWZhcmlTYWZlQnJvd3NpbmcgZnJhbWV3b3JrIHdoZW4gc3VjaCBTUEkg
aXMgYXZhaWxhYmxlLgorLy8gVGhhdCB3YXkgV2ViS2l0IGRvZXMgbm90IG5lZWQgdG8ga25vdyBh
Ym91dCB0aGUgU2FmYXJpU2FmZUJyb3dzaW5nIGZyYW1ld29yaydzIHBvc3NpYmxlIHByb3ZpZGVy
cy4KK3N0YXRpYyBjb25zdCBjaGFyKiBtYWx3YXJlRGV0YWlsc0Jhc2UoU1NCU2VydmljZUxvb2t1
cFJlc3VsdCAqcmVzdWx0KQogewotICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlk
ZXJUZW5jZW50KSkKKyAgICBpZiAoW3Jlc3VsdC5wcm92aWRlciBpc0VxdWFsVG9TdHJpbmc6U1NC
UHJvdmlkZXJUZW5jZW50XSkKICAgICAgICAgcmV0dXJuICJodHRwczovL3d3dy51cmxzZWMucXEu
Y29tL2NoZWNrLmh0bWw/dHBsPXNhZmFyaSI7CiAgICAgcmV0dXJuICJodHRwczovL2dvb2dsZS5j
b20vc2FmZWJyb3dzaW5nL2RpYWdub3N0aWM/dHBsPXNhZmFyaSI7CiB9CiAKLXN0YXRpYyBXZWJD
b3JlOjpVUkwgbGVhcm5Nb3JlKGNvbnN0IFN0cmluZyYgcHJvdmlkZXIpCitzdGF0aWMgTlNVUkwg
KmxlYXJuTW9yZVVSTChTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCiB7Ci0gICAgaWYg
KHByb3ZpZGVyID09IFN0cmluZyhTU0JQcm92aWRlclRlbmNlbnQpKQotICAgICAgICByZXR1cm4g
e3sgfSwgImh0dHBzOi8vd3d3LnVybHNlYy5xcS5jb20vc3RhbmRhcmQvczEuaHRtbD90cGw9c2Fm
YXJpIn07Ci0gICAgcmV0dXJuIHt7IH0sICJodHRwczovL3d3dy5nb29nbGUuY29tL3N1cHBvcnQv
YmluL2Fuc3dlci5weT9hbnN3ZXI9MTA2MzE4In07CisgICAgaWYgKFtyZXN1bHQucHJvdmlkZXIg
aXNFcXVhbFRvU3RyaW5nOlNTQlByb3ZpZGVyVGVuY2VudF0pCisgICAgICAgIHJldHVybiBbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LnVybHNlYy5xcS5jb20vc3RhbmRhcmQvczEu
aHRtbD90cGw9c2FmYXJpIl07CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0
cHM6Ly93d3cuZ29vZ2xlLmNvbS9zdXBwb3J0L2Jpbi9hbnN3ZXIucHk/YW5zd2VyPTEwNjMxOCJd
OwogfQogCi1zdGF0aWMgY29uc3QgY2hhciogcmVwb3J0QW5FcnJvckJhc2UoY29uc3QgU3RyaW5n
JiBwcm92aWRlcikKK3N0YXRpYyBjb25zdCBjaGFyKiByZXBvcnRBbkVycm9yQmFzZShTU0JTZXJ2
aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCiB7Ci0gICAgaWYgKHByb3ZpZGVyID09IFN0cmluZyhT
U0JQcm92aWRlclRlbmNlbnQpKQorICAgIGlmIChbcmVzdWx0LnByb3ZpZGVyIGlzRXF1YWxUb1N0
cmluZzpTU0JQcm92aWRlclRlbmNlbnRdKQogICAgICAgICByZXR1cm4gImh0dHBzOi8vd3d3LnVy
bHNlYy5xcS5jb20vY29tcGxhaW4uaHRtbD90cGw9c2FmYXJpIjsKICAgICByZXR1cm4gImh0dHBz
Oi8vd3d3Lmdvb2dsZS5jb20vc2FmZWJyb3dzaW5nL3JlcG9ydF9lcnJvci8/dHBsPXNhZmFyaSI7
CiB9CiAKLXN0YXRpYyBTdHJpbmcgbG9jYWxpemVkUHJvdmlkZXIoY29uc3QgU3RyaW5nJiBwcm92
aWRlcikKK3N0YXRpYyBTdHJpbmcgbG9jYWxpemVkUHJvdmlkZXIoU1NCU2VydmljZUxvb2t1cFJl
c3VsdCAqcmVzdWx0KQogewotICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlkZXJU
ZW5jZW50KSkKKyAgICBpZiAoW3Jlc3VsdC5wcm92aWRlciBpc0VxdWFsVG9TdHJpbmc6U1NCUHJv
dmlkZXJUZW5jZW50XSkKICAgICAgICAgcmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIlRlbmNlbnQg
U2FmZSBCcm93c2luZyIsICJUZW5jZW50IFNhZmUgQnJvd3NpbmciKTsKICAgICByZXR1cm4gV0VC
X1VJX05TU1RSSU5HKEAiR29vZ2xlIFNhZmUgQnJvd3NpbmciLCAiR29vZ2xlIFNhZmUgQnJvd3Np
bmciKTsKIH0KIAotU2FmZUJyb3dzaW5nUmVzdWx0OjpTYWZlQnJvd3NpbmdSZXN1bHQoV2ViQ29y
ZTo6VVJMJiYgdXJsLCBTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCi0gICAgOiBtX3Vy
bChXVEZNb3ZlKHVybCkpCi0gICAgLCBtX2lzUGhpc2hpbmcoW3Jlc3VsdCBpc1BoaXNoaW5nXSkK
LSAgICAsIG1faXNNYWx3YXJlKFtyZXN1bHQgaXNNYWx3YXJlXSkKLSAgICAsIG1faXNVbndhbnRl
ZFNvZnR3YXJlKFtyZXN1bHQgaXNVbndhbnRlZFNvZnR3YXJlXSkKLSAgICAsIG1fcHJvdmlkZXIo
W3Jlc3VsdCBwcm92aWRlcl0pCi0gICAgLCBtX2xvY2FsaXplZFByb3ZpZGVyTmFtZShsb2NhbGl6
ZWRQcm92aWRlcihbcmVzdWx0IHByb3ZpZGVyXSkpCi0gICAgLCBtX21hbHdhcmVEZXRhaWxzVVJM
QmFzZShtYWx3YXJlRGV0YWlsc0Jhc2UoW3Jlc3VsdCBwcm92aWRlcl0pKQotICAgICwgbV9yZXBv
cnRBbkVycm9yVVJMQmFzZShyZXBvcnRBbkVycm9yQmFzZShbcmVzdWx0IHByb3ZpZGVyXSkpCi0g
ICAgLCBtX2xlYXJuTW9yZVVSTChsZWFybk1vcmUoW3Jlc3VsdCBwcm92aWRlcl0pKQorCitzdGF0
aWMgdm9pZCByZXBsYWNlKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgTlNTdHJp
bmcgKnRvUmVwbGFjZSwgTlNTdHJpbmcgKnJlcGxhY2VXaXRoKQoreworICAgIFtzdHJpbmcgcmVw
bGFjZUNoYXJhY3RlcnNJblJhbmdlOltzdHJpbmcuc3RyaW5nIHJhbmdlT2ZTdHJpbmc6dG9SZXBs
YWNlXSB3aXRoU3RyaW5nOnJlcGxhY2VXaXRoXTsKK30KKworc3RhdGljIHZvaWQgYWRkTGlua0Fu
ZFJlcGxhY2UoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBOU1N0cmluZyAqdG9S
ZXBsYWNlLCBOU1N0cmluZyAqcmVwbGFjZVdpdGgsIE5TVVJMICpsaW5rVGFyZ2V0KQoreworICAg
IE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZ1dpdGhMaW5rID0gW1tbTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6cmVwbGFjZVdpdGhdIGF1dG9y
ZWxlYXNlXTsKKyAgICBbc3RyaW5nV2l0aExpbmsgYWRkQXR0cmlidXRlczpAeworICAgICAgICBO
U0xpbmtBdHRyaWJ1dGVOYW1lOiBsaW5rVGFyZ2V0LAorICAgICAgICBOU1VuZGVybGluZVN0eWxl
QXR0cmlidXRlTmFtZTogQDEKKyAgICB9IHJhbmdlOk5TTWFrZVJhbmdlKDAsIHJlcGxhY2VXaXRo
Lmxlbmd0aCldOworICAgIFtzdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOltzdHJpbmcu
c3RyaW5nIHJhbmdlT2ZTdHJpbmc6dG9SZXBsYWNlXSB3aXRoQXR0cmlidXRlZFN0cmluZzpzdHJp
bmdXaXRoTGlua107Cit9CisKK3N0YXRpYyBOU1VSTCAqcmVwb3J0QW5FcnJvclVSTChjb25zdCBX
ZWJDb3JlOjpVUkwmIHVybCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQoreworICAg
IHJldHVybiBXZWJDb3JlOjpVUkwoeyB9LCBtYWtlU3RyaW5nKHJlcG9ydEFuRXJyb3JCYXNlKHJl
c3VsdCksICImdXJsPSIsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModXJsKSwgIiZobD0i
LCBkZWZhdWx0TGFuZ3VhZ2UoKSkpOworfQorCitzdGF0aWMgTlNVUkwgKm1hbHdhcmVEZXRhaWxz
VVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1
bHQpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlVSTCh7IH0sIG1ha2VTdHJpbmcobWFsd2FyZURl
dGFpbHNCYXNlKHJlc3VsdCksICImc2l0ZT0iLCB1cmwuaG9zdCgpLCAiJmhsPSIsIGRlZmF1bHRM
YW5ndWFnZSgpKSk7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqc2FmZUJyb3dzaW5nVGl0bGVUZXh0
KFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKK3sKKyAgICBpZiAocmVzdWx0LmlzUGhp
c2hpbmcpCisgICAgICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJEZWNlcHRpdmUgV2Vic2l0
ZSBXYXJuaW5nIiwgIlBoaXNoaW5nIHdhcm5pbmcgdGl0bGUiKTsKKyAgICBpZiAocmVzdWx0Lmlz
TWFsd2FyZSkKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIk1hbHdhcmUgV2Vic2l0
ZSBXYXJuaW5nIiwgIk1hbHdhcmUgd2FybmluZyB0aXRsZSIpOworICAgIEFTU0VSVChyZXN1bHQu
aXNVbndhbnRlZFNvZnR3YXJlKTsKKyAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiV2Vic2l0
ZSBXaXRoIEhhcm1mdWwgU29mdHdhcmUgV2FybmluZyIsICJVbndhbnRlZCBzb2Z0d2FyZSB3YXJu
aW5nIHRpdGxlIik7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqc2FmZUJyb3dzaW5nV2FybmluZ1Rl
eHQoU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQoreworICAgIGlmIChyZXN1bHQuaXNQ
aGlzaGluZykKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIlRoaXMgd2Vic2l0ZSBt
YXkgdHJ5IHRvIHRyaWNrIHlvdSBpbnRvIGRvaW5nIHNvbWV0aGluZyBkYW5nZXJvdXMsIGxpa2Ug
aW5zdGFsbGluZyBzb2Z0d2FyZSBvciBkaXNjbG9zaW5nIHBlcnNvbmFsIG9yIGZpbmFuY2lhbCBp
bmZvcm1hdGlvbiwgbGlrZSBwYXNzd29yZHMsIHBob25lIG51bWJlcnMsIG9yIGNyZWRpdCBjYXJk
cy4iLCAiUGhpc2hpbmcgd2FybmluZyIpOworICAgIGlmIChyZXN1bHQuaXNNYWx3YXJlKQorICAg
ICAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiVGhpcyB3ZWJzaXRlIG1heSBhdHRlbXB0IHRv
IGluc3RhbGwgZGFuZ2Vyb3VzIHNvZnR3YXJlLCB3aGljaCBjb3VsZCBoYXJtIHlvdXIgY29tcHV0
ZXIgb3Igc3RlYWwgeW91ciBwZXJzb25hbCBvciBmaW5hbmNpYWwgaW5mb3JtYXRpb24sIGxpa2Ug
cGFzc3dvcmRzLCBwaG90b3MsIG9yIGNyZWRpdCBjYXJkcy4iLCAiTWFsd2FyZSB3YXJuaW5nIik7
CisKKyAgICBBU1NFUlQocmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSk7CisgICAgcmV0dXJuIFdF
Ql9VSV9OU1NUUklORyhAIlRoaXMgd2Vic2l0ZSBtYXkgdHJ5IHRvIHRyaWNrIHlvdSBpbnRvIGlu
c3RhbGxpbmcgc29mdHdhcmUgdGhhdCBoYXJtcyB5b3VyIGJyb3dzaW5nIGV4cGVyaWVuY2UsIGxp
a2UgY2hhbmdpbmcgeW91ciBzZXR0aW5ncyB3aXRob3V0IHlvdXIgcGVybWlzc2lvbiBvciBzaG93
aW5nIHlvdSB1bndhbnRlZCBhZHMuIE9uY2UgaW5zdGFsbGVkLCBpdCBtYXkgYmUgZGlmZmljdWx0
IHRvIHJlbW92ZS4iLCAiVW53YW50ZWQgc29mdHdhcmUgd2FybmluZyIpOworfQorCitzdGF0aWMg
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc2FmZUJyb3dzaW5nRGV0YWlsc1RleHQoY29uc3Qg
V2ViQ29yZTo6VVJMJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKK3sKKyAg
ICBpZiAocmVzdWx0LmlzUGhpc2hpbmcpIHsKKyAgICAgICAgTlNTdHJpbmcgKnBoaXNoaW5nRGVz
Y3JpcHRpb24gPSBXRUJfVUlfTlNTVFJJTkcoQCJXYXJuaW5ncyBhcmUgc2hvd24gZm9yIHdlYnNp
dGVzIHRoYXQgaGF2ZSBiZWVuIHJlcG9ydGVkIGFzIGRlY2VwdGl2ZS4gRGVjZXB0aXZlIHdlYnNp
dGVzIHRyeSB0byB0cmljayB5b3UgaW50byBiZWxpZXZpbmcgdGhleSBhcmUgbGVnaXRpbWF0ZSB3
ZWJzaXRlcyB5b3UgdHJ1c3QuIiwgIlBoaXNoaW5nIHdhcm5pbmcgZGVzY3JpcHRpb24iKTsKKyAg
ICAgICAgTlNTdHJpbmcgKmxlYXJuTW9yZSA9IFdFQl9VSV9OU1NUUklORyhAIkxlYXJuIG1vcmXi
gKYiLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIik7CisgICAgICAgIE5TU3Ry
aW5nICpwaGlzaGluZ0FjdGlvbnMgPSBXRUJfVUlfTlNTVFJJTkcoQCJJZiB5b3UgYmVsaWV2ZSB0
aGlzIHdlYnNpdGUgaXMgc2FmZSwgeW91IGNhbiAlcmVwb3J0LWFuLWVycm9yJS4gT3IsIGlmIHlv
dSB1bmRlcnN0YW5kIHRoZSByaXNrcyBpbnZvbHZlZCwgeW91IGNhbiAlYnlwYXNzLWxpbmslLiIs
ICJQaGlzaGluZyB3YXJuaW5nIGRlc2NyaXB0aW9uIik7CisgICAgICAgIE5TU3RyaW5nICpyZXBv
cnRBbkVycm9yID0gV0VCX1VJX05TU1RSSU5HKEAicmVwb3J0IGFuIGVycm9yIiwgIkFjdGlvbiBm
cm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIpOworICAgICAgICBOU1N0cmluZyAqdmlzaXRVbnNh
ZmVXZWJzaXRlID0gV0VCX1VJX05TU1RSSU5HKEAidmlzaXQgdGhpcyB1bnNhZmUgd2Vic2l0ZSIs
ICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKKworICAgICAgICBOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW1tbTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlQCAlQFxuXG4lQCIsIHBoaXNoaW5nRGVzY3JpcHRpb24sIGxlYXJuTW9yZSwgcGhpc2hp
bmdBY3Rpb25zXV0gYXV0b3JlbGVhc2VdOworICAgICAgICBhZGRMaW5rQW5kUmVwbGFjZShhdHRy
aWJ1dGVkU3RyaW5nLCBsZWFybk1vcmUsIGxlYXJuTW9yZSwgbGVhcm5Nb3JlVVJMKHJlc3VsdCkp
OworICAgICAgICBhZGRMaW5rQW5kUmVwbGFjZShhdHRyaWJ1dGVkU3RyaW5nLCBAIiVyZXBvcnQt
YW4tZXJyb3IlIiwgcmVwb3J0QW5FcnJvciwgcmVwb3J0QW5FcnJvclVSTCh1cmwsIHJlc3VsdCkp
OworICAgICAgICBhZGRMaW5rQW5kUmVwbGFjZShhdHRyaWJ1dGVkU3RyaW5nLCBAIiVieXBhc3Mt
bGluayUiLCB2aXNpdFVuc2FmZVdlYnNpdGUsIFNhZmVCcm93c2luZ1dhcm5pbmc6OnZpc2l0VW5z
YWZlV2Vic2l0ZVNlbnRpbmVsKCkpOworICAgICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsK
KyAgICB9CisKKyAgICBhdXRvIG1hbHdhcmVPclVud2FudGVkU29mdHdhcmVEZXRhaWxzID0gWyZd
IChOU1N0cmluZyAqZGVzY3JpcHRpb24sIE5TU3RyaW5nICpzdGF0dXNTdHJpbmdUb1JlcGxhY2Us
IGJvb2wgY29uZmlybU1hbHdhcmUpIHsKKyAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyAqbWFsd2FyZURlc2NyaXB0aW9uID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhTdHJpbmc6ZGVzY3JpcHRpb25dIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgcmVw
bGFjZShtYWx3YXJlRGVzY3JpcHRpb24sIEAiJXNhZmVCcm93c2luZ1Byb3ZpZGVyJSIsIGxvY2Fs
aXplZFByb3ZpZGVyKHJlc3VsdCkpOworICAgICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
ICpzdGF0dXNMaW5rID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdp
dGhTdHJpbmc6V0VCX1VJX05TU1RSSU5HKEAidGhlIHN0YXR1cyBvZiDigJwlc2l0ZSXigJ0iLCAi
UGFydCBvZiBtYWx3YXJlIGRlc2NyaXB0aW9uIildIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgcmVw
bGFjZShzdGF0dXNMaW5rLCBAIiVzaXRlJSIsIHVybC5ob3N0KCkudG9TdHJpbmcoKSk7CisgICAg
ICAgIGFkZExpbmtBbmRSZXBsYWNlKG1hbHdhcmVEZXNjcmlwdGlvbiwgc3RhdHVzU3RyaW5nVG9S
ZXBsYWNlLCBzdGF0dXNMaW5rLnN0cmluZywgbWFsd2FyZURldGFpbHNVUkwodXJsLCByZXN1bHQp
KTsKKworICAgICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICppZllvdVVuZGVyc3RhbmQg
PSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpXRUJf
VUlfTlNTVFJJTkcoQCJJZiB5b3UgdW5kZXJzdGFuZCB0aGUgcmlza3MgaW52b2x2ZWQsIHlvdSBj
YW4gJXZpc2l0LXRoaXMtdW5zYWZlLXNpdGUtbGluayUuIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJv
d3Npbmcgd2FybmluZyIpXSBhdXRvcmVsZWFzZV07CisgICAgICAgIGFkZExpbmtBbmRSZXBsYWNl
KGlmWW91VW5kZXJzdGFuZCwgQCIldmlzaXQtdGhpcy11bnNhZmUtc2l0ZS1saW5rJSIsIFdFQl9V
SV9OU1NUUklORyhAInZpc2l0IHRoaXMgdW5zYWZlIHdlYnNpdGUiLCAiQWN0aW9uIGZyb20gc2Fm
ZSBicm93c2luZyB3YXJuaW5nIiksIGNvbmZpcm1NYWx3YXJlID8gU2FmZUJyb3dzaW5nV2Fybmlu
Zzo6Y29uZmlybU1hbHdhcmVTZW50aW5lbCgpIDogU2FmZUJyb3dzaW5nV2FybmluZzo6dmlzaXRV
bnNhZmVXZWJzaXRlU2VudGluZWwoKSk7CisKKyAgICAgICAgW21hbHdhcmVEZXNjcmlwdGlvbiBh
cHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoU3RyaW5nOkAiXG5cbiJdIGF1dG9yZWxlYXNlXV07CisgICAgICAgIFttYWx3YXJl
RGVzY3JpcHRpb24gYXBwZW5kQXR0cmlidXRlZFN0cmluZzppZllvdVVuZGVyc3RhbmRdOworICAg
ICAgICByZXR1cm4gbWFsd2FyZURlc2NyaXB0aW9uOworICAgIH07CisKKyAgICBpZiAocmVzdWx0
LmlzTWFsd2FyZSkKKyAgICAgICAgcmV0dXJuIG1hbHdhcmVPclVud2FudGVkU29mdHdhcmVEZXRh
aWxzKFdFQl9VSV9OU1NUUklORyhAIldhcm5pbmdzIGFyZSBzaG93biBmb3Igd2Vic2l0ZXMgd2hl
cmUgbWFsaWNpb3VzIHNvZnR3YXJlIGhhcyBiZWVuIGRldGVjdGVkLiBZb3UgY2FuIGNoZWNrIHRo
ZSAlc3RhdHVzLWxpbmslIG9uIHRoZSAlc2FmZUJyb3dzaW5nUHJvdmlkZXIlIGRpYWdub3N0aWMg
cGFnZS4iLCAiTWFsd2FyZSB3YXJuaW5nIGRlc2NyaXB0aW9uIiksIEAiJXN0YXR1cy1saW5rJSIs
IHRydWUpOworICAgIEFTU0VSVChyZXN1bHQuaXNVbndhbnRlZFNvZnR3YXJlKTsKKyAgICByZXR1
cm4gbWFsd2FyZU9yVW53YW50ZWRTb2Z0d2FyZURldGFpbHMoV0VCX1VJX05TU1RSSU5HKEAiV2Fy
bmluZ3MgYXJlIHNob3duIGZvciB3ZWJzaXRlcyB3aGVyZSBoYXJtZnVsIHNvZnR3YXJlIGhhcyBi
ZWVuIGRldGVjdGVkLiBZb3UgY2FuIGNoZWNrICV0aGUtc3RhdHVzLW9mLXNpdGUlIG9uIHRoZSAl
c2FmZUJyb3dzaW5nUHJvdmlkZXIlIGRpYWdub3N0aWMgcGFnZS4iLCAiVW53YW50ZWQgc29mdHdh
cmUgd2FybmluZyBkZXNjcmlwdGlvbiIpLCBAIiV0aGUtc3RhdHVzLW9mLXNpdGUlIiwgZmFsc2Up
OworfQorCitTYWZlQnJvd3NpbmdXYXJuaW5nOjpTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFdl
YkNvcmU6OlVSTCYgdXJsLCBTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCisgICAgOiBt
X3RpdGxlKHNhZmVCcm93c2luZ1RpdGxlVGV4dChyZXN1bHQpKQorICAgICwgbV93YXJuaW5nKHNh
ZmVCcm93c2luZ1dhcm5pbmdUZXh0KHJlc3VsdCkpCisgICAgLCBtX2RldGFpbHMoc2FmZUJyb3dz
aW5nRGV0YWlsc1RleHQodXJsLCByZXN1bHQpKQogewogfQogI2VuZGlmCiAKK1NhZmVCcm93c2lu
Z1dhcm5pbmc6OlNhZmVCcm93c2luZ1dhcm5pbmcoU3RyaW5nJiYgdGl0bGUsIFN0cmluZyYmIHdh
cm5pbmcsIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+JiYgZGV0YWlscykKKyAgICA6IG1f
dGl0bGUoV1RGTW92ZSh0aXRsZSkpCisgICAgLCBtX3dhcm5pbmcoV1RGTW92ZSh3YXJuaW5nKSkK
KyAgICAsIG1fZGV0YWlscyhXVEZNb3ZlKGRldGFpbHMpKQoreworfQorCitOU1VSTCAqU2FmZUJy
b3dzaW5nV2FybmluZzo6dmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKQoreworICAgIHJldHVy
biBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsK
K30KKworTlNVUkwgKlNhZmVCcm93c2luZ1dhcm5pbmc6OmNvbmZpcm1NYWx3YXJlU2VudGluZWwo
KQoreworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIldLQ29uZmlybU1hbHdhcmVT
ZW50aW5lbCJdOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
S1NhZmVCcm93c2luZ1dhcm5pbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAkocmV2aXNpb24gMjM4MTE1KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgVVJMOwogfQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKLWNsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKK2NsYXNzIFNhZmVCcm93c2luZ1dh
cm5pbmc7CiBlbnVtIGNsYXNzIENvbnRpbnVlVW5zYWZlTG9hZCA6IGJvb2w7CiB9CiAKQEAgLTU2
LDEwICs1NiwxMCBAQCB1c2luZyBSZWN0VHlwZSA9IENHUmVjdDsKIHsKIEBwYWNrYWdlCiAgICAg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2Fk
LCBXZWJDb3JlOjpVUkw+JiYpPiBfY29tcGxldGlvbkhhbmRsZXI7Ci0gICAgUmVmUHRyPGNvbnN0
IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0PiBfcmVzdWx0OworICAgIFJlZlB0cjxjb25zdCBX
ZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc+IF93YXJuaW5nOwogICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheTxXS1NhZmVCcm93c2luZ1RleHRWaWV3ICo+PiBfdGV4dFZpZXdzOwogfQogCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooUmVjdFR5cGUpZnJhbWUgc2FmZUJyb3dzaW5n
UmVzdWx0Oihjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRp
b25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51
ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooUmVjdFR5cGUpZnJhbWUgc2FmZUJyb3dzaW5nV2Fy
bmluZzooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nJil3YXJuaW5nIGNvbXBsZXRp
b25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51
ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CiAKIEBl
bmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2Fy
bmluZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1Nh
ZmVCcm93c2luZ1dhcm5pbmcubW0JKHJldmlzaW9uIDIzODEzMykKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogI2ltcG9ydCAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCiAKICNp
bXBvcnQgIlBhZ2VDbGllbnQuaCIKLSNpbXBvcnQgIlNhZmVCcm93c2luZ1Jlc3VsdC5oIgorI2lt
cG9ydCAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgogI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRT
dHJpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1VSTC5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRy
Lmg+CkBAIC03MSwxNiArNzEsNiBAQCBlbnVtIGNsYXNzIFdhcm5pbmdJdGVtIDogdWludDhfdCB7
CiAgICAgR29CYWNrQnV0dG9uCiB9OwogCi1zdGF0aWMgTlNVUkwgKmNvbmZpcm1NYWx3YXJlU2Vu
dGluZWwoKQotewotICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIldLQ29uZmlybU1h
bHdhcmVTZW50aW5lbCJdOwotfQotCi1zdGF0aWMgTlNVUkwgKnZpc2l0VW5zYWZlV2Vic2l0ZVNl
bnRpbmVsKCkKLXsKLSAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS1Zpc2l0VW5z
YWZlV2Vic2l0ZVNlbnRpbmVsIl07Ci19Ci0KIHN0YXRpYyBDb2xvclR5cGUgKmNvbG9yRm9ySXRl
bShXYXJuaW5nSXRlbSBpdGVtLCBWaWV3VHlwZSAqd2FybmluZykKIHsKICAgICBBU1NFUlQoW3dh
cm5pbmcgaXNLaW5kT2ZDbGFzczpbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGNsYXNzXV0pOwpAQCAt
MTM0LDIxICsxMjQsNiBAQCBzdGF0aWMgQ29sb3JUeXBlICpjb2xvckZvckl0ZW0oV2FybmluZ0l0
CiAgICAgcmV0dXJuIG5pbDsKIH0KIAotc3RhdGljIHZvaWQgcmVwbGFjZShOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nICpzdHJpbmcsIE5TU3RyaW5nICp0b1JlcGxhY2UsIE5TU3RyaW5nICpyZXBs
YWNlV2l0aCkKLXsKLSAgICBbc3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3RyaW5n
LnN0cmluZyByYW5nZU9mU3RyaW5nOnRvUmVwbGFjZV0gd2l0aFN0cmluZzpyZXBsYWNlV2l0aF07
Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZExpbmtBbmRSZXBsYWNlKE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgKnN0cmluZywgTlNTdHJpbmcgKnRvUmVwbGFjZSwgTlNTdHJpbmcgKnJlcGxhY2VXaXRo
LCBOU1VSTCAqbGlua1RhcmdldCkKLXsKLSAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpz
dHJpbmdXaXRoTGluayA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOnJlcGxhY2VXaXRoXSBhdXRvcmVsZWFzZV07Ci0gICAgW3N0cmluZ1dpdGhMaW5r
IGFkZEF0dHJpYnV0ZXM6QHsKLSAgICAgICAgTlNMaW5rQXR0cmlidXRlTmFtZTogbGlua1Rhcmdl
dCwKLSAgICAgICAgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWU6IEAxCi0gICAgfSByYW5n
ZTpOU01ha2VSYW5nZSgwLCByZXBsYWNlV2l0aC5sZW5ndGgpXTsKLSAgICBbc3RyaW5nIHJlcGxh
Y2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3RyaW5nLnN0cmluZyByYW5nZU9mU3RyaW5nOnRvUmVwbGFj
ZV0gd2l0aEF0dHJpYnV0ZWRTdHJpbmc6c3RyaW5nV2l0aExpbmtdOwotfQotCiBAaW50ZXJmYWNl
IFdLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2ludCA6IFZpZXdUeXBlCiBAZW5kCiAKQEAgLTE5
OCw3MyArMTczLDYgQEAgLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCiAKIEBlbmQKIAot
c3RhdGljIE5TVVJMICpyZXBvcnRBbkVycm9yVVJMKGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5n
UmVzdWx0JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlVSTCh7IH0sIG1ha2VTdHJp
bmcocmVzdWx0LnJlcG9ydEFuRXJyb3JVUkxCYXNlKCksICImdXJsPSIsIGVuY29kZVdpdGhVUkxF
c2NhcGVTZXF1ZW5jZXMocmVzdWx0LnVybCgpKSwgIiZobD0iLCBkZWZhdWx0TGFuZ3VhZ2UoKSkp
OwotfQotCi1zdGF0aWMgTlNVUkwgKm1hbHdhcmVEZXRhaWxzVVJMKGNvbnN0IFdlYktpdDo6U2Fm
ZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlVSTCh7IH0s
IG1ha2VTdHJpbmcocmVzdWx0Lm1hbHdhcmVEZXRhaWxzVVJMQmFzZSgpLCAiJnNpdGU9IiwgcmVz
dWx0LnVybCgpLmhvc3QoKSwgIiZobD0iLCBkZWZhdWx0TGFuZ3VhZ2UoKSkpOwotfQotCi1zdGF0
aWMgTlNTdHJpbmcgKnRpdGxlVGV4dChjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYg
cmVzdWx0KQotewotICAgIGlmIChyZXN1bHQuaXNQaGlzaGluZygpKQotICAgICAgICByZXR1cm4g
V0VCX1VJX05TU1RSSU5HKEAiRGVjZXB0aXZlIFdlYnNpdGUgV2FybmluZyIsICJQaGlzaGluZyB3
YXJuaW5nIHRpdGxlIik7Ci0gICAgaWYgKHJlc3VsdC5pc01hbHdhcmUoKSkKLSAgICAgICAgcmV0
dXJuIFdFQl9VSV9OU1NUUklORyhAIk1hbHdhcmUgV2Vic2l0ZSBXYXJuaW5nIiwgIk1hbHdhcmUg
d2FybmluZyB0aXRsZSIpOwotICAgIEFTU0VSVChyZXN1bHQuaXNVbndhbnRlZFNvZnR3YXJlKCkp
OwotICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJXZWJzaXRlIFdpdGggSGFybWZ1bCBTb2Z0
d2FyZSBXYXJuaW5nIiwgIlVud2FudGVkIHNvZnR3YXJlIHdhcm5pbmcgdGl0bGUiKTsKLX0KLQot
c3RhdGljIE5TU3RyaW5nICp3YXJuaW5nVGV4dChjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jl
c3VsdCYgcmVzdWx0KQotewotICAgIGlmIChyZXN1bHQuaXNQaGlzaGluZygpKQotICAgICAgICBy
ZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiVGhpcyB3ZWJzaXRlIG1heSB0cnkgdG8gdHJpY2sgeW91
IGludG8gZG9pbmcgc29tZXRoaW5nIGRhbmdlcm91cywgbGlrZSBpbnN0YWxsaW5nIHNvZnR3YXJl
IG9yIGRpc2Nsb3NpbmcgcGVyc29uYWwgb3IgZmluYW5jaWFsIGluZm9ybWF0aW9uLCBsaWtlIHBh
c3N3b3JkcywgcGhvbmUgbnVtYmVycywgb3IgY3JlZGl0IGNhcmRzLiIsICJQaGlzaGluZyB3YXJu
aW5nIik7Ci0gICAgaWYgKHJlc3VsdC5pc01hbHdhcmUoKSkKLSAgICAgICAgcmV0dXJuIFdFQl9V
SV9OU1NUUklORyhAIlRoaXMgd2Vic2l0ZSBtYXkgYXR0ZW1wdCB0byBpbnN0YWxsIGRhbmdlcm91
cyBzb2Z0d2FyZSwgd2hpY2ggY291bGQgaGFybSB5b3VyIGNvbXB1dGVyIG9yIHN0ZWFsIHlvdXIg
cGVyc29uYWwgb3IgZmluYW5jaWFsIGluZm9ybWF0aW9uLCBsaWtlIHBhc3N3b3JkcywgcGhvdG9z
LCBvciBjcmVkaXQgY2FyZHMuIiwgIk1hbHdhcmUgd2FybmluZyIpOwotICAgIEFTU0VSVChyZXN1
bHQuaXNVbndhbnRlZFNvZnR3YXJlKCkpOwotICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJU
aGlzIHdlYnNpdGUgbWF5IHRyeSB0byB0cmljayB5b3UgaW50byBpbnN0YWxsaW5nIHNvZnR3YXJl
IHRoYXQgaGFybXMgeW91ciBicm93c2luZyBleHBlcmllbmNlLCBsaWtlIGNoYW5naW5nIHlvdXIg
c2V0dGluZ3Mgd2l0aG91dCB5b3VyIHBlcm1pc3Npb24gb3Igc2hvd2luZyB5b3UgdW53YW50ZWQg
YWRzLiBPbmNlIGluc3RhbGxlZCwgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byByZW1vdmUuIiwgIlVu
d2FudGVkIHNvZnR3YXJlIHdhcm5pbmciKTsKLX0KLQotc3RhdGljIE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgKmRldGFpbHNUZXh0KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JiBy
ZXN1bHQpCi17Ci0gICAgaWYgKHJlc3VsdC5pc1BoaXNoaW5nKCkpIHsKLSAgICAgICAgTlNTdHJp
bmcgKnBoaXNoaW5nRGVzY3JpcHRpb24gPSBXRUJfVUlfTlNTVFJJTkcoQCJXYXJuaW5ncyBhcmUg
c2hvd24gZm9yIHdlYnNpdGVzIHRoYXQgaGF2ZSBiZWVuIHJlcG9ydGVkIGFzIGRlY2VwdGl2ZS4g
RGVjZXB0aXZlIHdlYnNpdGVzIHRyeSB0byB0cmljayB5b3UgaW50byBiZWxpZXZpbmcgdGhleSBh
cmUgbGVnaXRpbWF0ZSB3ZWJzaXRlcyB5b3UgdHJ1c3QuIiwgIlBoaXNoaW5nIHdhcm5pbmcgZGVz
Y3JpcHRpb24iKTsKLSAgICAgICAgTlNTdHJpbmcgKmxlYXJuTW9yZSA9IFdFQl9VSV9OU1NUUklO
RyhAIkxlYXJuIG1vcmXigKYiLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIik7
Ci0gICAgICAgIE5TU3RyaW5nICpwaGlzaGluZ0FjdGlvbnMgPSBXRUJfVUlfTlNTVFJJTkcoQCJJ
ZiB5b3UgYmVsaWV2ZSB0aGlzIHdlYnNpdGUgaXMgc2FmZSwgeW91IGNhbiAlcmVwb3J0LWFuLWVy
cm9yJS4gT3IsIGlmIHlvdSB1bmRlcnN0YW5kIHRoZSByaXNrcyBpbnZvbHZlZCwgeW91IGNhbiAl
YnlwYXNzLWxpbmslLiIsICJQaGlzaGluZyB3YXJuaW5nIGRlc2NyaXB0aW9uIik7Ci0gICAgICAg
IE5TU3RyaW5nICpyZXBvcnRBbkVycm9yID0gV0VCX1VJX05TU1RSSU5HKEAicmVwb3J0IGFuIGVy
cm9yIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIpOwotICAgICAgICBOU1N0
cmluZyAqdmlzaXRVbnNhZmVXZWJzaXRlID0gV0VCX1VJX05TU1RSSU5HKEAidmlzaXQgdGhpcyB1
bnNhZmUgd2Vic2l0ZSIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKLSAg
ICAgICAgCi0gICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcgPSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAICVAXG5cbiVAIiwgcGhpc2hpbmdEZXNjcmlw
dGlvbiwgbGVhcm5Nb3JlLCBwaGlzaGluZ0FjdGlvbnNdXSBhdXRvcmVsZWFzZV07Ci0gICAgICAg
IGFkZExpbmtBbmRSZXBsYWNlKGF0dHJpYnV0ZWRTdHJpbmcsIGxlYXJuTW9yZSwgbGVhcm5Nb3Jl
LCByZXN1bHQubGVhcm5Nb3JlVVJMKCkpOwotICAgICAgICBhZGRMaW5rQW5kUmVwbGFjZShhdHRy
aWJ1dGVkU3RyaW5nLCBAIiVyZXBvcnQtYW4tZXJyb3IlIiwgcmVwb3J0QW5FcnJvciwgcmVwb3J0
QW5FcnJvclVSTChyZXN1bHQpKTsKLSAgICAgICAgYWRkTGlua0FuZFJlcGxhY2UoYXR0cmlidXRl
ZFN0cmluZywgQCIlYnlwYXNzLWxpbmslIiwgdmlzaXRVbnNhZmVXZWJzaXRlLCB2aXNpdFVuc2Fm
ZVdlYnNpdGVTZW50aW5lbCgpKTsKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7Ci0g
ICAgfQotICAgIAotICAgIGF1dG8gbWFsd2FyZU9yVW53YW50ZWRTb2Z0d2FyZURldGFpbHMgPSBb
XSAoY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgTlNTdHJpbmcgKmRl
c2NyaXB0aW9uLCBOU1N0cmluZyAqc3RhdHVzU3RyaW5nVG9SZXBsYWNlLCBib29sIGNvbmZpcm1N
YWx3YXJlKSB7Ci0gICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKm1hbHdhcmVEZXNj
cmlwdGlvbiA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOmRlc2NyaXB0aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIHJlcGxhY2UobWFsd2FyZURl
c2NyaXB0aW9uLCBAIiVzYWZlQnJvd3NpbmdQcm92aWRlciUiLCByZXN1bHQubG9jYWxpemVkUHJv
dmlkZXJOYW1lKCkpOwotICAgICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdGF0dXNM
aW5rID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
V0VCX1VJX05TU1RSSU5HKEAidGhlIHN0YXR1cyBvZiDigJwlc2l0ZSXigJ0iLCAiUGFydCBvZiBt
YWx3YXJlIGRlc2NyaXB0aW9uIildIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgcmVwbGFjZShzdGF0
dXNMaW5rLCBAIiVzaXRlJSIsIHJlc3VsdC51cmwoKS5ob3N0KCkudG9TdHJpbmcoKSk7Ci0gICAg
ICAgIGFkZExpbmtBbmRSZXBsYWNlKG1hbHdhcmVEZXNjcmlwdGlvbiwgc3RhdHVzU3RyaW5nVG9S
ZXBsYWNlLCBzdGF0dXNMaW5rLnN0cmluZywgbWFsd2FyZURldGFpbHNVUkwocmVzdWx0KSk7Ci0g
ICAgICAgIAotICAgICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICppZllvdVVuZGVyc3Rh
bmQgPSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpX
RUJfVUlfTlNTVFJJTkcoQCJJZiB5b3UgdW5kZXJzdGFuZCB0aGUgcmlza3MgaW52b2x2ZWQsIHlv
dSBjYW4gJXZpc2l0LXRoaXMtdW5zYWZlLXNpdGUtbGluayUuIiwgIkFjdGlvbiBmcm9tIHNhZmUg
YnJvd3Npbmcgd2FybmluZyIpXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIGFkZExpbmtBbmRSZXBs
YWNlKGlmWW91VW5kZXJzdGFuZCwgQCIldmlzaXQtdGhpcy11bnNhZmUtc2l0ZS1saW5rJSIsIFdF
Ql9VSV9OU1NUUklORyhAInZpc2l0IHRoaXMgdW5zYWZlIHdlYnNpdGUiLCAiQWN0aW9uIGZyb20g
c2FmZSBicm93c2luZyB3YXJuaW5nIiksIGNvbmZpcm1NYWx3YXJlID8gY29uZmlybU1hbHdhcmVT
ZW50aW5lbCgpIDogdmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKSk7Ci0gICAgICAgIAotICAg
ICAgICBbbWFsd2FyZURlc2NyaXB0aW9uIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJcblxuIl0gYXV0b3Jl
bGVhc2VdXTsKLSAgICAgICAgW21hbHdhcmVEZXNjcmlwdGlvbiBhcHBlbmRBdHRyaWJ1dGVkU3Ry
aW5nOmlmWW91VW5kZXJzdGFuZF07Ci0gICAgICAgIHJldHVybiBtYWx3YXJlRGVzY3JpcHRpb247
Ci0gICAgfTsKLSAgICAKLSAgICBpZiAocmVzdWx0LmlzTWFsd2FyZSgpKQotICAgICAgICByZXR1
cm4gbWFsd2FyZU9yVW53YW50ZWRTb2Z0d2FyZURldGFpbHMocmVzdWx0LCBXRUJfVUlfTlNTVFJJ
TkcoQCJXYXJuaW5ncyBhcmUgc2hvd24gZm9yIHdlYnNpdGVzIHdoZXJlIG1hbGljaW91cyBzb2Z0
d2FyZSBoYXMgYmVlbiBkZXRlY3RlZC4gWW91IGNhbiBjaGVjayB0aGUgJXN0YXR1cy1saW5rJSBv
biB0aGUgJXNhZmVCcm93c2luZ1Byb3ZpZGVyJSBkaWFnbm9zdGljIHBhZ2UuIiwgIk1hbHdhcmUg
d2FybmluZyBkZXNjcmlwdGlvbiIpLCBAIiVzdGF0dXMtbGluayUiLCB0cnVlKTsKLSAgICBBU1NF
UlQocmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSgpKTsKLSAgICByZXR1cm4gbWFsd2FyZU9yVW53
YW50ZWRTb2Z0d2FyZURldGFpbHMocmVzdWx0LCBXRUJfVUlfTlNTVFJJTkcoQCJXYXJuaW5ncyBh
cmUgc2hvd24gZm9yIHdlYnNpdGVzIHdoZXJlIGhhcm1mdWwgc29mdHdhcmUgaGFzIGJlZW4gZGV0
ZWN0ZWQuIFlvdSBjYW4gY2hlY2sgJXRoZS1zdGF0dXMtb2Ytc2l0ZSUgb24gdGhlICVzYWZlQnJv
d3NpbmdQcm92aWRlciUgZGlhZ25vc3RpYyBwYWdlLiIsICJVbndhbnRlZCBzb2Z0d2FyZSB3YXJu
aW5nIGRlc2NyaXB0aW9uIiksIEAiJXRoZS1zdGF0dXMtb2Ytc2l0ZSUiLCBmYWxzZSk7Ci19Ci0K
IHN0YXRpYyBCdXR0b25UeXBlICptYWtlQnV0dG9uKFdhcm5pbmdJdGVtIGl0ZW0sIFdLU2FmZUJy
b3dzaW5nV2FybmluZyAqd2FybmluZywgU0VMIGFjdGlvbikKIHsKICAgICBOU1N0cmluZyAqdGl0
bGUgPSBuaWw7CkBAIC0zMjUsMTQgKzIzMywxNCBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhB
dHRyaWJ1dGVkU3RyaW5nCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1NhZmVCcm93c2luZ1dhcm5pbmcK
IAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KFJlY3RUeXBlKWZyYW1lIHNhZmVCcm93
c2luZ1Jlc3VsdDooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQmKXJlc3VsdCBjb21w
bGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29u
dGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooUmVjdFR5cGUpZnJhbWUgc2FmZUJyb3dzaW5n
V2FybmluZzooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nJil3YXJuaW5nIGNvbXBs
ZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250
aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXIKIHsK
ICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkgewogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAgICAgX2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgX3Jlc3VsdCA9IG1ha2VSZWYocmVzdWx0KTsKKyAg
ICBfd2FybmluZyA9IG1ha2VSZWYod2FybmluZyk7CiAgICAgc2V0QmFja2dyb3VuZChzZWxmLCBj
b2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkJhY2tncm91bmQsIHNlbGYpKTsKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgW3NlbGYgYWRkQ29udGVudF07CkBAIC0zNDMsOCArMjUxLDggQEAgLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KFJlY3RUeXBlKQogLSAodm9pZClhZGRDb250ZW50CiB7
CiAgICAgYXV0byBleGNsYW1hdGlvblBvaW50ID0gW1tXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9u
UG9pbnQgbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byB0aXRsZSA9IG1ha2VUaXRsZUxhYmVs
KHRpdGxlVGV4dCgqX3Jlc3VsdCksIHNlbGYpOwotICAgIGF1dG8gd2FybmluZyA9IFtbW1dLU2Fm
ZUJyb3dzaW5nVGV4dFZpZXcgYWxsb2NdIGluaXRXaXRoQXR0cmlidXRlZFN0cmluZzpbW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOndhcm5pbmdUZXh0KCpfcmVzdWx0
KSBhdHRyaWJ1dGVzOkB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6W0ZvbnRUeXBlIHN5c3RlbUZvbnRP
ZlNpemU6dGV4dFNpemVdIH1dIGF1dG9yZWxlYXNlXSBmb3JXYXJuaW5nOnNlbGZdIGF1dG9yZWxl
YXNlXTsKKyAgICBhdXRvIHRpdGxlID0gbWFrZVRpdGxlTGFiZWwoX3dhcm5pbmctPnRpdGxlKCks
IHNlbGYpOworICAgIGF1dG8gd2FybmluZyA9IFtbW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgYWxs
b2NdIGluaXRXaXRoQXR0cmlidXRlZFN0cmluZzpbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoU3RyaW5nOl93YXJuaW5nLT53YXJuaW5nKCkgYXR0cmlidXRlczpAeyBOU0ZvbnRB
dHRyaWJ1dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXSB9XSBhdXRv
cmVsZWFzZV0gZm9yV2FybmluZzpzZWxmXSBhdXRvcmVsZWFzZV07CiAgICAgYXV0byBzaG93RGV0
YWlscyA9IG1ha2VCdXR0b24oV2FybmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9uLCBzZWxmLCBA
c2VsZWN0b3Ioc2hvd0RldGFpbHNDbGlja2VkKSk7CiAgICAgYXV0byBnb0JhY2sgPSBtYWtlQnV0
dG9uKFdhcm5pbmdJdGVtOjpHb0JhY2tCdXR0b24sIHNlbGYsIEBzZWxlY3Rvcihnb0JhY2tDbGlj
a2VkKSk7CiAgICAgYXV0byBib3ggPSBbW1ZpZXdUeXBlIG5ld10gYXV0b3JlbGVhc2VdOwpAQCAt
Mzk1LDcgKzMwMyw3IEBAIC0gKHZvaWQpc2hvd0RldGFpbHNDbGlja2VkCiAgICAgQnV0dG9uVHlw
ZSAqc2hvd0RldGFpbHMgPSBib3guc3Vidmlld3MubGFzdE9iamVjdDsKICAgICBbc2hvd0RldGFp
bHMgcmVtb3ZlRnJvbVN1cGVydmlld107CiAKLSAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
ICp0ZXh0ID0gZGV0YWlsc1RleHQoKl9yZXN1bHQpOworICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgKnRleHQgPSBbW193YXJuaW5nLT5kZXRhaWxzKCkgbXV0YWJsZUNvcHldIGF1dG9yZWxl
YXNlXTsKICAgICBbdGV4dCBhZGRBdHRyaWJ1dGVzOkB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6W0Zv
bnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdIH0gcmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
dGV4dC5sZW5ndGgpXTsKICAgICBXS1NhZmVCcm93c2luZ1RleHRWaWV3ICpkZXRhaWxzID0gW1tb
V0tTYWZlQnJvd3NpbmdUZXh0VmlldyBhbGxvY10gaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nOnRl
eHQgZm9yV2FybmluZzpzZWxmXSBhdXRvcmVsZWFzZV07CiAgICAgW190ZXh0Vmlld3MgYWRkT2Jq
ZWN0OmRldGFpbHNdOwpAQCAtNTAzLDEwICs0MTEsMTAgQEAgLSAodm9pZCljbGlja2VkT25MaW5r
OihOU1VSTCAqKWxpbmsKICAgICBpZiAoIV9jb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKFtsaW5rIGlzRXF1YWw6dmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwo
KV0pCisgICAgaWYgKFtsaW5rIGlzRXF1YWw6V2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjp2
aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCgpXSkKICAgICAgICAgcmV0dXJuIF9jb21wbGV0aW9u
SGFuZGxlcihXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsKIAotICAgIGlmIChbbGlu
ayBpc0VxdWFsOmNvbmZpcm1NYWx3YXJlU2VudGluZWwoKV0pIHsKKyAgICBpZiAoW2xpbmsgaXNF
cXVhbDpXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OmNvbmZpcm1NYWx3YXJlU2VudGluZWwo
KV0pIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGF1dG8gYWxlcnQgPSBhZG9wdE5TKFtO
U0FsZXJ0IG5ld10pOwogICAgICAgICBbYWxlcnQgc2V0TWVzc2FnZVRleHQ6V0VCX1VJX05TU1RS
SU5HKEAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGdvIHRvIHRoaXMgc2l0ZT8iLCAiTWFsd2Fy
ZSBjb25maXJtYXRpb24gZGlhbG9nIHRpdGxlIildOwpAQCAtNTQxLDcgKzQ0OSw3IEBAIC0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmcKICAgICBzZWxmLmRlbGVnYXRlID0g
d2FybmluZzsKIAogICAgIENvbG9yVHlwZSAqZm9yZWdyb3VuZENvbG9yID0gY29sb3JGb3JJdGVt
KFdhcm5pbmdJdGVtOjpNZXNzYWdlVGV4dCwgd2FybmluZyk7Ci0gICAgTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyAqc3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgbXV0YWJsZUNvcHldOworICAg
IE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbYXR0cmlidXRlZFN0cmluZyBt
dXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOwogICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlczpAeyBO
U0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IgfSByYW5nZTpO
U01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKV07CiAgICAgW3NlbGYgc2V0QmFja2dyb3VuZENv
bG9yOmNvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZCwgd2FybmluZyldOwog
ICAgIFtzZWxmIHNldExpbmtUZXh0QXR0cmlidXRlczpAeyBOU0ZvcmVncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IgfV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQkocmV2aXNpb24gMjM4MTE0
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbXBvcnQgIkRhdGFEZXRlY3Rpb25S
ZXN1bHQuaCIKICNpbXBvcnQgIkxvYWRQYXJhbWV0ZXJzLmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50
LmgiCi0jaW1wb3J0ICJTYWZlQnJvd3NpbmdSZXN1bHQuaCIKICNpbXBvcnQgIlNhZmVCcm93c2lu
Z1NQSS5oIgorI2ltcG9ydCAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgogI2ltcG9ydCAiV2ViUHJv
Y2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdJdGVtLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC04NCwxMiArODQsMTMgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmJlZ2luU2FmZUJyb3dzaW5nQ2hlYwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgTlNBcnJheTxTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICo+
ICpyZXN1bHRzID0gW3Jlc3VsdCBzZXJ2aWNlTG9va3VwUmVzdWx0c107Ci0gICAgICAgICAgICBW
ZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+IHJlc3VsdHNWZWN0b3I7Ci0gICAgICAgICAg
ICByZXN1bHRzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoW3Jlc3VsdHMgY291bnRdKTsK
LSAgICAgICAgICAgIGZvciAoU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0IGluIHJlc3Vs
dHMpCi0gICAgICAgICAgICAgICAgcmVzdWx0c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoU2FmZUJy
b3dzaW5nUmVzdWx0OjpjcmVhdGUoVVJMKHVybCksIHJlc3VsdCkpOwotICAgICAgICAgICAgbGlz
dGVuZXItPmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKFdURk1vdmUocmVzdWx0c1ZlY3Rv
cikpOworICAgICAgICAgICAgZm9yIChTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpsb29rdXBSZXN1
bHQgaW4gW3Jlc3VsdCBzZXJ2aWNlTG9va3VwUmVzdWx0c10pIHsKKyAgICAgICAgICAgICAgICBp
ZiAobG9va3VwUmVzdWx0LmlzUGhpc2hpbmcgfHwgbG9va3VwUmVzdWx0LmlzTWFsd2FyZSB8fCBs
b29rdXBSZXN1bHQuaXNVbndhbnRlZFNvZnR3YXJlKSB7CisgICAgICAgICAgICAgICAgICAgIGxp
c3RlbmVyLT5kaWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyhTYWZlQnJvd3NpbmdXYXJuaW5n
OjpjcmVhdGUodXJsLCBsb29rdXBSZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpc3RlbmVy
LT5kaWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyh7IH0pOwogICAgICAgICB9KTsKICAgICB9
KS5nZXQoKV07CiAjZWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
Vmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWV3SW1wbC5oCShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0Vmlld1NjYWxlKENHRmxvYXQpOwogICAgIENHRmxvYXQgdmll
d1NjYWxlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0
IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxDb250
aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpOworICAgIHZvaWQgc2hvd1NhZmVC
cm93c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nV2FybmluZyYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmFyaWFudDxDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYp
OwogICAgIHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCk7CiAKICAgICBXS0xheW91dE1v
ZGUgbGF5b3V0TW9kZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjA2LDEy
ICsxNjA2LDEyIEBAIGJvb2wgV2ViVmlld0ltcGw6OnJlc2lnbkZpcnN0UmVzcG9uZGVyKCkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dh
cm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmFyaWFudDxDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlZpZXdJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2Fybmlu
Zyhjb25zdCBTYWZlQnJvd3NpbmdXYXJuaW5nJiB3YXJuaW5nLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGlmICghbV92aWV3KQogICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZZXMpOwogCi0gICAgbV9zYWZlQnJvd3Np
bmdXYXJuaW5nID0gYWRvcHROUyhbW1dLU2FmZUJyb3dzaW5nV2FybmluZyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpbbV92aWV3IGJvdW5kc10gc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0
aW9uSGFuZGxlcjpbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgcmVzdWx0KSBtdXRhYmxl
IHsKKyAgICBtX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBhZG9wdE5TKFtbV0tTYWZlQnJvd3NpbmdX
YXJuaW5nIGFsbG9jXSBpbml0V2l0aEZyYW1lOlttX3ZpZXcgYm91bmRzXSBzYWZlQnJvd3NpbmdX
YXJuaW5nOndhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
YXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICh3ZWFrVGhpcykKICAgICAgICAg
ICAgIFtzdGQ6OmV4Y2hhbmdlKHdlYWtUaGlzLT5tX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxw
dHIpIHJlbW92ZUZyb21TdXBlcnZpZXddOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZN
b3ZlKHJlc3VsdCkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDIzODExNCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyAr
MTE1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyVGV4dEluZGljYXRvcihXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uKSBvdmVycmlkZTsKICAgICB2b2lk
IHNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9hdCkgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9h
ZCwgV2ViQ29yZTo6VVJMPiYmKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzaG93U2FmZUJyb3dz
aW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdXYXJuaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYp
PiYmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDIzODExNSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDczLDEwICs0NzMsMTAgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZW50ZXJBY2Nl
bGVyYXRlZENvbQogewogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5n
V2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1NhZmVC
cm93c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nV2FybmluZyYgd2FybmluZywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJD
b3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmIChhdXRvIHdlYlZp
ZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCi0gICAgICAgIFt3ZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5n
V2FybmluZzpyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildOworICAgICAgICBbd2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6d2FybmluZyBj
b21wbGV0aW9uSGFuZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV07CiAgICAgZWxzZQog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb250aW51ZVVuc2FmZUxvYWQ6Ok5vKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5o
CShyZXZpc2lvbiAyMzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGxNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCByZXNldFNlY3VyZUlucHV0U3RhdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIG5v
dGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb24oKSBvdmVycmlkZTsKICAg
ICB2b2lkIHNlbGVjdGlvbkRpZENoYW5nZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2hvd1NhZmVC
cm93c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+
JiYpPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0
IFNhZmVCcm93c2luZ1dhcm5pbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2Vi
S2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkgb3ZlcnJpZGU7CiAgICAgCiAjaWYg
V0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMubW0JKHJldmlzaW9uIDIzODExNSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDg5
LDExICs0ODksMTEgQEAgUmVmPFZhbGlkYXRpb25CdWJibGU+IFBhZ2VDbGllbnRJbXBsOjpjcgog
ICAgIHJldHVybiBWYWxpZGF0aW9uQnViYmxlOjpjcmVhdGUobV92aWV3LCBtZXNzYWdlLCBzZXR0
aW5ncyk7CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5n
KGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5n
V2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdXYXJuaW5nJiB3YXJuaW5nLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVS
TD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7Ci0gICAg
bV9pbXBsLT5zaG93U2FmZUJyb3dzaW5nV2FybmluZyhyZXN1bHQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBtX2ltcGwtPnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKHdhcm5pbmcs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6
Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93
bk1hYy5tbQkocmV2aXNpb24gMjM4MTE0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpICYmIFVTRShBUFBL
SVQpCiAKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0
Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TQ29sb3JTUEkuaD4KIApJbmRleDogU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MzgxMTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDU4LDcgKzEwNTgsNyBAQAogCQk1QzlFNTY4MzFERjdGMUIz
MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1NjgxMURGN0YwNTUwMEM5RUUzMyAvKiBXS1dlYnNp
dGVQb2xpY2llcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTVDQTI2RDgxMjE3QUJENUIwMEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQTI2RDgw
MjE3QUJCQjYwMEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcuaCAqLzsgfTsKIAkJNUNB
MjZEODMyMTdBRDFCODAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5nV2FybmluZy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQTI2RDdGMjE3QUJCQjYw
MEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcubW0gKi87IH07Ci0JCTVDQTk4NTRBMjEw
QkVCNjQwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQTk4NTQ5MjEwQkVCNUEwMDU3RUI2QiAvKiBT
YWZlQnJvd3NpbmdSZXN1bHQuaCAqLzsgfTsKKwkJNUNBOTg1NEEyMTBCRUI2NDAwNTdFQjZCIC8q
IFNhZmVCcm93c2luZ1dhcm5pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDQTk4NTQ5MjEwQkVCNUEwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJu
aW5nLmggKi87IH07CiAJCTVDQURERTA1MjE1MDQ2QkQwMDY3RDMwOSAvKiBXS1dlYlByb2Nlc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNzQzMDBF
MjE1MDA0OTIwMDRCRkExNyAvKiBXS1dlYlByb2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0FGREU0NTIxMzA4NDYzMDBCMUY3RTEgLyog
X1dLSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0FGREU0MjIxMzA4NDM1MDBCMUY3RTEgLyogX1dLSW5zcGVjdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNBRkRFNDcyMTMwODQ2
QTAwQjFGN0UxIC8qIF9XS0luc3BlY3RvckludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0FGREU0NDIxMzA4NDM2MDBCMUY3RTEgLyogX1dL
SW5zcGVjdG9ySW50ZXJuYWwuaCAqLzsgfTsKQEAgLTM0MzUsOCArMzQzNSw4IEBACiAJCTVDOUU1
NjgxMURGN0YwNTUwMEM5RUUzMyAvKiBXS1dlYnNpdGVQb2xpY2llcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVQb2xpY2llcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1Q0EyNkQ3RjIxN0FCQkI2MDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdX
YXJuaW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tTYWZl
QnJvd3NpbmdXYXJuaW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0EyNkQ4
MDIxN0FCQkI2MDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU2FmZUJyb3dzaW5nV2FybmluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyogU2FmZUJyb3dz
aW5nUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhZmVCcm93c2lu
Z1Jlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0E5ODU0QjIxMEJFQjcz
MDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nUmVzdWx0Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTYWZlQnJvd3NpbmdSZXN1bHRDb2NvYS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNBOTg1NDkyMTBCRUI1QTAwNTdFQjZCIC8qIFNhZmVC
cm93c2luZ1dhcm5pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FmZUJy
b3dzaW5nV2FybmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0E5ODU0QjIx
MEJFQjczMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0FEREUwRDIxNTFBQTAxMDA2N0QzMDkg
LyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLmg7IHBh
dGggPSBBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQUZERTQyMjEzMDg0MzUwMEIxRjdFMSAv
KiBfV0tJbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLSW5z
cGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQUZERTQzMjEzMDg0MzYw
MEIxRjdFMSAvKiBfV0tJbnNwZWN0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBfV0tJbnNwZWN0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01MjY0LDcgKzUyNjQsNyBAQAogCQkJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJQ0RBMjlBMUYxQ0JF
QjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLywKIAkJCQk4
MzdBNjYwMDIwRTJBRDg0MDBBOURCRDggLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlQ29jb2EubW0gKi8sCi0JCQkJNUNBOTg1NEIyMTBCRUI3MzAwNTdFQjZCIC8qIFNhZmVCcm93
c2luZ1Jlc3VsdENvY29hLm1tICovLAorCQkJCTVDQTk4NTRCMjEwQkVCNzMwMDU3RUI2QiAvKiBT
YWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0gKi8sCiAJCQkJMUEwMDJENDcxOTZCMzQ1RDAwQjlB
RDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5oICovLAogCQkJCTFBMDAyRDQ2MTk2QjM0NUQwMEI5
QUQ0NCAvKiBTZXNzaW9uU3RhdGVDb2RpbmcubW0gKi8sCiAJCQkJMzE1NzEzNUMyMDQwQTlCMjAw
ODRGOUNGIC8qIFN5c3RlbVByZXZpZXdDb250cm9sbGVyQ29jb2EubW0gKi8sCkBAIC03MjUyLDcg
KzcyNTIsNyBAQAogCQkJCTUxRTZDMTYxMUYyOTM1Q0QwMEZEMzQzNyAvKiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCAqLywKIAkJCQlCQzExMUIwODExMkY1RTNDMDAz
MzdCQUIgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAgKi8sCiAJCQkJMUEzMDA2NkMxMTEwRjRG
NzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCAqLywKLQkJCQk1Q0E5ODU0OTIxMEJF
QjVBMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nUmVzdWx0LmggKi8sCisJCQkJNUNBOTg1NDkyMTBC
RUI1QTAwNTdFQjZCIC8qIFNhZmVCcm93c2luZ1dhcm5pbmcuaCAqLywKIAkJCQk0MTRERURENjFG
OUVEREUwMDA0N0M0MEQgLyogU2VydmljZVdvcmtlclByb2Nlc3NQcm94eS5jcHAgKi8sCiAJCQkJ
NDE0REVERDUxRjlFRERERjAwNDdDNDBEIC8qIFNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkuaCAq
LywKIAkJCQk1MUE0RDVBODE2Q0FDNEZGMDAwRTYxNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuY3Bw
ICovLApAQCAtOTE2MSw4ICs5MTYxLDggQEAKIAkJCQk1MUU2QzE2NDFGMjkzNUREMDBGRDM0Mzcg
LyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTMwMDY2RTExMTBGNEY3MDAzMTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDEwNDgyQ0UxREREMzI0RjAwRjAwNkQwIC8qIFJUQ05ldHdv
cmsuaCBpbiBIZWFkZXJzICovLAotCQkJCTVDQTk4NTRBMjEwQkVCNjQwMDU3RUI2QiAvKiBTYWZl
QnJvd3NpbmdSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBFOTdENzREMjAwRTkwMDQwMEJG
NjY0MyAvKiBTYWZlQnJvd3NpbmdTUEkuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQTk4NTRBMjEw
QkVCNjQwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzJEMDIxNzEyQUM0MUNCMDBFNzMyQTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUI0QThEMTI5NkYwQTIwMDIzOTUyRiAvKiBTYW5kYm94
RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUU1NTJDNTE2QUUwNjVGMDA0RUQ2NTMg
LyogU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMzgxNTQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MyBAQAorMjAxOC0xMS0xNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgorCisgICAgICAgIEFkZCBTUEkgdG8gc2hvdyBhIHNhZmUgYnJvd3Npbmcgd2FybmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNjA0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQW5keSBFc3Rlcy4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tOgorICAgICAgICAoVEVTVCk6CisK
IDIwMTgtMTEtMTMgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW2lPU10gRG8gbm90IHNob3cgc2VsZWN0aW9uIFVJIGZvciBlZGl0YWJsZSBlbGVtZW50
cyB3aXRoIG9wYWNpdHkgbmVhciB6ZXJvCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NhZmVCcm93c2luZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhZmVCcm93c2luZy5tbQkocmV2aXNpb24gMjM4MTE1
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3Npbmcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNCw2ICsyMDQsMzMgQEAgVEVTVChTYWZlQnJvd3Npbmcs
IE5hdmlnYXRpb25DbGVhcnNXYXJuaQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgpOwogfQogCitURVNUKFNhZmVCcm93c2luZywgU2hvd1dhcm5pbmdTUEkpCit7Cisg
ICAgX19ibG9jayBib29sIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVkID0gZmFsc2U7CisgICAgX19i
bG9jayBSZXRhaW5QdHI8TlNVUkw+IHVybENsaWNrZWQ7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbV0tXZWJWaWV3IG5ld10pOworICAgIGF1dG8gc2hvd1dhcm5pbmcgPSBeeworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlckNhbGxlZCA9IGZhbHNlOworICAgICAgICBbd2ViVmlldyBfc2hv
d1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVGl0bGU6QCJ0ZXN0IHRpdGxlIiB3YXJuaW5nOkAidGVz
dCB3YXJuaW5nIiBkZXRhaWxzOltbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6QCJ0ZXN0IGRldGFpbHMiXSBhdXRvcmVsZWFzZV0gY29tcGxldGlvbkhhbmRsZXI6XihO
U1VSTCAqdXJsKSB7CisgICAgICAgICAgICB1cmxDbGlja2VkID0gdXJsOworICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXJDYWxsZWQgPSB0cnVlOworICAgICAgICB9XTsKKyNpZiAhUExBVEZP
Uk0oTUFDKQorICAgICAgICBbW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5n
XSBkaWRNb3ZlVG9XaW5kb3ddOworI2VuZGlmCisgICAgfTsKKworICAgIHNob3dXYXJuaW5nKCk7
CisgICAgY2hlY2tUaXRsZUFuZENsaWNrKFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9y
VGVzdGluZ10uc3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3NbM10sICJHbyBCYWNrIik7Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjb21wbGV0aW9uSGFuZGxlckNhbGxlZCk7Cisg
ICAgRVhQRUNUX1RSVUUoIXVybENsaWNrZWQpOworCisgICAgc2hvd1dhcm5pbmcoKTsKKyAgICBb
W3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXSBwZXJmb3JtU2VsZWN0b3I6
TlNTZWxlY3RvckZyb21TdHJpbmcoQCJjbGlja2VkT25MaW5rOiIpIHdpdGhPYmplY3Q6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0bGluayJdXTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNvbXBsZXRpb25IYW5kbGVyQ2FsbGVkKTsKKyAgICBFWFBF
Q1RfU1RSRVEoW3VybENsaWNrZWQgYWJzb2x1dGVTdHJpbmddLlVURjhTdHJpbmcsICJodHRwOi8v
d2Via2l0Lm9yZy90ZXN0bGluayIpOworfQorCiBAaW50ZXJmYWNlIE51bGxMb29rdXBDb250ZXh0
IDogTlNPYmplY3QKIEBlbmQKIEBpbXBsZW1lbnRhdGlvbiBOdWxsTG9va3VwQ29udGV4dAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354836</attachid>
            <date>2018-11-14 10:49:59 -0800</date>
            <delta_ts>2018-11-14 11:03:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191604-20181114104958.patch</filename>
            <type>text/plain</type>
            <size>84959</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzgxODMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxOC0xMS0xNCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBTUEkgdG8g
c2hvdyBhIHNhZmUgYnJvd3Npbmcgd2FybmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNjA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5keSBF
c3Rlcy4KKworICAgICAgICBTYWZhcmkgaGFzIGEgY2FzZSB3aGVyZSBpdCBzaG93cyBzYWZlIGJy
b3dzaW5nIHdhcm5pbmdzIGZvciBhIHJlYXNvbiBvdGhlciB0aGFuIGJlaW5nIHRvbGQgdG8gYnkg
dGhlIFNhZmVCcm93c2luZyBmcmFtZXdvcmsuCisgICAgICAgIEJlY2F1c2Ugc2FmZSBicm93c2lu
ZyBpcyBtb3ZpbmcgdG8gV2ViS2l0LCB3ZSB3aWxsIGhhdmUgU2FmYXJpIGNhbGwgdGhpcyBXZWJL
aXQgU1BJIGluIHRoYXQgY2FzZS4KKyAgICAgICAgVGhlIHdhcm5pbmcgbG9va3MgYSBsaXR0bGUg
ZGlmZmVyZW50LCBzbyBJIGhhZCB0byBjaGFuZ2UgdGhlIHN0cnVjdHVyZSBvZiBhIFNhZmVCcm93
c2luZ1Jlc3VsdCBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBzdHJpbmcgcHJvY2Vzc2luZywKKyAg
ICAgICAgYnV0IHRoZSBleGlzdGluZyBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyB2ZXJpZmllZCBi
eSBleGlzdGluZyB1bml0IHRlc3RzLiAgSSBhZGRlZCBhIHVuaXQgdGVzdCB0byB2ZXJpZnkgYmVo
YXZpb3Igb2YgdGhlIG5ldyBTUEkuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOndhcm5pbmc6ZGV0YWlsczpj
b21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93U2FmZUJyb3dz
aW5nV2FybmluZzpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKCtbV0tXZWJWaWV3IF9j
b25maXJtTWFsd2FyZVNlbnRpbmVsXSk6CisgICAgICAgICgrW1dLV2ViVmlldyBfdmlzaXRVbnNh
ZmVXZWJzaXRlU2VudGluZWxdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQ
cml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1Jlc3VsdENv
Y29hLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdX
YXJuaW5nQ29jb2EubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1NhZmVCcm93c2luZ1Jlc3VsdENvY29hLm1tLgorICAgICAgICAoV2ViS2l0OjptYWx3YXJlRGV0
YWlsc0Jhc2UpOgorICAgICAgICAoV2ViS2l0OjpsZWFybk1vcmVVUkwpOgorICAgICAgICAoV2Vi
S2l0OjpyZXBvcnRBbkVycm9yQmFzZSk6CisgICAgICAgIChXZWJLaXQ6OmxvY2FsaXplZFByb3Zp
ZGVyKToKKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6dmlzaXRVbnNhZmVX
ZWJzaXRlU2VudGluZWwpOgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpj
b25maXJtTWFsd2FyZVNlbnRpbmVsKToKKyAgICAgICAgKFdlYktpdDo6cmVwbGFjZSk6CisgICAg
ICAgIChXZWJLaXQ6OmFkZExpbmtBbmRSZXBsYWNlKToKKyAgICAgICAgKFdlYktpdDo6cmVwb3J0
QW5FcnJvclVSTCk6CisgICAgICAgIChXZWJLaXQ6Om1hbHdhcmVEZXRhaWxzVVJMKToKKyAgICAg
ICAgKFdlYktpdDo6c2FmZUJyb3dzaW5nVGl0bGVUZXh0KToKKyAgICAgICAgKFdlYktpdDo6c2Fm
ZUJyb3dzaW5nV2FybmluZ1RleHQpOgorICAgICAgICAoV2ViS2l0OjpzYWZlQnJvd3NpbmdEZXRh
aWxzVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OlNhZmVCcm93
c2luZ1dhcm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpsZWFybk1vcmUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ6OlNhZmVCcm93c2luZ1Jlc3VsdCk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW06Cisg
ICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBpbml0V2l0aEZyYW1lOnNhZmVCcm93c2lu
Z1dhcm5pbmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5n
V2FybmluZyBhZGRDb250ZW50XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBz
aG93RGV0YWlsc0NsaWNrZWRdKToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGNs
aWNrZWRPbkxpbms6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW5pdFdp
dGhBdHRyaWJ1dGVkU3RyaW5nOmZvcldhcm5pbmc6XSk6CisgICAgICAgIChjb25maXJtTWFsd2Fy
ZVNlbnRpbmVsKTogRGVsZXRlZC4KKyAgICAgICAgKHZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVs
KTogRGVsZXRlZC4KKyAgICAgICAgKHJlcGxhY2UpOiBEZWxldGVkLgorICAgICAgICAoYWRkTGlu
a0FuZFJlcGxhY2UpOiBEZWxldGVkLgorICAgICAgICAocmVwb3J0QW5FcnJvclVSTCk6IERlbGV0
ZWQuCisgICAgICAgIChtYWx3YXJlRGV0YWlsc1VSTCk6IERlbGV0ZWQuCisgICAgICAgICh0aXRs
ZVRleHQpOiBEZWxldGVkLgorICAgICAgICAod2FybmluZ1RleHQpOiBEZWxldGVkLgorICAgICAg
ICAoZGV0YWlsc1RleHQpOiBEZWxldGVkLgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1dhcm5p
bmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmJlZ2luU2FmZUJyb3dzaW5nQ2hlY2sp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNs
aWVudC5oOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50OjpzaG93U2FmZUJyb3dzaW5nV2Fy
bmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1NhZmVCcm93c2luZ1Jlc3VsdC5oOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9TYWZlQnJvd3NpbmdXYXJuaW5nLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1Jlc3VsdC5oLgorICAgICAgICAo
V2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpT
YWZlQnJvd3NpbmdXYXJuaW5nOjp0aXRsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNhZmVC
cm93c2luZ1dhcm5pbmc6Ondhcm5pbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJv
d3NpbmdXYXJuaW5nOjpkZXRhaWxzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dz
aW5nUmVzdWx0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3Np
bmdSZXN1bHQ6OmlzUGhpc2hpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpT
YWZlQnJvd3NpbmdSZXN1bHQ6OmlzTWFsd2FyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdDo6aXNVbndhbnRlZFNvZnR3YXJlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0Ojp1cmwgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ6OnByb3ZpZGVyIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0Ojpsb2Nh
bGl6ZWRQcm92aWRlck5hbWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTYWZl
QnJvd3NpbmdSZXN1bHQ6Om1hbHdhcmVEZXRhaWxzVVJMQmFzZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdDo6cmVwb3J0QW5FcnJvclVSTEJhc2Ug
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ6Omxl
YXJuTW9yZVVSTCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlNhZmVCcm93c2lu
Z1Jlc3VsdDo6bmVlZHNTYWZlQnJvd3NpbmdXYXJuaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94
eTo6ZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OnVzZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkZy
YW1lUG9saWN5TGlzdGVuZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6V2ViRnJhbWVQcm94eSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OnNldFVwUG9saWN5TGlzdGVuZXJQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OmRpZEhhbmRsZUNvbnRlbnRGaWx0
ZXJVbmJsb2NrTmF2aWdhdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkZyYW1lUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVQcm94eTo6cGFnZSBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3dhcFRvV2Vi
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ3JlYXRlTWFpbkZy
YW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDcmVhdGVTdWJmcmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9y
TmV3V2luZG93QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQ
b2xpY3lGb3JSZXNwb25zZSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW06CisgICAgICAgICog
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTgtMTEtMTQgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBDbGllbnQgc2hvdWxkIGJlIGFibGUg
dG8gZGlzYWJsZSBQU09OIGV2ZW4gaWYgdGhlIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGlzIG9uIGJ5
IGRlZmF1bHQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDIzODE4MykKKysr
IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcg
KzMyMiw3IEBAIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KIFVJUHJvY2Vzcy9D
b2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Lm1tCiBVSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlQ29jb2EubW0KLVVJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdSZXN1bHRD
b2NvYS5tbQorVUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5tbQogVUlQ
cm9jZXNzL0NvY29hL1Nlc3Npb25TdGF0ZUNvZGluZy5tbQogVUlQcm9jZXNzL0NvY29hL1N5c3Rl
bVByZXZpZXdDb250cm9sbGVyQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1t
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiAyMzgxODMp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMCw3ICsxMTAsNyBAQCBjbGFzcyBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OwogY2xhc3Mg
TmF0aXZlV2ViTW91c2VFdmVudDsKIGNsYXNzIE5hdGl2ZVdlYldoZWVsRXZlbnQ7CiBjbGFzcyBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjsKLWNsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKK2Ns
YXNzIFNhZmVCcm93c2luZ1dhcm5pbmc7CiBjbGFzcyBVc2VyRGF0YTsKIGNsYXNzIFZpZXdTbmFw
c2hvdDsKIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CkBAIC0yMTYsNyArMjE2LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWYXJpYW50PENvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikgeyBjb21wbGV0aW9uSGFuZGxlcihDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1NhZmVCcm93c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJy
b3dzaW5nV2FybmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxDb250aW51ZVVu
c2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxl
dGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZZXMpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpIHsgfQogICAgIAogI2lmIEVOQUJMRShEUkFHX1NV
UFBPUlQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdSZXN1bHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdSZXN1
bHQuaAkocmV2aXNpb24gMjM4MTgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2FmZUJy
b3dzaW5nUmVzdWx0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLU9CSkNf
Q0xBU1MgU1NCU2VydmljZUxvb2t1cFJlc3VsdDsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIFNhZmVCcm93c2luZ1Jlc3VsdCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhZmVCcm93c2luZ1Jl
c3VsdD4gewotcHVibGljOgotI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKLSAgICBzdGF0aWMgUmVm
PFNhZmVCcm93c2luZ1Jlc3VsdD4gY3JlYXRlKFdlYkNvcmU6OlVSTCYmIHVybCwgU1NCU2Vydmlj
ZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2FmZUJyb3dzaW5nUmVzdWx0KFdURk1vdmUodXJsKSwgcmVzdWx0KSk7Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBib29sIGlzUGhpc2hpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzUGhpc2hpbmc7
IH0KLSAgICBib29sIGlzTWFsd2FyZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNYWx3YXJlOyB9Ci0g
ICAgYm9vbCBpc1Vud2FudGVkU29mdHdhcmUoKSBjb25zdCB7IHJldHVybiBtX2lzVW53YW50ZWRT
b2Z0d2FyZTsgfQotCi0gICAgY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwoKSBjb25zdCB7IHJldHVy
biBtX3VybDsgfQotICAgIGNvbnN0IFN0cmluZyYgcHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBt
X3Byb3ZpZGVyOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWRQcm92aWRlck5hbWUoKSBj
b25zdCB7IHJldHVybiBtX2xvY2FsaXplZFByb3ZpZGVyTmFtZTsgfQotICAgIGNvbnN0IFN0cmlu
ZyYgbWFsd2FyZURldGFpbHNVUkxCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9tYWx3YXJlRGV0YWls
c1VSTEJhc2U7IH0KLSAgICBjb25zdCBTdHJpbmcmIHJlcG9ydEFuRXJyb3JVUkxCYXNlKCkgY29u
c3QgeyByZXR1cm4gbV9yZXBvcnRBbkVycm9yVVJMQmFzZTsgfQotICAgIGNvbnN0IFdlYkNvcmU6
OlVSTCYgbGVhcm5Nb3JlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9sZWFybk1vcmVVUkw7IH0KLQot
ICAgIGJvb2wgbmVlZHNTYWZlQnJvd3NpbmdXYXJuaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1Bo
aXNoaW5nIHx8IG1faXNNYWx3YXJlIHx8IG1faXNVbndhbnRlZFNvZnR3YXJlOyB9Ci0KLXByaXZh
dGU6Ci0jaWYgSEFWRShTQUZFX0JST1dTSU5HKQotICAgIFNhZmVCcm93c2luZ1Jlc3VsdChXZWJD
b3JlOjpVUkwmJiwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqKTsKLSNlbmRpZgotICAgIFdlYkNv
cmU6OlVSTCBtX3VybDsKLSAgICBib29sIG1faXNQaGlzaGluZyB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2lzTWFsd2FyZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzVW53YW50ZWRTb2Z0d2FyZSB7
IGZhbHNlIH07Ci0KLSAgICBTdHJpbmcgbV9wcm92aWRlcjsKLSAgICBTdHJpbmcgbV9sb2NhbGl6
ZWRQcm92aWRlck5hbWU7Ci0gICAgU3RyaW5nIG1fbWFsd2FyZURldGFpbHNVUkxCYXNlOwotICAg
IFN0cmluZyBtX3JlcG9ydEFuRXJyb3JVUkxCYXNlOwotICAgIFdlYkNvcmU6OlVSTCBtX2xlYXJu
TW9yZVVSTDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAoKUHJvcGVydHkgY2hhbmdlcyBv
bjogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2FmZUJyb3dzaW5nUmVzdWx0LmgKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZl
QnJvd3NpbmdXYXJuaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
U2FmZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyMzgxODMpCShmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1Jlc3VsdC5oOjIzODE4MykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1dhcm5pbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK09CSkNfQ0xBU1MgU1NCU2VydmljZUxvb2t1cFJlc3VsdDsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdCA6IHB1YmxpYyBSZWZD
b3VudGVkPFNhZmVCcm93c2luZ1Jlc3VsdD4geworcHVibGljOgorI2lmIEhBVkUoU0FGRV9CUk9X
U0lORykKKyAgICBzdGF0aWMgUmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4gY3JlYXRlKFdlYkNvcmU6
OlVSTCYmIHVybCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2FmZUJyb3dzaW5nUmVzdWx0KFdURk1vdmUodXJsKSwg
cmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisKKyAgICBib29sIGlzUGhpc2hpbmcoKSBjb25zdCB7
IHJldHVybiBtX2lzUGhpc2hpbmc7IH0KKyAgICBib29sIGlzTWFsd2FyZSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNNYWx3YXJlOyB9CisgICAgYm9vbCBpc1Vud2FudGVkU29mdHdhcmUoKSBjb25zdCB7
IHJldHVybiBtX2lzVW53YW50ZWRTb2Z0d2FyZTsgfQorCisgICAgY29uc3QgV2ViQ29yZTo6VVJM
JiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIGNvbnN0IFN0cmluZyYgcHJvdmlk
ZXIoKSBjb25zdCB7IHJldHVybiBtX3Byb3ZpZGVyOyB9CisgICAgY29uc3QgU3RyaW5nJiBsb2Nh
bGl6ZWRQcm92aWRlck5hbWUoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsaXplZFByb3ZpZGVyTmFt
ZTsgfQorICAgIGNvbnN0IFN0cmluZyYgbWFsd2FyZURldGFpbHNVUkxCYXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYWx3YXJlRGV0YWlsc1VSTEJhc2U7IH0KKyAgICBjb25zdCBTdHJpbmcmIHJlcG9y
dEFuRXJyb3JVUkxCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXBvcnRBbkVycm9yVVJMQmFzZTsg
fQorICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgbGVhcm5Nb3JlVVJMKCkgY29uc3QgeyByZXR1cm4g
bV9sZWFybk1vcmVVUkw7IH0KKworICAgIGJvb2wgbmVlZHNTYWZlQnJvd3NpbmdXYXJuaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1BoaXNoaW5nIHx8IG1faXNNYWx3YXJlIHx8IG1faXNVbndhbnRl
ZFNvZnR3YXJlOyB9CisKK3ByaXZhdGU6CisjaWYgSEFWRShTQUZFX0JST1dTSU5HKQorICAgIFNh
ZmVCcm93c2luZ1Jlc3VsdChXZWJDb3JlOjpVUkwmJiwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAq
KTsKKyNlbmRpZgorICAgIFdlYkNvcmU6OlVSTCBtX3VybDsKKyAgICBib29sIG1faXNQaGlzaGlu
ZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzTWFsd2FyZSB7IGZhbHNlIH07CisgICAgYm9vbCBt
X2lzVW53YW50ZWRTb2Z0d2FyZSB7IGZhbHNlIH07CisKKyAgICBTdHJpbmcgbV9wcm92aWRlcjsK
KyAgICBTdHJpbmcgbV9sb2NhbGl6ZWRQcm92aWRlck5hbWU7CisgICAgU3RyaW5nIG1fbWFsd2Fy
ZURldGFpbHNVUkxCYXNlOworICAgIFN0cmluZyBtX3JlcG9ydEFuRXJyb3JVUkxCYXNlOworICAg
IFdlYkNvcmU6OlVSTCBtX2xlYXJuTW9yZVVSTDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2FmZUJyb3dz
aW5nV2FybmluZy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAj
IworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1dhcm5pbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9TYWZlQnJvd3NpbmdXYXJuaW5nLmgJKHJldmlzaW9uIDIzODE4
MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1NhZmVCcm93c2luZ1dhcm5pbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNDggKzI3LDUyIEBACiAKICNpbmNsdWRlIDxXZWJDb3JlL1VSTC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCitPQkpDX0NMQVNTIE5TQXR0cmli
dXRlZFN0cmluZzsKK09CSkNfQ0xBU1MgTlNVUkw7CiBPQkpDX0NMQVNTIFNTQlNlcnZpY2VMb29r
dXBSZXN1bHQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBTYWZlQnJvd3NpbmdSZXN1
bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYWZlQnJvd3NpbmdSZXN1bHQ+IHsKK2NsYXNzIFNhZmVC
cm93c2luZ1dhcm5pbmcgOiBwdWJsaWMgUmVmQ291bnRlZDxTYWZlQnJvd3NpbmdXYXJuaW5nPiB7
CiBwdWJsaWM6CiAjaWYgSEFWRShTQUZFX0JST1dTSU5HKQotICAgIHN0YXRpYyBSZWY8U2FmZUJy
b3dzaW5nUmVzdWx0PiBjcmVhdGUoV2ViQ29yZTo6VVJMJiYgdXJsLCBTU0JTZXJ2aWNlTG9va3Vw
UmVzdWx0ICpyZXN1bHQpCisgICAgc3RhdGljIFJlZjxTYWZlQnJvd3NpbmdXYXJuaW5nPiBjcmVh
dGUoY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3Vs
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNhZmVCcm93c2luZ1Jlc3Vs
dChXVEZNb3ZlKHVybCksIHJlc3VsdCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
YWZlQnJvd3NpbmdXYXJuaW5nKHVybCwgcmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgc3RhdGljIFJlZjxTYWZlQnJvd3NpbmdXYXJuaW5nPiBjcmVhdGUo
U3RyaW5nJiYgdGl0bGUsIFN0cmluZyYmIHdhcm5pbmcsIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRT
dHJpbmc+JiYgZGV0YWlscykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNh
ZmVCcm93c2luZ1dhcm5pbmcoV1RGTW92ZSh0aXRsZSksIFdURk1vdmUod2FybmluZyksIFdURk1v
dmUoZGV0YWlscykpKTsKICAgICB9CiAjZW5kaWYKIAotICAgIGJvb2wgaXNQaGlzaGluZygpIGNv
bnN0IHsgcmV0dXJuIG1faXNQaGlzaGluZzsgfQotICAgIGJvb2wgaXNNYWx3YXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc01hbHdhcmU7IH0KLSAgICBib29sIGlzVW53YW50ZWRTb2Z0d2FyZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNVbndhbnRlZFNvZnR3YXJlOyB9Ci0KLSAgICBjb25zdCBXZWJDb3Jl
OjpVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBw
cm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlkZXI7IH0KLSAgICBjb25zdCBTdHJpbmcm
IGxvY2FsaXplZFByb3ZpZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxpemVkUHJvdmlk
ZXJOYW1lOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBtYWx3YXJlRGV0YWlsc1VSTEJhc2UoKSBjb25z
dCB7IHJldHVybiBtX21hbHdhcmVEZXRhaWxzVVJMQmFzZTsgfQotICAgIGNvbnN0IFN0cmluZyYg
cmVwb3J0QW5FcnJvclVSTEJhc2UoKSBjb25zdCB7IHJldHVybiBtX3JlcG9ydEFuRXJyb3JVUkxC
YXNlOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6VVJMJiBsZWFybk1vcmVVUkwoKSBjb25zdCB7IHJl
dHVybiBtX2xlYXJuTW9yZVVSTDsgfQotCi0gICAgYm9vbCBuZWVkc1NhZmVCcm93c2luZ1dhcm5p
bmcoKSBjb25zdCB7IHJldHVybiBtX2lzUGhpc2hpbmcgfHwgbV9pc01hbHdhcmUgfHwgbV9pc1Vu
d2FudGVkU29mdHdhcmU7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRpdGxlKCkgY29uc3QgeyByZXR1
cm4gbV90aXRsZTsgfQorICAgIGNvbnN0IFN0cmluZyYgd2FybmluZygpIGNvbnN0IHsgcmV0dXJu
IG1fd2FybmluZzsgfQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFJldGFpblB0cjxOU0F0dHJp
YnV0ZWRTdHJpbmc+IGRldGFpbHMoKSBjb25zdCB7IHJldHVybiBtX2RldGFpbHM7IH0KKyNlbmRp
ZgogCisgICAgc3RhdGljIE5TVVJMICp2aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCgpOworICAg
IHN0YXRpYyBOU1VSTCAqY29uZmlybU1hbHdhcmVTZW50aW5lbCgpOworICAgIAogcHJpdmF0ZToK
ICNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCi0gICAgU2FmZUJyb3dzaW5nUmVzdWx0KFdlYkNvcmU6
OlVSTCYmLCBTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICopOworICAgIFNhZmVCcm93c2luZ1dhcm5p
bmcoY29uc3QgV2ViQ29yZTo6VVJMJiwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqKTsKKyNlbmRp
ZgorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFNhZmVCcm93c2luZ1dhcm5pbmcoU3RyaW5nJiYs
IFN0cmluZyYmLCBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiYmKTsKKyNlbmRpZgorCisg
ICAgU3RyaW5nIG1fdGl0bGU7CisgICAgU3RyaW5nIG1fd2FybmluZzsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBtX2RldGFpbHM7CiAjZW5k
aWYKLSAgICBXZWJDb3JlOjpVUkwgbV91cmw7Ci0gICAgYm9vbCBtX2lzUGhpc2hpbmcgeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9pc01hbHdhcmUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Vud2Fu
dGVkU29mdHdhcmUgeyBmYWxzZSB9OwotCi0gICAgU3RyaW5nIG1fcHJvdmlkZXI7Ci0gICAgU3Ry
aW5nIG1fbG9jYWxpemVkUHJvdmlkZXJOYW1lOwotICAgIFN0cmluZyBtX21hbHdhcmVEZXRhaWxz
VVJMQmFzZTsKLSAgICBTdHJpbmcgbV9yZXBvcnRBbkVycm9yVVJMQmFzZTsKLSAgICBXZWJDb3Jl
OjpVUkwgbV9sZWFybk1vcmVVUkw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0
ZW5lclByb3h5LmNwcAkocmV2aXNpb24gMjM4MTgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNyBAQAogI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKICNpbmNsdWRlICJBUElXZWJz
aXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiQVBJV2Vic2l0ZVBvbGljaWVzLmgiCi0jaW5jbHVk
ZSAiU2FmZUJyb3dzaW5nUmVzdWx0LmgiCisjaW5jbHVkZSAiU2FmZUJyb3dzaW5nV2FybmluZy5o
IgogI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3Jl
LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZVBvbGljaWVzRGF0YS5oIgpAQCAtNDUsMjEgKzQ1LDIxIEBA
IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6V2ViRnJhbWVQb2wKIAogV2ViRnJhbWVQb2xp
Y3lMaXN0ZW5lclByb3h5Ojp+V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KCkgPSBkZWZhdWx0
OwogCi12b2lkIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6ZGlkUmVjZWl2ZVNhZmVCcm93
c2luZ1Jlc3VsdHMoVmVjdG9yPFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+PiYmIHNhZmVCcm93c2lu
Z1Jlc3VsdHMpCit2b2lkIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6ZGlkUmVjZWl2ZVNh
ZmVCcm93c2luZ1Jlc3VsdHMoUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dz
aW5nV2FybmluZykKIHsKLSAgICBBU1NFUlQoIW1fc2FmZUJyb3dzaW5nUmVzdWx0cyk7CisgICAg
QVNTRVJUKCFtX3NhZmVCcm93c2luZ1dhcm5pbmcpOwogICAgIGlmIChtX3BvbGljeVJlc3VsdCkg
ewogICAgICAgICBpZiAobV9yZXBseSkKLSAgICAgICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9s
aWN5QWN0aW9uOjpVc2UsIG1fcG9saWN5UmVzdWx0LT5maXJzdC5nZXQoKSwgbV9wb2xpY3lSZXN1
bHQtPnNlY29uZCwgV1RGTW92ZShzYWZlQnJvd3NpbmdSZXN1bHRzKSk7CisgICAgICAgICAgICBt
X3JlcGx5KFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6VXNlLCBtX3BvbGljeVJlc3VsdC0+Zmlyc3Qu
Z2V0KCksIG1fcG9saWN5UmVzdWx0LT5zZWNvbmQsIFdURk1vdmUoc2FmZUJyb3dzaW5nV2Fybmlu
ZykpOwogICAgIH0gZWxzZQotICAgICAgICBtX3NhZmVCcm93c2luZ1Jlc3VsdHMgPSBXVEZNb3Zl
KHNhZmVCcm93c2luZ1Jlc3VsdHMpOworICAgICAgICBtX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBX
VEZNb3ZlKHNhZmVCcm93c2luZ1dhcm5pbmcpOwogfQogCiB2b2lkIFdlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eTo6dXNlKEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3
YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KQogewotICAg
IGlmIChtX3NhZmVCcm93c2luZ1Jlc3VsdHMpIHsKKyAgICBpZiAobV9zYWZlQnJvd3NpbmdXYXJu
aW5nKSB7CiAgICAgICAgIGlmIChtX3JlcGx5KQotICAgICAgICAgICAgbV9yZXBseShXZWJDb3Jl
OjpQb2xpY3lBY3Rpb246OlVzZSwgcG9saWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQsIFdURk1vdmUoKm1fc2FmZUJyb3dzaW5nUmVzdWx0cykpOworICAgICAgICAgICAgbV9yZXBs
eShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZSwgcG9saWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIFdURk1vdmUoKm1fc2FmZUJyb3dzaW5nV2FybmluZykpOwogICAgIH0gZWxz
ZSBpZiAoIW1fcG9saWN5UmVzdWx0KQogICAgICAgICBtX3BvbGljeVJlc3VsdCA9IHt7IHBvbGlj
aWVzLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IH19OwogfQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgJ
KHJldmlzaW9uIDIzODE4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9s
aWN5TGlzdGVuZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGVudW0g
Y2xhc3MgUG9saWN5QWN0aW9uIDogdWludDhfdDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNs
YXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKK2NsYXNzIFNhZmVCcm93c2luZ1dhcm5pbmc7CiAKIGVu
dW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCB7IE5vLCBZZXMgfTsKIGVudW0g
Y2xhc3MgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0IHsgTm8sIFllcyB9OwpAQCAtNDcs
NyArNDcsNyBAQCBlbnVtIGNsYXNzIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsCiBjbGFz
cyBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQ
STo6T2JqZWN0OjpUeXBlOjpGcmFtZVBvbGljeUxpc3RlbmVyPiB7CiBwdWJsaWM6CiAKLSAgICB1
c2luZyBSZXBseSA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0aW9u
LCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFZl
Y3RvcjxSZWY8U2FmZUJyb3dzaW5nUmVzdWx0Pj4mJik+OworICAgIHVzaW5nIFJlcGx5ID0gQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBv
bGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2lu
Z1dhcm5pbmc+JiYpPjsKICAgICBzdGF0aWMgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94
eT4gY3JlYXRlKFJlcGx5JiYgcmVwbHksIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCBl
eHBlY3QpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkoV1RGTW92ZShyZXBseSksIGV4cGVjdCkpOwpAQCAtNTgsMTMgKzU4LDEz
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRvd25sb2FkKCk7CiAgICAgdm9pZCBpZ25vcmUoKTsKICAg
ICAKLSAgICB2b2lkIGRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKFZlY3RvcjxSZWY8U2Fm
ZUJyb3dzaW5nUmVzdWx0Pj4mJik7CisgICAgdm9pZCBkaWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVz
dWx0cyhSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJik7CiAKIHByaXZhdGU6CiAgICAgV2Vi
RnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFJlcGx5JiYsIFNob3VsZEV4cGVjdFNhZmVCcm93c2lu
Z1Jlc3VsdCk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxSZWZQdHI8QVBJOjpXZWJz
aXRlUG9saWNpZXM+LCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50Pj4gbV9wb2xpY3lSZXN1
bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jlc3VsdD4+PiBt
X3NhZmVCcm93c2luZ1Jlc3VsdHM7CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8U2FmZUJyb3dz
aW5nV2FybmluZz4+IG1fc2FmZUJyb3dzaW5nV2FybmluZzsKICAgICBSZXBseSBtX3JlcGx5Owog
fTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAJKHJl
dmlzaW9uIDIzODE4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw4IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1XZWJGcmFtZVByb3h5OjpXZWJGcmFtZVByb3h5
KFdlYlBhZ2VQcm94eSogcGFnZSwgdWludDY0X3QgZnJhbWVJRCkKLSAgICA6IG1fcGFnZShwYWdl
KQorV2ViRnJhbWVQcm94eTo6V2ViRnJhbWVQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIHVpbnQ2
NF90IGZyYW1lSUQpCisgICAgOiBtX3BhZ2UobWFrZVdlYWtQdHIocGFnZSkpCiAgICAgLCBtX2lz
RnJhbWVTZXQoZmFsc2UpCiAgICAgLCBtX2ZyYW1lSUQoZnJhbWVJRCkKIHsKQEAgLTE3NywxMiAr
MTc3LDEyIEBAIHZvaWQgV2ViRnJhbWVQcm94eTo6ZGlkQ2hhbmdlVGl0bGUoY29uc3QKICAgICBt
X3RpdGxlID0gdGl0bGU7CiB9CiAKLVdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSYgV2ViRnJh
bWVQcm94eTo6c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
V2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQsIFZlY3RvcjxSZWY8U2FmZUJyb3dzaW5nUmVzdWx0Pj4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIsIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCBleHBlY3Qp
CitXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkmIFdlYkZyYW1lUHJveHk6OnNldFVwUG9saWN5
TGlzdGVuZXJQcm94eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlBvbGljeUFjdGlv
biwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBS
ZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIsIFNob3Vs
ZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCBleHBlY3QpCiB7CiAgICAgaWYgKG1fYWN0aXZlTGlz
dGVuZXIpCiAgICAgICAgIG1fYWN0aXZlTGlzdGVuZXItPmlnbm9yZSgpOwotICAgIG1fYWN0aXZl
TGlzdGVuZXIgPSBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OmNyZWF0ZShbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoV2ViQ29yZTo6UG9saWN5QWN0aW9uIGFjdGlvbiwgQVBJOjpX
ZWJzaXRlUG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFZlY3RvcjxSZWY8U2FmZUJyb3dzaW5nUmVzdWx0
Pj4mJiBzYWZlQnJvd3NpbmdSZXN1bHRzKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoYWN0aW9uLCBwb2xpY2llcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV1RG
TW92ZShzYWZlQnJvd3NpbmdSZXN1bHRzKSk7CisgICAgbV9hY3RpdmVMaXN0ZW5lciA9IFdlYkZy
YW1lUG9saWN5TGlzdGVuZXJQcm94eTo6Y3JlYXRlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChXZWJDb3JlOjpQb2xpY3lBY3Rpb24gYWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyog
cG9saWNpZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2Fy
bmluZykgbXV0YWJsZSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFjdGlvbiwgcG9saWNp
ZXMsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoc2FmZUJyb3dzaW5nV2Fy
bmluZykpOwogICAgICAgICBtX2FjdGl2ZUxpc3RlbmVyID0gbnVsbHB0cjsKICAgICB9LCBleHBl
Y3QpOwogICAgIHJldHVybiAqbV9hY3RpdmVMaXN0ZW5lcjsKQEAgLTIzMSw3ICsyMzEsNyBAQCBi
b29sIFdlYkZyYW1lUHJveHk6OmRpZEhhbmRsZUNvbnRlbnRGaWx0CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBwYWdlIHsgbV9wYWdlIH07
CisgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gcGFnZSB7IG1fcGFnZS5nZXQoKSB9OwogICAgIEFT
U0VSVChwYWdlKTsKICAgICBtX2NvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlci5yZXF1ZXN0VW5i
bG9ja0FzeW5jKFtwYWdlXShib29sIHVuYmxvY2tlZCkgewogICAgICAgICBpZiAodW5ibG9ja2Vk
KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaAkocmV2aXNpb24g
MjM4MTgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIERlY29kZXI7CiB9CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewotY2xhc3MgU2FmZUJyb3dzaW5nUmVzdWx0OworY2xhc3MgU2FmZUJyb3dzaW5n
V2FybmluZzsKIGNsYXNzIFdlYkNlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAgLTYxLDcgKzYxLDcgQEAgdHlw
ZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpEYXRhKj4gRGF0YQogCiBjbGFzcyBXZWJGcmFtZVBy
b3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6RnJhbWU+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkZyYW1lUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJv
eHkqIHBhZ2UsIHVpbnQ2NF90IGZyYW1lSUQpCisgICAgc3RhdGljIFJlZjxXZWJGcmFtZVByb3h5
PiBjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlLCB1aW50NjRfdCBmcmFtZUlEKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViRnJhbWVQcm94eShwYWdlLCBmcmFtZUlEKSk7
CiAgICAgfQpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViRnJhbWVQ
cm94eSgpOwogCiAgICAgdWludDY0X3QgZnJhbWVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVJ
RDsgfQotICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQor
ICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsgfQog
CiAgICAgdm9pZCB3ZWJQcm9jZXNzV2lsbFNodXREb3duKCk7CiAKQEAgLTExNyw3ICsxMTcsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKGNvbnN0IFdlYkNv
cmU6OlVSTCYpOyAvLyBlZy4gYW5jaG9yIG5hdmlnYXRpb24sIHNlc3Npb24gc3RhdGUgY2hhbmdl
LgogICAgIHZvaWQgZGlkQ2hhbmdlVGl0bGUoY29uc3QgU3RyaW5nJik7CiAKLSAgICBXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHkmIHNldFVwUG9saWN5TGlzdGVuZXJQcm94eShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMq
LCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBWZWN0b3I8UmVmPFNhZmVCcm93c2luZ1Jl
c3VsdD4+JiYpPiYmLCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQpOworICAgIFdlYkZy
YW1lUG9saWN5TGlzdGVuZXJQcm94eSYgc2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2ll
cyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJu
aW5nPiYmKT4mJiwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0KTsKIAogI2lmIEVOQUJM
RShDT05URU5UX0ZJTFRFUklORykKICAgICB2b2lkIGNvbnRlbnRGaWx0ZXJEaWRCbG9ja0xvYWQo
V2ViQ29yZTo6Q29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyIGNvbnRlbnRGaWx0ZXJVbmJsb2Nr
SGFuZGxlcikgeyBtX2NvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlciA9IFdURk1vdmUoY29udGVu
dEZpbHRlclVuYmxvY2tIYW5kbGVyKTsgfQpAQCAtMTI5LDkgKzEyOSw5IEBAIHB1YmxpYzoKICNl
bmRpZgogCiBwcml2YXRlOgotICAgIFdlYkZyYW1lUHJveHkoV2ViUGFnZVByb3h5KiBwYWdlLCB1
aW50NjRfdCBmcmFtZUlEKTsKKyAgICBXZWJGcmFtZVByb3h5KFdlYlBhZ2VQcm94eSYsIHVpbnQ2
NF90IGZyYW1lSUQpOwogCi0gICAgV2ViUGFnZVByb3h5KiBtX3BhZ2U7CisgICAgV2Vha1B0cjxX
ZWJQYWdlUHJveHk+IG1fcGFnZTsKIAogICAgIEZyYW1lTG9hZFN0YXRlIG1fZnJhbWVMb2FkU3Rh
dGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2
aXNpb24gMjM4MTgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQAogI2luY2x1ZGUgIlBsdWdpbkluZm9y
bWF0aW9uLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKICNpbmNsdWRlICJQ
cmludEluZm8uaCIKLSNpbmNsdWRlICJTYWZlQnJvd3NpbmdSZXN1bHQuaCIKKyNpbmNsdWRlICJT
YWZlQnJvd3NpbmdXYXJuaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVTaGVldENhbGxiYWNrSUQuaCIK
ICNpbmNsdWRlICJTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiVGV4dENo
ZWNrZXIuaCIKQEAgLTc2MSw3ICs3NjEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3dhcFRvV2Vi
UHJvY2VzcyhSZWY8CiAgICAgaWYgKGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZSkgewogICAgICAg
ICBBU1NFUlQoIW1fbWFpbkZyYW1lKTsKICAgICAgICAgQVNTRVJUKCZkZXN0aW5hdGlvblN1c3Bl
bmRlZFBhZ2UtPnByb2Nlc3MoKSA9PSBtX3Byb2Nlc3MucHRyKCkpOwotICAgICAgICBtX21haW5G
cmFtZSA9IFdlYkZyYW1lUHJveHk6OmNyZWF0ZSh0aGlzLCBkZXN0aW5hdGlvblN1c3BlbmRlZFBh
Z2UtPm1haW5GcmFtZUlEKCkpOworICAgICAgICBtX21haW5GcmFtZSA9IFdlYkZyYW1lUHJveHk6
OmNyZWF0ZSgqdGhpcywgZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlLT5tYWluRnJhbWVJRCgpKTsK
ICAgICAgICAgbV9wcm9jZXNzLT5mcmFtZUNyZWF0ZWQoZGVzdGluYXRpb25TdXNwZW5kZWRQYWdl
LT5tYWluRnJhbWVJRCgpLCAqbV9tYWluRnJhbWUpOwogICAgIH0KIApAQCAtMzQ3Miw3ICszNDcy
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENyZWF0ZU1haW5GcmFtZSh1aQogICAgIE1FU1NB
R0VfQ0hFQ0soIW1fbWFpbkZyYW1lKTsKICAgICBNRVNTQUdFX0NIRUNLKG1fcHJvY2Vzcy0+Y2Fu
Q3JlYXRlRnJhbWUoZnJhbWVJRCkpOwogCi0gICAgbV9tYWluRnJhbWUgPSBXZWJGcmFtZVByb3h5
OjpjcmVhdGUodGhpcywgZnJhbWVJRCk7CisgICAgbV9tYWluRnJhbWUgPSBXZWJGcmFtZVByb3h5
OjpjcmVhdGUoKnRoaXMsIGZyYW1lSUQpOwogCiAgICAgLy8gQWRkIHRoZSBmcmFtZSB0byB0aGUg
cHJvY2VzcyB3aWRlIG1hcC4KICAgICBtX3Byb2Nlc3MtPmZyYW1lQ3JlYXRlZChmcmFtZUlELCAq
bV9tYWluRnJhbWUpOwpAQCAtMzQ5Nyw3ICszNDk3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZENyZWF0ZVN1YmZyYW1lKHVpbgogCiAgICAgTUVTU0FHRV9DSEVDSyhtX3Byb2Nlc3MtPmNhbkNy
ZWF0ZUZyYW1lKGZyYW1lSUQpKTsKICAgICAKLSAgICBSZWZQdHI8V2ViRnJhbWVQcm94eT4gc3Vi
RnJhbWUgPSBXZWJGcmFtZVByb3h5OjpjcmVhdGUodGhpcywgZnJhbWVJRCk7CisgICAgUmVmUHRy
PFdlYkZyYW1lUHJveHk+IHN1YkZyYW1lID0gV2ViRnJhbWVQcm94eTo6Y3JlYXRlKCp0aGlzLCBm
cmFtZUlEKTsKIAogICAgIC8vIEFkZCB0aGUgZnJhbWUgdG8gdGhlIHByb2Nlc3Mgd2lkZSBtYXAu
CiAgICAgbV9wcm9jZXNzLT5mcmFtZUNyZWF0ZWQoZnJhbWVJRCwgKnN1YkZyYW1lKTsKQEAgLTQx
NjQsNyArNDE2NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2EK
ICAgICBpZiAoIW1fcHJlZmVyZW5jZXMtPnNhZmVCcm93c2luZ0VuYWJsZWQoKSkKICAgICAgICAg
c2hvdWxkU2tpcFNhZmVCcm93c2luZ0NoZWNrID0gU2hvdWxkU2tpcFNhZmVCcm93c2luZ0NoZWNr
OjpZZXM7CiAKLSAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS5zZXRVcFBvbGljeUxp
c3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZnJhbWUg
PSBtYWtlUmVmKGZyYW1lKSwgc2VuZGVyID0gV1RGTW92ZShzZW5kZXIpLCBuYXZpZ2F0aW9uXSAo
V2ViQ29yZTo6UG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMq
IHBvbGljaWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIFZlY3RvcjxSZWY8U2FmZUJyb3dzaW5nUmVzdWx0Pj4mJiBzYWZlQnJvd3Np
bmdSZXN1bHRzKSBtdXRhYmxlIHsKKyAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS5z
ZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgZnJhbWUgPSBtYWtlUmVmKGZyYW1lKSwgc2VuZGVyID0gV1RGTW92ZShzZW5kZXIpLCBu
YXZpZ2F0aW9uXSAoV2ViQ29yZTo6UG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJz
aXRlUG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nl
c3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNh
ZmVCcm93c2luZ1dhcm5pbmcpIG11dGFibGUgewogICAgICAgICAKICAgICAgICAgYXV0byBjb21w
bGV0aW9uSGFuZGxlciA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhpcy5jb3B5
UmVmKCksIGZyYW1lID0gZnJhbWUuY29weVJlZigpLCBzZW5kZXIgPSBXVEZNb3ZlKHNlbmRlciks
IG5hdmlnYXRpb24gPSBXVEZNb3ZlKG5hdmlnYXRpb24pLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5
Q2xpZW50LCBwb2xpY2llcyA9IG1ha2VSZWZQdHIocG9saWNpZXMpXSAoUG9saWN5QWN0aW9uIHBv
bGljeUFjdGlvbikgbXV0YWJsZSB7CiAgICAgICAgICAgICByZWNlaXZlZE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24uZ2V0KCksIHByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQsIGZyYW1lLCBwb2xpY2llcy5nZXQoKSwgV1RGTW92ZShzZW5kZXIpKTsK
QEAgLTQxNzUsMTAgKzQxNzUsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9y
TmF2aWdhCiAKICAgICAgICAgbV9wYWdlQ2xpZW50LT5jbGVhclNhZmVCcm93c2luZ1dhcm5pbmco
KTsKIAotICAgICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHNhZmVCcm93c2luZ1Jlc3VsdHMpIHsK
LSAgICAgICAgICAgIGlmICghcmVzdWx0LT5uZWVkc1NhZmVCcm93c2luZ1dhcm5pbmcoKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1fcGFnZUNsaWVudC0+c2hvd1Nh
ZmVCcm93c2luZ1dhcm5pbmcocmVzdWx0LCBbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHBvbGljeUFjdGlvbl0gKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAoc2Fm
ZUJyb3dzaW5nV2FybmluZykgeworICAgICAgICAgICAgbV9wYWdlQ2xpZW50LT5zaG93U2FmZUJy
b3dzaW5nV2FybmluZygqc2FmZUJyb3dzaW5nV2FybmluZywgW3Byb3RlY3RlZFRoaXMgPSBXVEZN
b3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBwb2xpY3lBY3Rpb25dIChhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAg
ICAgICAgICAgICBzd2l0Y2hPbihyZXN1bHQsIFsmXSAoY29uc3QgVVJMJiB1cmwpIHsKICAgICAg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUG9saWN5QWN0aW9uOjpJZ25vcmUpOwog
ICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5sb2FkUmVxdWVzdCh7IHVybCB9KTsK
QEAgLTQyNTgsMTAgKzQyNTYsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZv
ck5ld1dpbgogICAgIE1FU1NBR0VfQ0hFQ0soZnJhbWUpOwogICAgIE1FU1NBR0VfQ0hFQ0tfVVJM
KHJlcXVlc3QudXJsKCkpOwogCi0gICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUtPnNl
dFVwUG9saWN5TGlzdGVuZXJQcm94eShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBsaXN0ZW5lcklELCBmcmFtZUlEXSAoV2ViQ29yZTo6UG9saWN5QWN0aW9uIHBvbGljeUFj
dGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50
IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFZlY3RvcjxSZWY8U2FmZUJyb3dzaW5nUmVz
dWx0Pj4mJiBzYWZlQnJvd3NpbmdSZXN1bHRzKSBtdXRhYmxlIHsKKyAgICBhdXRvIGxpc3RlbmVy
ID0gbWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGxpc3RlbmVySUQsIGZyYW1lSURdIChXZWJDb3JlOjpQ
b2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRy
PFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZykgbXV0YWJsZSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBBc3NlcnQgdGhlIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBpcyBudWxs
cHRyIGhlcmUgb25jZSBjbGllbnRzIG9mIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZVdpdGhQb2xp
Y2llcyBnbyBhd2F5LgogICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50ID09IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6Ok5vKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChzYWZlQnJvd3NpbmdSZXN1bHRzLCBzYWZlQnJvd3NpbmdSZXN1bHRzLmlz
RW1wdHkoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nV2FybmluZywgIXNh
ZmVCcm93c2luZ1dhcm5pbmcpOwogICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGlj
eUFjdGlvbiwgbnVsbHB0ciwgc3RkOjpudWxsb3B0LCBQb2xpY3lEZWNpc2lvblNlbmRlcjo6Y3Jl
YXRlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgZnJhbWVJ
RCwgbGlzdGVuZXJJRF0gKGF1dG8uLi4gYXJncykgewogICAgICAgICAgICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24oZnJhbWVJRCwg
bGlzdGVuZXJJRCwgYXJncy4uLiksIG1fcGFnZUlEKTsKICAgICAgICAgfSkpOwpAQCAtNDI5Niwx
MCArNDI5NCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uCiAg
ICAgTUVTU0FHRV9DSEVDS19VUkwocmVzcG9uc2UudXJsKCkpOwogCiAgICAgUmVmUHRyPEFQSTo6
TmF2aWdhdGlvbj4gbmF2aWdhdGlvbiA9IG5hdmlnYXRpb25JRCA/IG1fbmF2aWdhdGlvblN0YXRl
LT5uYXZpZ2F0aW9uKG5hdmlnYXRpb25JRCkgOiBudWxscHRyOwotICAgIGF1dG8gbGlzdGVuZXIg
PSBtYWtlUmVmKGZyYW1lLT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZnJhbWVJRCwgbGlzdGVuZXJJRCwgbmF2aWdhdGlvbiA9
IFdURk1vdmUobmF2aWdhdGlvbildIChXZWJDb3JlOjpQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9u
LCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgVmVjdG9yPFJlZjxTYWZlQnJvd3NpbmdSZXN1bHQ+
PiYmIHNhZmVCcm93c2luZ1Jlc3VsdHMpIG11dGFibGUgeworICAgIGF1dG8gbGlzdGVuZXIgPSBt
YWtlUmVmKGZyYW1lLT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgZnJhbWVJRCwgbGlzdGVuZXJJRCwgbmF2aWdhdGlvbiA9IFdU
Rk1vdmUobmF2aWdhdGlvbildIChXZWJDb3JlOjpQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uLCBB
UEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vz
c1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2Fm
ZUJyb3dzaW5nV2FybmluZykgbXV0YWJsZSB7CiAgICAgICAgIC8vIEZJWE1FOiBBc3NlcnQgdGhl
IEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBpcyBudWxscHRyIGhlcmUgb25jZSBjbGllbnRzIG9mIFdL
RnJhbWVQb2xpY3lMaXN0ZW5lclVzZVdpdGhQb2xpY2llcyBnbyBhd2F5LgogICAgICAgICBSRUxF
QVNFX0FTU0VSVChwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50ID09IFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQ6Ok5vKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzYWZlQnJvd3NpbmdS
ZXN1bHRzLCBzYWZlQnJvd3NpbmdSZXN1bHRzLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQoc2FmZUJyb3dzaW5nV2FybmluZywgIXNhZmVCcm93c2luZ1dhcm5pbmcpOwogICAgICAg
ICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwgbmF2aWdhdGlvbi5nZXQoKSwg
c3RkOjpudWxsb3B0LCBQb2xpY3lEZWNpc2lvblNlbmRlcjo6Y3JlYXRlKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgZnJhbWVJRCwgbGlzdGVuZXJJRF0gKGF1
dG8uLi4gYXJncykgewogICAgICAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24oZnJhbWVJRCwgbGlzdGVuZXJJRCwgYXJncy4u
LiksIG1fcGFnZUlEKTsKICAgICAgICAgfSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMzgxODMpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00MiwxMCArNDIsMTIgQEAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk5hdmln
YXRpb25TdGF0ZS5oIgogI2ltcG9ydCAiT2JqQ09iamVjdEdyYXBoLmgiCisjaW1wb3J0ICJQYWdl
Q2xpZW50LmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURh
dGEuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCiAjaW1wb3J0ICJS
ZW1vdGVPYmplY3RSZWdpc3RyeS5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNz
YWdlcy5oIgorI2ltcG9ydCAiU2FmZUJyb3dzaW5nV2FybmluZy5oIgogI2ltcG9ydCAiU3RyaW5n
VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJVc2VyTWVkaWFQ
cm9jZXNzTWFuYWdlci5oIgpAQCAtMTI3Nyw5ICsxMjc5LDkgQEAgLSAodm9pZClfZGlkQ2hhbmdl
RWRpdG9yU3RhdGUKICAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6c2VsZiBlZGl0b3JTdGF0
ZURpZENoYW5nZTpkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb25Gb3JFZGl0b3JTdGF0ZShfcGFnZS0+
ZWRpdG9yU3RhdGUoKSldOwogfQogCi0tICh2b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZzoo
Y29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQmKXJlc3VsdCBjb21wbGV0aW9uSGFuZGxl
cjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVM
b2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9zaG93
U2FmZUJyb3dzaW5nV2FybmluZzooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nJil3
YXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8
V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBfc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0TlMoW1tXS1NhZmVC
cm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3VuZHMgc2FmZUJyb3dz
aW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0
cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgX3NhZmVCcm93c2luZ1dh
cm5pbmcgPSBhZG9wdE5TKFtbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGFsbG9jXSBpbml0V2l0aEZy
YW1lOnNlbGYuYm91bmRzIHNhZmVCcm93c2luZ1dhcm5pbmc6d2FybmluZyBjb21wbGV0aW9uSGFu
ZGxlcjpbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0
YWJsZSB7CiAgICAgICAgIGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKICAg
ICAgICAgICAgIFtzdGQ6OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5n
LCBudWxscHRyKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKQEAgLTQ3MzIsNiArNDczNCwyOCBAQCArIChCT09MKV9oYW5k
bGVzU2FmZUJyb3dzaW5nCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy0gKHZvaWQpX3Nob3dTYWZl
QnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3Ry
aW5nICopd2FybmluZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TVVJMICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAg
YXV0byBzYWZlQnJvd3NpbmdXYXJuaW5nID0gV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpj
cmVhdGUodGl0bGUsIHdhcm5pbmcsIGRldGFpbHMpOworICAgIGF1dG8gd3JhcHBlciA9IFtjb21w
bGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChWYXJpYW50
PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYgdmFyaWFudCkgewor
ICAgICAgICBzd2l0Y2hPbih2YXJpYW50LCBbJl0gKFdlYktpdDo6Q29udGludWVVbnNhZmVMb2Fk
KSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOworICAgICAgICB9LCBbJl0g
KFdlYkNvcmU6OlVSTCB1cmwpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHVybCk7
CisgICAgICAgIH0pOworICAgIH07CisjaWYgUExBVEZPUk0oTUFDKQorICAgIF9pbXBsLT5zaG93
U2FmZUJyb3dzaW5nV2FybmluZyhzYWZlQnJvd3NpbmdXYXJuaW5nLCBXVEZNb3ZlKHdyYXBwZXIp
KTsKKyNlbHNlCisgICAgW3NlbGYgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOnNhZmVCcm93c2lu
Z1dhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZSh3cmFwcGVyKV07CisjZW5kaWYKK30K
KworKyAoTlNVUkwgKilfY29uZmlybU1hbHdhcmVTZW50aW5lbAoreworICAgIHJldHVybiBXZWJL
aXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OmNvbmZpcm1NYWx3YXJlU2VudGluZWwoKTsKK30KKwog
LSAodm9pZClfZXZhbHVhdGVKYXZhU2NyaXB0V2l0aG91dFVzZXJHZXN0dXJlOihOU1N0cmluZyAq
KWphdmFTY3JpcHRTdHJpbmcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKGlkLCBOU0Vycm9y
ICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgW3NlbGYgX2V2YWx1YXRlSmF2YVNjcmlwdDpq
YXZhU2NyaXB0U3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6Tk8gY29tcGxldGlvbkhhbmRsZXI6Y29t
cGxldGlvbkhhbmRsZXJdOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDIzODE4MykKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIGNsYXNzIEF0dGFjaG1lbnQ7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogZW51bSBjbGFzcyBDb250aW51ZVVuc2FmZUxvYWQgOiBib29sOwotY2xhc3Mg
U2FmZUJyb3dzaW5nUmVzdWx0OworY2xhc3MgU2FmZUJyb3dzaW5nV2FybmluZzsKIGNsYXNzIFZp
ZXdTbmFwc2hvdDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CkBAIC0x
NzksNyArMTc5LDcgQEAgY2xhc3MgVVJMOwogLSAodm9pZClfZGlkSW5zZXJ0QXR0YWNobWVudDoo
QVBJOjpBdHRhY2htZW50JilhdHRhY2htZW50IHdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNl
OwogI2VuZGlmCiAKLS0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJL
aXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNv
cmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKV9zaG93U2FmZUJyb3dz
aW5nV2FybmluZzooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nJil3YXJuaW5nIGNv
bXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpD
b250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXI7
CiAtICh2b2lkKV9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmc7CiAKIC0gKHN0ZDo6b3B0aW9uYWw8
Qk9PTD4pX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZvclRlc3Rp
bmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDIzODE4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
Myw2ICsxMDMsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkCiBA
Y2xhc3MgX1dLSWNvbkxvYWRpbmdEZWxlZ2F0ZTsKIEBjbGFzcyBfV0tJbnNwZWN0b3I7CiBAY2xh
c3MgX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk7CitAY2xhc3MgX1dLU2FmZUJyb3dzaW5nV2Fybmlu
ZzsKIEBjbGFzcyBfV0tTZXNzaW9uU3RhdGU7CiBAY2xhc3MgX1dLVGh1bWJuYWlsVmlldzsKIEBj
bGFzcyBfV0tXZWJzaXRlUG9saWNpZXM7CkBAIC0xODcsNiArMTg4LDggQEAgdHlwZWRlZiBOU19P
UFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZAogLSAoX1dLQXR0YWNobWVudCAqKV9hdHRhY2ht
ZW50Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiArIChCT09MKV9oYW5kbGVz
U2FmZUJyb3dzaW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworKyAoTlNVUkwgKilfY29uZmlybU1hbHdhcmVTZW50aW5lbCBXS19BUElfQVZB
SUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3No
b3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5pbmc6
KE5TU3RyaW5nICopd2FybmluZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRhaWxz
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TVVJMICopKWNvbXBsZXRpb25IYW5kbGVyIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiAt
IChJQkFjdGlvbilfYWxpZ25DZW50ZXI6KGlkKXNlbmRlciBXS19BUElfQVZBSUxBQkxFKG1hY29z
eChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKElCQWN0aW9uKV9hbGlnbkp1c3Rp
ZmllZDooaWQpc2VuZGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJy
b3dzaW5nUmVzdWx0Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvU2FmZUJyb3dzaW5nUmVzdWx0Q29jb2EubW0JKHJldmlzaW9uIDIzODE4MykKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1Jlc3VsdENvY29hLm1t
CShub25leGlzdGVudCkKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiU2FmZUJyb3dzaW5nUmVzdWx0LmgiCi0KLSNpbXBvcnQgIlNhZmVC
cm93c2luZ1NQSS5oIgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi0jaWYgSEFWRShTQUZFX0JST1dTSU5HKQotCi0vLyBGSVhNRTog
VGhlc2Ugb3VnaHQgdG8gYmUgQVBJIGNhbGxzIHRvIHRoZSBTYWZhcmlTYWZlQnJvd3NpbmcgZnJh
bWV3b3JrIHdoZW4gc3VjaCBTUEkgaXMgYXZhaWxhYmxlLgotc3RhdGljIGNvbnN0IGNoYXIqIG1h
bHdhcmVEZXRhaWxzQmFzZShjb25zdCBTdHJpbmcmIHByb3ZpZGVyKQotewotICAgIGlmIChwcm92
aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlkZXJUZW5jZW50KSkKLSAgICAgICAgcmV0dXJuICJodHRw
czovL3d3dy51cmxzZWMucXEuY29tL2NoZWNrLmh0bWw/dHBsPXNhZmFyaSI7Ci0gICAgcmV0dXJu
ICJodHRwczovL2dvb2dsZS5jb20vc2FmZWJyb3dzaW5nL2RpYWdub3N0aWM/dHBsPXNhZmFyaSI7
Ci19Ci0KLXN0YXRpYyBXZWJDb3JlOjpVUkwgbGVhcm5Nb3JlKGNvbnN0IFN0cmluZyYgcHJvdmlk
ZXIpCi17Ci0gICAgaWYgKHByb3ZpZGVyID09IFN0cmluZyhTU0JQcm92aWRlclRlbmNlbnQpKQot
ICAgICAgICByZXR1cm4ge3sgfSwgImh0dHBzOi8vd3d3LnVybHNlYy5xcS5jb20vc3RhbmRhcmQv
czEuaHRtbD90cGw9c2FmYXJpIn07Ci0gICAgcmV0dXJuIHt7IH0sICJodHRwczovL3d3dy5nb29n
bGUuY29tL3N1cHBvcnQvYmluL2Fuc3dlci5weT9hbnN3ZXI9MTA2MzE4In07Ci19Ci0KLXN0YXRp
YyBjb25zdCBjaGFyKiByZXBvcnRBbkVycm9yQmFzZShjb25zdCBTdHJpbmcmIHByb3ZpZGVyKQot
ewotICAgIGlmIChwcm92aWRlciA9PSBTdHJpbmcoU1NCUHJvdmlkZXJUZW5jZW50KSkKLSAgICAg
ICAgcmV0dXJuICJodHRwczovL3d3dy51cmxzZWMucXEuY29tL2NvbXBsYWluLmh0bWw/dHBsPXNh
ZmFyaSI7Ci0gICAgcmV0dXJuICJodHRwczovL3d3dy5nb29nbGUuY29tL3NhZmVicm93c2luZy9y
ZXBvcnRfZXJyb3IvP3RwbD1zYWZhcmkiOwotfQotCi1zdGF0aWMgU3RyaW5nIGxvY2FsaXplZFBy
b3ZpZGVyKGNvbnN0IFN0cmluZyYgcHJvdmlkZXIpCi17Ci0gICAgaWYgKHByb3ZpZGVyID09IFN0
cmluZyhTU0JQcm92aWRlclRlbmNlbnQpKQotICAgICAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5H
KEAiVGVuY2VudCBTYWZlIEJyb3dzaW5nIiwgIlRlbmNlbnQgU2FmZSBCcm93c2luZyIpOwotICAg
IHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJHb29nbGUgU2FmZSBCcm93c2luZyIsICJHb29nbGUg
U2FmZSBCcm93c2luZyIpOwotfQotCi1TYWZlQnJvd3NpbmdSZXN1bHQ6OlNhZmVCcm93c2luZ1Jl
c3VsdChXZWJDb3JlOjpVUkwmJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkK
LSAgICA6IG1fdXJsKFdURk1vdmUodXJsKSkKLSAgICAsIG1faXNQaGlzaGluZyhbcmVzdWx0IGlz
UGhpc2hpbmddKQotICAgICwgbV9pc01hbHdhcmUoW3Jlc3VsdCBpc01hbHdhcmVdKQotICAgICwg
bV9pc1Vud2FudGVkU29mdHdhcmUoW3Jlc3VsdCBpc1Vud2FudGVkU29mdHdhcmVdKQotICAgICwg
bV9wcm92aWRlcihbcmVzdWx0IHByb3ZpZGVyXSkKLSAgICAsIG1fbG9jYWxpemVkUHJvdmlkZXJO
YW1lKGxvY2FsaXplZFByb3ZpZGVyKFtyZXN1bHQgcHJvdmlkZXJdKSkKLSAgICAsIG1fbWFsd2Fy
ZURldGFpbHNVUkxCYXNlKG1hbHdhcmVEZXRhaWxzQmFzZShbcmVzdWx0IHByb3ZpZGVyXSkpCi0g
ICAgLCBtX3JlcG9ydEFuRXJyb3JVUkxCYXNlKHJlcG9ydEFuRXJyb3JCYXNlKFtyZXN1bHQgcHJv
dmlkZXJdKSkKLSAgICAsIG1fbGVhcm5Nb3JlVVJMKGxlYXJuTW9yZShbcmVzdWx0IHByb3ZpZGVy
XSkpCi17Ci19Ci0jZW5kaWYKLQotfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nUmVzdWx0Q29jb2EubW0KX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpE
ZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
YWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tCShyZXZpc2lvbiAyMzgx
ODMpCShmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1Jlc3Vs
dENvY29hLm1tOjIzODE4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NhZmVC
cm93c2luZ1dhcm5pbmdDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTYWZlQnJvd3NpbmdSZXN1
bHQuaCIKKworI2ltcG9ydCAiU2FmZUJyb3dzaW5nU1BJLmgiCisjaW1wb3J0IDxXZWJDb3JlL0xv
Y2FsaXplZFN0cmluZ3MuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBIQVZFKFNBRkVf
QlJPV1NJTkcpCisKKy8vIEZJWE1FOiBUaGVzZSBvdWdodCB0byBiZSBBUEkgY2FsbHMgdG8gdGhl
IFNhZmFyaVNhZmVCcm93c2luZyBmcmFtZXdvcmsgd2hlbiBzdWNoIFNQSSBpcyBhdmFpbGFibGUu
CitzdGF0aWMgY29uc3QgY2hhciogbWFsd2FyZURldGFpbHNCYXNlKGNvbnN0IFN0cmluZyYgcHJv
dmlkZXIpCit7CisgICAgaWYgKHByb3ZpZGVyID09IFN0cmluZyhTU0JQcm92aWRlclRlbmNlbnQp
KQorICAgICAgICByZXR1cm4gImh0dHBzOi8vd3d3LnVybHNlYy5xcS5jb20vY2hlY2suaHRtbD90
cGw9c2FmYXJpIjsKKyAgICByZXR1cm4gImh0dHBzOi8vZ29vZ2xlLmNvbS9zYWZlYnJvd3Npbmcv
ZGlhZ25vc3RpYz90cGw9c2FmYXJpIjsKK30KKworc3RhdGljIFdlYkNvcmU6OlVSTCBsZWFybk1v
cmUoY29uc3QgU3RyaW5nJiBwcm92aWRlcikKK3sKKyAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5n
KFNTQlByb3ZpZGVyVGVuY2VudCkpCisgICAgICAgIHJldHVybiB7eyB9LCAiaHR0cHM6Ly93d3cu
dXJsc2VjLnFxLmNvbS9zdGFuZGFyZC9zMS5odG1sP3RwbD1zYWZhcmkifTsKKyAgICByZXR1cm4g
e3sgfSwgImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc3VwcG9ydC9iaW4vYW5zd2VyLnB5P2Fuc3dl
cj0xMDYzMTgifTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIHJlcG9ydEFuRXJyb3JCYXNlKGNv
bnN0IFN0cmluZyYgcHJvdmlkZXIpCit7CisgICAgaWYgKHByb3ZpZGVyID09IFN0cmluZyhTU0JQ
cm92aWRlclRlbmNlbnQpKQorICAgICAgICByZXR1cm4gImh0dHBzOi8vd3d3LnVybHNlYy5xcS5j
b20vY29tcGxhaW4uaHRtbD90cGw9c2FmYXJpIjsKKyAgICByZXR1cm4gImh0dHBzOi8vd3d3Lmdv
b2dsZS5jb20vc2FmZWJyb3dzaW5nL3JlcG9ydF9lcnJvci8/dHBsPXNhZmFyaSI7Cit9CisKK3N0
YXRpYyBTdHJpbmcgbG9jYWxpemVkUHJvdmlkZXIoY29uc3QgU3RyaW5nJiBwcm92aWRlcikKK3sK
KyAgICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3ZpZGVyVGVuY2VudCkpCisgICAgICAg
IHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJUZW5jZW50IFNhZmUgQnJvd3NpbmciLCAiVGVuY2Vu
dCBTYWZlIEJyb3dzaW5nIik7CisgICAgcmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIkdvb2dsZSBT
YWZlIEJyb3dzaW5nIiwgIkdvb2dsZSBTYWZlIEJyb3dzaW5nIik7Cit9CisKK1NhZmVCcm93c2lu
Z1Jlc3VsdDo6U2FmZUJyb3dzaW5nUmVzdWx0KFdlYkNvcmU6OlVSTCYmIHVybCwgU1NCU2Vydmlj
ZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQorICAgIDogbV91cmwoV1RGTW92ZSh1cmwpKQorICAgICwg
bV9pc1BoaXNoaW5nKFtyZXN1bHQgaXNQaGlzaGluZ10pCisgICAgLCBtX2lzTWFsd2FyZShbcmVz
dWx0IGlzTWFsd2FyZV0pCisgICAgLCBtX2lzVW53YW50ZWRTb2Z0d2FyZShbcmVzdWx0IGlzVW53
YW50ZWRTb2Z0d2FyZV0pCisgICAgLCBtX3Byb3ZpZGVyKFtyZXN1bHQgcHJvdmlkZXJdKQorICAg
ICwgbV9sb2NhbGl6ZWRQcm92aWRlck5hbWUobG9jYWxpemVkUHJvdmlkZXIoW3Jlc3VsdCBwcm92
aWRlcl0pKQorICAgICwgbV9tYWx3YXJlRGV0YWlsc1VSTEJhc2UobWFsd2FyZURldGFpbHNCYXNl
KFtyZXN1bHQgcHJvdmlkZXJdKSkKKyAgICAsIG1fcmVwb3J0QW5FcnJvclVSTEJhc2UocmVwb3J0
QW5FcnJvckJhc2UoW3Jlc3VsdCBwcm92aWRlcl0pKQorICAgICwgbV9sZWFybk1vcmVVUkwobGVh
cm5Nb3JlKFtyZXN1bHQgcHJvdmlkZXJdKSkKK3sKK30KKyNlbmRpZgorCit9CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdXYXJu
aW5nQ29jb2EubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMj
CituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1dhcm5pbmdD
b2NvYS5tbQkocmV2aXNpb24gMjM4MTgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw1NiAr
MjQsMTUzIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTYWZlQnJvd3Np
bmdSZXN1bHQuaCIKKyNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKIAogI2ltcG9ydCAi
U2FmZUJyb3dzaW5nU1BJLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4K
KyNpbXBvcnQgPHd0Zi9MYW5ndWFnZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogI2lmIEhB
VkUoU0FGRV9CUk9XU0lORykKIAotLy8gRklYTUU6IFRoZXNlIG91Z2h0IHRvIGJlIEFQSSBjYWxs
cyB0byB0aGUgU2FmYXJpU2FmZUJyb3dzaW5nIGZyYW1ld29yayB3aGVuIHN1Y2ggU1BJIGlzIGF2
YWlsYWJsZS4KLXN0YXRpYyBjb25zdCBjaGFyKiBtYWx3YXJlRGV0YWlsc0Jhc2UoY29uc3QgU3Ry
aW5nJiBwcm92aWRlcikKKy8vIEZJWE1FOiBUaGVzZSBmb3VyIGZ1bmN0aW9ucyBvdWdodCB0byBi
ZSBBUEkgY2FsbHMgdG8gdGhlIFNhZmFyaVNhZmVCcm93c2luZyBmcmFtZXdvcmsgd2hlbiBzdWNo
IFNQSSBpcyBhdmFpbGFibGUuCisvLyBUaGF0IHdheSBXZWJLaXQgZG9lcyBub3QgbmVlZCB0byBr
bm93IGFib3V0IHRoZSBTYWZhcmlTYWZlQnJvd3NpbmcgZnJhbWV3b3JrJ3MgcG9zc2libGUgcHJv
dmlkZXJzLgorc3RhdGljIGNvbnN0IGNoYXIqIG1hbHdhcmVEZXRhaWxzQmFzZShTU0JTZXJ2aWNl
TG9va3VwUmVzdWx0ICpyZXN1bHQpCiB7Ci0gICAgaWYgKHByb3ZpZGVyID09IFN0cmluZyhTU0JQ
cm92aWRlclRlbmNlbnQpKQorICAgIGlmIChbcmVzdWx0LnByb3ZpZGVyIGlzRXF1YWxUb1N0cmlu
ZzpTU0JQcm92aWRlclRlbmNlbnRdKQogICAgICAgICByZXR1cm4gImh0dHBzOi8vd3d3LnVybHNl
Yy5xcS5jb20vY2hlY2suaHRtbD90cGw9c2FmYXJpIjsKICAgICByZXR1cm4gImh0dHBzOi8vZ29v
Z2xlLmNvbS9zYWZlYnJvd3NpbmcvZGlhZ25vc3RpYz90cGw9c2FmYXJpIjsKIH0KIAotc3RhdGlj
IFdlYkNvcmU6OlVSTCBsZWFybk1vcmUoY29uc3QgU3RyaW5nJiBwcm92aWRlcikKK3N0YXRpYyBO
U1VSTCAqbGVhcm5Nb3JlVVJMKFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKIHsKLSAg
ICBpZiAocHJvdmlkZXIgPT0gU3RyaW5nKFNTQlByb3ZpZGVyVGVuY2VudCkpCi0gICAgICAgIHJl
dHVybiB7eyB9LCAiaHR0cHM6Ly93d3cudXJsc2VjLnFxLmNvbS9zdGFuZGFyZC9zMS5odG1sP3Rw
bD1zYWZhcmkifTsKLSAgICByZXR1cm4ge3sgfSwgImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc3Vw
cG9ydC9iaW4vYW5zd2VyLnB5P2Fuc3dlcj0xMDYzMTgifTsKKyAgICBpZiAoW3Jlc3VsdC5wcm92
aWRlciBpc0VxdWFsVG9TdHJpbmc6U1NCUHJvdmlkZXJUZW5jZW50XSkKKyAgICAgICAgcmV0dXJu
IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cudXJsc2VjLnFxLmNvbS9zdGFuZGFy
ZC9zMS5odG1sP3RwbD1zYWZhcmkiXTsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJodHRwczovL3d3dy5nb29nbGUuY29tL3N1cHBvcnQvYmluL2Fuc3dlci5weT9hbnN3ZXI9MTA2
MzE4Il07CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyKiByZXBvcnRBbkVycm9yQmFzZShjb25zdCBT
dHJpbmcmIHByb3ZpZGVyKQorc3RhdGljIGNvbnN0IGNoYXIqIHJlcG9ydEFuRXJyb3JCYXNlKFNT
QlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKIHsKLSAgICBpZiAocHJvdmlkZXIgPT0gU3Ry
aW5nKFNTQlByb3ZpZGVyVGVuY2VudCkpCisgICAgaWYgKFtyZXN1bHQucHJvdmlkZXIgaXNFcXVh
bFRvU3RyaW5nOlNTQlByb3ZpZGVyVGVuY2VudF0pCiAgICAgICAgIHJldHVybiAiaHR0cHM6Ly93
d3cudXJsc2VjLnFxLmNvbS9jb21wbGFpbi5odG1sP3RwbD1zYWZhcmkiOwogICAgIHJldHVybiAi
aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zYWZlYnJvd3NpbmcvcmVwb3J0X2Vycm9yLz90cGw9c2Fm
YXJpIjsKIH0KIAotc3RhdGljIFN0cmluZyBsb2NhbGl6ZWRQcm92aWRlcihjb25zdCBTdHJpbmcm
IHByb3ZpZGVyKQorc3RhdGljIFN0cmluZyBsb2NhbGl6ZWRQcm92aWRlcihTU0JTZXJ2aWNlTG9v
a3VwUmVzdWx0ICpyZXN1bHQpCiB7Ci0gICAgaWYgKHByb3ZpZGVyID09IFN0cmluZyhTU0JQcm92
aWRlclRlbmNlbnQpKQorICAgIGlmIChbcmVzdWx0LnByb3ZpZGVyIGlzRXF1YWxUb1N0cmluZzpT
U0JQcm92aWRlclRlbmNlbnRdKQogICAgICAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiVGVu
Y2VudCBTYWZlIEJyb3dzaW5nIiwgIlRlbmNlbnQgU2FmZSBCcm93c2luZyIpOwogICAgIHJldHVy
biBXRUJfVUlfTlNTVFJJTkcoQCJHb29nbGUgU2FmZSBCcm93c2luZyIsICJHb29nbGUgU2FmZSBC
cm93c2luZyIpOwogfQogCi1TYWZlQnJvd3NpbmdSZXN1bHQ6OlNhZmVCcm93c2luZ1Jlc3VsdChX
ZWJDb3JlOjpVUkwmJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKLSAgICA6
IG1fdXJsKFdURk1vdmUodXJsKSkKLSAgICAsIG1faXNQaGlzaGluZyhbcmVzdWx0IGlzUGhpc2hp
bmddKQotICAgICwgbV9pc01hbHdhcmUoW3Jlc3VsdCBpc01hbHdhcmVdKQotICAgICwgbV9pc1Vu
d2FudGVkU29mdHdhcmUoW3Jlc3VsdCBpc1Vud2FudGVkU29mdHdhcmVdKQotICAgICwgbV9wcm92
aWRlcihbcmVzdWx0IHByb3ZpZGVyXSkKLSAgICAsIG1fbG9jYWxpemVkUHJvdmlkZXJOYW1lKGxv
Y2FsaXplZFByb3ZpZGVyKFtyZXN1bHQgcHJvdmlkZXJdKSkKLSAgICAsIG1fbWFsd2FyZURldGFp
bHNVUkxCYXNlKG1hbHdhcmVEZXRhaWxzQmFzZShbcmVzdWx0IHByb3ZpZGVyXSkpCi0gICAgLCBt
X3JlcG9ydEFuRXJyb3JVUkxCYXNlKHJlcG9ydEFuRXJyb3JCYXNlKFtyZXN1bHQgcHJvdmlkZXJd
KSkKLSAgICAsIG1fbGVhcm5Nb3JlVVJMKGxlYXJuTW9yZShbcmVzdWx0IHByb3ZpZGVyXSkpCisK
K3N0YXRpYyB2b2lkIHJlcGxhY2UoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBO
U1N0cmluZyAqdG9SZXBsYWNlLCBOU1N0cmluZyAqcmVwbGFjZVdpdGgpCit7CisgICAgW3N0cmlu
ZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0
b1JlcGxhY2VdIHdpdGhTdHJpbmc6cmVwbGFjZVdpdGhdOworfQorCitzdGF0aWMgdm9pZCBhZGRM
aW5rQW5kUmVwbGFjZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIE5TU3RyaW5n
ICp0b1JlcGxhY2UsIE5TU3RyaW5nICpyZXBsYWNlV2l0aCwgTlNVUkwgKmxpbmtUYXJnZXQpCit7
CisgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nV2l0aExpbmsgPSBbW1tOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpyZXBsYWNlV2l0aF0g
YXV0b3JlbGVhc2VdOworICAgIFtzdHJpbmdXaXRoTGluayBhZGRBdHRyaWJ1dGVzOkB7CisgICAg
ICAgIE5TTGlua0F0dHJpYnV0ZU5hbWU6IGxpbmtUYXJnZXQsCisgICAgICAgIE5TVW5kZXJsaW5l
U3R5bGVBdHRyaWJ1dGVOYW1lOiBAMQorICAgIH0gcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgcmVwbGFj
ZVdpdGgubGVuZ3RoKV07CisgICAgW3N0cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0
cmluZy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0b1JlcGxhY2VdIHdpdGhBdHRyaWJ1dGVkU3RyaW5n
OnN0cmluZ1dpdGhMaW5rXTsKK30KKworc3RhdGljIE5TVVJMICpyZXBvcnRBbkVycm9yVVJMKGNv
bnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCit7
CisgICAgcmV0dXJuIFdlYkNvcmU6OlVSTCh7IH0sIG1ha2VTdHJpbmcocmVwb3J0QW5FcnJvckJh
c2UocmVzdWx0KSwgIiZ1cmw9IiwgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh1cmwpLCAi
JmhsPSIsIGRlZmF1bHRMYW5ndWFnZSgpKSk7Cit9CisKK3N0YXRpYyBOU1VSTCAqbWFsd2FyZURl
dGFpbHNVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQg
KnJlc3VsdCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6VVJMKHsgfSwgbWFrZVN0cmluZyhtYWx3
YXJlRGV0YWlsc0Jhc2UocmVzdWx0KSwgIiZzaXRlPSIsIHVybC5ob3N0KCksICImaGw9IiwgZGVm
YXVsdExhbmd1YWdlKCkpKTsKK30KKworc3RhdGljIE5TU3RyaW5nICpzYWZlQnJvd3NpbmdUaXRs
ZVRleHQoU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQoreworICAgIGlmIChyZXN1bHQu
aXNQaGlzaGluZykKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIkRlY2VwdGl2ZSBX
ZWJzaXRlIFdhcm5pbmciLCAiUGhpc2hpbmcgd2FybmluZyB0aXRsZSIpOworICAgIGlmIChyZXN1
bHQuaXNNYWx3YXJlKQorICAgICAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiTWFsd2FyZSBX
ZWJzaXRlIFdhcm5pbmciLCAiTWFsd2FyZSB3YXJuaW5nIHRpdGxlIik7CisgICAgQVNTRVJUKHJl
c3VsdC5pc1Vud2FudGVkU29mdHdhcmUpOworICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJX
ZWJzaXRlIFdpdGggSGFybWZ1bCBTb2Z0d2FyZSBXYXJuaW5nIiwgIlVud2FudGVkIHNvZnR3YXJl
IHdhcm5pbmcgdGl0bGUiKTsKK30KKworc3RhdGljIE5TU3RyaW5nICpzYWZlQnJvd3NpbmdXYXJu
aW5nVGV4dChTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQpCit7CisgICAgaWYgKHJlc3Vs
dC5pc1BoaXNoaW5nKQorICAgICAgICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiVGhpcyB3ZWJz
aXRlIG1heSB0cnkgdG8gdHJpY2sgeW91IGludG8gZG9pbmcgc29tZXRoaW5nIGRhbmdlcm91cywg
bGlrZSBpbnN0YWxsaW5nIHNvZnR3YXJlIG9yIGRpc2Nsb3NpbmcgcGVyc29uYWwgb3IgZmluYW5j
aWFsIGluZm9ybWF0aW9uLCBsaWtlIHBhc3N3b3JkcywgcGhvbmUgbnVtYmVycywgb3IgY3JlZGl0
IGNhcmRzLiIsICJQaGlzaGluZyB3YXJuaW5nIik7CisgICAgaWYgKHJlc3VsdC5pc01hbHdhcmUp
CisgICAgICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJUaGlzIHdlYnNpdGUgbWF5IGF0dGVt
cHQgdG8gaW5zdGFsbCBkYW5nZXJvdXMgc29mdHdhcmUsIHdoaWNoIGNvdWxkIGhhcm0geW91ciBj
b21wdXRlciBvciBzdGVhbCB5b3VyIHBlcnNvbmFsIG9yIGZpbmFuY2lhbCBpbmZvcm1hdGlvbiwg
bGlrZSBwYXNzd29yZHMsIHBob3Rvcywgb3IgY3JlZGl0IGNhcmRzLiIsICJNYWx3YXJlIHdhcm5p
bmciKTsKKworICAgIEFTU0VSVChyZXN1bHQuaXNVbndhbnRlZFNvZnR3YXJlKTsKKyAgICByZXR1
cm4gV0VCX1VJX05TU1RSSU5HKEAiVGhpcyB3ZWJzaXRlIG1heSB0cnkgdG8gdHJpY2sgeW91IGlu
dG8gaW5zdGFsbGluZyBzb2Z0d2FyZSB0aGF0IGhhcm1zIHlvdXIgYnJvd3NpbmcgZXhwZXJpZW5j
ZSwgbGlrZSBjaGFuZ2luZyB5b3VyIHNldHRpbmdzIHdpdGhvdXQgeW91ciBwZXJtaXNzaW9uIG9y
IHNob3dpbmcgeW91IHVud2FudGVkIGFkcy4gT25jZSBpbnN0YWxsZWQsIGl0IG1heSBiZSBkaWZm
aWN1bHQgdG8gcmVtb3ZlLiIsICJVbndhbnRlZCBzb2Z0d2FyZSB3YXJuaW5nIik7Cit9CisKK3N0
YXRpYyBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzYWZlQnJvd3NpbmdEZXRhaWxzVGV4dChj
b25zdCBXZWJDb3JlOjpVUkwmIHVybCwgU1NCU2VydmljZUxvb2t1cFJlc3VsdCAqcmVzdWx0KQor
eworICAgIGlmIChyZXN1bHQuaXNQaGlzaGluZykgeworICAgICAgICBOU1N0cmluZyAqcGhpc2hp
bmdEZXNjcmlwdGlvbiA9IFdFQl9VSV9OU1NUUklORyhAIldhcm5pbmdzIGFyZSBzaG93biBmb3Ig
d2Vic2l0ZXMgdGhhdCBoYXZlIGJlZW4gcmVwb3J0ZWQgYXMgZGVjZXB0aXZlLiBEZWNlcHRpdmUg
d2Vic2l0ZXMgdHJ5IHRvIHRyaWNrIHlvdSBpbnRvIGJlbGlldmluZyB0aGV5IGFyZSBsZWdpdGlt
YXRlIHdlYnNpdGVzIHlvdSB0cnVzdC4iLCAiUGhpc2hpbmcgd2FybmluZyBkZXNjcmlwdGlvbiIp
OworICAgICAgICBOU1N0cmluZyAqbGVhcm5Nb3JlID0gV0VCX1VJX05TU1RSSU5HKEAiTGVhcm4g
bW9yZeKApiIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKKyAgICAgICAg
TlNTdHJpbmcgKnBoaXNoaW5nQWN0aW9ucyA9IFdFQl9VSV9OU1NUUklORyhAIklmIHlvdSBiZWxp
ZXZlIHRoaXMgd2Vic2l0ZSBpcyBzYWZlLCB5b3UgY2FuICVyZXBvcnQtYW4tZXJyb3IlLiBPciwg
aWYgeW91IHVuZGVyc3RhbmQgdGhlIHJpc2tzIGludm9sdmVkLCB5b3UgY2FuICVieXBhc3MtbGlu
ayUuIiwgIlBoaXNoaW5nIHdhcm5pbmcgZGVzY3JpcHRpb24iKTsKKyAgICAgICAgTlNTdHJpbmcg
KnJlcG9ydEFuRXJyb3IgPSBXRUJfVUlfTlNTVFJJTkcoQCJyZXBvcnQgYW4gZXJyb3IiLCAiQWN0
aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIik7CisgICAgICAgIE5TU3RyaW5nICp2aXNp
dFVuc2FmZVdlYnNpdGUgPSBXRUJfVUlfTlNTVFJJTkcoQCJ2aXNpdCB0aGlzIHVuc2FmZSB3ZWJz
aXRlIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIpOworCisgICAgICAgIE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIiVAICVAXG5cbiVAIiwgcGhpc2hpbmdEZXNjcmlwdGlvbiwgbGVhcm5Nb3JlLCBw
aGlzaGluZ0FjdGlvbnNdXSBhdXRvcmVsZWFzZV07CisgICAgICAgIGFkZExpbmtBbmRSZXBsYWNl
KGF0dHJpYnV0ZWRTdHJpbmcsIGxlYXJuTW9yZSwgbGVhcm5Nb3JlLCBsZWFybk1vcmVVUkwocmVz
dWx0KSk7CisgICAgICAgIGFkZExpbmtBbmRSZXBsYWNlKGF0dHJpYnV0ZWRTdHJpbmcsIEAiJXJl
cG9ydC1hbi1lcnJvciUiLCByZXBvcnRBbkVycm9yLCByZXBvcnRBbkVycm9yVVJMKHVybCwgcmVz
dWx0KSk7CisgICAgICAgIGFkZExpbmtBbmRSZXBsYWNlKGF0dHJpYnV0ZWRTdHJpbmcsIEAiJWJ5
cGFzcy1saW5rJSIsIHZpc2l0VW5zYWZlV2Vic2l0ZSwgU2FmZUJyb3dzaW5nV2FybmluZzo6dmlz
aXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKSk7CisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVkU3Ry
aW5nOworICAgIH0KKworICAgIGF1dG8gbWFsd2FyZU9yVW53YW50ZWRTb2Z0d2FyZURldGFpbHMg
PSBbJl0gKE5TU3RyaW5nICpkZXNjcmlwdGlvbiwgTlNTdHJpbmcgKnN0YXR1c1N0cmluZ1RvUmVw
bGFjZSwgYm9vbCBjb25maXJtTWFsd2FyZSkgeworICAgICAgICBOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nICptYWx3YXJlRGVzY3JpcHRpb24gPSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpkZXNjcmlwdGlvbl0gYXV0b3JlbGVhc2VdOworICAgICAg
ICByZXBsYWNlKG1hbHdhcmVEZXNjcmlwdGlvbiwgQCIlc2FmZUJyb3dzaW5nUHJvdmlkZXIlIiwg
bG9jYWxpemVkUHJvdmlkZXIocmVzdWx0KSk7CisgICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgKnN0YXR1c0xpbmsgPSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzpXRUJfVUlfTlNTVFJJTkcoQCJ0aGUgc3RhdHVzIG9mIOKAnCVzaXRlJeKA
nSIsICJQYXJ0IG9mIG1hbHdhcmUgZGVzY3JpcHRpb24iKV0gYXV0b3JlbGVhc2VdOworICAgICAg
ICByZXBsYWNlKHN0YXR1c0xpbmssIEAiJXNpdGUlIiwgdXJsLmhvc3QoKS50b1N0cmluZygpKTsK
KyAgICAgICAgYWRkTGlua0FuZFJlcGxhY2UobWFsd2FyZURlc2NyaXB0aW9uLCBzdGF0dXNTdHJp
bmdUb1JlcGxhY2UsIHN0YXR1c0xpbmsuc3RyaW5nLCBtYWx3YXJlRGV0YWlsc1VSTCh1cmwsIHJl
c3VsdCkpOworCisgICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmlmWW91VW5kZXJz
dGFuZCA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
OldFQl9VSV9OU1NUUklORyhAIklmIHlvdSB1bmRlcnN0YW5kIHRoZSByaXNrcyBpbnZvbHZlZCwg
eW91IGNhbiAldmlzaXQtdGhpcy11bnNhZmUtc2l0ZS1saW5rJS4iLCAiQWN0aW9uIGZyb20gc2Fm
ZSBicm93c2luZyB3YXJuaW5nIildIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgYWRkTGlua0FuZFJl
cGxhY2UoaWZZb3VVbmRlcnN0YW5kLCBAIiV2aXNpdC10aGlzLXVuc2FmZS1zaXRlLWxpbmslIiwg
V0VCX1VJX05TU1RSSU5HKEAidmlzaXQgdGhpcyB1bnNhZmUgd2Vic2l0ZSIsICJBY3Rpb24gZnJv
bSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKSwgY29uZmlybU1hbHdhcmUgPyBTYWZlQnJvd3NpbmdX
YXJuaW5nOjpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCkgOiBTYWZlQnJvd3NpbmdXYXJuaW5nOjp2
aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCgpKTsKKworICAgICAgICBbbWFsd2FyZURlc2NyaXB0
aW9uIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6QCJcblxuIl0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgW21h
bHdhcmVEZXNjcmlwdGlvbiBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOmlmWW91VW5kZXJzdGFuZF07
CisgICAgICAgIHJldHVybiBtYWx3YXJlRGVzY3JpcHRpb247CisgICAgfTsKKworICAgIGlmIChy
ZXN1bHQuaXNNYWx3YXJlKQorICAgICAgICByZXR1cm4gbWFsd2FyZU9yVW53YW50ZWRTb2Z0d2Fy
ZURldGFpbHMoV0VCX1VJX05TU1RSSU5HKEAiV2FybmluZ3MgYXJlIHNob3duIGZvciB3ZWJzaXRl
cyB3aGVyZSBtYWxpY2lvdXMgc29mdHdhcmUgaGFzIGJlZW4gZGV0ZWN0ZWQuIFlvdSBjYW4gY2hl
Y2sgdGhlICVzdGF0dXMtbGluayUgb24gdGhlICVzYWZlQnJvd3NpbmdQcm92aWRlciUgZGlhZ25v
c3RpYyBwYWdlLiIsICJNYWx3YXJlIHdhcm5pbmcgZGVzY3JpcHRpb24iKSwgQCIlc3RhdHVzLWxp
bmslIiwgdHJ1ZSk7CisgICAgQVNTRVJUKHJlc3VsdC5pc1Vud2FudGVkU29mdHdhcmUpOworICAg
IHJldHVybiBtYWx3YXJlT3JVbndhbnRlZFNvZnR3YXJlRGV0YWlscyhXRUJfVUlfTlNTVFJJTkco
QCJXYXJuaW5ncyBhcmUgc2hvd24gZm9yIHdlYnNpdGVzIHdoZXJlIGhhcm1mdWwgc29mdHdhcmUg
aGFzIGJlZW4gZGV0ZWN0ZWQuIFlvdSBjYW4gY2hlY2sgJXRoZS1zdGF0dXMtb2Ytc2l0ZSUgb24g
dGhlICVzYWZlQnJvd3NpbmdQcm92aWRlciUgZGlhZ25vc3RpYyBwYWdlLiIsICJVbndhbnRlZCBz
b2Z0d2FyZSB3YXJuaW5nIGRlc2NyaXB0aW9uIiksIEAiJXRoZS1zdGF0dXMtb2Ytc2l0ZSUiLCBm
YWxzZSk7Cit9CisKK1NhZmVCcm93c2luZ1dhcm5pbmc6OlNhZmVCcm93c2luZ1dhcm5pbmcoY29u
c3QgV2ViQ29yZTo6VVJMJiB1cmwsIFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKnJlc3VsdCkKKyAg
ICA6IG1fdGl0bGUoc2FmZUJyb3dzaW5nVGl0bGVUZXh0KHJlc3VsdCkpCisgICAgLCBtX3dhcm5p
bmcoc2FmZUJyb3dzaW5nV2FybmluZ1RleHQocmVzdWx0KSkKKyAgICAsIG1fZGV0YWlscyhzYWZl
QnJvd3NpbmdEZXRhaWxzVGV4dCh1cmwsIHJlc3VsdCkpCiB7CiB9CiAjZW5kaWYKIAorU2FmZUJy
b3dzaW5nV2FybmluZzo6U2FmZUJyb3dzaW5nV2FybmluZyhTdHJpbmcmJiB0aXRsZSwgU3RyaW5n
JiYgd2FybmluZywgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4mJiBkZXRhaWxzKQorICAg
IDogbV90aXRsZShXVEZNb3ZlKHRpdGxlKSkKKyAgICAsIG1fd2FybmluZyhXVEZNb3ZlKHdhcm5p
bmcpKQorICAgICwgbV9kZXRhaWxzKFdURk1vdmUoZGV0YWlscykpCit7Cit9CisKK05TVVJMICpT
YWZlQnJvd3NpbmdXYXJuaW5nOjp2aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCgpCit7CisgICAg
cmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tWaXNpdFVuc2FmZVdlYnNpdGVTZW50aW5l
bCJdOworfQorCitOU1VSTCAqU2FmZUJyb3dzaW5nV2FybmluZzo6Y29uZmlybU1hbHdhcmVTZW50
aW5lbCgpCit7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tDb25maXJtTWFs
d2FyZVNlbnRpbmVsIl07Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyMzgxODMp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBVUkw7CiB9CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewotY2xhc3MgU2FmZUJyb3dzaW5nUmVzdWx0OworY2xhc3MgU2FmZUJyb3dz
aW5nV2FybmluZzsKIGVudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2FkIDogYm9vbDsKIH0KIApA
QCAtNTYsMTAgKzU2LDEwIEBAIHVzaW5nIFJlY3RUeXBlID0gQ0dSZWN0OwogewogQHBhY2thZ2UK
ICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2Fm
ZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+IF9jb21wbGV0aW9uSGFuZGxlcjsKLSAgICBSZWZQdHI8
Y29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQ+IF9yZXN1bHQ7CisgICAgUmVmUHRyPGNv
bnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZz4gX3dhcm5pbmc7CiAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKj4+IF90ZXh0Vmlld3M7CiB9
CiAKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihSZWN0VHlwZSlmcmFtZSBzYWZlQnJv
d3NpbmdSZXN1bHQ6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29t
cGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNv
bnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihSZWN0VHlwZSlmcmFtZSBzYWZlQnJvd3Np
bmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmcmKXdhcm5pbmcgY29t
cGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNv
bnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsK
IAogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3Np
bmdXYXJuaW5nLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbQkocmV2aXNpb24gMjM4MTgzKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW1wb3J0ICJXS1NhZmVCcm93c2luZ1dhcm5pbmcuaCIK
IAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgotI2ltcG9ydCAiU2FmZUJyb3dzaW5nUmVzdWx0Lmgi
CisjaW1wb3J0ICJTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0xvY2Fs
aXplZFN0cmluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvVVJMLmg+CiAjaW1wb3J0IDx3dGYvQmxv
Y2tQdHIuaD4KQEAgLTcxLDE2ICs3MSw2IEBAIGVudW0gY2xhc3MgV2FybmluZ0l0ZW0gOiB1aW50
OF90IHsKICAgICBHb0JhY2tCdXR0b24KIH07CiAKLXN0YXRpYyBOU1VSTCAqY29uZmlybU1hbHdh
cmVTZW50aW5lbCgpCi17Ci0gICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tDb25m
aXJtTWFsd2FyZVNlbnRpbmVsIl07Ci19Ci0KLXN0YXRpYyBOU1VSTCAqdmlzaXRVbnNhZmVXZWJz
aXRlU2VudGluZWwoKQotewotICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIldLVmlz
aXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsKLX0KLQogc3RhdGljIENvbG9yVHlwZSAqY29sb3JG
b3JJdGVtKFdhcm5pbmdJdGVtIGl0ZW0sIFZpZXdUeXBlICp3YXJuaW5nKQogewogICAgIEFTU0VS
VChbd2FybmluZyBpc0tpbmRPZkNsYXNzOltXS1NhZmVCcm93c2luZ1dhcm5pbmcgY2xhc3NdXSk7
CkBAIC0xMzQsMjEgKzEyNCw2IEBAIHN0YXRpYyBDb2xvclR5cGUgKmNvbG9yRm9ySXRlbShXYXJu
aW5nSXQKICAgICByZXR1cm4gbmlsOwogfQogCi1zdGF0aWMgdm9pZCByZXBsYWNlKE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgTlNTdHJpbmcgKnRvUmVwbGFjZSwgTlNTdHJpbmcg
KnJlcGxhY2VXaXRoKQotewotICAgIFtzdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOltz
dHJpbmcuc3RyaW5nIHJhbmdlT2ZTdHJpbmc6dG9SZXBsYWNlXSB3aXRoU3RyaW5nOnJlcGxhY2VX
aXRoXTsKLX0KLQotc3RhdGljIHZvaWQgYWRkTGlua0FuZFJlcGxhY2UoTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyAqc3RyaW5nLCBOU1N0cmluZyAqdG9SZXBsYWNlLCBOU1N0cmluZyAqcmVwbGFj
ZVdpdGgsIE5TVVJMICpsaW5rVGFyZ2V0KQotewotICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgKnN0cmluZ1dpdGhMaW5rID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6cmVwbGFjZVdpdGhdIGF1dG9yZWxlYXNlXTsKLSAgICBbc3RyaW5nV2l0
aExpbmsgYWRkQXR0cmlidXRlczpAewotICAgICAgICBOU0xpbmtBdHRyaWJ1dGVOYW1lOiBsaW5r
VGFyZ2V0LAotICAgICAgICBOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZTogQDEKLSAgICB9
IHJhbmdlOk5TTWFrZVJhbmdlKDAsIHJlcGxhY2VXaXRoLmxlbmd0aCldOwotICAgIFtzdHJpbmcg
cmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOltzdHJpbmcuc3RyaW5nIHJhbmdlT2ZTdHJpbmc6dG9S
ZXBsYWNlXSB3aXRoQXR0cmlidXRlZFN0cmluZzpzdHJpbmdXaXRoTGlua107Ci19Ci0KIEBpbnRl
cmZhY2UgV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlvblBvaW50IDogVmlld1R5cGUKIEBlbmQKIApA
QCAtMTk4LDczICsxNzMsNiBAQCAtIChOU1NpemUpaW50cmluc2ljQ29udGVudFNpemUKIAogQGVu
ZAogCi1zdGF0aWMgTlNVUkwgKnJlcG9ydEFuRXJyb3JVUkwoY29uc3QgV2ViS2l0OjpTYWZlQnJv
d3NpbmdSZXN1bHQmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6VVJMKHsgfSwgbWFr
ZVN0cmluZyhyZXN1bHQucmVwb3J0QW5FcnJvclVSTEJhc2UoKSwgIiZ1cmw9IiwgZW5jb2RlV2l0
aFVSTEVzY2FwZVNlcXVlbmNlcyhyZXN1bHQudXJsKCkpLCAiJmhsPSIsIGRlZmF1bHRMYW5ndWFn
ZSgpKSk7Ci19Ci0KLXN0YXRpYyBOU1VSTCAqbWFsd2FyZURldGFpbHNVUkwoY29uc3QgV2ViS2l0
OjpTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6VVJM
KHsgfSwgbWFrZVN0cmluZyhyZXN1bHQubWFsd2FyZURldGFpbHNVUkxCYXNlKCksICImc2l0ZT0i
LCByZXN1bHQudXJsKCkuaG9zdCgpLCAiJmhsPSIsIGRlZmF1bHRMYW5ndWFnZSgpKSk7Ci19Ci0K
LXN0YXRpYyBOU1N0cmluZyAqdGl0bGVUZXh0KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVz
dWx0JiByZXN1bHQpCi17Ci0gICAgaWYgKHJlc3VsdC5pc1BoaXNoaW5nKCkpCi0gICAgICAgIHJl
dHVybiBXRUJfVUlfTlNTVFJJTkcoQCJEZWNlcHRpdmUgV2Vic2l0ZSBXYXJuaW5nIiwgIlBoaXNo
aW5nIHdhcm5pbmcgdGl0bGUiKTsKLSAgICBpZiAocmVzdWx0LmlzTWFsd2FyZSgpKQotICAgICAg
ICByZXR1cm4gV0VCX1VJX05TU1RSSU5HKEAiTWFsd2FyZSBXZWJzaXRlIFdhcm5pbmciLCAiTWFs
d2FyZSB3YXJuaW5nIHRpdGxlIik7Ci0gICAgQVNTRVJUKHJlc3VsdC5pc1Vud2FudGVkU29mdHdh
cmUoKSk7Ci0gICAgcmV0dXJuIFdFQl9VSV9OU1NUUklORyhAIldlYnNpdGUgV2l0aCBIYXJtZnVs
IFNvZnR3YXJlIFdhcm5pbmciLCAiVW53YW50ZWQgc29mdHdhcmUgd2FybmluZyB0aXRsZSIpOwot
fQotCi1zdGF0aWMgTlNTdHJpbmcgKndhcm5pbmdUZXh0KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dz
aW5nUmVzdWx0JiByZXN1bHQpCi17Ci0gICAgaWYgKHJlc3VsdC5pc1BoaXNoaW5nKCkpCi0gICAg
ICAgIHJldHVybiBXRUJfVUlfTlNTVFJJTkcoQCJUaGlzIHdlYnNpdGUgbWF5IHRyeSB0byB0cmlj
ayB5b3UgaW50byBkb2luZyBzb21ldGhpbmcgZGFuZ2Vyb3VzLCBsaWtlIGluc3RhbGxpbmcgc29m
dHdhcmUgb3IgZGlzY2xvc2luZyBwZXJzb25hbCBvciBmaW5hbmNpYWwgaW5mb3JtYXRpb24sIGxp
a2UgcGFzc3dvcmRzLCBwaG9uZSBudW1iZXJzLCBvciBjcmVkaXQgY2FyZHMuIiwgIlBoaXNoaW5n
IHdhcm5pbmciKTsKLSAgICBpZiAocmVzdWx0LmlzTWFsd2FyZSgpKQotICAgICAgICByZXR1cm4g
V0VCX1VJX05TU1RSSU5HKEAiVGhpcyB3ZWJzaXRlIG1heSBhdHRlbXB0IHRvIGluc3RhbGwgZGFu
Z2Vyb3VzIHNvZnR3YXJlLCB3aGljaCBjb3VsZCBoYXJtIHlvdXIgY29tcHV0ZXIgb3Igc3RlYWwg
eW91ciBwZXJzb25hbCBvciBmaW5hbmNpYWwgaW5mb3JtYXRpb24sIGxpa2UgcGFzc3dvcmRzLCBw
aG90b3MsIG9yIGNyZWRpdCBjYXJkcy4iLCAiTWFsd2FyZSB3YXJuaW5nIik7Ci0gICAgQVNTRVJU
KHJlc3VsdC5pc1Vud2FudGVkU29mdHdhcmUoKSk7Ci0gICAgcmV0dXJuIFdFQl9VSV9OU1NUUklO
RyhAIlRoaXMgd2Vic2l0ZSBtYXkgdHJ5IHRvIHRyaWNrIHlvdSBpbnRvIGluc3RhbGxpbmcgc29m
dHdhcmUgdGhhdCBoYXJtcyB5b3VyIGJyb3dzaW5nIGV4cGVyaWVuY2UsIGxpa2UgY2hhbmdpbmcg
eW91ciBzZXR0aW5ncyB3aXRob3V0IHlvdXIgcGVybWlzc2lvbiBvciBzaG93aW5nIHlvdSB1bndh
bnRlZCBhZHMuIE9uY2UgaW5zdGFsbGVkLCBpdCBtYXkgYmUgZGlmZmljdWx0IHRvIHJlbW92ZS4i
LCAiVW53YW50ZWQgc29mdHdhcmUgd2FybmluZyIpOwotfQotCi1zdGF0aWMgTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyAqZGV0YWlsc1RleHQoY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1
bHQmIHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0LmlzUGhpc2hpbmcoKSkgewotICAgICAgICBO
U1N0cmluZyAqcGhpc2hpbmdEZXNjcmlwdGlvbiA9IFdFQl9VSV9OU1NUUklORyhAIldhcm5pbmdz
IGFyZSBzaG93biBmb3Igd2Vic2l0ZXMgdGhhdCBoYXZlIGJlZW4gcmVwb3J0ZWQgYXMgZGVjZXB0
aXZlLiBEZWNlcHRpdmUgd2Vic2l0ZXMgdHJ5IHRvIHRyaWNrIHlvdSBpbnRvIGJlbGlldmluZyB0
aGV5IGFyZSBsZWdpdGltYXRlIHdlYnNpdGVzIHlvdSB0cnVzdC4iLCAiUGhpc2hpbmcgd2Fybmlu
ZyBkZXNjcmlwdGlvbiIpOwotICAgICAgICBOU1N0cmluZyAqbGVhcm5Nb3JlID0gV0VCX1VJX05T
U1RSSU5HKEAiTGVhcm4gbW9yZeKApiIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5p
bmciKTsKLSAgICAgICAgTlNTdHJpbmcgKnBoaXNoaW5nQWN0aW9ucyA9IFdFQl9VSV9OU1NUUklO
RyhAIklmIHlvdSBiZWxpZXZlIHRoaXMgd2Vic2l0ZSBpcyBzYWZlLCB5b3UgY2FuICVyZXBvcnQt
YW4tZXJyb3IlLiBPciwgaWYgeW91IHVuZGVyc3RhbmQgdGhlIHJpc2tzIGludm9sdmVkLCB5b3Ug
Y2FuICVieXBhc3MtbGluayUuIiwgIlBoaXNoaW5nIHdhcm5pbmcgZGVzY3JpcHRpb24iKTsKLSAg
ICAgICAgTlNTdHJpbmcgKnJlcG9ydEFuRXJyb3IgPSBXRUJfVUlfTlNTVFJJTkcoQCJyZXBvcnQg
YW4gZXJyb3IiLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIik7Ci0gICAgICAg
IE5TU3RyaW5nICp2aXNpdFVuc2FmZVdlYnNpdGUgPSBXRUJfVUlfTlNTVFJJTkcoQCJ2aXNpdCB0
aGlzIHVuc2FmZSB3ZWJzaXRlIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIp
OwotICAgICAgICAKLSAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRl
ZFN0cmluZyA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgJUBcblxuJUAiLCBwaGlzaGluZ0Rl
c2NyaXB0aW9uLCBsZWFybk1vcmUsIHBoaXNoaW5nQWN0aW9uc11dIGF1dG9yZWxlYXNlXTsKLSAg
ICAgICAgYWRkTGlua0FuZFJlcGxhY2UoYXR0cmlidXRlZFN0cmluZywgbGVhcm5Nb3JlLCBsZWFy
bk1vcmUsIHJlc3VsdC5sZWFybk1vcmVVUkwoKSk7Ci0gICAgICAgIGFkZExpbmtBbmRSZXBsYWNl
KGF0dHJpYnV0ZWRTdHJpbmcsIEAiJXJlcG9ydC1hbi1lcnJvciUiLCByZXBvcnRBbkVycm9yLCBy
ZXBvcnRBbkVycm9yVVJMKHJlc3VsdCkpOwotICAgICAgICBhZGRMaW5rQW5kUmVwbGFjZShhdHRy
aWJ1dGVkU3RyaW5nLCBAIiVieXBhc3MtbGluayUiLCB2aXNpdFVuc2FmZVdlYnNpdGUsIHZpc2l0
VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkpOwotICAgICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmlu
ZzsKLSAgICB9Ci0gICAgCi0gICAgYXV0byBtYWx3YXJlT3JVbndhbnRlZFNvZnR3YXJlRGV0YWls
cyA9IFtdIChjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0LCBOU1N0cmlu
ZyAqZGVzY3JpcHRpb24sIE5TU3RyaW5nICpzdGF0dXNTdHJpbmdUb1JlcGxhY2UsIGJvb2wgY29u
ZmlybU1hbHdhcmUpIHsKLSAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqbWFsd2Fy
ZURlc2NyaXB0aW9uID0gW1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdp
dGhTdHJpbmc6ZGVzY3JpcHRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgcmVwbGFjZShtYWx3
YXJlRGVzY3JpcHRpb24sIEAiJXNhZmVCcm93c2luZ1Byb3ZpZGVyJSIsIHJlc3VsdC5sb2NhbGl6
ZWRQcm92aWRlck5hbWUoKSk7Ci0gICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0
YXR1c0xpbmsgPSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpXRUJfVUlfTlNTVFJJTkcoQCJ0aGUgc3RhdHVzIG9mIOKAnCVzaXRlJeKAnSIsICJQYXJ0
IG9mIG1hbHdhcmUgZGVzY3JpcHRpb24iKV0gYXV0b3JlbGVhc2VdOwotICAgICAgICByZXBsYWNl
KHN0YXR1c0xpbmssIEAiJXNpdGUlIiwgcmVzdWx0LnVybCgpLmhvc3QoKS50b1N0cmluZygpKTsK
LSAgICAgICAgYWRkTGlua0FuZFJlcGxhY2UobWFsd2FyZURlc2NyaXB0aW9uLCBzdGF0dXNTdHJp
bmdUb1JlcGxhY2UsIHN0YXR1c0xpbmsuc3RyaW5nLCBtYWx3YXJlRGV0YWlsc1VSTChyZXN1bHQp
KTsKLSAgICAgICAgCi0gICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmlmWW91VW5k
ZXJzdGFuZCA9IFtbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOldFQl9VSV9OU1NUUklORyhAIklmIHlvdSB1bmRlcnN0YW5kIHRoZSByaXNrcyBpbnZvbHZl
ZCwgeW91IGNhbiAldmlzaXQtdGhpcy11bnNhZmUtc2l0ZS1saW5rJS4iLCAiQWN0aW9uIGZyb20g
c2FmZSBicm93c2luZyB3YXJuaW5nIildIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgYWRkTGlua0Fu
ZFJlcGxhY2UoaWZZb3VVbmRlcnN0YW5kLCBAIiV2aXNpdC10aGlzLXVuc2FmZS1zaXRlLWxpbmsl
IiwgV0VCX1VJX05TU1RSSU5HKEAidmlzaXQgdGhpcyB1bnNhZmUgd2Vic2l0ZSIsICJBY3Rpb24g
ZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKSwgY29uZmlybU1hbHdhcmUgPyBjb25maXJtTWFs
d2FyZVNlbnRpbmVsKCkgOiB2aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCgpKTsKLSAgICAgICAg
Ci0gICAgICAgIFttYWx3YXJlRGVzY3JpcHRpb24gYXBwZW5kQXR0cmlidXRlZFN0cmluZzpbW1tO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIlxuXG4iXSBh
dXRvcmVsZWFzZV1dOwotICAgICAgICBbbWFsd2FyZURlc2NyaXB0aW9uIGFwcGVuZEF0dHJpYnV0
ZWRTdHJpbmc6aWZZb3VVbmRlcnN0YW5kXTsKLSAgICAgICAgcmV0dXJuIG1hbHdhcmVEZXNjcmlw
dGlvbjsKLSAgICB9OwotICAgIAotICAgIGlmIChyZXN1bHQuaXNNYWx3YXJlKCkpCi0gICAgICAg
IHJldHVybiBtYWx3YXJlT3JVbndhbnRlZFNvZnR3YXJlRGV0YWlscyhyZXN1bHQsIFdFQl9VSV9O
U1NUUklORyhAIldhcm5pbmdzIGFyZSBzaG93biBmb3Igd2Vic2l0ZXMgd2hlcmUgbWFsaWNpb3Vz
IHNvZnR3YXJlIGhhcyBiZWVuIGRldGVjdGVkLiBZb3UgY2FuIGNoZWNrIHRoZSAlc3RhdHVzLWxp
bmslIG9uIHRoZSAlc2FmZUJyb3dzaW5nUHJvdmlkZXIlIGRpYWdub3N0aWMgcGFnZS4iLCAiTWFs
d2FyZSB3YXJuaW5nIGRlc2NyaXB0aW9uIiksIEAiJXN0YXR1cy1saW5rJSIsIHRydWUpOwotICAg
IEFTU0VSVChyZXN1bHQuaXNVbndhbnRlZFNvZnR3YXJlKCkpOwotICAgIHJldHVybiBtYWx3YXJl
T3JVbndhbnRlZFNvZnR3YXJlRGV0YWlscyhyZXN1bHQsIFdFQl9VSV9OU1NUUklORyhAIldhcm5p
bmdzIGFyZSBzaG93biBmb3Igd2Vic2l0ZXMgd2hlcmUgaGFybWZ1bCBzb2Z0d2FyZSBoYXMgYmVl
biBkZXRlY3RlZC4gWW91IGNhbiBjaGVjayAldGhlLXN0YXR1cy1vZi1zaXRlJSBvbiB0aGUgJXNh
ZmVCcm93c2luZ1Byb3ZpZGVyJSBkaWFnbm9zdGljIHBhZ2UuIiwgIlVud2FudGVkIHNvZnR3YXJl
IHdhcm5pbmcgZGVzY3JpcHRpb24iKSwgQCIldGhlLXN0YXR1cy1vZi1zaXRlJSIsIGZhbHNlKTsK
LX0KLQogc3RhdGljIEJ1dHRvblR5cGUgKm1ha2VCdXR0b24oV2FybmluZ0l0ZW0gaXRlbSwgV0tT
YWZlQnJvd3NpbmdXYXJuaW5nICp3YXJuaW5nLCBTRUwgYWN0aW9uKQogewogICAgIE5TU3RyaW5n
ICp0aXRsZSA9IG5pbDsKQEAgLTMyNSwxNCArMjMzLDE0IEBAIC0gKGluc3RhbmNldHlwZSlpbml0
V2l0aEF0dHJpYnV0ZWRTdHJpbmcKIAogQGltcGxlbWVudGF0aW9uIFdLU2FmZUJyb3dzaW5nV2Fy
bmluZwogCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooUmVjdFR5cGUpZnJhbWUgc2Fm
ZUJyb3dzaW5nUmVzdWx0Oihjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYpcmVzdWx0
IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0
OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRs
ZXIKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihSZWN0VHlwZSlmcmFtZSBzYWZlQnJv
d3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmcmKXdhcm5pbmcg
Y29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6
OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxl
cgogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKSB7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpZZXMp
OwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KICAgICBfY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBfcmVzdWx0ID0gbWFrZVJlZihyZXN1bHQp
OworICAgIF93YXJuaW5nID0gbWFrZVJlZih3YXJuaW5nKTsKICAgICBzZXRCYWNrZ3JvdW5kKHNl
bGYsIGNvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6QmFja2dyb3VuZCwgc2VsZikpOwogI2lmIFBM
QVRGT1JNKE1BQykKICAgICBbc2VsZiBhZGRDb250ZW50XTsKQEAgLTM0Myw4ICsyNTEsOCBAQCAt
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooUmVjdFR5cGUpCiAtICh2b2lkKWFkZENvbnRl
bnQKIHsKICAgICBhdXRvIGV4Y2xhbWF0aW9uUG9pbnQgPSBbW1dLU2FmZUJyb3dzaW5nRXhjbGFt
YXRpb25Qb2ludCBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRvIHRpdGxlID0gbWFrZVRpdGxl
TGFiZWwodGl0bGVUZXh0KCpfcmVzdWx0KSwgc2VsZik7Ci0gICAgYXV0byB3YXJuaW5nID0gW1tb
V0tTYWZlQnJvd3NpbmdUZXh0VmlldyBhbGxvY10gaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nOltb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6d2FybmluZ1RleHQoKl9y
ZXN1bHQpIGF0dHJpYnV0ZXM6QHsgTlNGb250QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgc3lzdGVt
Rm9udE9mU2l6ZTp0ZXh0U2l6ZV0gfV0gYXV0b3JlbGVhc2VdIGZvcldhcm5pbmc6c2VsZl0gYXV0
b3JlbGVhc2VdOworICAgIGF1dG8gdGl0bGUgPSBtYWtlVGl0bGVMYWJlbChfd2FybmluZy0+dGl0
bGUoKSwgc2VsZik7CisgICAgYXV0byB3YXJuaW5nID0gW1tbV0tTYWZlQnJvd3NpbmdUZXh0Vmll
dyBhbGxvY10gaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nOltbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6X3dhcm5pbmctPndhcm5pbmcoKSBhdHRyaWJ1dGVzOkB7IE5T
Rm9udEF0dHJpYnV0ZU5hbWU6W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdIH1d
IGF1dG9yZWxlYXNlXSBmb3JXYXJuaW5nOnNlbGZdIGF1dG9yZWxlYXNlXTsKICAgICBhdXRvIHNo
b3dEZXRhaWxzID0gbWFrZUJ1dHRvbihXYXJuaW5nSXRlbTo6U2hvd0RldGFpbHNCdXR0b24sIHNl
bGYsIEBzZWxlY3RvcihzaG93RGV0YWlsc0NsaWNrZWQpKTsKICAgICBhdXRvIGdvQmFjayA9IG1h
a2VCdXR0b24oV2FybmluZ0l0ZW06OkdvQmFja0J1dHRvbiwgc2VsZiwgQHNlbGVjdG9yKGdvQmFj
a0NsaWNrZWQpKTsKICAgICBhdXRvIGJveCA9IFtbVmlld1R5cGUgbmV3XSBhdXRvcmVsZWFzZV07
CkBAIC0zOTUsNyArMzAzLDcgQEAgLSAodm9pZClzaG93RGV0YWlsc0NsaWNrZWQKICAgICBCdXR0
b25UeXBlICpzaG93RGV0YWlscyA9IGJveC5zdWJ2aWV3cy5sYXN0T2JqZWN0OwogICAgIFtzaG93
RGV0YWlscyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKIAotICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgKnRleHQgPSBkZXRhaWxzVGV4dCgqX3Jlc3VsdCk7CisgICAgTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyAqdGV4dCA9IFtbX3dhcm5pbmctPmRldGFpbHMoKSBtdXRhYmxlQ29weV0gYXV0
b3JlbGVhc2VdOwogICAgIFt0ZXh0IGFkZEF0dHJpYnV0ZXM6QHsgTlNGb250QXR0cmlidXRlTmFt
ZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0gfSByYW5nZTpOU01ha2VSYW5n
ZSgwLCB0ZXh0Lmxlbmd0aCldOwogICAgIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKmRldGFpbHMg
PSBbW1tXS1NhZmVCcm93c2luZ1RleHRWaWV3IGFsbG9jXSBpbml0V2l0aEF0dHJpYnV0ZWRTdHJp
bmc6dGV4dCBmb3JXYXJuaW5nOnNlbGZdIGF1dG9yZWxlYXNlXTsKICAgICBbX3RleHRWaWV3cyBh
ZGRPYmplY3Q6ZGV0YWlsc107CkBAIC01MDMsMTAgKzQxMSwxMCBAQCAtICh2b2lkKWNsaWNrZWRP
bkxpbms6KE5TVVJMICopbGluawogICAgIGlmICghX2NvbXBsZXRpb25IYW5kbGVyKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoW2xpbmsgaXNFcXVhbDp2aXNpdFVuc2FmZVdlYnNpdGVTZW50
aW5lbCgpXSkKKyAgICBpZiAoW2xpbmsgaXNFcXVhbDpXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5p
bmc6OnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCldKQogICAgICAgICByZXR1cm4gX2NvbXBs
ZXRpb25IYW5kbGVyKFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpZZXMpOwogCi0gICAgaWYg
KFtsaW5rIGlzRXF1YWw6Y29uZmlybU1hbHdhcmVTZW50aW5lbCgpXSkgeworICAgIGlmIChbbGlu
ayBpc0VxdWFsOldlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6Y29uZmlybU1hbHdhcmVTZW50
aW5lbCgpXSkgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgYXV0byBhbGVydCA9IGFkb3B0
TlMoW05TQWxlcnQgbmV3XSk7CiAgICAgICAgIFthbGVydCBzZXRNZXNzYWdlVGV4dDpXRUJfVUlf
TlNTVFJJTkcoQCJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gZ28gdG8gdGhpcyBzaXRlPyIsICJN
YWx3YXJlIGNvbmZpcm1hdGlvbiBkaWFsb2cgdGl0bGUiKV07CkBAIC01NDEsNyArNDQ5LDcgQEAg
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXR0cmlidXRlZFN0cmluZwogICAgIHNlbGYuZGVsZWdh
dGUgPSB3YXJuaW5nOwogCiAgICAgQ29sb3JUeXBlICpmb3JlZ3JvdW5kQ29sb3IgPSBjb2xvckZv
ckl0ZW0oV2FybmluZ0l0ZW06Ok1lc3NhZ2VUZXh0LCB3YXJuaW5nKTsKLSAgICBOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbYXR0cmlidXRlZFN0cmluZyBtdXRhYmxlQ29weV07
CisgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1thdHRyaWJ1dGVkU3Ry
aW5nIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07CiAgICAgW3N0cmluZyBhZGRBdHRyaWJ1dGVz
OkB7IE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSA6IGZvcmVncm91bmRDb2xvciB9IHJh
bmdlOk5TTWFrZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgpXTsKICAgICBbc2VsZiBzZXRCYWNrZ3Jv
dW5kQ29sb3I6Y29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpCb3hCYWNrZ3JvdW5kLCB3YXJuaW5n
KV07CiAgICAgW3NlbGYgc2V0TGlua1RleHRBdHRyaWJ1dGVzOkB7IE5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZSA6IGZvcmVncm91bmRDb2xvciB9XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCShyZXZpc2lvbiAy
MzgxODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2Nv
YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2ltcG9ydCAiRGF0YURldGVj
dGlvblJlc3VsdC5oIgogI2ltcG9ydCAiTG9hZFBhcmFtZXRlcnMuaCIKICNpbXBvcnQgIlBhZ2VD
bGllbnQuaCIKLSNpbXBvcnQgIlNhZmVCcm93c2luZ1Jlc3VsdC5oIgogI2ltcG9ydCAiU2FmZUJy
b3dzaW5nU1BJLmgiCisjaW1wb3J0ICJTYWZlQnJvd3NpbmdXYXJuaW5nLmgiCiAjaW1wb3J0ICJX
ZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0l0ZW0uaD4KICNpbXBvcnQg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTg0LDEyICs4NCwxMyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6YmVnaW5TYWZlQnJvd3NpbmdDaGVjCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBOU0FycmF5PFNTQlNlcnZpY2VMb29rdXBSZXN1
bHQgKj4gKnJlc3VsdHMgPSBbcmVzdWx0IHNlcnZpY2VMb29rdXBSZXN1bHRzXTsKLSAgICAgICAg
ICAgIFZlY3RvcjxSZWY8U2FmZUJyb3dzaW5nUmVzdWx0Pj4gcmVzdWx0c1ZlY3RvcjsKLSAgICAg
ICAgICAgIHJlc3VsdHNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShbcmVzdWx0cyBjb3Vu
dF0pOwotICAgICAgICAgICAgZm9yIChTU0JTZXJ2aWNlTG9va3VwUmVzdWx0ICpyZXN1bHQgaW4g
cmVzdWx0cykKLSAgICAgICAgICAgICAgICByZXN1bHRzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChT
YWZlQnJvd3NpbmdSZXN1bHQ6OmNyZWF0ZShVUkwodXJsKSwgcmVzdWx0KSk7Ci0gICAgICAgICAg
ICBsaXN0ZW5lci0+ZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoV1RGTW92ZShyZXN1bHRz
VmVjdG9yKSk7CisgICAgICAgICAgICBmb3IgKFNTQlNlcnZpY2VMb29rdXBSZXN1bHQgKmxvb2t1
cFJlc3VsdCBpbiBbcmVzdWx0IHNlcnZpY2VMb29rdXBSZXN1bHRzXSkgeworICAgICAgICAgICAg
ICAgIGlmIChsb29rdXBSZXN1bHQuaXNQaGlzaGluZyB8fCBsb29rdXBSZXN1bHQuaXNNYWx3YXJl
IHx8IGxvb2t1cFJlc3VsdC5pc1Vud2FudGVkU29mdHdhcmUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbGlzdGVuZXItPmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKFNhZmVCcm93c2luZ1dh
cm5pbmc6OmNyZWF0ZSh1cmwsIGxvb2t1cFJlc3VsdCkpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGlz
dGVuZXItPmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKHsgfSk7CiAgICAgICAgIH0pOwog
ICAgIH0pLmdldCgpXTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLmgJKHJldmlzaW9uIDIzODE4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaWV3U2NhbGUoQ0dGbG9hdCk7CiAgICAgQ0dGbG9h
dCB2aWV3U2NhbGUoKSBjb25zdDsKIAotICAgIHZvaWQgc2hvd1NhZmVCcm93c2luZ1dhcm5pbmco
Y29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50
PENvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJik7CisgICAgdm9pZCBzaG93
U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdXYXJuaW5nJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWYXJpYW50PENvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYm
KT4mJik7CiAgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKTsKIAogICAgIFdLTGF5
b3V0TW9kZSBsYXlvdXRNb2RlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJWaWV3SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNpb24gMjM4MTgzKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2
MDYsMTIgKzE2MDYsMTIgQEAgYm9vbCBXZWJWaWV3SW1wbDo6cmVzaWduRmlyc3RSZXNwb25kZXIo
KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzaG93U2FmZUJyb3dz
aW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWYXJpYW50PENvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdX
YXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1dhcm5pbmcmIHdhcm5pbmcsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmFyaWFudDxDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFtX3ZpZXcpCiAgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcihDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7CiAKLSAgICBtX3NhZmVC
cm93c2luZ1dhcm5pbmcgPSBhZG9wdE5TKFtbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGFsbG9jXSBp
bml0V2l0aEZyYW1lOlttX3ZpZXcgYm91bmRzXSBzYWZlQnJvd3NpbmdSZXN1bHQ6cmVzdWx0IGNv
bXBsZXRpb25IYW5kbGVyOlt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXN1bHQpIG11
dGFibGUgeworICAgIG1fc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0TlMoW1tXS1NhZmVCcm93
c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W21fdmlldyBib3VuZHNdIHNhZmVCcm93
c2luZ1dhcm5pbmc6d2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKHdlYWtUaGlzKQogICAg
ICAgICAgICAgW3N0ZDo6ZXhjaGFuZ2Uod2Vha1RoaXMtPm1fc2FmZUJyb3dzaW5nV2FybmluZywg
bnVsbHB0cikgcmVtb3ZlRnJvbVN1cGVydmlld107CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUocmVzdWx0KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvUGFnZUNsaWVudEltcGxJT1MuaAkocmV2aXNpb24gMjM4MTgzKQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NSw3ICsxMTUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9yKFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24pIG92ZXJyaWRlOwogICAg
IHZvaWQgc2V0VGV4dEluZGljYXRvckFuaW1hdGlvblByb2dyZXNzKGZsb2F0KSBvdmVycmlkZTsK
IAotICAgIHZvaWQgc2hvd1NhZmVCcm93c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVz
dWx0JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNh
ZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNob3dTYWZl
QnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1dhcm5pbmcmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVS
TD4mJik+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29u
c3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkocmV2aXNpb24gMjM4MTgzKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzMsMTAgKzQ3MywxMCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRl
ckFjY2VsZXJhdGVkQ29tCiB7CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJv
d3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6
OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93
U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdXYXJuaW5nJiB3YXJuaW5nLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQs
IFdlYkNvcmU6OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKGF1dG8g
d2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKLSAgICAgICAgW3dlYlZpZXcgX3Nob3dTYWZlQnJv
d3NpbmdXYXJuaW5nOnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV07CisgICAgICAgIFt3ZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzp3YXJu
aW5nIGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXTsKICAgICBl
bHNlCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6Tm8pOwog
fQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
TWFjLmgJKHJldmlzaW9uIDIzODE4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9Q
YWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOwogICAgIHZv
aWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpIG92ZXJyaWRl
OwogICAgIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaG93
U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6
OlVSTD4mJik+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2hvd1NhZmVCcm93c2luZ1dhcm5pbmco
Y29uc3QgU2FmZUJyb3dzaW5nV2FybmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFu
dDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSBvdmVycmlkZTsKICAgICAK
ICNpZiBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkocmV2aXNpb24gMjM4MTgzKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC00ODksMTEgKzQ4OSwxMSBAQCBSZWY8VmFsaWRhdGlvbkJ1YmJsZT4gUGFnZUNsaWVudEltcGw6
OmNyCiAgICAgcmV0dXJuIFZhbGlkYXRpb25CdWJibGU6OmNyZWF0ZShtX3ZpZXcsIG1lc3NhZ2Us
IHNldHRpbmdzKTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dh
cm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJv
d3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1dhcm5pbmcmIHdhcm5pbmcsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29y
ZTo6VVJMPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIW1faW1wbCkKICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsK
LSAgICBtX2ltcGwtPnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKHJlc3VsdCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgIG1faW1wbC0+c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcod2Fy
bmluZywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzgxODMpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDY0LDcgKzEwNjQsNyBAQAogCQk1QzlFNTY4MzFERjdGMUIzMDBDOUVFMzMgLyog
V0tXZWJzaXRlUG9saWNpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDOUU1NjgxMURGN0YwNTUwMEM5RUUzMyAvKiBXS1dlYnNpdGVQb2xpY2llcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDQTI2
RDgxMjE3QUJENUIwMEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQTI2RDgwMjE3QUJCQjYwMEY5
N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcuaCAqLzsgfTsKIAkJNUNBMjZEODMyMTdBRDFC
ODAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5nV2FybmluZy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQTI2RDdGMjE3QUJCQjYwMEY5N0EzNSAvKiBX
S1NhZmVCcm93c2luZ1dhcm5pbmcubW0gKi87IH07Ci0JCTVDQTk4NTRBMjEwQkVCNjQwMDU3RUI2
QiAvKiBTYWZlQnJvd3NpbmdSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDQTk4NTQ5MjEwQkVCNUEwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdS
ZXN1bHQuaCAqLzsgfTsKKwkJNUNBOTg1NEEyMTBCRUI2NDAwNTdFQjZCIC8qIFNhZmVCcm93c2lu
Z1dhcm5pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDQTk4NTQ5MjEwQkVCNUEwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggKi87IH07
CiAJCTVDQURERTA1MjE1MDQ2QkQwMDY3RDMwOSAvKiBXS1dlYlByb2Nlc3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNzQzMDBFMjE1MDA0OTIwMDRC
RkExNyAvKiBXS1dlYlByb2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1Q0FGREU0NTIxMzA4NDYzMDBCMUY3RTEgLyogX1dLSW5zcGVjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0FGREU0
MjIxMzA4NDM1MDBCMUY3RTEgLyogX1dLSW5zcGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNBRkRFNDcyMTMwODQ2QTAwQjFGN0UxIC8q
IF9XS0luc3BlY3RvckludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0FGREU0NDIxMzA4NDM2MDBCMUY3RTEgLyogX1dLSW5zcGVjdG9ySW50
ZXJuYWwuaCAqLzsgfTsKQEAgLTM0NTMsOCArMzQ1Myw4IEBACiAJCTVDOUU1NjgxMURGN0YwNTUw
MEM5RUUzMyAvKiBXS1dlYnNpdGVQb2xpY2llcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS1dlYnNpdGVQb2xpY2llcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1Q0EyNkQ3RjIxN0FCQkI2MDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tTYWZlQnJvd3NpbmdXYXJu
aW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0EyNkQ4MDIxN0FCQkI2MDBG
OTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLU2FmZUJyb3dzaW5nV2FybmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nUmVzdWx0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhZmVCcm93c2luZ1Jlc3VsdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0E5ODU0QjIxMEJFQjczMDA1N0VCNkIgLyog
U2FmZUJyb3dzaW5nUmVzdWx0Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTYWZlQnJvd3NpbmdSZXN1bHRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUNBOTg1NDkyMTBCRUI1QTAwNTdFQjZCIC8qIFNhZmVCcm93c2luZ1dhcm5p
bmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FmZUJyb3dzaW5nV2Fybmlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0E5ODU0QjIxMEJFQjczMDA1N0VC
NkIgLyogU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1Q0FEREUwRDIxNTFBQTAxMDA2N0QzMDkgLyogQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLmg7IHBhdGggPSBBdXRoZW50
aWNhdGlvbi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDQUZERTQyMjEzMDg0MzUwMEIxRjdFMSAvKiBfV0tJbnNwZWN0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLSW5zcGVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQUZERTQzMjEzMDg0MzYwMEIxRjdFMSAvKiBf
V0tJbnNwZWN0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBf
V0tJbnNwZWN0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjgyLDcgKzUy
ODIsNyBAQAogCQkJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLywKIAkJCQk4MzdBNjYwMDIwRTJB
RDg0MDBBOURCRDggLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0g
Ki8sCi0JCQkJNUNBOTg1NEIyMTBCRUI3MzAwNTdFQjZCIC8qIFNhZmVCcm93c2luZ1Jlc3VsdENv
Y29hLm1tICovLAorCQkJCTVDQTk4NTRCMjEwQkVCNzMwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdX
YXJuaW5nQ29jb2EubW0gKi8sCiAJCQkJMUEwMDJENDcxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Np
b25TdGF0ZUNvZGluZy5oICovLAogCQkJCTFBMDAyRDQ2MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNz
aW9uU3RhdGVDb2RpbmcubW0gKi8sCiAJCQkJMzE1NzEzNUMyMDQwQTlCMjAwODRGOUNGIC8qIFN5
c3RlbVByZXZpZXdDb250cm9sbGVyQ29jb2EubW0gKi8sCkBAIC03MjkwLDcgKzcyOTAsNyBAQAog
CQkJCTUxRTZDMTYxMUYyOTM1Q0QwMEZEMzQzNyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2UuaCAqLywKIAkJCQlCQzExMUIwODExMkY1RTNDMDAzMzdCQUIgLyogUmVz
cG9uc2l2ZW5lc3NUaW1lci5jcHAgKi8sCiAJCQkJMUEzMDA2NkMxMTEwRjRGNzAwMzE5MzdDIC8q
IFJlc3BvbnNpdmVuZXNzVGltZXIuaCAqLywKLQkJCQk1Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIg
LyogU2FmZUJyb3dzaW5nUmVzdWx0LmggKi8sCisJCQkJNUNBOTg1NDkyMTBCRUI1QTAwNTdFQjZC
IC8qIFNhZmVCcm93c2luZ1dhcm5pbmcuaCAqLywKIAkJCQk0MTRERURENjFGOUVEREUwMDA0N0M0
MEQgLyogU2VydmljZVdvcmtlclByb2Nlc3NQcm94eS5jcHAgKi8sCiAJCQkJNDE0REVERDUxRjlF
RERERjAwNDdDNDBEIC8qIFNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkuaCAqLywKIAkJCQk1MUE0
RDVBODE2Q0FDNEZGMDAwRTYxNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuY3BwICovLApAQCAtOTIw
Myw4ICs5MjAzLDggQEAKIAkJCQk1MUU2QzE2NDFGMjkzNUREMDBGRDM0MzcgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTMw
MDY2RTExMTBGNEY3MDAzMTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDEwNDgyQ0UxREREMzI0RjAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTVDQTk4NTRBMjEwQkVCNjQwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdSZXN1
bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBFOTdENzREMjAwRTkwMDQwMEJGNjY0MyAvKiBTYWZl
QnJvd3NpbmdTUEkuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQTk4NTRBMjEwQkVCNjQwMDU3RUI2
QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzJEMDIxNzEy
QUM0MUNCMDBFNzMyQTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBQUI0QThEMTI5NkYwQTIwMDIzOTUyRiAvKiBTYW5kYm94RXh0ZW5zaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMUU1NTJDNTE2QUUwNjVGMDA0RUQ2NTMgLyogU2FuZGJveElu
aXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzgxODMpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxOC0x
MS0xNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIEFkZCBTUEkgdG8gc2hvdyBhIHNhZmUgYnJvd3Npbmcgd2FybmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNjA0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW5keSBFc3Rlcy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tOgorICAgICAgICAoVEVTVCk6CisKIDIwMTgtMTEtMTQg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXQuQXBwbGlj
YXRpb25NYW5pZmVzdEJhc2ljIEFQSSB0ZXN0IGlzIGZhaWxpbmcgd2hlbiBlbmFibGluZyBQU09O
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhZmVCcm93c2lu
Zy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1NhZmVCcm93c2luZy5tbQkocmV2aXNpb24gMjM4MTgzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW0JKHdvcmtpbmcgY29weSkKQEAgLTIw
NCw2ICsyMDQsMzMgQEAgVEVTVChTYWZlQnJvd3NpbmcsIE5hdmlnYXRpb25DbGVhcnNXYXJuaQog
ICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOwogfQogCitURVNUKFNh
ZmVCcm93c2luZywgU2hvd1dhcm5pbmdTUEkpCit7CisgICAgX19ibG9jayBib29sIGNvbXBsZXRp
b25IYW5kbGVyQ2FsbGVkID0gZmFsc2U7CisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNVUkw+IHVy
bENsaWNrZWQ7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbV0tXZWJWaWV3IG5ld10pOwor
ICAgIGF1dG8gc2hvd1dhcm5pbmcgPSBeeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNhbGxl
ZCA9IGZhbHNlOworICAgICAgICBbd2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRo
VGl0bGU6QCJ0ZXN0IHRpdGxlIiB3YXJuaW5nOkAidGVzdCB3YXJuaW5nIiBkZXRhaWxzOltbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJ0ZXN0IGRldGFpbHMiXSBh
dXRvcmVsZWFzZV0gY29tcGxldGlvbkhhbmRsZXI6XihOU1VSTCAqdXJsKSB7CisgICAgICAgICAg
ICB1cmxDbGlja2VkID0gdXJsOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJDYWxsZWQg
PSB0cnVlOworICAgICAgICB9XTsKKyNpZiAhUExBVEZPUk0oTUFDKQorICAgICAgICBbW3dlYlZp
ZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXSBkaWRNb3ZlVG9XaW5kb3ddOworI2Vu
ZGlmCisgICAgfTsKKworICAgIHNob3dXYXJuaW5nKCk7CisgICAgY2hlY2tUaXRsZUFuZENsaWNr
KFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10uc3Vidmlld3MuZmlyc3RP
YmplY3Quc3Vidmlld3NbM10sICJHbyBCYWNrIik7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZjb21wbGV0aW9uSGFuZGxlckNhbGxlZCk7CisgICAgRVhQRUNUX1RSVUUoIXVybENsaWNr
ZWQpOworCisgICAgc2hvd1dhcm5pbmcoKTsKKyAgICBbW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dh
cm5pbmdGb3JUZXN0aW5nXSBwZXJmb3JtU2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoQCJj
bGlja2VkT25MaW5rOiIpIHdpdGhPYmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
d2Via2l0Lm9yZy90ZXN0bGluayJdXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNv
bXBsZXRpb25IYW5kbGVyQ2FsbGVkKTsKKyAgICBFWFBFQ1RfU1RSRVEoW3VybENsaWNrZWQgYWJz
b2x1dGVTdHJpbmddLlVURjhTdHJpbmcsICJodHRwOi8vd2Via2l0Lm9yZy90ZXN0bGluayIpOwor
fQorCiBAaW50ZXJmYWNlIE51bGxMb29rdXBDb250ZXh0IDogTlNPYmplY3QKIEBlbmQKIEBpbXBs
ZW1lbnRhdGlvbiBOdWxsTG9va3VwQ29udGV4dAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>