<?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>195785</bug_id>
          
          <creation_ts>2019-03-14 17:34:16 -0700</creation_ts>
          <short_desc>Implement DownloadMonitor to prevent long-running slow downloads from background apps</short_desc>
          <delta_ts>2020-05-23 05:57:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>giffypap79</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1516781</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-14 17:34:16 -0700</bug_when>
    <thetext>Implement DownloadMonitor to prevent long-running slow downloads from background apps</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516783</commentid>
    <comment_count>1</comment_count>
      <attachid>364730</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-14 17:36:05 -0700</bug_when>
    <thetext>Created attachment 364730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516863</commentid>
    <comment_count>2</comment_count>
      <attachid>364730</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-03-14 20:06:43 -0700</bug_when>
    <thetext>Comment on attachment 364730
Patch

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

Please fix EWS build failures.

&gt; Source/WebKit/NetworkProcess/Downloads/Download.h:103
&gt; +    friend class DownloadMonitor;
&gt;      bool isAlwaysOnLoggingAllowed() const;

Can we just make this interface public? Seems less bad than making all our data members public to DownloadMonitor.

&gt; Source/WebKit/NetworkProcess/Downloads/DownloadMonitor.cpp:86
&gt; +    while (m_timestamps.size() &gt; maxTimestampsSize)
&gt; +        m_timestamps.removeFirst();

Can we do this before the append, to avoid out-of-line storage?

Does this need to be a loop, or can we just remove one when we&apos;re at capacity?

&gt; Source/WebKit/NetworkProcess/Downloads/DownloadMonitor.cpp:97
&gt; +void DownloadMonitor::applicationNoLongerInForeground()

Let&apos;s call this applicationEnteredBackground.

&gt; Source/WebKit/NetworkProcess/Downloads/DownloadMonitor.cpp:116
&gt; +        RELEASE_LOG_IF_ALLOWED(&quot;timerFired: Download reached threshold to not be terminated (id = %&quot; PRIu64 &quot;)&quot;, m_download.downloadID().downloadID());

So, if you survive past 60 minutes, you survive forever? Is that how other downloads behave?

&gt; Source/WebKit/NetworkProcess/Downloads/DownloadMonitor.h:53
&gt; +    static constexpr size_t maxTimestampsSize = 10;

Let&apos;s call this timestampCapacity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517364</commentid>
    <comment_count>3</comment_count>
      <attachid>364915</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-15 21:55:50 -0700</bug_when>
    <thetext>Created attachment 364915
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517432</commentid>
    <comment_count>4</comment_count>
      <attachid>364933</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-16 09:40:24 -0700</bug_when>
    <thetext>Created attachment 364933
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517433</commentid>
    <comment_count>5</comment_count>
      <attachid>364934</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-16 09:58:19 -0700</bug_when>
    <thetext>Created attachment 364934
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517434</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-16 09:59:42 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517509</commentid>
    <comment_count>7</comment_count>
      <attachid>364957</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-16 20:36:07 -0700</bug_when>
    <thetext>Created attachment 364957
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517750</commentid>
    <comment_count>8</comment_count>
      <attachid>365025</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-18 10:25:49 -0700</bug_when>
    <thetext>Created attachment 365025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517899</commentid>
    <comment_count>9</comment_count>
      <attachid>365025</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-03-18 14:04:45 -0700</bug_when>
    <thetext>Comment on attachment 365025
Patch

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

r=me

&gt; Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp:208
&gt; +void DownloadManager::applicationDidEnterBackground()
&gt; +{
&gt; +    for (auto&amp; download : m_downloads.values())
&gt; +        download-&gt;applicationEnteredBackground();
&gt; +}
&gt; +
&gt; +void DownloadManager::applicationWillEnterForeground()
&gt; +{
&gt; +    for (auto&amp; download : m_downloads.values())
&gt; +        download-&gt;applicationEnteredForeground();
&gt; +}

Nit: You can resolve the small differences in these names.

applicationEnteredForeground =&gt; applicationWillEnterForeground
applicationEnteredBackground =&gt; applicationDidEnterBackground

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:72
&gt; +@property (nonatomic) NSUInteger downloadMonitorSpeedMultiplier WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));

Maybe put &quot;ForDebugging&quot; on the ends of this name and its related names, to clarify the purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517943</commentid>
    <comment_count>10</comment_count>
      <attachid>365070</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-18 14:59:56 -0700</bug_when>
    <thetext>Created attachment 365070
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517963</commentid>
    <comment_count>11</comment_count>
      <attachid>365070</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-18 15:39:01 -0700</bug_when>
    <thetext>Comment on attachment 365070
Patch

Clearing flags on attachment: 365070

Committed r243110: &lt;https://trac.webkit.org/changeset/243110&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517964</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-18 15:39:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517966</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-18 15:40:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/48997000&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518148</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-18 22:47:21 -0700</bug_when>
    <thetext>http://trac.webkit.org/r243131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519087</commentid>
    <comment_count>15</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-20 12:33:35 -0700</bug_when>
    <thetext>rdar://problem/45777358</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364730</attachid>
            <date>2019-03-14 17:36:05 -0700</date>
            <delta_ts>2019-03-15 21:55:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195785-20190314173604.patch</filename>
            <type>text/plain</type>
            <size>20866</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTAzLTE0ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IERv
d25sb2FkTW9uaXRvciB0byBwcmV2ZW50IGxvbmctcnVubmluZyBzbG93IGRvd25sb2FkcyBmcm9t
IGJhY2tncm91bmQgYXBwcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk1Nzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBpcyBzaW1pbGFyIHRvIHdoYXQgd2FzIHVwZGF0ZWQgaW4gPHJkYXI6Ly9w
cm9ibGVtLzQyNjc3Njg1PiBidXQgZm9yIFdlYktpdCBEb3dubG9hZHMuCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6ZGlk
RmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZEZhaWwpOgorICAgICAgICAo
V2ViS2l0OjpEb3dubG9hZDo6ZGlkQ2FuY2VsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyOjpk
b3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRNYW5hZ2VyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkTWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNYXA6OnZhbHVlcyk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmg6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTW9uaXRvci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpvcGVyYXRvciBfa2Jwcyk6CisgICAgICAgIChXZWJLaXQ6OnRpbWVVbnRp
bE5leHRJbnRlcnZhbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTW9uaXRvcjo6RG93bmxv
YWRNb25pdG9yKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjptZWFzdXJlZFRo
cm91Z2hwdXRSYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjpk
b3dubG9hZFJlY2VpdmVkQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1vbml0b3I6
OmFwcGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9h
ZE1vbml0b3I6OmFwcGxpY2F0aW9uTm9Mb25nZXJJbkZvcmVncm91bmQpOgorICAgICAgICAoV2Vi
S2l0OjpEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaDogQWRkZWQuCisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmluaXNoKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
UHJveHk6OmRpZENhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
TWFwLmg6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIw
MTktMDMtMTQgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1v
dmUgSURCIHN0b3JhZ2UgaW4gcHJpdmF0ZSBicm93c2luZyBtb2RlIHRvIE5ldHdvcmtQcm9jZXNz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvU291
cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9XZWJDb29raWVNYW5hZ2VyLgogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkLmNwcAogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKIE5l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAKK05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuY3BwCiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVu
ZGluZ0Rvd25sb2FkLmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVn
aXN0cnkuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiRGF0YVJl
ZmVyZW5jZS5oIgogI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlci5oIgorI2luY2x1ZGUgIkRvd25s
b2FkTW9uaXRvci5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNZXNzYWdlcy5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKQEAgLTExNCw2ICsx
MTUsOCBAQCB2b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsCiAgICAgICAg
IFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImRpZFJlY2VpdmVEYXRhOiBTdGFydGVkIHJlY2Vpdmlu
ZyBkYXRhIChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOwog
ICAgICAgICBtX2hhc1JlY2VpdmVkRGF0YSA9IHRydWU7CiAgICAgfQorICAgIAorICAgIG1fbW9u
aXRvci5kb3dubG9hZFJlY2VpdmVkQnl0ZXMobGVuZ3RoKTsKIAogICAgIHNlbmQoTWVzc2FnZXM6
OkRvd25sb2FkUHJveHk6OkRpZFJlY2VpdmVEYXRhKGxlbmd0aCkpOwogfQpAQCAtMTI5LDcgKzEz
Miw3IEBAIHZvaWQgRG93bmxvYWQ6OmRpZEZpbmlzaCgpCiAgICAgICAgIG1fc2FuZGJveEV4dGVu
c2lvbiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRG
aW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlzaGVkKCp0
aGlzKTsKIH0KIAogdm9pZCBEb3dubG9hZDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKQpAQCAtMTQzLDcgKzE0
Niw3IEBAIHZvaWQgRG93bmxvYWQ6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnIKICAgICAgICAg
bV9zYW5kYm94RXh0ZW5zaW9uLT5yZXZva2UoKTsKICAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9u
ID0gbnVsbHB0cjsKICAgICB9Ci0gICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hl
ZCh0aGlzKTsKKyAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsK
IH0KIAogdm9pZCBEb3dubG9hZDo6ZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
cmVzdW1lRGF0YSkKQEAgLTE1Niw3ICsxNTksNyBAQCB2b2lkIERvd25sb2FkOjpkaWRDYW5jZWwo
Y29uc3QgSVBDOjpEYXRhCiAgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+cmV2b2tlKCk7CiAg
ICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbiA9IG51bGxwdHI7CiAgICAgfQotICAgIG1fZG93bmxv
YWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQodGhpcyk7CisgICAgbV9kb3dubG9hZE1hbmFnZXIu
ZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKIElQQzo6Q29ubmVjdGlvbiogRG93bmxvYWQ6
Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAkocmV2aXNpb24gMjQyODQy
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiRG93bmxvYWRJRC5o
IgogI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlci5oIgorI2luY2x1ZGUgIkRvd25sb2FkTW9uaXRv
ci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrRGF0YVRh
c2suaCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCkBAIC01OCw2ICs1OSw3IEBAIGNs
YXNzIFJlc291cmNlUmVzcG9uc2U7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBEb3du
bG9hZE1vbml0b3I7CiBjbGFzcyBOZXR3b3JrRGF0YVRhc2s7CiBjbGFzcyBOZXR3b3JrU2Vzc2lv
bjsKIGNsYXNzIFdlYlBhZ2U7CkBAIC05Nyw2ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
bGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3lEb3du
bG9hZCgpOwogCisgICAgZnJpZW5kIGNsYXNzIERvd25sb2FkTW9uaXRvcjsKICAgICBib29sIGlz
QWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCiAgICAgRG93bmxvYWRNYW5hZ2VyJiBt
X2Rvd25sb2FkTWFuYWdlcjsKQEAgLTExNCw2ICsxMTcsNyBAQCBwcml2YXRlOgogICAgIFBBTDo6
U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogICAgIFN0cmluZyBtX3N1Z2dlc3RlZE5hbWU7CiAgICAg
Ym9vbCBtX2hhc1JlY2VpdmVkRGF0YSB7IGZhbHNlIH07CisgICAgRG93bmxvYWRNb25pdG9yIG1f
bW9uaXRvciB7ICp0aGlzIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY5LDExICsxNjksMTAgQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OnB1Ymxpc2hEb3dubG9h
ZFBybwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCi12b2lkIERvd25sb2FkTWFuYWdl
cjo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZCogZG93bmxvYWQpCit2b2lkIERvd25sb2FkTWFu
YWdlcjo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZCYgZG93bmxvYWQpCiB7Ci0gICAgQVNTRVJU
KG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkLT5kb3dubG9hZElEKCkpKTsKLSAgICBtX2Rv
d25sb2Fkcy5yZW1vdmUoZG93bmxvYWQtPmRvd25sb2FkSUQoKSk7Ci0gICAgCisgICAgQVNTRVJU
KG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkLmRvd25sb2FkSUQoKSkpOworICAgIG1fZG93
bmxvYWRzLnJlbW92ZShkb3dubG9hZC5kb3dubG9hZElEKCkpOwogfQogCiB2b2lkIERvd25sb2Fk
TWFuYWdlcjo6ZGlkQ3JlYXRlRG93bmxvYWQoKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgJKHJldmlz
aW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICBEb3dubG9hZCogZG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElEKSB7IHJl
dHVybiBtX2Rvd25sb2Fkcy5nZXQoZG93bmxvYWRJRCk7IH0KIAotICAgIHZvaWQgZG93bmxvYWRG
aW5pc2hlZChEb3dubG9hZCopOworICAgIHZvaWQgZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZCYp
OwogICAgIGJvb2wgaXNEb3dubG9hZGluZygpIGNvbnN0IHsgcmV0dXJuICFtX2Rvd25sb2Fkcy5p
c0VtcHR5KCk7IH0KICAgICB1aW50NjRfdCBhY3RpdmVEb3dubG9hZENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9kb3dubG9hZHMuc2l6ZSgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAJKHJldmlzaW9u
IDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsMTEgQEAgYm9vbCBEb3dubG9h
ZE1hcDo6cmVtb3ZlKERvd25sb2FkSUQgZG93bgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2F1
dG8gRG93bmxvYWRNYXA6OnZhbHVlcygpIC0+IERvd25sb2FkTWFwVHlwZTo6VmFsdWVzSXRlcmF0
b3JSYW5nZQoreworICAgIHJldHVybiBtX2Rvd25sb2Fkcy52YWx1ZXMoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoVEFLRV9VTkJPVU5ERURfTkVUV09S
S0lOR19BU1NFUlRJT04pCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmgJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogICAgIERvd25sb2FkTWFwVHlwZTo6QWRk
UmVzdWx0IGFkZChEb3dubG9hZElELCBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWQ+JiYpOwogICAg
IGJvb2wgcmVtb3ZlKERvd25sb2FkSUQpOwogCisgICAgRG93bmxvYWRNYXBUeXBlOjpWYWx1ZXNJ
dGVyYXRvclJhbmdlIHZhbHVlcygpOworCiBwcml2YXRlOgogICAgIERvd25sb2FkTWFwVHlwZSBt
X2Rvd25sb2FkczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0Fzc2VydGlvbj4gbV9kb3du
bG9hZEFzc2VydGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkTW9uaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRvd25sb2FkTW9uaXRvci5oIgorCisjdW5kZWYgUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRAorI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwg
Li4uKSBSRUxFQVNFX0xPR19JRihtX2Rvd25sb2FkLmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
LCBOZXR3b3JrLCAiJXAgLSBEb3dubG9hZE1vbml0b3I6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJH
U19fKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY29uc3RleHByIHVpbnQ2NF90IG9wZXJhdG9y
IiIgX2ticHModWludDY0X3Qga2lsb2J5dGVzUGVyU2Vjb25kKQoreworICAgIHJldHVybiBraWxv
Ynl0ZXNQZXJTZWNvbmQgKiAxMDI0OworfQorCitzdHJ1Y3QgVGhyb3VnaHB1dEludGVydmFsIHsK
KyAgICBTZWNvbmRzIHRpbWU7CisgICAgdWludDY0X3QgYnl0ZXNQZXJTZWNvbmQ7Cit9OworCitz
dGF0aWMgY29uc3QgVGhyb3VnaHB1dEludGVydmFsIHRocm91Z2hwdXRJbnRlcnZhbHNbXSA9IHsK
KyAgICB7IDFfbWluLCAxX2ticHMgfSwKKyAgICB7IDVfbWluLCAyX2ticHMgfSwKKyAgICB7IDEw
X21pbiwgNF9rYnBzIH0sCisgICAgeyAxNV9taW4sIDhfa2JwcyB9LAorICAgIHsgMjBfbWluLCAx
Nl9rYnBzIH0sCisgICAgeyAyNV9taW4sIDMyX2ticHMgfSwKKyAgICB7IDMwX21pbiwgNjRfa2Jw
cyB9LAorICAgIHsgNDVfbWluLCA5Nl9rYnBzIH0sCisgICAgeyA2MF9taW4sIDEyOF9rYnBzIH0K
K307CisKK3N0YXRpYyBTZWNvbmRzIHRpbWVVbnRpbE5leHRJbnRlcnZhbChzaXplX3QgY3VycmVu
dEludGVydmFsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRJbnRlcnZhbCArIDEgPCBX
VEZfQVJSQVlfTEVOR1RIKHRocm91Z2hwdXRJbnRlcnZhbHMpKTsKKyAgICByZXR1cm4gdGhyb3Vn
aHB1dEludGVydmFsc1tjdXJyZW50SW50ZXJ2YWwgKyAxXS50aW1lIC0gdGhyb3VnaHB1dEludGVy
dmFsc1tjdXJyZW50SW50ZXJ2YWxdLnRpbWU7Cit9CisKK0Rvd25sb2FkTW9uaXRvcjo6RG93bmxv
YWRNb25pdG9yKERvd25sb2FkJiBkb3dubG9hZCkKKyAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQp
Cit7Cit9CisKK2RvdWJsZSBEb3dubG9hZE1vbml0b3I6Om1lYXN1cmVkVGhyb3VnaHB1dFJhdGUo
KSBjb25zdAoreworICAgIHVpbnQ2NF90IGJ5dGVzIHsgMCB9OworICAgIGZvciAoY29uc3QgYXV0
byYgdGltZXN0YW1wIDogbV90aW1lc3RhbXBzKQorICAgICAgICBieXRlcyArPSB0aW1lc3RhbXAu
Ynl0ZXNSZWNlaXZlZDsKKyAgICBpZiAoIWJ5dGVzKQorICAgICAgICByZXR1cm4gMDsKKyAgICBB
U1NFUlQoIW1fdGltZXN0YW1wcy5pc0VtcHR5KCkpOworICAgIFNlY29uZHMgdGltZURpZmZlcmVu
Y2UgPSBtX3RpbWVzdGFtcHMubGFzdCgpLnRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKSAtIG1fdGlt
ZXN0YW1wcy5maXJzdCgpLnRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICBkb3VibGUgc2Vj
b25kcyA9IHRpbWVEaWZmZXJlbmNlLnNlY29uZHMoKTsKKyAgICBpZiAoIXNlY29uZHMpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpOworICAgIHJldHVy
biBieXRlcyAvIHNlY29uZHM7Cit9CisKK3ZvaWQgRG93bmxvYWRNb25pdG9yOjpkb3dubG9hZFJl
Y2VpdmVkQnl0ZXModWludDY0X3QgYnl0ZXNSZWNlaXZlZCkKK3sKKyAgICBtX3RpbWVzdGFtcHMu
YXBwZW5kKHsgTW9ub3RvbmljVGltZTo6bm93KCksIGJ5dGVzUmVjZWl2ZWQgfSk7CisgICAgd2hp
bGUgKG1fdGltZXN0YW1wcy5zaXplKCkgPiBtYXhUaW1lc3RhbXBzU2l6ZSkKKyAgICAgICAgbV90
aW1lc3RhbXBzLnJlbW92ZUZpcnN0KCk7Cit9CisKK3ZvaWQgRG93bmxvYWRNb25pdG9yOjphcHBs
aWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKCkKK3sKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBh
Y3R1YWxseSBjYWxsIHRoaXMgYW5kIHRlc3QgaXQuCisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgiYXBwbGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rv
d25sb2FkLmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgIG1fdGltZXIuc3RvcCgpOwor
ICAgIG1faW50ZXJ2YWwgPSAwOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6YXBwbGljYXRp
b25Ob0xvbmdlckluRm9yZWdyb3VuZCgpCit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gYWN0
dWFsbHkgY2FsbCB0aGlzIGFuZCB0ZXN0IGl0LgorICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQo
ImFwcGxpY2F0aW9uTm9Mb25nZXJJbkZvcmVncm91bmQgKGlkID0gJSIgUFJJdTY0ICIpIiwgbV9k
b3dubG9hZC5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICBBU1NFUlQoIW1fdGltZXIu
aXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKCFtX2ludGVydmFsKTsKKyAgICBtX3RpbWVyLnN0YXJ0
T25lU2hvdCh0aHJvdWdocHV0SW50ZXJ2YWxzWzBdLnRpbWUpOworfQorCit2b2lkIERvd25sb2Fk
TW9uaXRvcjo6dGltZXJGaXJlZCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9pbnRlcnZhbCA8
IFdURl9BUlJBWV9MRU5HVEgodGhyb3VnaHB1dEludGVydmFscykpOworICAgIGlmIChtZWFzdXJl
ZFRocm91Z2hwdXRSYXRlKCkgPCB0aHJvdWdocHV0SW50ZXJ2YWxzW21faW50ZXJ2YWxdLmJ5dGVz
UGVyU2Vjb25kKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInRpbWVyRmlyZWQ6
IGNhbmNlbGxpbmcgZG93bmxvYWQgKGlkID0gJSIgUFJJdTY0ICIpIiwgbV9kb3dubG9hZC5kb3du
bG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9kb3dubG9hZC5jYW5jZWwoKTsKKyAg
ICB9IGVsc2UgaWYgKG1faW50ZXJ2YWwgKyAxIDwgV1RGX0FSUkFZX0xFTkdUSCh0aHJvdWdocHV0
SW50ZXJ2YWxzKSkgeworICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVk
OiBzdWZmaWNpZW50IHRocm91Z2hwdXQgcmF0ZSAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rvd25s
b2FkLmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAgICBtX3RpbWVyLnN0YXJ0T25l
U2hvdCh0aW1lVW50aWxOZXh0SW50ZXJ2YWwobV9pbnRlcnZhbCsrKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInRpbWVyRmlyZWQ6IERvd25sb2FkIHJlYWNo
ZWQgdGhyZXNob2xkIHRvIG5vdCBiZSB0ZXJtaW5hdGVkIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1f
ZG93bmxvYWQuZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRNb25pdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8V2ViQ29yZS9UaW1lci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRG93
bmxvYWQ7CisKK2NsYXNzIERvd25sb2FkTW9uaXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRG93bmxvYWRNb25pdG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgRG93bmxvYWRNb25pdG9yKERvd25sb2FkJik7CisgICAgCisgICAgdm9pZCBhcHBsaWNhdGlv
bk5vTG9uZ2VySW5Gb3JlZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbkVudGVyZWRGb3Jl
Z3JvdW5kKCk7CisgICAgdm9pZCBkb3dubG9hZFJlY2VpdmVkQnl0ZXModWludDY0X3QpOworICAg
IHZvaWQgdGltZXJGaXJlZCgpOworCitwcml2YXRlOgorICAgIERvd25sb2FkJiBtX2Rvd25sb2Fk
OworCisgICAgZG91YmxlIG1lYXN1cmVkVGhyb3VnaHB1dFJhdGUoKSBjb25zdDsKKyAgICAKKyAg
ICBzdHJ1Y3QgVGltZXN0YW1wIHsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lOworICAgICAg
ICB1aW50NjRfdCBieXRlc1JlY2VpdmVkOworICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgbWF4VGltZXN0YW1wc1NpemUgPSAxMDsKKyAgICBEZXF1ZTxUaW1lc3RhbXAsIG1heFRp
bWVzdGFtcHNTaXplPiBtX3RpbWVzdGFtcHM7CisgICAgV2ViQ29yZTo6VGltZXIgbV90aW1lciB7
ICp0aGlzLCAmRG93bmxvYWRNb25pdG9yOjp0aW1lckZpcmVkIH07CisgICAgc2l6ZV90IG1faW50
ZXJ2YWwgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAJKHJl
dmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgRG93
bmxvYWRQcm94eTo6ZGlkRmluaXNoKCkKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVu
dCgpLmRpZEZpbmlzaCgqbV9wcm9jZXNzUG9vbCwgKnRoaXMpOwogCiAgICAgLy8gVGhpcyBjYW4g
Y2F1c2UgdGhlIERvd25sb2FkUHJveHkgb2JqZWN0IHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9kb3du
bG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQodGhpcyk7CisgICAgbV9kb3dubG9hZFByb3h5
TWFwLmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwogfQogCiBzdGF0aWMgUmVmUHRyPEFQSTo6RGF0
YT4gY3JlYXRlRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEpCkBAIC0yMzAsNyAr
MjMwLDcgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGYWlsKGNvbnN0IFJlc291cgogICAgIG1f
cHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlkRmFpbCgqbV9wcm9jZXNzUG9vbCwgKnRo
aXMsIGVycm9yKTsKIAogICAgIC8vIFRoaXMgY2FuIGNhdXNlIHRoZSBEb3dubG9hZFByb3h5IG9i
amVjdCB0byBiZSBkZWxldGVkLgotICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlz
aGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKCp0aGlz
KTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiByZXN1bWVEYXRhKQpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgRG93bmxvYWRQcm94
eTo6ZGlkQ2FuY2VsKGNvbnN0IElQQzoKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVu
dCgpLmRpZENhbmNlbCgqbV9wcm9jZXNzUG9vbCwgKnRoaXMpOwogCiAgICAgLy8gVGhpcyBjYW4g
Y2F1c2UgdGhlIERvd25sb2FkUHJveHkgb2JqZWN0IHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9kb3du
bG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQodGhpcyk7CisgICAgbV9kb3dubG9hZFByb3h5
TWFwLmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eU1hcC5jcHAJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsOSArNjcsOSBAQCBEb3dubG9hZFByb3h5KiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVECiAg
ICAgcmV0dXJuIGRvd25sb2FkUHJveHkucHRyKCk7CiB9CiAKLXZvaWQgRG93bmxvYWRQcm94eU1h
cDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5KQordm9pZCBE
b3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmIGRvd25sb2Fk
UHJveHkpCiB7Ci0gICAgYXV0byBkb3dubG9hZElEID0gZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJ
RCgpOworICAgIGF1dG8gZG93bmxvYWRJRCA9IGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpOwog
CiAgICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJl
bmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCiAgICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9
IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKQEAgLTc3LDcgKzc3LDcgQEAg
dm9pZCBEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKAogICAgIEFTU0VSVChtX2Rv
d25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKICAgICBtX3Byb2Nlc3MtPnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7Ci0gICAgZG93bmxvYWRQcm94eS0+aW52YWxp
ZGF0ZSgpOworICAgIGRvd25sb2FkUHJveHkuaW52YWxpZGF0ZSgpOwogICAgIG1fZG93bmxvYWRz
LnJlbW92ZShkb3dubG9hZElEKTsKIAogICAgIGlmIChtX2Rvd25sb2Fkcy5pc0VtcHR5KCkgJiYg
bV9zaG91bGRUYWtlQXNzZXJ0aW9uKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgJKHJldmlzaW9uIDI0Mjg0MikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIH5Eb3dubG9hZFBy
b3h5TWFwKCk7CiAKICAgICBEb3dubG9hZFByb3h5KiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYlBy
b2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBk
b3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkqKTsKKyAgICB2b2lkIGRvd25sb2FkRmluaXNo
ZWQoRG93bmxvYWRQcm94eSYpOwogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9kb3dubG9hZHMuaXNFbXB0eSgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzQ1OCw2ICszNDU4LDggQEAKIAkJNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdv
cmtTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtTZXNz
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMjY5NTg0MjAwNDJGMTIwMDVD
NDM5QiAvKiBXS09wZW5QYW5lbFBhcmFtZXRlcnNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLT3BlblBhbmVsUGFyYW1ldGVyc1ByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMyOThEOUUxQzNERUYyOTAwNDcwQUZFIC8qIFBlbmRpbmdE
b3dubG9hZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZW5kaW5nRG93bmxv
YWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMyQjFBRjMyMjNBQjcyODAwQjkx
Q0Y3IC8qIERvd25sb2FkTW9uaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEb3dubG9hZE1vbml0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1QzJCMUFGNDIyM0FCNzI4MDBCOTFDRjcgLyogRG93bmxvYWRNb25pdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvd25sb2FkTW9uaXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1QzM1OUMwQzIxNTQ3MzIxMDA5RTc5NDggLyogV0tEZXByZWNhdGVk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRGVwcmVjYXRlZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzNBRUE4RTFGRTFGMURGMDAyMzE4RDMgLyogV2Vi
c2l0ZVBvbGljaWVzRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJzaXRlUG9saWNpZXNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUM0NkMwQUMyMUI3MTk4QjAwQkM1OTkxIC8qIFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY4NjEs
NiArNjg2Myw4IEBACiAJCQkJNUMxNDI2RjkxQzIzRjg0MzAwRDQxMTgzIC8qIERvd25sb2FkTWFu
YWdlci5oICovLAogCQkJCTUxMjQwRUI5MjIwQTA4Q0EwMDVDRkM2MyAvKiBEb3dubG9hZE1hcC5j
cHAgKi8sCiAJCQkJNTEyNDBFQjgyMjBBMDhDQTAwNUNGQzYzIC8qIERvd25sb2FkTWFwLmggKi8s
CisJCQkJNUMyQjFBRjMyMjNBQjcyODAwQjkxQ0Y3IC8qIERvd25sb2FkTW9uaXRvci5jcHAgKi8s
CisJCQkJNUMyQjFBRjQyMjNBQjcyODAwQjkxQ0Y3IC8qIERvd25sb2FkTW9uaXRvci5oICovLAog
CQkJCTVDODVDNzg2MUMzRjIzQzUwMDYxQTRGQSAvKiBQZW5kaW5nRG93bmxvYWQuY3BwICovLAog
CQkJCTVDMjk4RDlFMUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLywKIAkJ
CSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364915</attachid>
            <date>2019-03-15 21:55:50 -0700</date>
            <delta_ts>2019-03-16 09:40:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195785-20190315215549.patch</filename>
            <type>text/plain</type>
            <size>78705</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDMwMTYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxOS0wMy0xNSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBE
b3dubG9hZE1vbml0b3IgdG8gcHJldmVudCBsb25nLXJ1bm5pbmcgc2xvdyBkb3dubG9hZHMgZnJv
bSBiYWNrZ3JvdW5kIGFwcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NTc4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IHdhcyB1cGRhdGVkIGluIDxyZGFyOi8v
cHJvYmxlbS80MjY3NzY4NT4gYnV0IGZvciBXZWJLaXQgRG93bmxvYWRzLgorICAgICAgICBUbyB0
ZXN0IGl0IEkgaW1wbGVtZW50ZWQgYSB0aHJvdHRsZWQgVENQIHNlcnZlciwgU1BJIHRvIHNwZWVk
IHVwIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLAorICAgICAgICBhbmQgU1BJIHRvIHN5bnRoZXNp
emUgdGhlIGFwcGxpY2F0aW9uIGdvaW5nIGludG8gdGhlIGJhY2tncm91bmQgYW5kIGZvcmVncm91
bmQsIHdoaWNoCisgICAgICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyIGRvZXMgb24gaU9TLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWQ6OmRpZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZENhbmNlbCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmg6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
OjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OmFwcGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZDo6bWFuYWdlciBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6
ZG93bmxvYWRGaW5pc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6YXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1h
bmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTWFwOjp2YWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hcC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1v
bml0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IgX2ticHMpOgorICAg
ICAgICAoV2ViS2l0Ojp0aW1lVW50aWxOZXh0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1vbml0b3I6OkRvd25sb2FkTW9uaXRvcik6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTW9uaXRvcjo6bWVhc3VyZWRUaHJvdWdocHV0UmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkTW9uaXRvcjo6ZG93bmxvYWRSZWNlaXZlZEJ5dGVzKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKToKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjpzcGVlZE11bHRpcGxpZXIg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaDogQWRk
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uV2lsbEVu
dGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb246OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXS0NvbnRleHREb3dubG9hZFVSTFJlcXVlc3QpOgorICAgICAgICAoV0tDb250ZXh0
UmVzdW1lRG93bmxvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDpdKToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfZG93bmxvYWRVUkxSZXF1ZXN0Om9y
aWdpbmF0aW5nV2ViVmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbToKKyAgICAgICAgKC1bX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uIGRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcl0pOgorICAgICAgICAo
LVtfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gc2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29j
b2EubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bUNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVz
dHJveSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmluaXNoKToKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHk6OmRpZENhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6On5E
b3dubG9hZFByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6cGxh
dGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bURlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlv
bkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
cm94eTo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxl
RG93bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
TWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDMtMTUg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBf
V0tEb3dubG9hZCBzaG91bGQgY29uZm9ybSB0byBOU0NvcHlpbmcgcHJvdG9jb2wKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuCiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCiBO
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmNwcAorTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkTW9uaXRvci5jcHAKIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxv
YWQuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiw3IEBA
IFVJUHJvY2Vzcy9Db2NvYS9BdXRvbWF0aW9uQ2xpZW50Lm1tCiBVSVByb2Nlc3MvQ29jb2EvQXV0
b21hdGlvblNlc3Npb25DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9EaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5tbQogVUlQcm9jZXNzL0NvY29hL0Rvd25sb2FkQ2xpZW50Lm1tCitVSVByb2Nlc3Mv
Q29jb2EvRG93bmxvYWRQcm94eU1hcENvY29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvRmluZENsaWVu
dC5tbQogVUlQcm9jZXNzL0NvY29hL0Z1bGxzY3JlZW5DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2Nv
YS9HbG9iYWxGaW5kSW5QYWdlU3RhdGUubW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYxLDYgKzM2MSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3
b3JrUHIKIAogICAgIGZvciAoYXV0byYgc2NoZW1lIDogcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzQ2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QpCiAgICAgICAgIHJlZ2lzdGVyVVJM
U2NoZW1lQXNDYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChzY2hlbWUpOworICAgIAorICAgIG1f
ZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyID0gcGFyYW1ldGVycy5kb3dubG9hZE1vbml0
b3JTcGVlZE11bHRpcGxpZXI7CiAKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzLCAiJXAgLSBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzOiBQcmVzZW50aW5nIHByb2Nlc3Mg
PSAlZCIsIHRoaXMsIFdlYkNvcmU6OnByZXNlbnRpbmdBcHBsaWNhdGlvblBJRCgpKTsKIH0KQEAg
LTE5NDAsNiArMTk0MiwxNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjYW5jZWxQcmVwYXJlVG9T
dXNwCiAgICAgICAgIGNvbm5lY3Rpb24tPmVuZFN1c3BlbnNpb24oKTsKIH0KIAordm9pZCBOZXR3
b3JrUHJvY2Vzczo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQoreworICAgIG1fZG93
bmxvYWRNYW5hZ2VyLmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7Cit9CisKK3ZvaWQg
TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCit7CisgICAg
bV9kb3dubG9hZE1hbmFnZXIuYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7Cit9CisK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByb2Nlc3NEaWRSZXN1bWUoKQogewogICAgIFJFTEVBU0Vf
TE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiJXAgLSBOZXR3b3JrUHJvY2Vzczo6cHJvY2Vzc0RpZFJl
c3VtZSgpIiwgdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw2ICszNjYs
NyBAQCBwcml2YXRlOgogICAgIElQQzo6Q29ubmVjdGlvbiogcGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b25Gb3JEb3dubG9hZHMoKSBvdmVycmlkZSB7IHJldHVybiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpOyB9CiAgICAgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3dubG9hZHNBdXRoZW50aWNhdGlv
bk1hbmFnZXIoKSBvdmVycmlkZTsKICAgICB2b2lkIHBlbmRpbmdEb3dubG9hZENhbmNlbGVkKERv
d25sb2FkSUQpIG92ZXJyaWRlOworICAgIHVpbnQzMl90IGRvd25sb2FkTW9uaXRvclNwZWVkTXVs
dGlwbGllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZG93bmxvYWRNb25pdG9yU3BlZWRN
dWx0aXBsaWVyOyB9CiAKICAgICAvLyBNZXNzYWdlIEhhbmRsZXJzCiAgICAgdm9pZCBkaWRSZWNl
aXZlU3luY05ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwpAQCAtMzkxLDYgKzM5Miw4IEBA
IHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KERvd25s
b2FkSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsKICAgICB2b2lkIGNvbnRpbnVlRGVj
aWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oRG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0
aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJiwgYm9vbCBhbGxvd092ZXJ3cml0ZSk7Cisg
ICAgdm9pZCBhcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpOworICAgIHZvaWQgYXBwbGlj
YXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7CiAKICAgICB2b2lkIHNldENhY2hlTW9kZWwoQ2Fj
aGVNb2RlbCk7CiAgICAgdm9pZCBhbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Qo
Y29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiwgY29uc3QgU3RyaW5nJiBob3N0KTsKQEAg
LTUyOCw2ICs1MzEsNyBAQCBwcml2YXRlOgogICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBt
YW5hZ2Vyc1Blck9yaWdpbjsKICAgICB9OwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0
b3JhZ2VRdW90YU1hbmFnZXJzPiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOworICAgIHVpbnQzMl90
IG1fZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyIHsgMSB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI0Mjg0MikKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3Mg
TGVnYWN5UmVjZWl2ZQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFB1Ymxpc2hEb3dubG9hZFBy
b2dyZXNzKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9hZElELCBVUkwgdXJsLCBXZWJLaXQ6OlNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQogI2VuZGlmCisg
ICAgQXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQorICAgIEFwcGxpY2F0aW9uV2lsbEVu
dGVyRm9yZWdyb3VuZCgpCiAKICAgICBDb250aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJLaXQ6OkRv
d25sb2FkSUQgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCiAg
ICAgQ29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihXZWJLaXQ6OkRvd25s
b2FkSUQgZG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBXZWJLaXQ6OlNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3ZlcndyaXRl
KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI0Mjg0
MikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmUKICAgICBlbmNvZGVyIDw8IHNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCB1cmxTY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5k
bGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsK
ICNlbmRpZgogICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CisgICAgZW5j
b2RlciA8PCBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXI7CiB9CiAKIGJvb2wgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIs
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0yMjEsNiArMjIy
LDEyIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIE9wdGlvbmFsPHVpbnQzMl90PiBkb3dubG9hZE1vbml0b3JT
cGVlZE11bHRpcGxpZXI7CisgICAgZGVjb2RlciA+PiBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRp
cGxpZXI7CisgICAgaWYgKCFkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQuZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVy
ID0gKmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjsKKyAgICAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjQy
ODQyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIGJvb2wgc2hvdWxkRGlzYWJs
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07CiAjZW5kaWYK
ICAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICB1aW50MzJf
dCBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgeyAxIH07CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJEYXRh
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93
bmxvYWRNb25pdG9yLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgpAQCAtMTE0LDYg
KzExNSw4IEBAIHZvaWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGwKICAgICAg
ICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZURhdGE6IFN0YXJ0ZWQgcmVjZWl2
aW5nIGRhdGEgKGlkID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7
CiAgICAgICAgIG1faGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTsKICAgICB9CisgICAgCisgICAgbV9t
b25pdG9yLmRvd25sb2FkUmVjZWl2ZWRCeXRlcyhsZW5ndGgpOwogCiAgICAgc2VuZChNZXNzYWdl
czo6RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZURhdGEobGVuZ3RoKSk7CiB9CkBAIC0xMjksNyAr
MTMyLDcgQEAgdm9pZCBEb3dubG9hZDo6ZGlkRmluaXNoKCkKICAgICAgICAgbV9zYW5kYm94RXh0
ZW5zaW9uID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9h
ZEZpbmlzaGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQo
KnRoaXMpOwogfQogCiB2b2lkIERvd25sb2FkOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCkBAIC0xNDMsNyAr
MTQ2LDcgQEAgdm9pZCBEb3dubG9hZDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycgogICAgICAg
ICBtX3NhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwogICAgICAgICBtX3NhbmRib3hFeHRlbnNp
b24gPSBudWxscHRyOwogICAgIH0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlz
aGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQoKnRoaXMp
OwogfQogCiB2b2lkIERvd25sb2FkOjpkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiByZXN1bWVEYXRhKQpAQCAtMTU2LDcgKzE1OSw3IEBAIHZvaWQgRG93bmxvYWQ6OmRpZENhbmNl
bChjb25zdCBJUEM6OkRhdGEKICAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uLT5yZXZva2UoKTsK
ICAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gbnVsbHB0cjsKICAgICB9Ci0gICAgbV9kb3du
bG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rvd25sb2FkTWFuYWdl
ci5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKIH0KIAogSVBDOjpDb25uZWN0aW9uKiBEb3dubG9h
ZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCShyZXZpc2lvbiAyNDI4
NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJEb3dubG9hZElE
LmgiCiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93bmxvYWRNb25p
dG9yLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtEYXRh
VGFzay5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKQEAgLTU4LDYgKzU5LDcgQEAg
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIERv
d25sb2FkTW9uaXRvcjsKIGNsYXNzIE5ldHdvcmtEYXRhVGFzazsKIGNsYXNzIE5ldHdvcmtTZXNz
aW9uOwogY2xhc3MgV2ViUGFnZTsKQEAgLTg5LDYgKzkxLDEyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYgcmVzdW1lRGF0YSk7CiAgICAgdm9pZCBkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKIAorICAgIGJvb2wgaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGxpY2F0aW9uRW50ZXJlZEJhY2tncm91bmQoKSB7
IG1fbW9uaXRvci5hcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKCk7IH0KKyAgICB2b2lkIGFw
cGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQoKSB7IG1fbW9uaXRvci5hcHBsaWNhdGlvbkVudGVy
ZWRGb3JlZ3JvdW5kKCk7IH0KKyAgICBEb3dubG9hZE1hbmFnZXImIG1hbmFnZXIoKSBjb25zdCB7
IHJldHVybiBtX2Rvd25sb2FkTWFuYWdlcjsgfQorCiBwcml2YXRlOgogICAgIC8vIElQQzo6TWVz
c2FnZVNlbmRlcgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KSBjb25zdCBvdmVycmlkZTsKQEAgLTk3LDggKzEwNSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
bGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3lEb3du
bG9hZCgpOwogCi0gICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKLQog
ICAgIERvd25sb2FkTWFuYWdlciYgbV9kb3dubG9hZE1hbmFnZXI7CiAgICAgRG93bmxvYWRJRCBt
X2Rvd25sb2FkSUQ7CiAgICAgUmVmPERvd25sb2FkTWFuYWdlcjo6Q2xpZW50PiBtX2NsaWVudDsK
QEAgLTExNCw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lv
bklEOwogICAgIFN0cmluZyBtX3N1Z2dlc3RlZE5hbWU7CiAgICAgYm9vbCBtX2hhc1JlY2VpdmVk
RGF0YSB7IGZhbHNlIH07CisgICAgRG93bmxvYWRNb25pdG9yIG1fbW9uaXRvciB7ICp0aGlzIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDExICsxNjksMTAg
QEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OnB1Ymxpc2hEb3dubG9hZFBybwogfQogI2VuZGlmIC8v
IFBMQVRGT1JNKENPQ09BKQogCi12b2lkIERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRGaW5pc2hl
ZChEb3dubG9hZCogZG93bmxvYWQpCit2b2lkIERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRGaW5p
c2hlZChEb3dubG9hZCYgZG93bmxvYWQpCiB7Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRh
aW5zKGRvd25sb2FkLT5kb3dubG9hZElEKCkpKTsKLSAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93
bmxvYWQtPmRvd25sb2FkSUQoKSk7Ci0gICAgCisgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRh
aW5zKGRvd25sb2FkLmRvd25sb2FkSUQoKSkpOworICAgIG1fZG93bmxvYWRzLnJlbW92ZShkb3du
bG9hZC5kb3dubG9hZElEKCkpOwogfQogCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6ZGlkQ3JlYXRl
RG93bmxvYWQoKQpAQCAtMTk2LDQgKzE5NSwxNiBAQCBBdXRoZW50aWNhdGlvbk1hbmFnZXImIERv
d25sb2FkTWFuYWdlcjo6CiAgICAgcmV0dXJuIG1fY2xpZW50LmRvd25sb2Fkc0F1dGhlbnRpY2F0
aW9uTWFuYWdlcigpOwogfQogCit2b2lkIERvd25sb2FkTWFuYWdlcjo6YXBwbGljYXRpb25EaWRF
bnRlckJhY2tncm91bmQoKQoreworICAgIGZvciAoYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fk
cy52YWx1ZXMoKSkKKyAgICAgICAgZG93bmxvYWQtPmFwcGxpY2F0aW9uRW50ZXJlZEJhY2tncm91
bmQoKTsKK30KKwordm9pZCBEb3dubG9hZE1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9y
ZWdyb3VuZCgpCit7CisgICAgZm9yIChhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVl
cygpKQorICAgICAgICBkb3dubG9hZC0+YXBwbGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCShyZXZpc2lv
biAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHZpcnR1YWwgTmV0d29ya0Jsb2JSZWdpc3RyeSYgbmV0d29ya0Jsb2JSZWdpc3RyeSgp
ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZigpIGNvbnN0ID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRlcmVmKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGRv
d25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcigpIGNvbnN0ID0gMDsKICAgICB9OwogCiAgICAg
ZXhwbGljaXQgRG93bmxvYWRNYW5hZ2VyKENsaWVudCYpOwpAQCAtOTgsMTAgKzk5LDEzIEBAIHB1
YmxpYzoKICAgICAKICAgICBEb3dubG9hZCogZG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElE
KSB7IHJldHVybiBtX2Rvd25sb2Fkcy5nZXQoZG93bmxvYWRJRCk7IH0KIAotICAgIHZvaWQgZG93
bmxvYWRGaW5pc2hlZChEb3dubG9hZCopOworICAgIHZvaWQgZG93bmxvYWRGaW5pc2hlZChEb3du
bG9hZCYpOwogICAgIGJvb2wgaXNEb3dubG9hZGluZygpIGNvbnN0IHsgcmV0dXJuICFtX2Rvd25s
b2Fkcy5pc0VtcHR5KCk7IH0KICAgICB1aW50NjRfdCBhY3RpdmVEb3dubG9hZENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9kb3dubG9hZHMuc2l6ZSgpOyB9CiAKKyAgICB2b2lkIGFwcGxpY2F0aW9u
RGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckZvcmVn
cm91bmQoKTsKKwogICAgIHZvaWQgZGlkQ3JlYXRlRG93bmxvYWQoKTsKICAgICB2b2lkIGRpZERl
c3Ryb3lEb3dubG9hZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYXAuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDExIEBAIGJvb2wgRG93bmxvYWRNYXA6OnJlbW92
ZShEb3dubG9hZElEIGRvd24KICAgICByZXR1cm4gcmVzdWx0OwogfQogCithdXRvIERvd25sb2Fk
TWFwOjp2YWx1ZXMoKSAtPiBEb3dubG9hZE1hcFR5cGU6OlZhbHVlc0l0ZXJhdG9yUmFuZ2UKK3sK
KyAgICByZXR1cm4gbV9kb3dubG9hZHMudmFsdWVzKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKFRBS0VfVU5CT1VOREVEX05FVFdPUktJTkdfQVNTRVJU
SU9OKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hcC5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICBEb3dubG9hZE1hcFR5cGU6OkFkZFJlc3VsdCBhZGQo
RG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPiYmKTsKICAgICBib29sIHJlbW92
ZShEb3dubG9hZElEKTsKIAorICAgIERvd25sb2FkTWFwVHlwZTo6VmFsdWVzSXRlcmF0b3JSYW5n
ZSB2YWx1ZXMoKTsKKwogcHJpdmF0ZToKICAgICBEb3dubG9hZE1hcFR5cGUgbV9kb3dubG9hZHM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NBc3NlcnRpb24+IG1fZG93bmxvYWRBc3NlcnRp
b247CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1vbml0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkTW9uaXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEb3dubG9hZE1vbml0b3IuaCIKKworI2luY2x1ZGUgIkRvd25sb2FkLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCisjdW5kZWYgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRAor
I2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRiht
X2Rvd25sb2FkLmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBOZXR3b3JrLCAiJXAgLSBEb3du
bG9hZE1vbml0b3I6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY29uc3RleHByIHVpbnQ2NF90IG9wZXJhdG9yIiIgX2ticHModW5zaWduZWQgbG9u
ZyBsb25nIGtpbG9ieXRlc1BlclNlY29uZCkKK3sKKyAgICByZXR1cm4ga2lsb2J5dGVzUGVyU2Vj
b25kICogMTAyNDsKK30KKworc3RydWN0IFRocm91Z2hwdXRJbnRlcnZhbCB7CisgICAgU2Vjb25k
cyB0aW1lOworICAgIHVpbnQ2NF90IGJ5dGVzUGVyU2Vjb25kOworfTsKKworc3RhdGljIGNvbnN0
IFRocm91Z2hwdXRJbnRlcnZhbCB0aHJvdWdocHV0SW50ZXJ2YWxzW10gPSB7CisgICAgeyAxX21p
biwgMV9rYnBzIH0sCisgICAgeyA1X21pbiwgMl9rYnBzIH0sCisgICAgeyAxMF9taW4sIDRfa2Jw
cyB9LAorICAgIHsgMTVfbWluLCA4X2ticHMgfSwKKyAgICB7IDIwX21pbiwgMTZfa2JwcyB9LAor
ICAgIHsgMjVfbWluLCAzMl9rYnBzIH0sCisgICAgeyAzMF9taW4sIDY0X2ticHMgfSwKKyAgICB7
IDQ1X21pbiwgOTZfa2JwcyB9LAorICAgIHsgNjBfbWluLCAxMjhfa2JwcyB9Cit9OworCitzdGF0
aWMgU2Vjb25kcyB0aW1lVW50aWxOZXh0SW50ZXJ2YWwoc2l6ZV90IGN1cnJlbnRJbnRlcnZhbCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50SW50ZXJ2YWwgKyAxIDwgV1RGX0FSUkFZX0xF
TkdUSCh0aHJvdWdocHV0SW50ZXJ2YWxzKSk7CisgICAgcmV0dXJuIHRocm91Z2hwdXRJbnRlcnZh
bHNbY3VycmVudEludGVydmFsICsgMV0udGltZSAtIHRocm91Z2hwdXRJbnRlcnZhbHNbY3VycmVu
dEludGVydmFsXS50aW1lOworfQorCitEb3dubG9hZE1vbml0b3I6OkRvd25sb2FkTW9uaXRvcihE
b3dubG9hZCYgZG93bmxvYWQpCisgICAgOiBtX2Rvd25sb2FkKGRvd25sb2FkKQoreworfQorCitk
b3VibGUgRG93bmxvYWRNb25pdG9yOjptZWFzdXJlZFRocm91Z2hwdXRSYXRlKCkgY29uc3QKK3sK
KyAgICB1aW50NjRfdCBieXRlcyB7IDAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRpbWVzdGFt
cCA6IG1fdGltZXN0YW1wcykKKyAgICAgICAgYnl0ZXMgKz0gdGltZXN0YW1wLmJ5dGVzUmVjZWl2
ZWQ7CisgICAgaWYgKCFieXRlcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKCFtX3Rp
bWVzdGFtcHMuaXNFbXB0eSgpKTsKKyAgICBTZWNvbmRzIHRpbWVEaWZmZXJlbmNlID0gbV90aW1l
c3RhbXBzLmxhc3QoKS50aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkgLSBtX3RpbWVzdGFtcHMuZmly
c3QoKS50aW1lLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgZG91YmxlIHNlY29uZHMgPSB0aW1l
RGlmZmVyZW5jZS5zZWNvbmRzKCk7CisgICAgaWYgKCFzZWNvbmRzKQorICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsKKyAgICByZXR1cm4gYnl0ZXMgLyBz
ZWNvbmRzOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6ZG93bmxvYWRSZWNlaXZlZEJ5dGVz
KHVpbnQ2NF90IGJ5dGVzUmVjZWl2ZWQpCit7CisgICAgaWYgKG1fdGltZXN0YW1wcy5zaXplKCkg
PiB0aW1lc3RhbXBDYXBhY2l0eSAtIDEpIHsKKyAgICAgICAgQVNTRVJUKG1fdGltZXN0YW1wcy5z
aXplKCkgPT0gdGltZXN0YW1wQ2FwYWNpdHkpOworICAgICAgICBtX3RpbWVzdGFtcHMucmVtb3Zl
Rmlyc3QoKTsKKyAgICB9CisgICAgbV90aW1lc3RhbXBzLmFwcGVuZCh7IE1vbm90b25pY1RpbWU6
Om5vdygpLCBieXRlc1JlY2VpdmVkIH0pOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6YXBw
bGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCgpCit7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgiYXBwbGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rv
d25sb2FkLmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgIG1fdGltZXIuc3RvcCgpOwor
ICAgIG1faW50ZXJ2YWwgPSAwOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6YXBwbGljYXRp
b25FbnRlcmVkQmFja2dyb3VuZCgpCit7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiYXBw
bGljYXRpb25FbnRlcmVkQmFja2dyb3VuZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rvd25sb2Fk
LmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVCghbV90aW1lci5pc0FjdGl2
ZSgpKTsKKyAgICBBU1NFUlQoIW1faW50ZXJ2YWwpOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KHRocm91Z2hwdXRJbnRlcnZhbHNbMF0udGltZSAvIHNwZWVkTXVsdGlwbGllcigpKTsKK30KKwor
dWludDMyX3QgRG93bmxvYWRNb25pdG9yOjpzcGVlZE11bHRpcGxpZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2Rvd25sb2FkLm1hbmFnZXIoKS5jbGllbnQoKS5kb3dubG9hZE1vbml0b3JTcGVl
ZE11bHRpcGxpZXIoKTsKK30KKwordm9pZCBEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1faW50ZXJ2YWwgPCBXVEZfQVJSQVlfTEVOR1RIKHRocm91
Z2hwdXRJbnRlcnZhbHMpKTsKKyAgICBpZiAobWVhc3VyZWRUaHJvdWdocHV0UmF0ZSgpIDwgdGhy
b3VnaHB1dEludGVydmFsc1ttX2ludGVydmFsXS5ieXRlc1BlclNlY29uZCkgeworICAgICAgICBS
RUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVkOiBjYW5jZWxsaW5nIGRvd25sb2FkIChp
ZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7
CisgICAgICAgIG1fZG93bmxvYWQuY2FuY2VsKCk7CisgICAgfSBlbHNlIGlmIChtX2ludGVydmFs
ICsgMSA8IFdURl9BUlJBWV9MRU5HVEgodGhyb3VnaHB1dEludGVydmFscykpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidGltZXJGaXJlZDogc3VmZmljaWVudCB0aHJvdWdocHV0
IHJhdGUgKGlkID0gJSIgUFJJdTY0ICIpIiwgbV9kb3dubG9hZC5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpKTsKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QodGltZVVudGlsTmV4dEludGVy
dmFsKG1faW50ZXJ2YWwrKykgLyBzcGVlZE11bHRpcGxpZXIoKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInRpbWVyRmlyZWQ6IERvd25sb2FkIHJlYWNoZWQg
dGhyZXNob2xkIHRvIG5vdCBiZSB0ZXJtaW5hdGVkIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93
bmxvYWQuZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNb25pdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgRG93bmxvYWQ7CisKK2NsYXNzIERvd25sb2FkTW9uaXRvciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRNb25pdG9yKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG93bmxvYWRNb25pdG9yKERvd25sb2FkJik7CisgICAg
CisgICAgdm9pZCBhcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBs
aWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKCk7CisgICAgdm9pZCBkb3dubG9hZFJlY2VpdmVkQnl0
ZXModWludDY0X3QpOworICAgIHZvaWQgdGltZXJGaXJlZCgpOworCitwcml2YXRlOgorICAgIERv
d25sb2FkJiBtX2Rvd25sb2FkOworCisgICAgZG91YmxlIG1lYXN1cmVkVGhyb3VnaHB1dFJhdGUo
KSBjb25zdDsKKyAgICB1aW50MzJfdCBzcGVlZE11bHRpcGxpZXIoKSBjb25zdDsKKyAgICAKKyAg
ICBzdHJ1Y3QgVGltZXN0YW1wIHsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lOworICAgICAg
ICB1aW50NjRfdCBieXRlc1JlY2VpdmVkOworICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgdGltZXN0YW1wQ2FwYWNpdHkgPSAxMDsKKyAgICBEZXF1ZTxUaW1lc3RhbXAsIHRpbWVz
dGFtcENhcGFjaXR5PiBtX3RpbWVzdGFtcHM7CisgICAgV2ViQ29yZTo6VGltZXIgbV90aW1lciB7
ICp0aGlzLCAmRG93bmxvYWRNb25pdG9yOjp0aW1lckZpcmVkIH07CisgICAgc2l6ZV90IG1faW50
ZXJ2YWwgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvck1h
aW5GcmFtZSgpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFt
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikg
PSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFBy
b3h5KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxv
YWRQcm94eSYpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVSdW5PcGVuUGFuZWwoV2Vi
UGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIEFQSTo6T3BlblBhbmVsUGFyYW1ldGVycyosIFdl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBzaG93U2hhcmVTaGVldChjb25zdCBXZWJDb3JlOjpTaGFyZURhdGFXaXRoUGFy
c2VkVVJMJiwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJikgeyByZXR1cm4g
ZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAko
cmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgzNSwxMyArMjgzNSwxMyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cmVjZWl2ZWRQb2xpY3lEZWNpc2lvCiAgICAgRG93bmxvYWRJRCBkb3dubG9hZElEID0g
eyB9OwogICAgIGlmIChhY3Rpb24gPT0gUG9saWN5QWN0aW9uOjpEb3dubG9hZCkgewogICAgICAg
ICAvLyBDcmVhdGUgYSBkb3dubG9hZCBwcm94eS4KLSAgICAgICAgYXV0byogZG93bmxvYWQgPSBt
X3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuY3JlYXRlRG93bmxvYWRQcm94eShtX2RlY2lkZVBvbGlj
eUZvclJlc3BvbnNlUmVxdWVzdCwgdGhpcyk7CisgICAgICAgIGF1dG8mIGRvd25sb2FkID0gbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLmNyZWF0ZURvd25sb2FkUHJveHkobV9kZWNpZGVQb2xpY3lG
b3JSZXNwb25zZVJlcXVlc3QsIHRoaXMpOwogICAgICAgICBpZiAobmF2aWdhdGlvbikgewotICAg
ICAgICAgICAgZG93bmxvYWQtPnNldFdhc1VzZXJJbml0aWF0ZWQobmF2aWdhdGlvbi0+d2FzVXNl
ckluaXRpYXRlZCgpKTsKLSAgICAgICAgICAgIGRvd25sb2FkLT5zZXRSZWRpcmVjdENoYWluKG5h
dmlnYXRpb24tPnRha2VSZWRpcmVjdENoYWluKCkpOworICAgICAgICAgICAgZG93bmxvYWQuc2V0
V2FzVXNlckluaXRpYXRlZChuYXZpZ2F0aW9uLT53YXNVc2VySW5pdGlhdGVkKCkpOworICAgICAg
ICAgICAgZG93bmxvYWQuc2V0UmVkaXJlY3RDaGFpbihuYXZpZ2F0aW9uLT50YWtlUmVkaXJlY3RD
aGFpbigpKTsKICAgICAgICAgfQogCi0gICAgICAgIGRvd25sb2FkSUQgPSBkb3dubG9hZC0+ZG93
bmxvYWRJRCgpOworICAgICAgICBkb3dubG9hZElEID0gZG93bmxvYWQuZG93bmxvYWRJRCgpOwog
ICAgICAgICBoYW5kbGVEb3dubG9hZFJlcXVlc3QoZG93bmxvYWQpOwogICAgICAgICBtX2RlY2lk
ZVBvbGljeUZvclJlc3BvbnNlUmVxdWVzdCA9IHsgfTsKICAgICB9CkBAIC01NDEwLDcgKzU0MTAs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TWF5U3RhcnRNZWRpYVdoZW5JCiAgICAgcHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldE1heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3co
bWF5U3RhcnRNZWRpYSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRs
ZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7CiAg
ICAgcGFnZUNsaWVudCgpLmhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjQyODQyKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwOTIsNyArMTA5Miw3IEBAIHB1YmxpYzoKIAogICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnMgY3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYsIERyYXdpbmdBcmVhUHJv
eHkmKTsKIAotICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKTsK
KyAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jik7CiAKICAgICB2
b2lkIGFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsK
ICAgICB2b2lkIGNoYW5nZVNwZWxsaW5nVG9Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAy
NDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyOTgsOSArMTI5OCw5IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhh
c1BhZ2VzVXNpbmdXZWJzaXQKICAgICByZXR1cm4gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmNvbnRh
aW5zKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSk7CiB9CiAKLURvd25sb2FkUHJveHkqIFdlYlByb2Nl
c3NQb29sOjpkb3dubG9hZChXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCitE
b3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0
aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVuYW1lKQogewotICAgIGF1dG8qIGRvd25sb2FkUHJveHkgPSBjcmVhdGVE
b3dubG9hZFByb3h5KHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlKTsKKyAgICBhdXRvJiBkb3dubG9h
ZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSk7CiAg
ICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gaW5pdGlhdGluZ1BhZ2UgPyBpbml0aWF0aW5n
UGFnZS0+c2Vzc2lvbklEKCkgOiBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwog
CiAgICAgaWYgKGluaXRpYXRpbmdQYWdlKQpAQCAtMTMyMywxNiArMTMyMywxNiBAQCBEb3dubG9h
ZFByb3h5KiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoCiAgICAgICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50
KCkpOwogICAgICAgICB9CiAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxz
ZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElE
KCksIHVwZGF0ZWRSZXF1ZXN0LCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOworICAgICAgICBuZXR3
b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1
ZXN0KHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0
LCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwogICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
ICAgICB9CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIAotRG93bmxvYWRQcm94eSog
V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1Bh
Z2UsIGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQorRG93
bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSog
aW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5n
JiBwYXRoKQogewotICAgIGF1dG8qIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5
KFJlc291cmNlUmVxdWVzdCgpLCBpbml0aWF0aW5nUGFnZSk7CisgICAgYXV0byYgZG93bmxvYWRQ
cm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoUmVzb3VyY2VSZXF1ZXN0KCksIGluaXRpYXRpbmdQ
YWdlKTsKICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBpbml0aWF0aW5nUGFnZSA/IGlu
aXRpYXRpbmdQYWdlLT5zZXNzaW9uSUQoKSA6IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZTsKQEAgLTEzNDAsNyArMTM0MCw3IEBAIERvd25sb2FkUHJveHkqIFdlYlByb2Nlc3NQb29s
OjpyZXN1bWVEb3cKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgs
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSk7CiAKICAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vz
cygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lv
bklELCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHJlc3VtZURhdGEtPmRhdGFSZWZlcmVu
Y2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOworICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQo
c2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS0+ZGF0YVJl
ZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgICAgIHJl
dHVybiBkb3dubG9hZFByb3h5OwogICAgIH0KIApAQCAtMTU5MSwxMyArMTU5MSwxOCBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAgICAgc2VuZFRvQWxsUHJvY2Vz
c2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZh
bCh0aW1lb3V0SW50ZXJ2YWwpKTsKIH0KIAotRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bvb2w6
OmNyZWF0ZURvd25sb2FkUHJveHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQ
YWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29s
OjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2Vi
UGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7Ci0gICAgYXV0byBkb3dubG9hZFByb3h5ID0g
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QpOwotICAg
IGRvd25sb2FkUHJveHktPnNldE9yaWdpbmF0aW5nUGFnZShvcmlnaW5hdGluZ1BhZ2UpOworICAg
IGF1dG8mIGRvd25sb2FkUHJveHkgPSBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25s
b2FkUHJveHkocmVxdWVzdCk7CisgICAgZG93bmxvYWRQcm94eS5zZXRPcmlnaW5hdGluZ1BhZ2Uo
b3JpZ2luYXRpbmdQYWdlKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIAordm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQp
Cit7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
KGJhY2tncm91bmQpOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2
ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdl
UmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKIHsKICAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5h
ZGRNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwgbWVzc2FnZVJlY2VpdmVyKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24g
MjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDggKzE5NCw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmlu
ZyYgaW5qZWN0ZWRCdW5kbGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5p
bmplY3RlZEJ1bmRsZVBhdGgoKTsgfQogCi0gICAgRG93bmxvYWRQcm94eSogZG93bmxvYWQoV2Vi
UGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7Ci0gICAgRG93bmxvYWRQ
cm94eSogcmVzdW1lRG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3Qg
QVBJOjpEYXRhKiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIERvd25sb2Fk
UHJveHkmIGRvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7
IH0pOworICAgIERvd25sb2FkUHJveHkmIHJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5p
dGlhdGluZ1BhZ2UsIGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBw
YXRoKTsKIAogICAgIHZvaWQgc2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRh
KFJlZlB0cjxBUEk6Ok9iamVjdD4mJiB1c2VyRGF0YSkgeyBtX2luamVjdGVkQnVuZGxlSW5pdGlh
bGl6YXRpb25Vc2VyRGF0YSA9IFdURk1vdmUodXNlckRhdGEpOyB9CiAKQEAgLTI2Nyw3ICsyNjcs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkoYm9vbCk7CiAg
ICAgCiAgICAgLy8gRG93bmxvYWRzLgotICAgIERvd25sb2FkUHJveHkqIGNyZWF0ZURvd25sb2Fk
UHJveHkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViUGFnZVByb3h5KiBvcmln
aW5hdGluZ1BhZ2UpOworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1Bh
Z2UpOwogICAgIEFQSTo6RG93bmxvYWRDbGllbnQmIGRvd25sb2FkQ2xpZW50KCkgeyByZXR1cm4g
Km1fZG93bmxvYWRDbGllbnQ7IH0KIAogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGll
bnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CkBAIC00MzAs
NiArNDMwLDggQEAgcHVibGljOgogICAgIGJvb2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0K
ICAgICBib29sIHNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Nob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb247IH0KIAorICAgIHZvaWQgc3ludGhl
c2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpOworICAgIAogI2lmIEVOQUJMRShH
QU1FUEFEKQogICAgIHZvaWQgZ2FtZXBhZENvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmKTsKICAg
ICB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJik7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNSw2ICsxMTUsNyBAQCBSZWY8UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uPiBQcm9jZXNz
UG9vCiAgICAgY29weS0+bV9zaG91bGRDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IHRoaXMtPm1f
c2hvdWxkQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3M7CiAgICAgY29weS0+bV9zaG91bGRDYXB0dXJl
RGlzcGxheUluVUlQcm9jZXNzID0gdGhpcy0+bV9zaG91bGRDYXB0dXJlRGlzcGxheUluVUlQcm9j
ZXNzOwogICAgIGNvcHktPm1faXNKSVRFbmFibGVkID0gdGhpcy0+bV9pc0pJVEVuYWJsZWQ7Cisg
ICAgY29weS0+bV9kb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgPSB0aGlzLT5tX2Rvd25s
b2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGNvcHktPm1fY3REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlID0gdGhpcy0+bV9jdERhdGFDb25u
ZWN0aW9uU2VydmljZVR5cGU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHJldmlz
aW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1Np
bmdsZVdlYlByb2Nlc3M7IH0KICAgICB2b2lkIHNldFVzZXNTaW5nbGVXZWJQcm9jZXNzKGJvb2wg
ZW5hYmxlZCkgeyBtX3VzZXNTaW5nbGVXZWJQcm9jZXNzID0gZW5hYmxlZDsgfQogCisgICAgdWlu
dDMyX3QgZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKCkgY29uc3QgeyByZXR1cm4gbV9k
b3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXI7IH0KKyAgICB2b2lkIHNldERvd25sb2FkTW9u
aXRvclNwZWVkTXVsdGlwbGllcih1aW50MzJfdCBtdWx0aXBsaWVyKSB7IG1fZG93bmxvYWRNb25p
dG9yU3BlZWRNdWx0aXBsaWVyID0gbXVsdGlwbGllcjsgfQorICAgIAogICAgIGJvb2wgaXNBdXRv
bWF0aWNQcm9jZXNzV2FybWluZ0VuYWJsZWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IG1faXNBdXRvbWF0aWNQcm9jZXNzV2FybWluZ0VuYWJsZWRCeUNsaWVudC52YWx1ZU9yKG1fY2xp
ZW50V291bGRCZW5lZml0RnJvbUF1dG9tYXRpY1Byb2Nlc3NQcmV3YXJtaW5nKTsKQEAgLTIyOCw2
ICsyMzEsNyBAQCBwcml2YXRlOgogICAgIFdURjo6U3RyaW5nIG1fY3VzdG9tV2ViQ29udGVudFNl
cnZpY2VCdW5kbGVJZGVudGlmaWVyOwogICAgIGJvb2wgbV9pc0pJVEVuYWJsZWQgeyB0cnVlIH07
CiAgICAgYm9vbCBtX3VzZXNTaW5nbGVXZWJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICB1aW50MzJf
dCBtX2Rvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllciB7IDEgfTsKIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgV1RGOjpTdHJpbmcgbV9jdERhdGFDb25uZWN0aW9uU2VydmljZVR5
cGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NSwxMiArMjc1LDEyIEBAIHZvaWQgV0tDb250
ZXh0U2V0Q29ubmVjdGlvbkNsaWVudChXS0NvbnQKIAogV0tEb3dubG9hZFJlZiBXS0NvbnRleHRE
b3dubG9hZFVSTFJlcXVlc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLVVJMUmVxdWVzdFJl
ZiByZXF1ZXN0UmVmKQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5kb3dubG9hZCgwLCBXZWJLaXQ6OnRvSW1wbChyZXF1ZXN0UmVmKS0+cmVz
b3VyY2VSZXF1ZXN0KCkpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0Ojp0b0lt
cGwoY29udGV4dFJlZiktPmRvd25sb2FkKDAsIFdlYktpdDo6dG9JbXBsKHJlcXVlc3RSZWYpLT5y
ZXNvdXJjZVJlcXVlc3QoKSkpOwogfQogCiBXS0Rvd25sb2FkUmVmIFdLQ29udGV4dFJlc3VtZURv
d25sb2FkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0RhdGFSZWYgcmVzdW1lRGF0YSwgV0tT
dHJpbmdSZWYgcGF0aCkKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1w
bChjb250ZXh0UmVmKS0+cmVzdW1lRG93bmxvYWQobnVsbHB0ciwgV2ViS2l0Ojp0b0ltcGwocmVz
dW1lRGF0YSksIFdlYktpdDo6dG9XVEZTdHJpbmcocGF0aCkpKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSSgmV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnJlc3VtZURvd25sb2FkKG51bGxw
dHIsIFdlYktpdDo6dG9JbXBsKHJlc3VtZURhdGEpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKHBhdGgp
KSk7CiB9CiAKIHZvaWQgV0tDb250ZXh0U2V0SW5pdGlhbGl6YXRpb25Vc2VyRGF0YUZvckluamVj
dGVkQnVuZGxlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCAgV0tUeXBlUmVmIHVzZXJEYXRhUmVm
KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2wubW0JKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsNiArNTU4
LDExIEBAIC0gKHZvaWQpX3NldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkOihCT08KICAgICBfcHJv
Y2Vzc1Bvb2wtPnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGVuYWJsZWQpOwogfQogCistICh2
b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKK3sKKyAgICBf
cHJvY2Vzc1Bvb2wtPnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisK
IC0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9P
TCkgYWxsb3dzCiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNTgyLDcgKzU4Nyw3
IEBAIC0gKHZvaWQpX3NldENvcmVMb2NhdGlvblByb3ZpZGVyOihpZDxfV0sKIAogLSAoX1dLRG93
bmxvYWQgKilfZG93bmxvYWRVUkxSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0IG9yaWdp
bmF0aW5nV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldwogewotICAgIHJldHVybiAoX1dLRG93
bmxvYWQgKilfcHJvY2Vzc1Bvb2wtPmRvd25sb2FkKFt3ZWJWaWV3IF9wYWdlXSwgcmVxdWVzdCkt
PndyYXBwZXIoKTsKKyAgICByZXR1cm4gKF9XS0Rvd25sb2FkICopX3Byb2Nlc3NQb29sLT5kb3du
bG9hZChbd2ViVmlldyBfcGFnZV0sIHJlcXVlc3QpLndyYXBwZXIoKTsKIH0KIAogLSAoX1dLRG93
bmxvYWQgKilfcmVzdW1lRG93bmxvYWRGcm9tRGF0YTooTlNEYXRhICopcmVzdW1lRGF0YSBwYXRo
OihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFBy
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbFByaXZhdGUuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExOSw1ICsxMTksNiBAQAogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9p
c0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3Jh
Z2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0Vu
YWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdl
ciBzdXBwb3J0ZWQiLCBtYWNvc3goMTAuMTIuMywgV0tfTUFDX1RCQSksIGlvcygxMC4zLCBXS19J
T1NfVEJBKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc1N0b3JhZ2VBY2Nlc3NB
UElFbmFibGVkLCBzZXR0ZXI9X3NldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkOikgQk9PTCBfc3Rv
cmFnZUFjY2Vzc0FQSUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMuNCksIGlv
cygxMS4zKSk7CistICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tn
cm91bmQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHJldmlzaW9u
IDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBXS19D
TEFTU19BVkFJTEFCTEUobWFjb3N4KDEwLjEwKSwgaW9zKDguCiBAcHJvcGVydHkgKG5vbmF0b21p
YykgQk9PTCBwYWdlQ2FjaGVFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjE0KSwg
aW9zKDEyLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHN1cHByZXNzZXNDb25uZWN0
aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5nZSBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4x
NCksIGlvcygxMi4wKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzSklURW5hYmxl
ZCkgQk9PTCBKSVRFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOworQHByb3BlcnR5IChub25hdG9taWMpIE5TVUludGVnZXIgZG93bmxv
YWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24ubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5tbQkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzI0LDYgKzMyNCwxNiBAQCAtICh2b2lkKXNldEpJVEVuYWJsZWQ6KEJPT0wpZW5hYmxl
ZAogICAgIF9wcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24tPnNldEpJVEVuYWJsZWQoZW5hYmxlZCk7
CiB9CiAKKy0gKE5TVUludGVnZXIpZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyCit7Cisg
ICAgcmV0dXJuIF9wcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24tPmRvd25sb2FkTW9uaXRvclNwZWVk
TXVsdGlwbGllcigpOworfQorCistICh2b2lkKXNldERvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlw
bGllcjooTlNVSW50ZWdlciltdWx0aXBsaWVyCit7CisgICAgX3Byb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi0+c2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKG11bHRpcGxpZXIpOworfQor
CiAtICh2b2lkKXNldFN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5n
ZTooQk9PTClzdXBwcmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2UKIHsK
ICAgICBfcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLT5zZXRTdXBwcmVzc2VzQ29ubmVjdGlvblRl
cm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2Uoc3VwcHJlc3Nlc0Nvbm5lY3Rpb25UZXJtaW5hdGlvbk9u
U3lzdGVtQ2hhbmdlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0Rvd25s
b2FkUHJveHlNYXBDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29jb2EubW0JKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvRG93bmxvYWRQcm94eU1hcENvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIkRvd25sb2FkUHJveHlNYXAuaCIKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit2b2lkIERvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtQ3JlYXRlKCkKK3sKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgIG1fYmFja2dyb3VuZE9ic2VydmVyID0gW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlckZvck5hbWU6VUlBcHBsaWNhdGlvbkRp
ZEVudGVyQmFja2dyb3VuZE5vdGlmaWNhdGlvbiBvYmplY3Q6W1VJQXBwbGljYXRpb24gc2hhcmVk
QXBwbGljYXRpb25dIHF1ZXVlOm5pbCB1c2luZ0Jsb2NrOm1ha2VCbG9ja1B0cihbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyldKE5TTm90aWZpY2F0aW9uICopIHsKKyAgICAgICAgaWYgKCF3
ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2Vha1RoaXMtPmFwcGxpY2F0
aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgfSkuZ2V0KCldOworICAgIG1fZm9yZWdyb3Vu
ZE9ic2VydmVyID0gW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNl
cnZlckZvck5hbWU6VUlBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmROb3RpZmljYXRpb24g
b2JqZWN0OltVSUFwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXSBxdWV1ZTpuaWwgdXNpbmdC
bG9jazptYWtlQmxvY2tQdHIoW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShOU05vdGlm
aWNhdGlvbiAqKSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHdlYWtUaGlzLT5hcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKTsKKyAg
ICB9KS5nZXQoKV07CisjZW5kaWYKK30KKwordm9pZCBEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bURlc3Ryb3koKQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX2JhY2tncm91bmRPYnNl
cnZlci5nZXQoKV07CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBy
ZW1vdmVPYnNlcnZlcjptX2ZvcmVncm91bmRPYnNlcnZlci5nZXQoKV07CisjZW5kaWYKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHJldmlzaW9uIDI0Mjg0MikKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHdv
cmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxNCBAQAogI2ltcG9ydCA8c3lzL3BhcmFtLmg+CiAj
aW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2Uu
aD4KKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0
bGVtZW50cy5oPgogI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vZHlsZFNQSS5oPgogCiAjaWYgUExB
VEZPUk0oTUFDKQogI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVJlbW90ZUxheWVyU2VydmVyLmg+Cisj
ZWxzZQorI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNlbmRpZgogCiBOU1N0cmluZyAqV2ViU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeURlZmF1bHRzS2V5ID0gQCJXZWJTZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IjsKQEAgLTMwMyw2ICszMDYsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAjZW5kaWYKIAogICAgIHBhcmFtZXRlcnMu
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojpp
c0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKKyAgICBw
YXJhbWV0ZXJzLmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllciA9IG1fY29uZmlndXJhdGlv
bi0+ZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAkocmV2aXNpb24g
MjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBEb3dubG9hZFBy
b3h5OjpkaWRGaW5pc2goKQogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlk
RmluaXNoKCptX3Byb2Nlc3NQb29sLCAqdGhpcyk7CiAKICAgICAvLyBUaGlzIGNhbiBjYXVzZSB0
aGUgRG93bmxvYWRQcm94eSBvYmplY3QgdG8gYmUgZGVsZXRlZC4KLSAgICBtX2Rvd25sb2FkUHJv
eHlNYXAuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93
bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8QVBJOjpEYXRhPiBjcmVh
dGVEYXRhKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKQEAgLTIzMCw3ICsyMzAsNyBA
QCB2b2lkIERvd25sb2FkUHJveHk6OmRpZEZhaWwoY29uc3QgUmVzb3VyCiAgICAgbV9wcm9jZXNz
UG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRGYWlsKCptX3Byb2Nlc3NQb29sLCAqdGhpcywgZXJy
b3IpOwogCiAgICAgLy8gVGhpcyBjYW4gY2F1c2UgdGhlIERvd25sb2FkUHJveHkgb2JqZWN0IHRv
IGJlIGRlbGV0ZWQuCi0gICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQodGhp
cyk7CisgICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwogfQog
CiB2b2lkIERvd25sb2FkUHJveHk6OmRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
IHJlc3VtZURhdGEpCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRD
YW5jZWwoY29uc3QgSVBDOgogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlk
Q2FuY2VsKCptX3Byb2Nlc3NQb29sLCAqdGhpcyk7CiAKICAgICAvLyBUaGlzIGNhbiBjYXVzZSB0
aGUgRG93bmxvYWRQcm94eSBvYmplY3QgdG8gYmUgZGVsZXRlZC4KLSAgICBtX2Rvd25sb2FkUHJv
eHlNYXAuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93
bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5TWFwLmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxOSAr
NDAsNDMgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBEb3dubG9hZFByb3h5TWFwOjpEb3dubG9h
ZFByb3h5TWFwKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb2Nlc3MpCi0gICAgOiBtX3Byb2Nlc3Mo
JnByb2Nlc3MpCisgICAgOiBtX3Byb2Nlc3MobWFrZVdlYWtQdHIocHJvY2VzcykpCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgLCBtX3Nob3VsZFRha2VBc3NlcnRpb24oV1RGOjpwcm9jZXNzSGFz
RW50aXRsZW1lbnQoImNvbS5hcHBsZS5tdWx0aXRhc2tpbmcuc3lzdGVtYXBwYXNzZXJ0aW9ucyIp
KQogI2VuZGlmCiB7CisgICAgcGxhdGZvcm1DcmVhdGUoKTsKIH0KIAogRG93bmxvYWRQcm94eU1h
cDo6fkRvd25sb2FkUHJveHlNYXAoKQogewogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5pc0VtcHR5
KCkpOworICAgIHBsYXRmb3JtRGVzdHJveSgpOwogfQogCi1Eb3dubG9hZFByb3h5KiBEb3dubG9h
ZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCisjaWYg
IVBMQVRGT1JNKENPQ09BKQordm9pZCBEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybUNyZWF0ZSgp
Cit7Cit9CisKK3ZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30K
KyNlbmRpZgorCit2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKCkKK3sKKyAgICBpZiAobV9wcm9jZXNzKQorICAgICAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgp
LCAwKTsKK30KKwordm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZv
cmVncm91bmQoKQoreworICAgIGlmIChtX3Byb2Nlc3MpCisgICAgICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3Vu
ZCgpLCAwKTsKK30KKworRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93
bmxvYWRQcm94eShXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogewogICAgIGF1dG8gZG93bmxvYWRQcm94
eSA9IERvd25sb2FkUHJveHk6OmNyZWF0ZSgqdGhpcywgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVx
dWVzdCk7CiAgICAgbV9kb3dubG9hZHMuc2V0KGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKSwg
ZG93bmxvYWRQcm94eS5jb3B5UmVmKCkpOwpAQCAtNjQsMTIgKzg4LDEyIEBAIERvd25sb2FkUHJv
eHkqIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZUQKIAogICAgIG1fcHJvY2Vzcy0+YWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHku
Z2V0KCkpOwogCi0gICAgcmV0dXJuIGRvd25sb2FkUHJveHkucHRyKCk7CisgICAgcmV0dXJuIGRv
d25sb2FkUHJveHk7CiB9CiAKLXZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hl
ZChEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5KQordm9pZCBEb3dubG9hZFByb3h5TWFwOjpk
b3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkpCiB7Ci0gICAgYXV0
byBkb3dubG9hZElEID0gZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpOworICAgIGF1dG8gZG93
bmxvYWRJRCA9IGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpOwogCiAgICAgLy8gVGhlIERvd25s
b2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNz
IHBvb2wuCiAgICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpKTsKQEAgLTc3LDcgKzEwMSw3IEBAIHZvaWQgRG93bmxvYWRQcm94
eU1hcDo6ZG93bmxvYWRGaW5pc2hlZCgKICAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMo
ZG93bmxvYWRJRCkpOwogCiAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5k
b3dubG9hZElEKCkpOwotICAgIGRvd25sb2FkUHJveHktPmludmFsaWRhdGUoKTsKKyAgICBkb3du
bG9hZFByb3h5LmludmFsaWRhdGUoKTsKICAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93bmxvYWRJ
RCk7CiAKICAgICBpZiAobV9kb3dubG9hZHMuaXNFbXB0eSgpICYmIG1fc2hvdWxkVGFrZUFzc2Vy
dGlvbikgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eU1hcC5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCwxMiBAQAogI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyNpbmNsdWRlIDxvYmpjL29iamMuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CkBAIC00MCw3ICs0Niw3IEBAIGNsYXNzIE5l
dHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBQcm9jZXNzQXNzZXJ0aW9uOwogY2xhc3MgV2ViUHJv
Y2Vzc1Bvb2w7CiAKLWNsYXNzIERvd25sb2FkUHJveHlNYXAgeworY2xhc3MgRG93bmxvYWRQcm94
eU1hcCA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxEb3dubG9hZFByb3h5TWFwPiB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRQ
cm94eU1hcCk7CiAKQEAgLTQ4LDE5ICs1NCwyOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgRG93
bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAgICAgfkRvd25sb2FkUHJveHlN
YXAoKTsKIAotICAgIERvd25sb2FkUHJveHkqIGNyZWF0ZURvd25sb2FkUHJveHkoV2ViUHJvY2Vz
c1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICB2b2lkIGRvd25s
b2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSopOworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURv
d25sb2FkUHJveHkoV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKTsKKyAgICB2b2lkIGRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSYpOwogCiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZHMuaXNFbXB0eSgpOyB9CiAK
ICAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZSgpOwogCisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCgpOworICAgIHZvaWQgYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KCk7CisKIHByaXZhdGU6Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbV9wcm9jZXNzOworICAg
IHZvaWQgcGxhdGZvcm1DcmVhdGUoKTsKKyAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworCisg
ICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxE
b3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9v
bCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQ
cm9jZXNzQXNzZXJ0aW9uPiBtX2Rvd25sb2FkQXNzZXJ0aW9uOworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCisgICAgUmV0YWluUHRyPGlkPiBtX2JhY2tncm91bmRPYnNlcnZlcjsKKyAgICBSZXRh
aW5QdHI8aWQ+IG1fZm9yZWdyb3VuZE9ic2VydmVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0NywxNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmdldE5ldHdvcmtQcm9jCiAgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoaXNTZXJ2aWNlV29y
a2VyUHJvY2Vzcywgc2VjdXJpdHlPcmlnaW4pLCAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNo
TWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiB9CiAKLURvd25sb2FkUHJveHkq
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQoreworICAgIGlmIChtX2Rvd25s
b2FkUHJveHlNYXApIHsKKyAgICAgICAgaWYgKGJhY2tncm91bmQpCisgICAgICAgICAgICBtX2Rv
d25sb2FkUHJveHlNYXAtPmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+YXBwbGljYXRpb25XaWxsRW50
ZXJGb3JlZ3JvdW5kKCk7CisgICAgfQorfQorCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3Vy
Y2VSZXF1ZXN0KQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rv
d25sb2FkUHJveHlNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0aGlz
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNyArNjYsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CiBj
bGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTsKIHN0cnVjdCBXZWJzaXRlRGF0YTsK
IAotY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9j
ZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCB7CitjbGFzcyBOZXR3b3Jr
UHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0
ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1By
b2Nlc3NQcm94eT4gewogcHVibGljOgogICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47CiAgICAgdXNpbmcgVG9wRnJhbWVEb21haW4gPSBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVk
UmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5KiBjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURv
d25sb2FkUHJveHkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICB2b2lk
IGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6
U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRT
aW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAg
LTE1NCw2ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZW5kUHJvY2Vzc0RpZFRy
YW5zaXRpb25Ub0ZvcmVncm91bmQoKTsKICAgICB2b2lkIHNlbmRQcm9jZXNzRGlkVHJhbnNpdGlv
blRvQmFja2dyb3VuZCgpOworICAgIHZvaWQgc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29s
IGJhY2tncm91bmQpOwogCiAgICAgdm9pZCBzZXRJc0hvbGRpbmdMb2NrZWRGaWxlcyhib29sKTsK
ICAgICB2b2lkIHNldElzSURCRGF0YWJhc2VIb2xkaW5nTG9ja2VkRmlsZXMoYm9vbCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAko
cmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRs
ZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBoYW5k
bGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlk
Q2hhbmdlQ29udGVudFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJyaWRlOwogICAg
IHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpIG92ZXJyaWRlOwogICAgIHZv
aWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQko
cmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZGlkQ29tbWl0TG9hZEZvck1haQogICAgIFttX2NvbnRlbnRWaWV3IF9kaWRD
b21taXRMb2FkRm9yTWFpbkZyYW1lXTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxl
RG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFu
ZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKQogewogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAkocmV2aXNpb24g
MjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFj
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRv
b2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYgb2xkVG9vbFRpcCwgY29uc3QgU3RyaW5nJiBuZXdU
b29sVGlwKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCB1c2VDdXN0b21Db250ZW50UHJvdmlkZXIpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21Db250ZW50UHJvdmlk
ZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQ
cm94eSopIG92ZXJyaWRlOworICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2Fk
UHJveHkmKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJD
b3JlOjpDdXJzb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91
c2VNb3Zlcyhib29sKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9QYWdlQ2xpZW50SW1wbE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZEZpbmlzaExvYWRp
bmdEYXQKIHsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0
KERvd25sb2FkUHJveHkqKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1
ZXN0KERvd25sb2FkUHJveHkmKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTM0NTgsNiArMzQ1OCw5IEBACiAJCTVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3
b3JrU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrU2Vz
c2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzI2OTU4NDIwMDQyRjEyMDA1
QzQzOUIgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS09wZW5QYW5lbFBhcmFtZXRlcnNQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMjk4RDlFMUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5n
RG93bmxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVuZGluZ0Rvd25s
b2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMkIxQUYzMjIzQUI3MjgwMEI5
MUNGNyAvKiBEb3dubG9hZE1vbml0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRG93bmxvYWRNb25pdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNUMyQjFBRjQyMjNBQjcyODAwQjkxQ0Y3IC8qIERvd25sb2FkTW9uaXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb3dubG9hZE1vbml0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNUMyQjFBRjUyMjNDMUZEMjAwQjkxQ0Y3IC8qIERvd25sb2FkUHJv
eHlNYXBDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERv
d25sb2FkUHJveHlNYXBDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMz
NTlDMEMyMTU0NzMyMTAwOUU3OTQ4IC8qIFdLRGVwcmVjYXRlZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS0RlcHJlY2F0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUMzQUVBOEUxRkUxRjFERjAwMjMxOEQzIC8qIFdlYnNpdGVQb2xpY2llc0RhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vic2l0ZVBvbGljaWVzRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNDZDMEFDMjFCNzE5OEIwMEJD
NTk5MSAvKiBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzM4LDYgKzUzNDEsNyBAQAogCQkJCTgz
ODkxQjZCMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbSAqLywK
IAkJCQlBMURGNjMxMTE4RTBCN0M4MDAzQTNFMkEgLyogRG93bmxvYWRDbGllbnQuaCAqLywKIAkJ
CQlBMURGNjMxMDE4RTBCN0M4MDAzQTNFMkEgLyogRG93bmxvYWRDbGllbnQubW0gKi8sCisJCQkJ
NUMyQjFBRjUyMjNDMUZEMjAwQjkxQ0Y3IC8qIERvd25sb2FkUHJveHlNYXBDb2NvYS5tbSAqLywK
IAkJCQkwMEI5NjYxODE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oICovLAogCQkJCTAw
Qjk2NjE3MThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50Lm1tICovLAogCQkJCUNENzhFMTEz
MURCN0Q3RUQwMDE0QTJERSAvKiBGdWxsc2NyZWVuQ2xpZW50LmggKi8sCkBAIC02ODYxLDYgKzY4
NjUsOCBAQAogCQkJCTVDMTQyNkY5MUMyM0Y4NDMwMEQ0MTE4MyAvKiBEb3dubG9hZE1hbmFnZXIu
aCAqLywKIAkJCQk1MTI0MEVCOTIyMEEwOENBMDA1Q0ZDNjMgLyogRG93bmxvYWRNYXAuY3BwICov
LAogCQkJCTUxMjQwRUI4MjIwQTA4Q0EwMDVDRkM2MyAvKiBEb3dubG9hZE1hcC5oICovLAorCQkJ
CTVDMkIxQUYzMjIzQUI3MjgwMEI5MUNGNyAvKiBEb3dubG9hZE1vbml0b3IuY3BwICovLAorCQkJ
CTVDMkIxQUY0MjIzQUI3MjgwMEI5MUNGNyAvKiBEb3dubG9hZE1vbml0b3IuaCAqLywKIAkJCQk1
Qzg1Qzc4NjFDM0YyM0M1MDA2MUE0RkEgLyogUGVuZGluZ0Rvd25sb2FkLmNwcCAqLywKIAkJCQk1
QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVuZGluZ0Rvd25sb2FkLmggKi8sCiAJCQkpOwpA
QCAtMTAyMzMsOSArMTAyMzksNiBAQAogCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gMTAu
MTsKIAkJCQkJCVByb3Zpc2lvbmluZ1N0eWxlID0gQXV0b21hdGljOwogCQkJCQl9OwotCQkJCQlB
MTc5OEI1OTIyMzQ2NEM0MDAwNzY0QkQgPSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24g
PSAxMC4yOwotCQkJCQl9OwogCQkJCQlFMUFDMkUyNzIwRjdCOTRDMDBCMDg5N0QgPSB7CiAJCQkJ
CQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA5LjM7CiAJCQkJCQlQcm92aXNpb25pbmdTdHlsZSA9
IEF1dG9tYXRpYzsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI0MzAzMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE5LTAzLTE1ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IERvd25sb2FkTW9uaXRv
ciB0byBwcmV2ZW50IGxvbmctcnVubmluZyBzbG93IGRvd25sb2FkcyBmcm9tIGJhY2tncm91bmQg
YXBwcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1
Nzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VENQU2VydmVyOjpUQ1BTZXJ2ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2Vy
dmVyOjp+VENQU2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6c29j
a2V0QmluZExpc3Rlbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OndhaXRG
b3JBbmRSZXBseVRvUmVxdWVzdHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVENQU2VydmVy
Lmg6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpwb3J0IGNvbnN0
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rv
d25sb2FkLm1tOgorICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rvd25s
b2FkRGlkU3RhcnQ6XSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBf
ZG93bmxvYWREaWRDYW5jZWw6XSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxl
Z2F0ZSBfZG93bmxvYWQ6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0
ZSBfZG93bmxvYWQ6ZGlkUmVjZWl2ZURhdGE6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpy
ZXNwb25kU2xvd2x5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OndlYlZpZXdXaXRoRG93bmxv
YWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRvd25s
b2FkQXRSYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE5LTAzLTE1
ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICB3ZWJraXRw
eTogVXBsb2FkIHRlc3QgcmVzdWx0cwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUQ1BTZXJ2ZXIuaCIKKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNp
bmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dmVjdG9yPgor
CituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RDUFNlcnZlcjo6VENQU2VydmVyKEZ1bmN0
aW9uPHZvaWQoU29ja2V0KT4mJiBzb2NrZXRIYW5kbGVyKQorICAgIDogbV9zb2NrZXRIYW5kbGVy
KFdURk1vdmUoc29ja2V0SGFuZGxlcikpCit7CisgICAgc29ja2V0QmluZExpc3RlbigpOworICAg
IG1fdGhyZWFkID0gc3RkOjp0aHJlYWQoJlRDUFNlcnZlcjo6d2FpdEZvckFuZFJlcGx5VG9SZXF1
ZXN0cywgdGhpcyk7Cit9CisKK1RDUFNlcnZlcjo6flRDUFNlcnZlcigpCit7CisgICAgbV90aHJl
YWQuam9pbigpOworICAgIGlmIChtX2xpc3RlbmluZ1NvY2tldCAhPSBJbnZhbGlkU29ja2V0KSB7
CisgICAgICAgIGNsb3NlKG1fbGlzdGVuaW5nU29ja2V0KTsKKyAgICAgICAgbV9saXN0ZW5pbmdT
b2NrZXQgPSBJbnZhbGlkU29ja2V0OworICAgIH0KKyAgICBpZiAobV9jb25uZWN0aW9uU29ja2V0
ICE9IEludmFsaWRTb2NrZXQpIHsKKyAgICAgICAgY2xvc2UobV9jb25uZWN0aW9uU29ja2V0KTsK
KyAgICAgICAgbV9jb25uZWN0aW9uU29ja2V0ID0gSW52YWxpZFNvY2tldDsKKyAgICB9Cit9CisK
K3ZvaWQgVENQU2VydmVyOjpzb2NrZXRCaW5kTGlzdGVuKCkKK3sKKyAgICBtX2xpc3RlbmluZ1Nv
Y2tldCA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKG1fbGlzdGVu
aW5nU29ja2V0ID09IEludmFsaWRTb2NrZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAv
LyBQb3J0cyA0OTE1Mi02NTUzNSBhcmUgdW5hbGxvY2F0ZWQgcG9ydHMuIFRyeSB1bnRpbCB3ZSBm
aW5kIG9uZSB0aGF0J3MgZnJlZS4KKyAgICBmb3IgKFBvcnQgcG9ydCA9IDQ5MTUyOyBwb3J0OyBw
b3J0KyspIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIG5hbWU7CisgICAgICAgIG1lbXNl
dCgmbmFtZSwgMCwgc2l6ZW9mKG5hbWUpKTsKKyAgICAgICAgbmFtZS5zaW5fZmFtaWx5ID0gQUZf
SU5FVDsKKyAgICAgICAgbmFtZS5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICAgICAgICBuYW1l
LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworICAgICAgICBpZiAoYmluZCht
X2xpc3RlbmluZ1NvY2tldCwgcmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZuYW1lKSwgc2l6
ZW9mKG5hbWUpKSA8IDApIHsKKyAgICAgICAgICAgIC8vIFRoaXMgcG9ydCBpcyBidXN5LiBUcnkg
dGhlIG5leHQgcG9ydC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIG1heENvbm5lY3Rpb25zID0gMTsKKyAgICAgICAgaWYgKGxpc3Rlbiht
X2xpc3RlbmluZ1NvY2tldCwgbWF4Q29ubmVjdGlvbnMpID09IC0xKSB7CisgICAgICAgICAgICAv
LyBMaXN0ZW5pbmcgZmFpbGVkLgorICAgICAgICAgICAgY2xvc2UobV9saXN0ZW5pbmdTb2NrZXQp
OworICAgICAgICAgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBJbnZhbGlkU29ja2V0OworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fcG9ydCA9IHBvcnQ7CisgICAgICAg
IHJldHVybjsgLy8gU3VjY2Vzc2Z1bGx5IHNldCB1cCBsaXN0ZW5pbmcgcG9ydC4KKyAgICB9Cisg
ICAgCisgICAgLy8gQ291bGRuJ3QgZmluZCBhbiBhdmFpbGFibGUgcG9ydC4KKyAgICBjbG9zZSht
X2xpc3RlbmluZ1NvY2tldCk7CisgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBJbnZhbGlkU29ja2V0
OworfQorCit2b2lkIFRDUFNlcnZlcjo6d2FpdEZvckFuZFJlcGx5VG9SZXF1ZXN0cygpCit7Cisg
ICAgaWYgKG1fbGlzdGVuaW5nU29ja2V0ID09IEludmFsaWRTb2NrZXQpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBtX2Nvbm5lY3Rpb25Tb2NrZXQgPSBhY2NlcHQobV9saXN0ZW5pbmdTb2Nr
ZXQsIG51bGxwdHIsIG51bGxwdHIpOworICAgIG1fc29ja2V0SGFuZGxlcihtX2Nvbm5lY3Rpb25T
b2NrZXQpOworICAgIHNodXRkb3duKG1fY29ubmVjdGlvblNvY2tldCwgU0hVVF9SRFdSKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UQ1BTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZl
ci5oCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIFRDUFNlcnZlciB7CitwdWJsaWM6CisgICAgdXNp
bmcgU29ja2V0ID0gaW50OworICAgIHN0YXRpYyBjb25zdGV4cHIgU29ja2V0IEludmFsaWRTb2Nr
ZXQgPSAtMTsKKyAgICB1c2luZyBQb3J0ID0gdWludDE2X3Q7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBQb3J0IEludmFsaWRQb3J0ID0gMDsKKyAgICAKKyAgICBUQ1BTZXJ2ZXIoRnVuY3Rpb248dm9p
ZChTb2NrZXQpPiYmKTsKKyAgICB+VENQU2VydmVyKCk7CisgICAgCisgICAgUG9ydCBwb3J0KCkg
Y29uc3QgeyByZXR1cm4gbV9wb3J0OyB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgc29ja2V0
QmluZExpc3RlbigpOworICAgIHZvaWQgd2FpdEZvckFuZFJlcGx5VG9SZXF1ZXN0cygpOworCisg
ICAgUG9ydCBtX3BvcnQgeyBJbnZhbGlkUG9ydCB9OworICAgIFNvY2tldCBtX2xpc3RlbmluZ1Nv
Y2tldCB7IEludmFsaWRTb2NrZXQgfTsKKyAgICBTb2NrZXQgbV9jb25uZWN0aW9uU29ja2V0IHsg
SW52YWxpZFNvY2tldCB9OworICAgIHN0ZDo6dGhyZWFkIG1fdGhyZWFkOworICAgIEZ1bmN0aW9u
PHZvaWQoU29ja2V0KT4gbV9zb2NrZXRIYW5kbGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0Mjg0MikK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNiArMzIxLDcgQEAKIAkJNUM4MzhGN0YxREIw
NEY5MDAwODI4NThGIC8qIExvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTAxRkFFMUNBRjEzNzEwMEVENjRGOSAv
KiBMb2FkSW52YWxpZFVSTFJlcXVlc3QubW0gKi87IH07CiAJCTVDOEJDNzk5MjE4Q0Y0NDcwMDgx
Mzg4NiAvKiBOZXR3b3JrUHJvY2Vzcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDOEJDNzk4MjE4Q0YzRTkwMDgxMzg4NiAvKiBOZXR3b3JrUHJvY2Vz
cy5tbSAqLzsgfTsKIAkJNUM5NzNGNUMxRjU4RUY4QjAwMzU5QzI3IC8qIFdlYkdMUG9saWN5Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5NzNGNUIx
RjU4RUYwQTAwMzU5QzI3IC8qIFdlYkdMUG9saWN5Lm1tICovOyB9OworCQk1QzlCNTQ4RTIyM0M0
Q0JFMDBCMTUwQzQgLyogVENQU2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUI1NDhDMjIzQzRCRjUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIu
Y3BwICovOyB9OwogCQk1QzlFNTY4NTFERjkxNDU0MDBDOUVFMzMgLyogV2Vic2l0ZVBvbGljaWVz
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU2
ODQxREY5MTQzRDAwQzlFRTMzIC8qIFdlYnNpdGVQb2xpY2llcy5tbSAqLzsgfTsKIAkJNUM5RTU2
ODcxREY5MTRBRTAwQzlFRTMzIC8qIGNvbnRlbnRCbG9ja2VyQ2hlY2suaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTY4NjFERjkx
NDhFMDBDOUVFMzMgLyogY29udGVudEJsb2NrZXJDaGVjay5odG1sICovOyB9OwogCQk1QzlFNTk0
MTFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYiBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTkzRTFEM0VCMURFMDBF
M0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYiAqLzsgfTsKQEAgLTE3MTMsNiArMTcxNCw4IEBA
CiAJCTVDN0M3NENBMUZCNTI4RDQwMDJGOUFCRSAvKiBXZWJWaWV3U2NoZWR1bGVJblJ1bkxvb3Au
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWV3U2NoZWR1
bGVJblJ1bkxvb3AubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOEJDNzk4MjE4
Q0YzRTkwMDgxMzg4NiAvKiBOZXR3b3JrUHJvY2Vzcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Qzk3M0Y1QjFGNThFRjBBMDAzNTlDMjcgLyogV2ViR0xQb2xpY3kubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTFBvbGljeS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5QjU0OEMyMjNDNEJGNTAwQjE1MEM0IC8qIFRD
UFNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUQ1BTZXJ2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzlCNTQ4RDIyM0M0QkY1MDBC
MTUwQzQgLyogVENQU2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRD
UFNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTY4NDFERjkxNDNE
MDBDOUVFMzMgLyogV2Vic2l0ZVBvbGljaWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2Vic2l0ZVBvbGljaWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1QzlFNTY4NjFERjkxNDhFMDBDOUVFMzMgLyogY29udGVudEJsb2NrZXJDaGVjay5o
dG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gY29udGVudEJsb2NrZXJDaGVjay5odG1s
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTkzRTFEM0VCMURFMDBFM0M2MkUg
LyogQXBwbGljYXRpb25DYWNoZS5kYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlLmRiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM5MCw2ICsyMzkzLDggQEAKIAkJCQlCQzU3NUJCRjEy
NkY1NzUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRpZXMuY3BwICovLAogCQkJCUJDMTMxODgz
MTE3MTE0QTgwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllcy5oICovLAogCQkJCUJDOTA5NTFC
MTI1NTMzRDcwMDA4Mzc1NiAvKiBQbGF0Zm9ybVdlYlZpZXcuaCAqLywKKwkJCQk1QzlCNTQ4QzIy
M0M0QkY1MDBCMTUwQzQgLyogVENQU2VydmVyLmNwcCAqLywKKwkJCQk1QzlCNTQ4RDIyM0M0QkY1
MDBCMTUwQzQgLyogVENQU2VydmVyLmggKi8sCiAJCQkJQkNCOUU3RkExMTIzNTlBMzAwQTEzN0Uw
IC8qIFRlc3QuaCAqLywKIAkJCQlCQzEzMUFBODExNzEzMUZDMDBCNjk3MjcgLyogVGVzdHNDb250
cm9sbGVyLmNwcCAqLywKIAkJCQlCQ0I5RTdDNzExMjM0RTNBMDBBMTM3RTAgLyogVGVzdHNDb250
cm9sbGVyLmggKi8sCkBAIC00MjgwLDYgKzQyODUsNyBAQAogCQkJCTdDQ0U3RUE4MUE0MTFBMTkw
MDQ0N0M0QyAvKiBTeW50aGV0aWNCYWNraW5nU2NhbGVGYWN0b3JXaW5kb3cubSBpbiBTb3VyY2Vz
ICovLAogCQkJCTFDNzM0QjUzMjA3ODhDNDgwMEY0MzBFQSAvKiBTeXN0ZW1Db2xvcnMubW0gaW4g
U291cmNlcyAqLywKIAkJCQkyRDcwMDU5NjIxRURBMEM2MDAzNDYzQ0IgLyogVGFiT3V0T2ZXZWJW
aWV3Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUM5QjU0OEUyMjNDNENCRTAwQjE1MEM0IC8qIFRD
UFNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YxNjFBNDExQUU2MDA0NDdDNEMg
LyogVGVybWluYXRlVHdpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQTkxQTQxMUEx
RDAwNDQ3QzRDIC8qIFRlc3RCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUubW0gaW4gU291cmNl
cyAqLywKIAkJCQlGNDYxMjhDQjIxMUQ0NzUxMDBEOUZBREIgLyogVGVzdERyYWdnaW5nSW5mby5t
bSBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Eb3dubG9hZC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0Rvd25sb2FkLm1tCShyZXZpc2lvbiAyNDI4NDIpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxOCArMjksMjEgQEAKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKIAog
I2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRDUFNlcnZlci5oIgogI2lt
cG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCiAjaW1wb3J0ICJUZXN0V0tX
ZWJWaWV3LmgiCi0jaW1wb3J0IDxXZWJLaXQvX1dLRG93bmxvYWQuaD4KLSNpbXBvcnQgPFdlYktp
dC9fV0tEb3dubG9hZERlbGVnYXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oPgor
I2ltcG9ydCA8V2ViS2l0L19XS0Rvd25sb2FkLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLRG93bmxv
YWREZWxlZ2F0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlv
bi5oPgogI2ltcG9ydCA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW1wb3J0IDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KQEAgLTc3Niw0ICs3NzksMTM5IEBAIFRFU1QoX1dLRG93bmxvYWQsIENyYXNoQWZ0
ZXJEb3dubG9hZERpZEYKICAgICBFWFBFQ1RfTlVMTChwcm9jZXNzUG9vbC5nZXQoKSk7CiB9CiAK
LSNlbmRpZgorc3RhdGljIGJvb2wgcmVjZWl2ZWREYXRhOworc3RhdGljIGJvb2wgZGlkQ2FuY2Vs
Oworc3RhdGljIFJldGFpblB0cjxOU1N0cmluZz4gZGVzdGluYXRpb247CisKK0BpbnRlcmZhY2Ug
RG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlIDogTlNPYmplY3QgPF9XS0Rvd25sb2FkRGVsZWdh
dGU+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUK
KworLSAodm9pZClfZG93bmxvYWREaWRTdGFydDooX1dLRG93bmxvYWQgKilkb3dubG9hZAorewor
ICAgIGRpZERvd25sb2FkU3RhcnQgPSB0cnVlOworfQorCistICh2b2lkKV9kb3dubG9hZERpZENh
bmNlbDooX1dLRG93bmxvYWQgKilkb3dubG9hZAoreworICAgIGRpZENhbmNlbCA9IHRydWU7Cit9
CisKKy0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRlY2lkZURlc3Rp
bmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShCT09MIGFsbG93T3ZlcndyaXRlLCBOU1N0cmluZyAqZGVzdGlu
YXRpb24pKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgRVhQRUNUX1RSVUUoW2ZpbGVuYW1lIGlz
RXF1YWxUb1N0cmluZzpAImZpbGVuYW1lLmRhdCJdKTsKKyAgICBkZXN0aW5hdGlvbiA9IFtOU1Rl
bXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmaWxlbmFt
ZV07CisgICAgY29tcGxldGlvbkhhbmRsZXIoWUVTLCBkZXN0aW5hdGlvbi5nZXQoKSk7Cit9CisK
Ky0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRpZFJlY2VpdmVEYXRh
Oih1aW50NjRfdClsZW5ndGgKK3sKKyAgICByZWNlaXZlZERhdGEgPSB0cnVlOworfQorCitAZW5k
CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordm9pZCByZXNwb25kU2xvd2x5KGludCBz
b2NrZXQsIGRvdWJsZSBrYnBzLCBib29sJiB0ZXJtaW5hdGVTZXJ2ZXIpCit7CisgICAgRVhQRUNU
X0ZBTFNFKGlzTWFpblRocmVhZCgpKTsKKyAgICBjaGFyIHJlYWRCdWZmZXJbMTAwMF07CisgICAg
YXV0byBieXRlc1JlYWQgPSA6OnJlYWQoc29ja2V0LCByZWFkQnVmZmVyLCBzaXplb2YocmVhZEJ1
ZmZlcikpOworICAgIEVYUEVDVF9HVChieXRlc1JlYWQsIDApOworICAgIEVYUEVDVF9UUlVFKHN0
YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNSZWFkKSA8IHNpemVvZihyZWFkQnVmZmVyKSk7CisgICAg
CisgICAgY29uc3QgY2hhciogcmVzcG9uc2VIZWFkZXIgPQorICAgICJIVFRQLzEuMSAyMDAgT0tc
clxuIgorICAgICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cImZp
bGVuYW1lLmRhdFwiXHJcbiIKKyAgICAiQ29udGVudC1MZW5ndGg6IDEwMDAwMDAwMFxyXG5cclxu
IjsKKyAgICBhdXRvIGJ5dGVzV3JpdHRlbiA9IDo6d3JpdGUoc29ja2V0LCByZXNwb25zZUhlYWRl
ciwgc3RybGVuKHJlc3BvbnNlSGVhZGVyKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oYnl0ZXNXcml0dGVuKSwgc3RybGVuKHJlc3BvbnNlSGVhZGVyKSk7CisgICAgCisgICAg
Y29uc3QgZG91YmxlIHdyaXRlc1BlclNlY29uZCA9IDEwMDsKKyAgICBWZWN0b3I8Y2hhcj4gd3Jp
dGVCdWZmZXIoc3RhdGljX2Nhc3Q8c2l6ZV90PigxMDI0ICoga2JwcyAvIHdyaXRlc1BlclNlY29u
ZCkpOworICAgIHdoaWxlICghdGVybWluYXRlU2VydmVyKSB7CisgICAgICAgIGF1dG8gYmVmb3Jl
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIDo6d3JpdGUoc29ja2V0LCB3cml0ZUJ1
ZmZlci5kYXRhKCksIHdyaXRlQnVmZmVyLnNpemUoKSk7CisgICAgICAgIGRvdWJsZSB3cml0ZUR1
cmF0aW9uID0gKE1vbm90b25pY1RpbWU6Om5vdygpIC0gYmVmb3JlKS5zZWNvbmRzKCk7CisgICAg
ICAgIGRvdWJsZSBkZXNpcmVkU2xlZXAgPSAxLjAgLyB3cml0ZXNQZXJTZWNvbmQ7CisgICAgICAg
IGlmICh3cml0ZUR1cmF0aW9uIDwgZGVzaXJlZFNsZWVwKQorICAgICAgICAgICAgdXNsZWVwKFVT
RUNfUEVSX1NFQyAqIChkZXNpcmVkU2xlZXAgLSB3cml0ZUR1cmF0aW9uKSk7CisgICAgfQorfQor
CitSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3V2l0aERvd25sb2FkTW9uaXRvclNwZWVkTXVs
dGlwbGllcihzaXplX3QgbXVsdGlwbGllcikKK3sKKyAgICBzdGF0aWMgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBhZG9wdE5TKFtEb3dubG9hZE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXddKTsKKyAg
ICBzdGF0aWMgYXV0byBkb3dubG9hZERlbGVnYXRlID0gYWRvcHROUyhbRG93bmxvYWRNb25pdG9y
VGVzdERlbGVnYXRlIG5ld10pOworICAgIGF1dG8gcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uID0g
YWRvcHROUyhbX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIG5ld10pOworICAgIFtwcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24gc2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyOm11bHRp
cGxpZXJdOworICAgIGF1dG8gcHJvY2Vzc1Bvb2wgPSBhZG9wdE5TKFtbV0tQcm9jZXNzUG9vbCBh
bGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKKyAgICBhdXRvIHdlYlZpZXdDb25maWd1cmF0aW9uID0gYWRvcHROUyhbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBuZXddKTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24gc2V0UHJvY2Vz
c1Bvb2w6cHJvY2Vzc1Bvb2wuZ2V0KCldOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkg
Y29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3
IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCldOworICAgIFt3
ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sLl9kb3dubG9hZERlbGVnYXRlID0gZG93
bmxvYWREZWxlZ2F0ZS5nZXQoKTsKKyAgICByZXR1cm4gd2ViVmlldzsKK30KKworZW51bSBjbGFz
cyBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kIHsgTm8sIFllcyB9OworICAgIAordm9pZCBkb3dubG9h
ZEF0UmF0ZShkb3VibGUgZGVzaXJlZEticHMsIHVuc2lnbmVkIHNwZWVkTXVsdGlwbGllciwgQXBw
UmV0dXJuc1RvRm9yZWdyb3VuZCByZXR1cm5Ub0ZvcmVncm91bmQgPSBBcHBSZXR1cm5zVG9Gb3Jl
Z3JvdW5kOjpObykKK3sKKyAgICBib29sIHRlcm1pbmF0ZVNlcnZlciA9IGZhbHNlOworICAgIFRD
UFNlcnZlciBzZXJ2ZXIoWyZdKGF1dG8gc29ja2V0KSB7CisgICAgICAgIHJlc3BvbmRTbG93bHko
c29ja2V0LCBkZXNpcmVkS2JwcywgdGVybWluYXRlU2VydmVyKTsKKyAgICB9KTsKKyAgICAKKyAg
ICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3V2l0aERvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGll
cihzcGVlZE11bHRpcGxpZXIpOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJodHRwOi8vMTI3LjAuMC4xOiVkLyIsIHNlcnZlci5wb3J0KCldXV1dOworICAg
IHJlY2VpdmVkRGF0YSA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigmcmVjZWl2ZWREYXRhKTsKKyAg
ICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCisgICAgW1t3ZWJWaWV3IGNv
bmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107
CisgICAgaWYgKHJldHVyblRvRm9yZWdyb3VuZCA9PSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZ
ZXMpCisgICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhl
c2l6ZUFwcElzQmFja2dyb3VuZDpOT107CisgICAgZGlkQ2FuY2VsID0gZmFsc2U7CisgICAgVXRp
bDo6cnVuKCZkaWRDYW5jZWwpOworICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CisgICAgW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6W05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpkZXN0aW5hdGlvbi5nZXQoKSBpc0RpcmVjdG9yeTpOT10gZXJyb3I6bmlsXTsK
K30KKworVEVTVChfV0tEb3dubG9hZCwgRG93bmxvYWRNb25pdG9yQ2FuY2VsKQoreworICAgIGRv
d25sb2FkQXRSYXRlKDAuNSwgMTIwKTsgLy8gU2hvdWxkIGNhbmNlbCBpbiB+MC41IHNlY29uZHMK
KyAgICBkb3dubG9hZEF0UmF0ZSgxLjUsIDEyMCk7IC8vIFNob3VsZCBjYW5jZWwgaW4gfjIuNSBz
ZWNvbmRzCit9CisKK1RFU1QoX1dLRG93bmxvYWQsIERvd25sb2FkTW9uaXRvclN1cnZpdmUpCit7
CisgICAgX19ibG9jayBCT09MIHRpbWVvdXRSZWFjaGVkID0gTk87CisgICAgZGlzcGF0Y2hfYWZ0
ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMi41ICogTlNFQ19QRVJfU0VDKSwg
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGRpZENh
bmNlbCk7CisgICAgICAgIGRpZENhbmNlbCA9IHRydWU7CisgICAgICAgIHRpbWVvdXRSZWFjaGVk
ID0gWUVTOworICAgIH0pOworCisgICAgLy8gU2ltdWxhdGVzIGFuIGhvdXIgb2YgZG93bmxvYWRp
bmcgMTUwa2IvcyBpbiAxIHNlY29uZC4KKyAgICAvLyBUaW1lb3V0IHNob3VsZCBiZSByZWFjaGVk
IGJlZm9yZSB0aGlzIGlzIGNhbmNlbGxlZCBiZWNhdXNlIHRoZSBkb3dubG9hZCByYXRlIGlzIGhp
Z2ggZW5vdWdoLgorICAgIGRvd25sb2FkQXRSYXRlKDE1MC4wLCAzNjAwKTsKKyAgICBFWFBFQ1Rf
VFJVRSh0aW1lb3V0UmVhY2hlZCk7Cit9CisKK1RFU1QoX1dLRG93bmxvYWQsIERvd25sb2FkTW9u
aXRvclJldHVyblRvRm9yZWdyb3VuZCkKK3sKKyAgICBfX2Jsb2NrIEJPT0wgdGltZW91dFJlYWNo
ZWQgPSBOTzsKKyAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVf
Tk9XLCAyLjUgKiBOU0VDX1BFUl9TRUMpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewor
ICAgICAgICBFWFBFQ1RfRkFMU0UoZGlkQ2FuY2VsKTsKKyAgICAgICAgZGlkQ2FuY2VsID0gdHJ1
ZTsKKyAgICAgICAgdGltZW91dFJlYWNoZWQgPSBZRVM7CisgICAgfSk7CisgICAgZG93bmxvYWRB
dFJhdGUoMC41LCAxMjAsIEFwcFJldHVybnNUb0ZvcmVncm91bmQ6Olllcyk7CisgICAgRVhQRUNU
X1RSVUUodGltZW91dFJlYWNoZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364933</attachid>
            <date>2019-03-16 09:40:24 -0700</date>
            <delta_ts>2019-03-16 09:58:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195785-20190316094022.patch</filename>
            <type>text/plain</type>
            <size>80802</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDMwMTYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxOS0wMy0xNSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBE
b3dubG9hZE1vbml0b3IgdG8gcHJldmVudCBsb25nLXJ1bm5pbmcgc2xvdyBkb3dubG9hZHMgZnJv
bSBiYWNrZ3JvdW5kIGFwcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NTc4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IHdhcyB1cGRhdGVkIGluIDxyZGFyOi8v
cHJvYmxlbS80MjY3NzY4NT4gYnV0IGZvciBXZWJLaXQgRG93bmxvYWRzLgorICAgICAgICBUbyB0
ZXN0IGl0IEkgaW1wbGVtZW50ZWQgYSB0aHJvdHRsZWQgVENQIHNlcnZlciwgU1BJIHRvIHNwZWVk
IHVwIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLAorICAgICAgICBhbmQgU1BJIHRvIHN5bnRoZXNp
emUgdGhlIGFwcGxpY2F0aW9uIGdvaW5nIGludG8gdGhlIGJhY2tncm91bmQgYW5kIGZvcmVncm91
bmQsIHdoaWNoCisgICAgICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyIGRvZXMgb24gaU9TLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWQ6OmRpZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZENhbmNlbCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmg6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
OjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OmFwcGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZDo6bWFuYWdlciBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6
ZG93bmxvYWRGaW5pc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6YXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1h
bmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTWFwOjp2YWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hcC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1v
bml0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IgX2ticHMpOgorICAg
ICAgICAoV2ViS2l0Ojp0aW1lVW50aWxOZXh0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1vbml0b3I6OkRvd25sb2FkTW9uaXRvcik6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTW9uaXRvcjo6bWVhc3VyZWRUaHJvdWdocHV0UmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkTW9uaXRvcjo6ZG93bmxvYWRSZWNlaXZlZEJ5dGVzKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKToKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjpzcGVlZE11bHRpcGxpZXIg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaDogQWRk
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uV2lsbEVu
dGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb246OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXS0NvbnRleHREb3dubG9hZFVSTFJlcXVlc3QpOgorICAgICAgICAoV0tDb250ZXh0
UmVzdW1lRG93bmxvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDpdKToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfZG93bmxvYWRVUkxSZXF1ZXN0Om9y
aWdpbmF0aW5nV2ViVmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbToKKyAgICAgICAgKC1bX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uIGRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcl0pOgorICAgICAgICAo
LVtfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gc2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29j
b2EubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bUNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVz
dHJveSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmluaXNoKToKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHk6OmRpZENhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6On5E
b3dubG9hZFByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6cGxh
dGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bURlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlv
bkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
cm94eTo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxl
RG93bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
TWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDMtMTUg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBf
V0tEb3dubG9hZCBzaG91bGQgY29uZm9ybSB0byBOU0NvcHlpbmcgcHJvdG9jb2wKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuCiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCiBO
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmNwcAorTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkTW9uaXRvci5jcHAKIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxv
YWQuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiw3IEBA
IFVJUHJvY2Vzcy9Db2NvYS9BdXRvbWF0aW9uQ2xpZW50Lm1tCiBVSVByb2Nlc3MvQ29jb2EvQXV0
b21hdGlvblNlc3Npb25DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9EaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5tbQogVUlQcm9jZXNzL0NvY29hL0Rvd25sb2FkQ2xpZW50Lm1tCitVSVByb2Nlc3Mv
Q29jb2EvRG93bmxvYWRQcm94eU1hcENvY29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvRmluZENsaWVu
dC5tbQogVUlQcm9jZXNzL0NvY29hL0Z1bGxzY3JlZW5DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2Nv
YS9HbG9iYWxGaW5kSW5QYWdlU3RhdGUubW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYxLDYgKzM2MSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3
b3JrUHIKIAogICAgIGZvciAoYXV0byYgc2NoZW1lIDogcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzQ2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QpCiAgICAgICAgIHJlZ2lzdGVyVVJM
U2NoZW1lQXNDYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChzY2hlbWUpOworICAgIAorICAgIG1f
ZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyID0gcGFyYW1ldGVycy5kb3dubG9hZE1vbml0
b3JTcGVlZE11bHRpcGxpZXI7CiAKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzLCAiJXAgLSBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzOiBQcmVzZW50aW5nIHByb2Nlc3Mg
PSAlZCIsIHRoaXMsIFdlYkNvcmU6OnByZXNlbnRpbmdBcHBsaWNhdGlvblBJRCgpKTsKIH0KQEAg
LTE5NDAsNiArMTk0MiwxNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjYW5jZWxQcmVwYXJlVG9T
dXNwCiAgICAgICAgIGNvbm5lY3Rpb24tPmVuZFN1c3BlbnNpb24oKTsKIH0KIAordm9pZCBOZXR3
b3JrUHJvY2Vzczo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQoreworICAgIG1fZG93
bmxvYWRNYW5hZ2VyLmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7Cit9CisKK3ZvaWQg
TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCit7CisgICAg
bV9kb3dubG9hZE1hbmFnZXIuYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7Cit9CisK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByb2Nlc3NEaWRSZXN1bWUoKQogewogICAgIFJFTEVBU0Vf
TE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiJXAgLSBOZXR3b3JrUHJvY2Vzczo6cHJvY2Vzc0RpZFJl
c3VtZSgpIiwgdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw2ICszNjYs
NyBAQCBwcml2YXRlOgogICAgIElQQzo6Q29ubmVjdGlvbiogcGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b25Gb3JEb3dubG9hZHMoKSBvdmVycmlkZSB7IHJldHVybiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpOyB9CiAgICAgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3dubG9hZHNBdXRoZW50aWNhdGlv
bk1hbmFnZXIoKSBvdmVycmlkZTsKICAgICB2b2lkIHBlbmRpbmdEb3dubG9hZENhbmNlbGVkKERv
d25sb2FkSUQpIG92ZXJyaWRlOworICAgIHVpbnQzMl90IGRvd25sb2FkTW9uaXRvclNwZWVkTXVs
dGlwbGllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZG93bmxvYWRNb25pdG9yU3BlZWRN
dWx0aXBsaWVyOyB9CiAKICAgICAvLyBNZXNzYWdlIEhhbmRsZXJzCiAgICAgdm9pZCBkaWRSZWNl
aXZlU3luY05ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwpAQCAtMzkxLDYgKzM5Miw4IEBA
IHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KERvd25s
b2FkSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsKICAgICB2b2lkIGNvbnRpbnVlRGVj
aWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oRG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0
aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJiwgYm9vbCBhbGxvd092ZXJ3cml0ZSk7Cisg
ICAgdm9pZCBhcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpOworICAgIHZvaWQgYXBwbGlj
YXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7CiAKICAgICB2b2lkIHNldENhY2hlTW9kZWwoQ2Fj
aGVNb2RlbCk7CiAgICAgdm9pZCBhbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Qo
Y29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiwgY29uc3QgU3RyaW5nJiBob3N0KTsKQEAg
LTUyOCw2ICs1MzEsNyBAQCBwcml2YXRlOgogICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBt
YW5hZ2Vyc1Blck9yaWdpbjsKICAgICB9OwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0
b3JhZ2VRdW90YU1hbmFnZXJzPiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOworICAgIHVpbnQzMl90
IG1fZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyIHsgMSB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI0Mjg0MikKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3Mg
TGVnYWN5UmVjZWl2ZQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFB1Ymxpc2hEb3dubG9hZFBy
b2dyZXNzKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9hZElELCBVUkwgdXJsLCBXZWJLaXQ6OlNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQogI2VuZGlmCisg
ICAgQXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQorICAgIEFwcGxpY2F0aW9uV2lsbEVu
dGVyRm9yZWdyb3VuZCgpCiAKICAgICBDb250aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJLaXQ6OkRv
d25sb2FkSUQgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCiAg
ICAgQ29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihXZWJLaXQ6OkRvd25s
b2FkSUQgZG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBXZWJLaXQ6OlNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3ZlcndyaXRl
KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI0Mjg0
MikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmUKICAgICBlbmNvZGVyIDw8IHNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCB1cmxTY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5k
bGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsK
ICNlbmRpZgogICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CisgICAgZW5j
b2RlciA8PCBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXI7CiB9CiAKIGJvb2wgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIs
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0yMjEsNiArMjIy
LDEyIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIE9wdGlvbmFsPHVpbnQzMl90PiBkb3dubG9hZE1vbml0b3JT
cGVlZE11bHRpcGxpZXI7CisgICAgZGVjb2RlciA+PiBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRp
cGxpZXI7CisgICAgaWYgKCFkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQuZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVy
ID0gKmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjsKKyAgICAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjQy
ODQyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIGJvb2wgc2hvdWxkRGlzYWJs
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07CiAjZW5kaWYK
ICAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICB1aW50MzJf
dCBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgeyAxIH07CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJEYXRh
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93
bmxvYWRNb25pdG9yLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgpAQCAtMTE0LDYg
KzExNSw4IEBAIHZvaWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGwKICAgICAg
ICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZURhdGE6IFN0YXJ0ZWQgcmVjZWl2
aW5nIGRhdGEgKGlkID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7
CiAgICAgICAgIG1faGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTsKICAgICB9CisgICAgCisgICAgbV9t
b25pdG9yLmRvd25sb2FkUmVjZWl2ZWRCeXRlcyhsZW5ndGgpOwogCiAgICAgc2VuZChNZXNzYWdl
czo6RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZURhdGEobGVuZ3RoKSk7CiB9CkBAIC0xMjksNyAr
MTMyLDcgQEAgdm9pZCBEb3dubG9hZDo6ZGlkRmluaXNoKCkKICAgICAgICAgbV9zYW5kYm94RXh0
ZW5zaW9uID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9h
ZEZpbmlzaGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQo
KnRoaXMpOwogfQogCiB2b2lkIERvd25sb2FkOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCkBAIC0xNDMsNyAr
MTQ2LDcgQEAgdm9pZCBEb3dubG9hZDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycgogICAgICAg
ICBtX3NhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwogICAgICAgICBtX3NhbmRib3hFeHRlbnNp
b24gPSBudWxscHRyOwogICAgIH0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlz
aGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQoKnRoaXMp
OwogfQogCiB2b2lkIERvd25sb2FkOjpkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiByZXN1bWVEYXRhKQpAQCAtMTU2LDcgKzE1OSw3IEBAIHZvaWQgRG93bmxvYWQ6OmRpZENhbmNl
bChjb25zdCBJUEM6OkRhdGEKICAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uLT5yZXZva2UoKTsK
ICAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gbnVsbHB0cjsKICAgICB9Ci0gICAgbV9kb3du
bG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rvd25sb2FkTWFuYWdl
ci5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKIH0KIAogSVBDOjpDb25uZWN0aW9uKiBEb3dubG9h
ZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCShyZXZpc2lvbiAyNDI4
NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJEb3dubG9hZElE
LmgiCiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93bmxvYWRNb25p
dG9yLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtEYXRh
VGFzay5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKQEAgLTU4LDYgKzU5LDcgQEAg
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIERv
d25sb2FkTW9uaXRvcjsKIGNsYXNzIE5ldHdvcmtEYXRhVGFzazsKIGNsYXNzIE5ldHdvcmtTZXNz
aW9uOwogY2xhc3MgV2ViUGFnZTsKQEAgLTg5LDYgKzkxLDEyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYgcmVzdW1lRGF0YSk7CiAgICAgdm9pZCBkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKIAorICAgIGJvb2wgaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGxpY2F0aW9uRW50ZXJlZEJhY2tncm91bmQoKSB7
IG1fbW9uaXRvci5hcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKCk7IH0KKyAgICB2b2lkIGFw
cGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQoKSB7IG1fbW9uaXRvci5hcHBsaWNhdGlvbkVudGVy
ZWRGb3JlZ3JvdW5kKCk7IH0KKyAgICBEb3dubG9hZE1hbmFnZXImIG1hbmFnZXIoKSBjb25zdCB7
IHJldHVybiBtX2Rvd25sb2FkTWFuYWdlcjsgfQorCiBwcml2YXRlOgogICAgIC8vIElQQzo6TWVz
c2FnZVNlbmRlcgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KSBjb25zdCBvdmVycmlkZTsKQEAgLTk3LDggKzEwNSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
bGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3lEb3du
bG9hZCgpOwogCi0gICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKLQog
ICAgIERvd25sb2FkTWFuYWdlciYgbV9kb3dubG9hZE1hbmFnZXI7CiAgICAgRG93bmxvYWRJRCBt
X2Rvd25sb2FkSUQ7CiAgICAgUmVmPERvd25sb2FkTWFuYWdlcjo6Q2xpZW50PiBtX2NsaWVudDsK
QEAgLTExNCw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lv
bklEOwogICAgIFN0cmluZyBtX3N1Z2dlc3RlZE5hbWU7CiAgICAgYm9vbCBtX2hhc1JlY2VpdmVk
RGF0YSB7IGZhbHNlIH07CisgICAgRG93bmxvYWRNb25pdG9yIG1fbW9uaXRvciB7ICp0aGlzIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDExICsxNjksMTAg
QEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OnB1Ymxpc2hEb3dubG9hZFBybwogfQogI2VuZGlmIC8v
IFBMQVRGT1JNKENPQ09BKQogCi12b2lkIERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRGaW5pc2hl
ZChEb3dubG9hZCogZG93bmxvYWQpCit2b2lkIERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRGaW5p
c2hlZChEb3dubG9hZCYgZG93bmxvYWQpCiB7Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRh
aW5zKGRvd25sb2FkLT5kb3dubG9hZElEKCkpKTsKLSAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93
bmxvYWQtPmRvd25sb2FkSUQoKSk7Ci0gICAgCisgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRh
aW5zKGRvd25sb2FkLmRvd25sb2FkSUQoKSkpOworICAgIG1fZG93bmxvYWRzLnJlbW92ZShkb3du
bG9hZC5kb3dubG9hZElEKCkpOwogfQogCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6ZGlkQ3JlYXRl
RG93bmxvYWQoKQpAQCAtMTk2LDQgKzE5NSwxNiBAQCBBdXRoZW50aWNhdGlvbk1hbmFnZXImIERv
d25sb2FkTWFuYWdlcjo6CiAgICAgcmV0dXJuIG1fY2xpZW50LmRvd25sb2Fkc0F1dGhlbnRpY2F0
aW9uTWFuYWdlcigpOwogfQogCit2b2lkIERvd25sb2FkTWFuYWdlcjo6YXBwbGljYXRpb25EaWRF
bnRlckJhY2tncm91bmQoKQoreworICAgIGZvciAoYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fk
cy52YWx1ZXMoKSkKKyAgICAgICAgZG93bmxvYWQtPmFwcGxpY2F0aW9uRW50ZXJlZEJhY2tncm91
bmQoKTsKK30KKwordm9pZCBEb3dubG9hZE1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9y
ZWdyb3VuZCgpCit7CisgICAgZm9yIChhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVl
cygpKQorICAgICAgICBkb3dubG9hZC0+YXBwbGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCShyZXZpc2lv
biAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHZpcnR1YWwgTmV0d29ya0Jsb2JSZWdpc3RyeSYgbmV0d29ya0Jsb2JSZWdpc3RyeSgp
ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZigpIGNvbnN0ID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRlcmVmKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGRv
d25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcigpIGNvbnN0ID0gMDsKICAgICB9OwogCiAgICAg
ZXhwbGljaXQgRG93bmxvYWRNYW5hZ2VyKENsaWVudCYpOwpAQCAtOTgsMTAgKzk5LDEzIEBAIHB1
YmxpYzoKICAgICAKICAgICBEb3dubG9hZCogZG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElE
KSB7IHJldHVybiBtX2Rvd25sb2Fkcy5nZXQoZG93bmxvYWRJRCk7IH0KIAotICAgIHZvaWQgZG93
bmxvYWRGaW5pc2hlZChEb3dubG9hZCopOworICAgIHZvaWQgZG93bmxvYWRGaW5pc2hlZChEb3du
bG9hZCYpOwogICAgIGJvb2wgaXNEb3dubG9hZGluZygpIGNvbnN0IHsgcmV0dXJuICFtX2Rvd25s
b2Fkcy5pc0VtcHR5KCk7IH0KICAgICB1aW50NjRfdCBhY3RpdmVEb3dubG9hZENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9kb3dubG9hZHMuc2l6ZSgpOyB9CiAKKyAgICB2b2lkIGFwcGxpY2F0aW9u
RGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckZvcmVn
cm91bmQoKTsKKwogICAgIHZvaWQgZGlkQ3JlYXRlRG93bmxvYWQoKTsKICAgICB2b2lkIGRpZERl
c3Ryb3lEb3dubG9hZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYXAuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDExIEBAIGJvb2wgRG93bmxvYWRNYXA6OnJlbW92
ZShEb3dubG9hZElEIGRvd24KICAgICByZXR1cm4gcmVzdWx0OwogfQogCithdXRvIERvd25sb2Fk
TWFwOjp2YWx1ZXMoKSAtPiBEb3dubG9hZE1hcFR5cGU6OlZhbHVlc0l0ZXJhdG9yUmFuZ2UKK3sK
KyAgICByZXR1cm4gbV9kb3dubG9hZHMudmFsdWVzKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKFRBS0VfVU5CT1VOREVEX05FVFdPUktJTkdfQVNTRVJU
SU9OKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hcC5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICBEb3dubG9hZE1hcFR5cGU6OkFkZFJlc3VsdCBhZGQo
RG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPiYmKTsKICAgICBib29sIHJlbW92
ZShEb3dubG9hZElEKTsKIAorICAgIERvd25sb2FkTWFwVHlwZTo6VmFsdWVzSXRlcmF0b3JSYW5n
ZSB2YWx1ZXMoKTsKKwogcHJpdmF0ZToKICAgICBEb3dubG9hZE1hcFR5cGUgbV9kb3dubG9hZHM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NBc3NlcnRpb24+IG1fZG93bmxvYWRBc3NlcnRp
b247CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1vbml0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkTW9uaXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEb3dubG9hZE1vbml0b3IuaCIKKworI2luY2x1ZGUgIkRvd25sb2FkLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCisjdW5kZWYgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRAor
I2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRiht
X2Rvd25sb2FkLmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBOZXR3b3JrLCAiJXAgLSBEb3du
bG9hZE1vbml0b3I6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY29uc3RleHByIHVpbnQ2NF90IG9wZXJhdG9yIiIgX2ticHModW5zaWduZWQgbG9u
ZyBsb25nIGtpbG9ieXRlc1BlclNlY29uZCkKK3sKKyAgICByZXR1cm4ga2lsb2J5dGVzUGVyU2Vj
b25kICogMTAyNDsKK30KKworc3RydWN0IFRocm91Z2hwdXRJbnRlcnZhbCB7CisgICAgU2Vjb25k
cyB0aW1lOworICAgIHVpbnQ2NF90IGJ5dGVzUGVyU2Vjb25kOworfTsKKworc3RhdGljIGNvbnN0
IFRocm91Z2hwdXRJbnRlcnZhbCB0aHJvdWdocHV0SW50ZXJ2YWxzW10gPSB7CisgICAgeyAxX21p
biwgMV9rYnBzIH0sCisgICAgeyA1X21pbiwgMl9rYnBzIH0sCisgICAgeyAxMF9taW4sIDRfa2Jw
cyB9LAorICAgIHsgMTVfbWluLCA4X2ticHMgfSwKKyAgICB7IDIwX21pbiwgMTZfa2JwcyB9LAor
ICAgIHsgMjVfbWluLCAzMl9rYnBzIH0sCisgICAgeyAzMF9taW4sIDY0X2ticHMgfSwKKyAgICB7
IDQ1X21pbiwgOTZfa2JwcyB9LAorICAgIHsgNjBfbWluLCAxMjhfa2JwcyB9Cit9OworCitzdGF0
aWMgU2Vjb25kcyB0aW1lVW50aWxOZXh0SW50ZXJ2YWwoc2l6ZV90IGN1cnJlbnRJbnRlcnZhbCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50SW50ZXJ2YWwgKyAxIDwgV1RGX0FSUkFZX0xF
TkdUSCh0aHJvdWdocHV0SW50ZXJ2YWxzKSk7CisgICAgcmV0dXJuIHRocm91Z2hwdXRJbnRlcnZh
bHNbY3VycmVudEludGVydmFsICsgMV0udGltZSAtIHRocm91Z2hwdXRJbnRlcnZhbHNbY3VycmVu
dEludGVydmFsXS50aW1lOworfQorCitEb3dubG9hZE1vbml0b3I6OkRvd25sb2FkTW9uaXRvcihE
b3dubG9hZCYgZG93bmxvYWQpCisgICAgOiBtX2Rvd25sb2FkKGRvd25sb2FkKQoreworfQorCitk
b3VibGUgRG93bmxvYWRNb25pdG9yOjptZWFzdXJlZFRocm91Z2hwdXRSYXRlKCkgY29uc3QKK3sK
KyAgICB1aW50NjRfdCBieXRlcyB7IDAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRpbWVzdGFt
cCA6IG1fdGltZXN0YW1wcykKKyAgICAgICAgYnl0ZXMgKz0gdGltZXN0YW1wLmJ5dGVzUmVjZWl2
ZWQ7CisgICAgaWYgKCFieXRlcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKCFtX3Rp
bWVzdGFtcHMuaXNFbXB0eSgpKTsKKyAgICBTZWNvbmRzIHRpbWVEaWZmZXJlbmNlID0gbV90aW1l
c3RhbXBzLmxhc3QoKS50aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkgLSBtX3RpbWVzdGFtcHMuZmly
c3QoKS50aW1lLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgZG91YmxlIHNlY29uZHMgPSB0aW1l
RGlmZmVyZW5jZS5zZWNvbmRzKCk7CisgICAgaWYgKCFzZWNvbmRzKQorICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsKKyAgICByZXR1cm4gYnl0ZXMgLyBz
ZWNvbmRzOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6ZG93bmxvYWRSZWNlaXZlZEJ5dGVz
KHVpbnQ2NF90IGJ5dGVzUmVjZWl2ZWQpCit7CisgICAgaWYgKG1fdGltZXN0YW1wcy5zaXplKCkg
PiB0aW1lc3RhbXBDYXBhY2l0eSAtIDEpIHsKKyAgICAgICAgQVNTRVJUKG1fdGltZXN0YW1wcy5z
aXplKCkgPT0gdGltZXN0YW1wQ2FwYWNpdHkpOworICAgICAgICBtX3RpbWVzdGFtcHMucmVtb3Zl
Rmlyc3QoKTsKKyAgICB9CisgICAgbV90aW1lc3RhbXBzLmFwcGVuZCh7IE1vbm90b25pY1RpbWU6
Om5vdygpLCBieXRlc1JlY2VpdmVkIH0pOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6YXBw
bGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCgpCit7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgiYXBwbGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rv
d25sb2FkLmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgIG1fdGltZXIuc3RvcCgpOwor
ICAgIG1faW50ZXJ2YWwgPSAwOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6YXBwbGljYXRp
b25FbnRlcmVkQmFja2dyb3VuZCgpCit7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiYXBw
bGljYXRpb25FbnRlcmVkQmFja2dyb3VuZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rvd25sb2Fk
LmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVCghbV90aW1lci5pc0FjdGl2
ZSgpKTsKKyAgICBBU1NFUlQoIW1faW50ZXJ2YWwpOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KHRocm91Z2hwdXRJbnRlcnZhbHNbMF0udGltZSAvIHNwZWVkTXVsdGlwbGllcigpKTsKK30KKwor
dWludDMyX3QgRG93bmxvYWRNb25pdG9yOjpzcGVlZE11bHRpcGxpZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2Rvd25sb2FkLm1hbmFnZXIoKS5jbGllbnQoKS5kb3dubG9hZE1vbml0b3JTcGVl
ZE11bHRpcGxpZXIoKTsKK30KKwordm9pZCBEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1faW50ZXJ2YWwgPCBXVEZfQVJSQVlfTEVOR1RIKHRocm91
Z2hwdXRJbnRlcnZhbHMpKTsKKyAgICBpZiAobWVhc3VyZWRUaHJvdWdocHV0UmF0ZSgpIDwgdGhy
b3VnaHB1dEludGVydmFsc1ttX2ludGVydmFsXS5ieXRlc1BlclNlY29uZCkgeworICAgICAgICBS
RUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVkOiBjYW5jZWxsaW5nIGRvd25sb2FkIChp
ZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7
CisgICAgICAgIG1fZG93bmxvYWQuY2FuY2VsKCk7CisgICAgfSBlbHNlIGlmIChtX2ludGVydmFs
ICsgMSA8IFdURl9BUlJBWV9MRU5HVEgodGhyb3VnaHB1dEludGVydmFscykpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidGltZXJGaXJlZDogc3VmZmljaWVudCB0aHJvdWdocHV0
IHJhdGUgKGlkID0gJSIgUFJJdTY0ICIpIiwgbV9kb3dubG9hZC5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpKTsKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QodGltZVVudGlsTmV4dEludGVy
dmFsKG1faW50ZXJ2YWwrKykgLyBzcGVlZE11bHRpcGxpZXIoKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInRpbWVyRmlyZWQ6IERvd25sb2FkIHJlYWNoZWQg
dGhyZXNob2xkIHRvIG5vdCBiZSB0ZXJtaW5hdGVkIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93
bmxvYWQuZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNb25pdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgRG93bmxvYWQ7CisKK2NsYXNzIERvd25sb2FkTW9uaXRvciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRNb25pdG9yKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG93bmxvYWRNb25pdG9yKERvd25sb2FkJik7CisgICAg
CisgICAgdm9pZCBhcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBs
aWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKCk7CisgICAgdm9pZCBkb3dubG9hZFJlY2VpdmVkQnl0
ZXModWludDY0X3QpOworICAgIHZvaWQgdGltZXJGaXJlZCgpOworCitwcml2YXRlOgorICAgIERv
d25sb2FkJiBtX2Rvd25sb2FkOworCisgICAgZG91YmxlIG1lYXN1cmVkVGhyb3VnaHB1dFJhdGUo
KSBjb25zdDsKKyAgICB1aW50MzJfdCBzcGVlZE11bHRpcGxpZXIoKSBjb25zdDsKKyAgICAKKyAg
ICBzdHJ1Y3QgVGltZXN0YW1wIHsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lOworICAgICAg
ICB1aW50NjRfdCBieXRlc1JlY2VpdmVkOworICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgdGltZXN0YW1wQ2FwYWNpdHkgPSAxMDsKKyAgICBEZXF1ZTxUaW1lc3RhbXAsIHRpbWVz
dGFtcENhcGFjaXR5PiBtX3RpbWVzdGFtcHM7CisgICAgV2ViQ29yZTo6VGltZXIgbV90aW1lciB7
ICp0aGlzLCAmRG93bmxvYWRNb25pdG9yOjp0aW1lckZpcmVkIH07CisgICAgc2l6ZV90IG1faW50
ZXJ2YWwgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlcy5jcHAJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBjYWNoZXNPcmln
aW5GaWxlbmFtCiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChjYWNoZXNSb290UGF0aCwgIm9yaWdpbiJfcyk7CiB9CiAKLUNhY2hlczo6Q2FjaGVzKEVuZ2lu
ZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQ
YXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFnZXIpCitDYWNoZXM6OkNhY2hlcyhF
bmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiBy
b290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQogICAg
IDogbV9lbmdpbmUoJmVuZ2luZSkKICAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAg
ICAsIG1fcm9vdFBhdGgoV1RGTW92ZShyb290UGF0aCkpCkBAIC01MDAsMTAgKzUwMCwxMCBAQCB2
b2lkIENhY2hlczo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlCiAKICAgICBtX3F1b3RhTWFu
YWdlci0+cmVxdWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShhdXRvIGRlY2lzaW9uKSB7CiAgICAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAg
ICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueToKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueToKICAgICAg
ICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVkKTsKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50
OgogICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKICAgICAgICAgfTsKICAgICB9KTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ29u
bmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uLmNwcAkocmV2aXNpb24gMjQyODQyKQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
b25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTsKIHVzaW5n
IG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2U7CiAKKyN1bmRlZiBSRUxFQVNFX0xPR19JRl9BTExPV0VE
CiAjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lG
KHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgQ2FjaGVTdG9yYWdlLCAiJXAg
LSBDYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uOjoiIGZtdCwgJm1fY29ubmVjdGlvbi5jb25u
ZWN0aW9uKCksICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0ZVTkNUSU9OX0lG
X0FMTE9XRURfSU5fQ0FMTEJBQ0soZnVuY3Rpb25OYW1lLCBmbXQsIHJlc3VsdEdldHRlcikgXAog
ICAgIGlmICghcmVzdWx0Lmhhc192YWx1ZSgpKVwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIHsg
fTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgPSAwOwogCi0gICAg
dmlydHVhbCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpID0g
MDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVSdW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5Kiwg
V2ViRnJhbWVQcm94eSosIEFQSTo6T3BlblBhbmVsUGFyYW1ldGVycyosIFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyUHJveHkqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBz
aG93U2hhcmVTaGVldChjb25zdCBXZWJDb3JlOjpTaGFyZURhdGFXaXRoUGFyc2VkVVJMJiwgV1RG
OjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJikgeyByZXR1cm4gZmFsc2U7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjQy
ODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgzNSwxMyArMjgzNSwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjZWl2
ZWRQb2xpY3lEZWNpc2lvCiAgICAgRG93bmxvYWRJRCBkb3dubG9hZElEID0geyB9OwogICAgIGlm
IChhY3Rpb24gPT0gUG9saWN5QWN0aW9uOjpEb3dubG9hZCkgewogICAgICAgICAvLyBDcmVhdGUg
YSBkb3dubG9hZCBwcm94eS4KLSAgICAgICAgYXV0byogZG93bmxvYWQgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkuY3JlYXRlRG93bmxvYWRQcm94eShtX2RlY2lkZVBvbGljeUZvclJlc3BvbnNl
UmVxdWVzdCwgdGhpcyk7CisgICAgICAgIGF1dG8mIGRvd25sb2FkID0gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLmNyZWF0ZURvd25sb2FkUHJveHkobV9kZWNpZGVQb2xpY3lGb3JSZXNwb25zZVJl
cXVlc3QsIHRoaXMpOwogICAgICAgICBpZiAobmF2aWdhdGlvbikgewotICAgICAgICAgICAgZG93
bmxvYWQtPnNldFdhc1VzZXJJbml0aWF0ZWQobmF2aWdhdGlvbi0+d2FzVXNlckluaXRpYXRlZCgp
KTsKLSAgICAgICAgICAgIGRvd25sb2FkLT5zZXRSZWRpcmVjdENoYWluKG5hdmlnYXRpb24tPnRh
a2VSZWRpcmVjdENoYWluKCkpOworICAgICAgICAgICAgZG93bmxvYWQuc2V0V2FzVXNlckluaXRp
YXRlZChuYXZpZ2F0aW9uLT53YXNVc2VySW5pdGlhdGVkKCkpOworICAgICAgICAgICAgZG93bmxv
YWQuc2V0UmVkaXJlY3RDaGFpbihuYXZpZ2F0aW9uLT50YWtlUmVkaXJlY3RDaGFpbigpKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGRvd25sb2FkSUQgPSBkb3dubG9hZC0+ZG93bmxvYWRJRCgpOwor
ICAgICAgICBkb3dubG9hZElEID0gZG93bmxvYWQuZG93bmxvYWRJRCgpOwogICAgICAgICBoYW5k
bGVEb3dubG9hZFJlcXVlc3QoZG93bmxvYWQpOwogICAgICAgICBtX2RlY2lkZVBvbGljeUZvclJl
c3BvbnNlUmVxdWVzdCA9IHsgfTsKICAgICB9CkBAIC01NDEwLDcgKzU0MTAsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0TWF5U3RhcnRNZWRpYVdoZW5JCiAgICAgcHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldE1heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3cobWF5U3RhcnRNZWRp
YSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVx
dWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVE
b3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7CiAgICAgcGFnZUNsaWVu
dCgpLmhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOTIsNyAr
MTA5Miw3IEBAIHB1YmxpYzoKIAogICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgY3JlYXRp
b25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYsIERyYXdpbmdBcmVhUHJveHkmKTsKIAotICAg
IHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKTsKKyAgICB2b2lkIGhh
bmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jik7CiAKICAgICB2b2lkIGFkdmFuY2VU
b05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKICAgICB2b2lkIGNo
YW5nZVNwZWxsaW5nVG9Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyOTgsOSArMTI5OCw5IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdX
ZWJzaXQKICAgICByZXR1cm4gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmNvbnRhaW5zKGRhdGFTdG9y
ZS5zZXNzaW9uSUQoKSk7CiB9CiAKLURvd25sb2FkUHJveHkqIFdlYlByb2Nlc3NQb29sOjpkb3du
bG9hZChXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCitEb3dubG9hZFByb3h5
JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVuYW1lKQogewotICAgIGF1dG8qIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5
KHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlKTsKKyAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3Jl
YXRlRG93bmxvYWRQcm94eShyZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSk7CiAgICAgUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEID0gaW5pdGlhdGluZ1BhZ2UgPyBpbml0aWF0aW5nUGFnZS0+c2Vzc2lv
bklEKCkgOiBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwogCiAgICAgaWYgKGlu
aXRpYXRpbmdQYWdlKQpAQCAtMTMyMywxNiArMTMyMywxNiBAQCBEb3dubG9hZFByb3h5KiBXZWJQ
cm9jZXNzUG9vbDo6ZG93bmxvYWQoCiAgICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0
SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgICAg
ICB9CiAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9h
ZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHVwZGF0ZWRS
ZXF1ZXN0LCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzcygp
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25J
RCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBzdWdnZXN0ZWRG
aWxlbmFtZSksIDApOwogICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKICAgICB9CiAKICAg
ICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIAotRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bv
b2w6OnJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQ
STo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQorRG93bmxvYWRQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1Bh
Z2UsIGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewot
ICAgIGF1dG8qIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KFJlc291cmNlUmVx
dWVzdCgpLCBpbml0aWF0aW5nUGFnZSk7CisgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0
ZURvd25sb2FkUHJveHkoUmVzb3VyY2VSZXF1ZXN0KCksIGluaXRpYXRpbmdQYWdlKTsKICAgICBQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBpbml0aWF0aW5nUGFnZSA/IGluaXRpYXRpbmdQYWdl
LT5zZXNzaW9uSUQoKSA6IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CiAKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKQEAgLTEz
NDAsNyArMTM0MCw3IEBAIERvd25sb2FkUHJveHkqIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3cK
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBp
ZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9h
ZFByb3h5LT5kb3dubG9hZElEKCksIHJlc3VtZURhdGEtPmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBk
b3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS0+ZGF0YVJlZmVyZW5jZSgpLCBw
YXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgICAgIHJldHVybiBkb3dubG9h
ZFByb3h5OwogICAgIH0KIApAQCAtMTU5MSwxMyArMTU5MSwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCh0aW1lb3V0SW50
ZXJ2YWwpKTsKIH0KIAotRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25s
b2FkUHJveHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBv
cmlnaW5hdGluZ1BhZ2UpCiB7Ci0gICAgYXV0byBkb3dubG9hZFByb3h5ID0gZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QpOwotICAgIGRvd25sb2FkUHJv
eHktPnNldE9yaWdpbmF0aW5nUGFnZShvcmlnaW5hdGluZ1BhZ2UpOworICAgIGF1dG8mIGRvd25s
b2FkUHJveHkgPSBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkocmVx
dWVzdCk7CisgICAgZG93bmxvYWRQcm94eS5zZXRPcmlnaW5hdGluZ1BhZ2Uob3JpZ2luYXRpbmdQ
YWdlKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIAordm9pZCBXZWJQcm9jZXNzUG9v
bDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCit7CisgICAgZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQp
OworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1l
c3NhZ2VSZWNlaXZlcikKIHsKICAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVj
ZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwgbWVzc2FnZVJlY2VpdmVyKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24gMjQyODQyKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkod29ya2luZyBjb3B5KQpA
QCAtMTk0LDggKzE5NCw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZyYgaW5qZWN0ZWRC
dW5kbGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5pbmplY3RlZEJ1bmRs
ZVBhdGgoKTsgfQogCi0gICAgRG93bmxvYWRQcm94eSogZG93bmxvYWQoV2ViUGFnZVByb3h5KiBp
bml0aWF0aW5nUGFnZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7Ci0gICAgRG93bmxvYWRQcm94eSogcmVzdW1l
RG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhKiBy
ZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIERvd25sb2FkUHJveHkmIGRvd25s
b2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7IH0pOworICAgIERv
d25sb2FkUHJveHkmIHJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2Us
IGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogICAg
IHZvaWQgc2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKFJlZlB0cjxBUEk6
Ok9iamVjdD4mJiB1c2VyRGF0YSkgeyBtX2luamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2Vy
RGF0YSA9IFdURk1vdmUodXNlckRhdGEpOyB9CiAKQEAgLTI2Nyw3ICsyNjcsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkoYm9vbCk7CiAgICAgCiAgICAgLy8g
RG93bmxvYWRzLgotICAgIERvd25sb2FkUHJveHkqIGNyZWF0ZURvd25sb2FkUHJveHkoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwogICAgIEFQ
STo6RG93bmxvYWRDbGllbnQmIGRvd25sb2FkQ2xpZW50KCkgeyByZXR1cm4gKm1fZG93bmxvYWRD
bGllbnQ7IH0KIAogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlD
bGllbnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CkBAIC00MzAsNiArNDMwLDggQEAg
cHVibGljOgogICAgIGJvb2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0KICAgICBib29sIHNo
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFRh
a2VVSUJhY2tncm91bmRBc3NlcnRpb247IH0KIAorICAgIHZvaWQgc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChib29sIGJhY2tncm91bmQpOworICAgIAogI2lmIEVOQUJMRShHQU1FUEFEKQogICAg
IHZvaWQgZ2FtZXBhZENvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmKTsKICAgICB2b2lkIGdhbWVw
YWREaXNjb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
LmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsx
MTUsNyBAQCBSZWY8UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uPiBQcm9jZXNzUG9vCiAgICAgY29w
eS0+bV9zaG91bGRDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IHRoaXMtPm1fc2hvdWxkQ2FwdHVy
ZUF1ZGlvSW5VSVByb2Nlc3M7CiAgICAgY29weS0+bV9zaG91bGRDYXB0dXJlRGlzcGxheUluVUlQ
cm9jZXNzID0gdGhpcy0+bV9zaG91bGRDYXB0dXJlRGlzcGxheUluVUlQcm9jZXNzOwogICAgIGNv
cHktPm1faXNKSVRFbmFibGVkID0gdGhpcy0+bV9pc0pJVEVuYWJsZWQ7CisgICAgY29weS0+bV9k
b3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgPSB0aGlzLT5tX2Rvd25sb2FkTW9uaXRvclNw
ZWVkTXVsdGlwbGllcjsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGNvcHktPm1fY3RE
YXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlID0gdGhpcy0+bV9jdERhdGFDb25uZWN0aW9uU2Vydmlj
ZVR5cGU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHJldmlzaW9uIDI0Mjg0MikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1
c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1NpbmdsZVdlYlByb2Nl
c3M7IH0KICAgICB2b2lkIHNldFVzZXNTaW5nbGVXZWJQcm9jZXNzKGJvb2wgZW5hYmxlZCkgeyBt
X3VzZXNTaW5nbGVXZWJQcm9jZXNzID0gZW5hYmxlZDsgfQogCisgICAgdWludDMyX3QgZG93bmxv
YWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZE1vbml0
b3JTcGVlZE11bHRpcGxpZXI7IH0KKyAgICB2b2lkIHNldERvd25sb2FkTW9uaXRvclNwZWVkTXVs
dGlwbGllcih1aW50MzJfdCBtdWx0aXBsaWVyKSB7IG1fZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyID0gbXVsdGlwbGllcjsgfQorICAgIAogICAgIGJvb2wgaXNBdXRvbWF0aWNQcm9jZXNz
V2FybWluZ0VuYWJsZWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1faXNBdXRvbWF0
aWNQcm9jZXNzV2FybWluZ0VuYWJsZWRCeUNsaWVudC52YWx1ZU9yKG1fY2xpZW50V291bGRCZW5l
Zml0RnJvbUF1dG9tYXRpY1Byb2Nlc3NQcmV3YXJtaW5nKTsKQEAgLTIyOCw2ICsyMzEsNyBAQCBw
cml2YXRlOgogICAgIFdURjo6U3RyaW5nIG1fY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJ
ZGVudGlmaWVyOwogICAgIGJvb2wgbV9pc0pJVEVuYWJsZWQgeyB0cnVlIH07CiAgICAgYm9vbCBt
X3VzZXNTaW5nbGVXZWJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICB1aW50MzJfdCBtX2Rvd25sb2Fk
TW9uaXRvclNwZWVkTXVsdGlwbGllciB7IDEgfTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgV1RGOjpTdHJpbmcgbV9jdERhdGFDb25uZWN0aW9uU2VydmljZVR5cGU7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDI0
Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3NSwxMiArMjc1LDEyIEBAIHZvaWQgV0tDb250ZXh0U2V0Q29ubmVj
dGlvbkNsaWVudChXS0NvbnQKIAogV0tEb3dubG9hZFJlZiBXS0NvbnRleHREb3dubG9hZFVSTFJl
cXVlc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0UmVm
KQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYp
LT5kb3dubG9hZCgwLCBXZWJLaXQ6OnRvSW1wbChyZXF1ZXN0UmVmKS0+cmVzb3VyY2VSZXF1ZXN0
KCkpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJl
ZiktPmRvd25sb2FkKDAsIFdlYktpdDo6dG9JbXBsKHJlcXVlc3RSZWYpLT5yZXNvdXJjZVJlcXVl
c3QoKSkpOwogfQogCiBXS0Rvd25sb2FkUmVmIFdLQ29udGV4dFJlc3VtZURvd25sb2FkKFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmLCBXS0RhdGFSZWYgcmVzdW1lRGF0YSwgV0tTdHJpbmdSZWYgcGF0
aCkKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVm
KS0+cmVzdW1lRG93bmxvYWQobnVsbHB0ciwgV2ViS2l0Ojp0b0ltcGwocmVzdW1lRGF0YSksIFdl
YktpdDo6dG9XVEZTdHJpbmcocGF0aCkpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2Vi
S2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnJlc3VtZURvd25sb2FkKG51bGxwdHIsIFdlYktpdDo6
dG9JbXBsKHJlc3VtZURhdGEpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKHBhdGgpKSk7CiB9CiAKIHZv
aWQgV0tDb250ZXh0U2V0SW5pdGlhbGl6YXRpb25Vc2VyRGF0YUZvckluamVjdGVkQnVuZGxlKFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCAgV0tUeXBlUmVmIHVzZXJEYXRhUmVmKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0J
KHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsNiArNTU4LDExIEBAIC0gKHZv
aWQpX3NldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkOihCT08KICAgICBfcHJvY2Vzc1Bvb2wtPnNl
dFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGVuYWJsZWQpOwogfQogCistICh2b2lkKV9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKK3sKKyAgICBfcHJvY2Vzc1Bvb2wt
PnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisKIC0gKHZvaWQpX3Nl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTCkgYWxsb3dzCiB7
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNTgyLDcgKzU4Nyw3IEBAIC0gKHZvaWQp
X3NldENvcmVMb2NhdGlvblByb3ZpZGVyOihpZDxfV0sKIAogLSAoX1dLRG93bmxvYWQgKilfZG93
bmxvYWRVUkxSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0IG9yaWdpbmF0aW5nV2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldwogewotICAgIHJldHVybiAoX1dLRG93bmxvYWQgKilfcHJv
Y2Vzc1Bvb2wtPmRvd25sb2FkKFt3ZWJWaWV3IF9wYWdlXSwgcmVxdWVzdCktPndyYXBwZXIoKTsK
KyAgICByZXR1cm4gKF9XS0Rvd25sb2FkICopX3Byb2Nlc3NQb29sLT5kb3dubG9hZChbd2ViVmll
dyBfcGFnZV0sIHJlcXVlc3QpLndyYXBwZXIoKTsKIH0KIAogLSAoX1dLRG93bmxvYWQgKilfcmVz
dW1lRG93bmxvYWRGcm9tRGF0YTooTlNEYXRhICopcmVzdW1lRGF0YSBwYXRoOihOU1N0cmluZyAq
KXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw1
ICsxMTksNiBAQAogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3Jh
Z2VQYXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25p
bmdFbmFibGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJ
X0RFUFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQi
LCBtYWNvc3goMTAuMTIuMywgV0tfTUFDX1RCQSksIGlvcygxMC4zLCBXS19JT1NfVEJBKSk7CiBA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc1N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkLCBz
ZXR0ZXI9X3NldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkOikgQk9PTCBfc3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMuNCksIGlvcygxMS4zKSk7Cist
ICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBlbmQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHJldmlzaW9uIDI0Mjg0MikKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBXS19DTEFTU19BVkFJTEFC
TEUobWFjb3N4KDEwLjEwKSwgaW9zKDguCiBAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBwYWdl
Q2FjaGVFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjE0KSwgaW9zKDEyLjApKTsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRp
b25PblN5c3RlbUNoYW5nZSBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xNCksIGlvcygxMi4w
KSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzSklURW5hYmxlZCkgQk9PTCBKSVRF
bmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOworQHByb3BlcnR5IChub25hdG9taWMpIE5TVUludGVnZXIgZG93bmxvYWRNb25pdG9yU3Bl
ZWRNdWx0aXBsaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5t
bQkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYg
KzMyNCwxNiBAQCAtICh2b2lkKXNldEpJVEVuYWJsZWQ6KEJPT0wpZW5hYmxlZAogICAgIF9wcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24tPnNldEpJVEVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKKy0gKE5T
VUludGVnZXIpZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyCit7CisgICAgcmV0dXJuIF9w
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24tPmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcigp
OworfQorCistICh2b2lkKXNldERvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjooTlNVSW50
ZWdlciltdWx0aXBsaWVyCit7CisgICAgX3Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi0+c2V0RG93
bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKG11bHRpcGxpZXIpOworfQorCiAtICh2b2lkKXNl
dFN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5nZTooQk9PTClzdXBw
cmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2UKIHsKICAgICBfcHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLT5zZXRTdXBwcmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25T
eXN0ZW1DaGFuZ2Uoc3VwcHJlc3Nlc0Nvbm5lY3Rpb25UZXJtaW5hdGlvbk9uU3lzdGVtQ2hhbmdl
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0Rvd25sb2FkUHJveHlNYXBD
b2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Eb3du
bG9hZFByb3h5TWFwQ29jb2EubW0JKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvRG93bmxvYWRQcm94eU1hcENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRv
d25sb2FkUHJveHlNYXAuaCIKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW1wb3J0IDxV
SUtpdC9VSUtpdC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIERvd25s
b2FkUHJveHlNYXA6OnBsYXRmb3JtQ3JlYXRlKCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIG1fYmFja2dyb3VuZE9ic2VydmVyID0gW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlckZvck5hbWU6VUlBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dy
b3VuZE5vdGlmaWNhdGlvbiBvYmplY3Q6W1VJQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25d
IHF1ZXVlOm5pbCB1c2luZ0Jsb2NrOm1ha2VCbG9ja1B0cihbd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cigqdGhpcyldKE5TTm90aWZpY2F0aW9uICopIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2Vha1RoaXMtPmFwcGxpY2F0aW9uRGlkRW50ZXJC
YWNrZ3JvdW5kKCk7CisgICAgfSkuZ2V0KCldOworICAgIG1fZm9yZWdyb3VuZE9ic2VydmVyID0g
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlckZvck5hbWU6
VUlBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmROb3RpZmljYXRpb24gb2JqZWN0OltVSUFw
cGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXSBxdWV1ZTpuaWwgdXNpbmdCbG9jazptYWtlQmxv
Y2tQdHIoW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShOU05vdGlmaWNhdGlvbiAqKSB7
CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdl
YWtUaGlzLT5hcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKTsKKyAgICB9KS5nZXQoKV07
CisjZW5kaWYKK30KKwordm9pZCBEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3koKQor
eworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX2JhY2tncm91bmRPYnNlcnZlci5nZXQoKV07
CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZl
cjptX2ZvcmVncm91bmRPYnNlcnZlci5nZXQoKV07CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UG9vbENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHdvcmtpbmcgY29weSkK
QEAgLTUzLDExICs1MywxNCBAQAogI2ltcG9ydCA8c3lzL3BhcmFtLmg+CiAjaW1wb3J0IDx3dGYv
RmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KKyNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgog
I2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vZHlsZFNQSS5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQog
I2ltcG9ydCA8UXVhcnR6Q29yZS9DQVJlbW90ZUxheWVyU2VydmVyLmg+CisjZWxzZQorI2ltcG9y
dCAiVUlLaXRTUEkuaCIKICNlbmRpZgogCiBOU1N0cmluZyAqV2ViU2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeURlZmF1bHRzS2V5ID0gQCJXZWJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uRGlyZWN0b3J5IjsKQEAgLTMwMyw2ICszMDYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOCiAjZW5kaWYKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxl
SVRQRGF0YWJhc2UgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNl
RW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKKyAgICBwYXJhbWV0ZXJzLmRv
d25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllciA9IG1fY29uZmlndXJhdGlvbi0+ZG93bmxvYWRN
b25pdG9yU3BlZWRNdWx0aXBsaWVyKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW52YWxpZGF0ZUNvbnRleHQoKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAkocmV2aXNpb24gMjQyODQyKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGaW5p
c2goKQogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlkRmluaXNoKCptX3By
b2Nlc3NQb29sLCAqdGhpcyk7CiAKICAgICAvLyBUaGlzIGNhbiBjYXVzZSB0aGUgRG93bmxvYWRQ
cm94eSBvYmplY3QgdG8gYmUgZGVsZXRlZC4KLSAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxv
YWRGaW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hl
ZCgqdGhpcyk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8QVBJOjpEYXRhPiBjcmVhdGVEYXRhKGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIERvd25s
b2FkUHJveHk6OmRpZEZhaWwoY29uc3QgUmVzb3VyCiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxv
YWRDbGllbnQoKS5kaWRGYWlsKCptX3Byb2Nlc3NQb29sLCAqdGhpcywgZXJyb3IpOwogCiAgICAg
Ly8gVGhpcyBjYW4gY2F1c2UgdGhlIERvd25sb2FkUHJveHkgb2JqZWN0IHRvIGJlIGRlbGV0ZWQu
Ci0gICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQodGhpcyk7CisgICAgbV9k
b3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwogfQogCiB2b2lkIERvd25s
b2FkUHJveHk6OmRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEp
CkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRDYW5jZWwoY29uc3Qg
SVBDOgogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlkQ2FuY2VsKCptX3By
b2Nlc3NQb29sLCAqdGhpcyk7CiAKICAgICAvLyBUaGlzIGNhbiBjYXVzZSB0aGUgRG93bmxvYWRQ
cm94eSBvYmplY3QgdG8gYmUgZGVsZXRlZC4KLSAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxv
YWRGaW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hl
ZCgqdGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAko
cmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxOSArNDAsNDMgQEAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBEb3dubG9hZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKE5l
dHdvcmtQcm9jZXNzUHJveHkmIHByb2Nlc3MpCi0gICAgOiBtX3Byb2Nlc3MoJnByb2Nlc3MpCisg
ICAgOiBtX3Byb2Nlc3MobWFrZVdlYWtQdHIocHJvY2VzcykpCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgLCBtX3Nob3VsZFRha2VBc3NlcnRpb24oV1RGOjpwcm9jZXNzSGFzRW50aXRsZW1lbnQo
ImNvbS5hcHBsZS5tdWx0aXRhc2tpbmcuc3lzdGVtYXBwYXNzZXJ0aW9ucyIpKQogI2VuZGlmCiB7
CisgICAgcGxhdGZvcm1DcmVhdGUoKTsKIH0KIAogRG93bmxvYWRQcm94eU1hcDo6fkRvd25sb2Fk
UHJveHlNYXAoKQogewogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5pc0VtcHR5KCkpOworICAgIHBs
YXRmb3JtRGVzdHJveSgpOwogfQogCi1Eb3dubG9hZFByb3h5KiBEb3dubG9hZFByb3h5TWFwOjpj
cmVhdGVEb3dubG9hZFByb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCisjaWYgIVBMQVRGT1JNKENP
Q09BKQordm9pZCBEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybUNyZWF0ZSgpCit7Cit9CisKK3Zv
aWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKyNlbmRpZgorCit2
b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKK3sK
KyAgICBpZiAobV9wcm9jZXNzKQorICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKK30KKwor
dm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQor
eworICAgIGlmIChtX3Byb2Nlc3MpCisgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKK30K
KworRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShX
ZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVzb3VyY2VSZXF1ZXN0KQogewogICAgIGF1dG8gZG93bmxvYWRQcm94eSA9IERvd25sb2Fk
UHJveHk6OmNyZWF0ZSgqdGhpcywgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCk7CiAgICAg
bV9kb3dubG9hZHMuc2V0KGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94
eS5jb3B5UmVmKCkpOwpAQCAtNjQsMTIgKzg4LDEyIEBAIERvd25sb2FkUHJveHkqIERvd25sb2Fk
UHJveHlNYXA6OmNyZWF0ZUQKIAogICAgIG1fcHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJv
eHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCi0g
ICAgcmV0dXJuIGRvd25sb2FkUHJveHkucHRyKCk7CisgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7
CiB9CiAKLXZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFBy
b3h5KiBkb3dubG9hZFByb3h5KQordm9pZCBEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlz
aGVkKERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkpCiB7Ci0gICAgYXV0byBkb3dubG9hZElE
ID0gZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpOworICAgIGF1dG8gZG93bmxvYWRJRCA9IGRv
d25sb2FkUHJveHkuZG93bmxvYWRJRCgpOwogCiAgICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5
IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCiAgICAg
YXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpKTsKQEAgLTc3LDcgKzEwMSw3IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCgKICAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJRCkp
OwogCiAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25s
b2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkp
OwotICAgIGRvd25sb2FkUHJveHktPmludmFsaWRhdGUoKTsKKyAgICBkb3dubG9hZFByb3h5Lmlu
dmFsaWRhdGUoKTsKICAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93bmxvYWRJRCk7CiAKICAgICBp
ZiAobV9kb3dubG9hZHMuaXNFbXB0eSgpICYmIG1fc2hvdWxkVGFrZUFzc2VydGlvbikgewpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eU1hcC5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwx
MiBAQAogI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNp
bmNsdWRlIDxvYmpjL29iamMuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBSZXNvdXJjZVJlcXVlc3Q7CkBAIC00MCw3ICs0Niw3IEBAIGNsYXNzIE5ldHdvcmtQcm9jZXNz
UHJveHk7CiBjbGFzcyBQcm9jZXNzQXNzZXJ0aW9uOwogY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiAK
LWNsYXNzIERvd25sb2FkUHJveHlNYXAgeworY2xhc3MgRG93bmxvYWRQcm94eU1hcCA6IHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxEb3dubG9hZFByb3h5TWFwPiB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRQcm94eU1hcCk7CiAK
QEAgLTQ4LDE5ICs1NCwyOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgRG93bmxvYWRQcm94eU1h
cChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAgICAgfkRvd25sb2FkUHJveHlNYXAoKTsKIAotICAg
IERvd25sb2FkUHJveHkqIGNyZWF0ZURvd25sb2FkUHJveHkoV2ViUHJvY2Vzc1Bvb2wmLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICB2b2lkIGRvd25sb2FkRmluaXNoZWQo
RG93bmxvYWRQcm94eSopOworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHko
V2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2
b2lkIGRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSYpOwogCiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZHMuaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIHBy
b2Nlc3NEaWRDbG9zZSgpOwogCisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3Vu
ZCgpOworICAgIHZvaWQgYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7CisKIHByaXZh
dGU6Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbV9wcm9jZXNzOworICAgIHZvaWQgcGxhdGZv
cm1DcmVhdGUoKTsKKyAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworCisgICAgV2Vha1B0cjxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBS
ZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRh
a2VBc3NlcnRpb24geyBmYWxzZSB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzQXNzZXJ0
aW9uPiBtX2Rvd25sb2FkQXNzZXJ0aW9uOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
UmV0YWluUHRyPGlkPiBtX2JhY2tncm91bmRPYnNlcnZlcjsKKyAgICBSZXRhaW5QdHI8aWQ+IG1f
Zm9yZWdyb3VuZE9ic2VydmVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ3LDcgKzE0NywxNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQ
cm9jCiAgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q3Jl
YXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoaXNTZXJ2aWNlV29ya2VyUHJvY2Vzcywg
c2VjdXJpdHlPcmlnaW4pLCAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5X
aGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiB9CiAKLURvd25sb2FkUHJveHkqIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQoreworICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXAp
IHsKKyAgICAgICAgaWYgKGJhY2tncm91bmQpCisgICAgICAgICAgICBtX2Rvd25sb2FkUHJveHlN
YXAtPmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KCk7CisgICAgfQorfQorCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVh
dGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQog
ewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlN
YXAgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0aGlzKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBA
QCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CiBjbGFzcyBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eTsKIHN0cnVjdCBXZWJzaXRlRGF0YTsKIAotY2xhc3MgTmV0
d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHBy
aXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5
IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhy
b3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4g
ewogcHVibGljOgogICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW47CiAgICAgdXNpbmcgVG9wRnJhbWVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJik7CiAK
LSAgICBEb3dubG9hZFByb3h5KiBjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHko
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0
ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0
ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTE1NCw2ICsxNTQs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZW5kUHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0Zv
cmVncm91bmQoKTsKICAgICB2b2lkIHNlbmRQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3Vu
ZCgpOworICAgIHZvaWQgc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQp
OwogCiAgICAgdm9pZCBzZXRJc0hvbGRpbmdMb2NrZWRGaWxlcyhib29sKTsKICAgICB2b2lkIHNl
dElzSURCRGF0YWJhc2VIb2xkaW5nTG9ja2VkRmlsZXMoYm9vbCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAkocmV2aXNpb24gMjQy
ODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFN0
YXJ0UHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRG
YWlsUHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRD
b21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3Vz
dG9tQ29udGVudFByb3ZpZGVyKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVx
dWVzdChEb3dubG9hZFByb3h5Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBoYW5kbGVEb3dubG9hZFJl
cXVlc3QoRG93bmxvYWRQcm94eSYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVu
dFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vy
c29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29y
SGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkocmV2aXNpb24gMjQy
ODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZGlkQ29tbWl0TG9hZEZvck1haQogICAgIFttX2NvbnRlbnRWaWV3IF9kaWRDb21taXRMb2FkRm9y
TWFpbkZyYW1lXTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1
ZXN0KERvd25sb2FkUHJveHkqKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRS
ZXF1ZXN0KERvd25sb2FkUHJveHkmKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAkocmV2aXNpb24gMjQyODQyKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRvb2xUaXBDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYgb2xkVG9vbFRpcCwgY29uc3QgU3RyaW5nJiBuZXdUb29sVGlwKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbCB1c2VDdXN0b21Db250ZW50UHJvdmlkZXIpIG92ZXJyaWRlOwogICAgIHZv
aWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21Db250ZW50UHJvdmlkZXIoY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopIG92ZXJy
aWRlOworICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3Im
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29s
KSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFn
ZUNsaWVudEltcGxNYWMubW0JKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjk1LDcg
KzI5NSw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZEZpbmlzaExvYWRpbmdEYXQKIHsKIH0K
IAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJv
eHkqKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2Fk
UHJveHkmKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM0NTgsNiAr
MzQ1OCw5IEBACiAJCTVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrU2Vzc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzI2OTU4NDIwMDQyRjEyMDA1QzQzOUIgLyogV0tP
cGVuUGFuZWxQYXJhbWV0ZXJzUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS09wZW5QYW5lbFBhcmFtZXRlcnNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVDMjk4RDlFMUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVuZGluZ0Rvd25sb2FkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMkIxQUYzMjIzQUI3MjgwMEI5MUNGNyAvKiBEb3du
bG9hZE1vbml0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG93
bmxvYWRNb25pdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMyQjFBRjQy
MjNBQjcyODAwQjkxQ0Y3IC8qIERvd25sb2FkTW9uaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEb3dubG9hZE1vbml0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUMyQjFBRjUyMjNDMUZEMjAwQjkxQ0Y3IC8qIERvd25sb2FkUHJveHlNYXBDb2NvYS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERvd25sb2FkUHJveHlN
YXBDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMzNTlDMEMyMTU0NzMy
MTAwOUU3OTQ4IC8qIFdLRGVwcmVjYXRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS0RlcHJlY2F0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMzQUVB
OEUxRkUxRjFERjAwMjMxOEQzIC8qIFdlYnNpdGVQb2xpY2llc0RhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNDZDMEFDMjFCNzE5OEIwMEJDNTk5MSAvKiBXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC01MzM4LDYgKzUzNDEsNyBAQAogCQkJCTgzODkxQjZCMUE2OEMz
MEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbSAqLywKIAkJCQlBMURGNjMx
MTE4RTBCN0M4MDAzQTNFMkEgLyogRG93bmxvYWRDbGllbnQuaCAqLywKIAkJCQlBMURGNjMxMDE4
RTBCN0M4MDAzQTNFMkEgLyogRG93bmxvYWRDbGllbnQubW0gKi8sCisJCQkJNUMyQjFBRjUyMjND
MUZEMjAwQjkxQ0Y3IC8qIERvd25sb2FkUHJveHlNYXBDb2NvYS5tbSAqLywKIAkJCQkwMEI5NjYx
ODE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oICovLAogCQkJCTAwQjk2NjE3MThFMjVB
RTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50Lm1tICovLAogCQkJCUNENzhFMTEzMURCN0Q3RUQwMDE0
QTJERSAvKiBGdWxsc2NyZWVuQ2xpZW50LmggKi8sCkBAIC02ODYxLDYgKzY4NjUsOCBAQAogCQkJ
CTVDMTQyNkY5MUMyM0Y4NDMwMEQ0MTE4MyAvKiBEb3dubG9hZE1hbmFnZXIuaCAqLywKIAkJCQk1
MTI0MEVCOTIyMEEwOENBMDA1Q0ZDNjMgLyogRG93bmxvYWRNYXAuY3BwICovLAogCQkJCTUxMjQw
RUI4MjIwQTA4Q0EwMDVDRkM2MyAvKiBEb3dubG9hZE1hcC5oICovLAorCQkJCTVDMkIxQUYzMjIz
QUI3MjgwMEI5MUNGNyAvKiBEb3dubG9hZE1vbml0b3IuY3BwICovLAorCQkJCTVDMkIxQUY0MjIz
QUI3MjgwMEI5MUNGNyAvKiBEb3dubG9hZE1vbml0b3IuaCAqLywKIAkJCQk1Qzg1Qzc4NjFDM0Yy
M0M1MDA2MUE0RkEgLyogUGVuZGluZ0Rvd25sb2FkLmNwcCAqLywKIAkJCQk1QzI5OEQ5RTFDM0RF
RjI5MDA0NzBBRkUgLyogUGVuZGluZ0Rvd25sb2FkLmggKi8sCiAJCQkpOwpAQCAtMTAyMzMsOSAr
MTAyMzksNiBAQAogCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gMTAuMTsKIAkJCQkJCVBy
b3Zpc2lvbmluZ1N0eWxlID0gQXV0b21hdGljOwogCQkJCQl9OwotCQkJCQlBMTc5OEI1OTIyMzQ2
NEM0MDAwNzY0QkQgPSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSAxMC4yOwotCQkJ
CQl9OwogCQkJCQlFMUFDMkUyNzIwRjdCOTRDMDBCMDg5N0QgPSB7CiAJCQkJCQlDcmVhdGVkT25U
b29sc1ZlcnNpb24gPSA5LjM7CiAJCQkJCQlQcm92aXNpb25pbmdTdHlsZSA9IEF1dG9tYXRpYzsK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0MzAzMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI4IEBACisyMDE5LTAzLTE1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IERvd25sb2FkTW9uaXRvciB0byBwcmV2ZW50
IGxvbmctcnVubmluZyBzbG93IGRvd25sb2FkcyBmcm9tIGJhY2tncm91bmQgYXBwcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1RDUFNlcnZlci5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVy
OjpUQ1BTZXJ2ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjp+VENQU2Vy
dmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6c29ja2V0QmluZExpc3Rl
bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OndhaXRGb3JBbmRSZXBseVRv
UmVxdWVzdHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVENQU2VydmVyLmg6IEFkZGVkLgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpwb3J0IGNvbnN0KToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgor
ICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rvd25sb2FkRGlkU3RhcnQ6
XSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWREaWRD
YW5jZWw6XSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxv
YWQ6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWQ6
ZGlkUmVjZWl2ZURhdGE6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpyZXNwb25kU2xvd2x5
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OndlYlZpZXdXaXRoRG93bmxvYWRNb25pdG9yU3Bl
ZWRNdWx0aXBsaWVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRvd25sb2FkQXRSYXRlKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE5LTAzLTE1ICBKb25hdGhhbiBC
ZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRl
c3QgcmVzdWx0cwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUQ1BTZXJ2ZXIuaCIKKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDx0aHJl
YWQ+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKK1RDUFNlcnZlcjo6VENQU2VydmVyKEZ1bmN0aW9uPHZvaWQoU29j
a2V0KT4mJiBzb2NrZXRIYW5kbGVyKQorICAgIDogbV9zb2NrZXRIYW5kbGVyKFdURk1vdmUoc29j
a2V0SGFuZGxlcikpCit7CisgICAgc29ja2V0QmluZExpc3RlbigpOworICAgIG1fdGhyZWFkID0g
c3RkOjp0aHJlYWQoJlRDUFNlcnZlcjo6d2FpdEZvckFuZFJlcGx5VG9SZXF1ZXN0cywgdGhpcyk7
Cit9CisKK1RDUFNlcnZlcjo6flRDUFNlcnZlcigpCit7CisgICAgbV90aHJlYWQuam9pbigpOwor
ICAgIGlmIChtX2xpc3RlbmluZ1NvY2tldCAhPSBJbnZhbGlkU29ja2V0KSB7CisgICAgICAgIGNs
b3NlKG1fbGlzdGVuaW5nU29ja2V0KTsKKyAgICAgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBJbnZh
bGlkU29ja2V0OworICAgIH0KKyAgICBpZiAobV9jb25uZWN0aW9uU29ja2V0ICE9IEludmFsaWRT
b2NrZXQpIHsKKyAgICAgICAgY2xvc2UobV9jb25uZWN0aW9uU29ja2V0KTsKKyAgICAgICAgbV9j
b25uZWN0aW9uU29ja2V0ID0gSW52YWxpZFNvY2tldDsKKyAgICB9Cit9CisKK3ZvaWQgVENQU2Vy
dmVyOjpzb2NrZXRCaW5kTGlzdGVuKCkKK3sKKyAgICBtX2xpc3RlbmluZ1NvY2tldCA9IHNvY2tl
dChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKG1fbGlzdGVuaW5nU29ja2V0ID09
IEludmFsaWRTb2NrZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBQb3J0cyA0OTE1
Mi02NTUzNSBhcmUgdW5hbGxvY2F0ZWQgcG9ydHMuIFRyeSB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0
J3MgZnJlZS4KKyAgICBmb3IgKFBvcnQgcG9ydCA9IDQ5MTUyOyBwb3J0OyBwb3J0KyspIHsKKyAg
ICAgICAgc3RydWN0IHNvY2thZGRyX2luIG5hbWU7CisgICAgICAgIG1lbXNldCgmbmFtZSwgMCwg
c2l6ZW9mKG5hbWUpKTsKKyAgICAgICAgbmFtZS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAg
ICAgbmFtZS5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICAgICAgICBuYW1lLnNpbl9hZGRyLnNf
YWRkciA9IGh0b25sKElOQUREUl9BTlkpOworICAgICAgICBpZiAoYmluZChtX2xpc3RlbmluZ1Nv
Y2tldCwgcmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZuYW1lKSwgc2l6ZW9mKG5hbWUpKSA8
IDApIHsKKyAgICAgICAgICAgIC8vIFRoaXMgcG9ydCBpcyBidXN5LiBUcnkgdGhlIG5leHQgcG9y
dC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIG1heENvbm5lY3Rpb25zID0gMTsKKyAgICAgICAgaWYgKGxpc3RlbihtX2xpc3RlbmluZ1Nv
Y2tldCwgbWF4Q29ubmVjdGlvbnMpID09IC0xKSB7CisgICAgICAgICAgICAvLyBMaXN0ZW5pbmcg
ZmFpbGVkLgorICAgICAgICAgICAgY2xvc2UobV9saXN0ZW5pbmdTb2NrZXQpOworICAgICAgICAg
ICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBJbnZhbGlkU29ja2V0OworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIG1fcG9ydCA9IHBvcnQ7CisgICAgICAgIHJldHVybjsgLy8g
U3VjY2Vzc2Z1bGx5IHNldCB1cCBsaXN0ZW5pbmcgcG9ydC4KKyAgICB9CisgICAgCisgICAgLy8g
Q291bGRuJ3QgZmluZCBhbiBhdmFpbGFibGUgcG9ydC4KKyAgICBjbG9zZShtX2xpc3RlbmluZ1Nv
Y2tldCk7CisgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBJbnZhbGlkU29ja2V0OworfQorCit2b2lk
IFRDUFNlcnZlcjo6d2FpdEZvckFuZFJlcGx5VG9SZXF1ZXN0cygpCit7CisgICAgaWYgKG1fbGlz
dGVuaW5nU29ja2V0ID09IEludmFsaWRTb2NrZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2Nvbm5lY3Rpb25Tb2NrZXQgPSBhY2NlcHQobV9saXN0ZW5pbmdTb2NrZXQsIG51bGxwdHIs
IG51bGxwdHIpOworICAgIG1fc29ja2V0SGFuZGxlcihtX2Nvbm5lY3Rpb25Tb2NrZXQpOworICAg
IHNodXRkb3duKG1fY29ubmVjdGlvblNvY2tldCwgU0hVVF9SRFdSKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5oCShub25leGlz
dGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
dGhyZWFkPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CisKK2NsYXNzIFRDUFNlcnZlciB7CitwdWJsaWM6CisgICAgdXNpbmcgU29ja2V0ID0g
aW50OworICAgIHN0YXRpYyBjb25zdGV4cHIgU29ja2V0IEludmFsaWRTb2NrZXQgPSAtMTsKKyAg
ICB1c2luZyBQb3J0ID0gdWludDE2X3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBQb3J0IEludmFs
aWRQb3J0ID0gMDsKKyAgICAKKyAgICBUQ1BTZXJ2ZXIoRnVuY3Rpb248dm9pZChTb2NrZXQpPiYm
KTsKKyAgICB+VENQU2VydmVyKCk7CisgICAgCisgICAgUG9ydCBwb3J0KCkgY29uc3QgeyByZXR1
cm4gbV9wb3J0OyB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgc29ja2V0QmluZExpc3Rlbigp
OworICAgIHZvaWQgd2FpdEZvckFuZFJlcGx5VG9SZXF1ZXN0cygpOworCisgICAgUG9ydCBtX3Bv
cnQgeyBJbnZhbGlkUG9ydCB9OworICAgIFNvY2tldCBtX2xpc3RlbmluZ1NvY2tldCB7IEludmFs
aWRTb2NrZXQgfTsKKyAgICBTb2NrZXQgbV9jb25uZWN0aW9uU29ja2V0IHsgSW52YWxpZFNvY2tl
dCB9OworICAgIHN0ZDo6dGhyZWFkIG1fdGhyZWFkOworICAgIEZ1bmN0aW9uPHZvaWQoU29ja2V0
KT4gbV9zb2NrZXRIYW5kbGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0Mjg0MikKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjEsNiArMzIxLDcgQEAKIAkJNUM4MzhGN0YxREIwNEY5MDAwODI4NThG
IC8qIExvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTAxRkFFMUNBRjEzNzEwMEVENjRGOSAvKiBMb2FkSW52YWxp
ZFVSTFJlcXVlc3QubW0gKi87IH07CiAJCTVDOEJDNzk5MjE4Q0Y0NDcwMDgxMzg4NiAvKiBOZXR3
b3JrUHJvY2Vzcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDOEJDNzk4MjE4Q0YzRTkwMDgxMzg4NiAvKiBOZXR3b3JrUHJvY2Vzcy5tbSAqLzsgfTsK
IAkJNUM5NzNGNUMxRjU4RUY4QjAwMzU5QzI3IC8qIFdlYkdMUG9saWN5Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5NzNGNUIxRjU4RUYwQTAwMzU5
QzI3IC8qIFdlYkdMUG9saWN5Lm1tICovOyB9OworCQk1QzlCNTQ4RTIyM0M0Q0JFMDBCMTUwQzQg
LyogVENQU2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDOUI1NDhDMjIzQzRCRjUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIuY3BwICovOyB9Owog
CQk1QzlFNTY4NTFERjkxNDU0MDBDOUVFMzMgLyogV2Vic2l0ZVBvbGljaWVzLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU2ODQxREY5MTQzRDAw
QzlFRTMzIC8qIFdlYnNpdGVQb2xpY2llcy5tbSAqLzsgfTsKIAkJNUM5RTU2ODcxREY5MTRBRTAw
QzlFRTMzIC8qIGNvbnRlbnRCbG9ja2VyQ2hlY2suaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTY4NjFERjkxNDhFMDBDOUVFMzMg
LyogY29udGVudEJsb2NrZXJDaGVjay5odG1sICovOyB9OwogCQk1QzlFNTk0MTFEM0VCNUFDMDBF
M0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYiBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTkzRTFEM0VCMURFMDBFM0M2MkUgLyogQXBw
bGljYXRpb25DYWNoZS5kYiAqLzsgfTsKQEAgLTE3MTMsNiArMTcxNCw4IEBACiAJCTVDN0M3NENB
MUZCNTI4RDQwMDJGOUFCRSAvKiBXZWJWaWV3U2NoZWR1bGVJblJ1bkxvb3AubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWV3U2NoZWR1bGVJblJ1bkxvb3Au
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOEJDNzk4MjE4Q0YzRTkwMDgxMzg4
NiAvKiBOZXR3b3JrUHJvY2Vzcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE5ldHdvcmtQcm9jZXNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
Qzk3M0Y1QjFGNThFRjBBMDAzNTlDMjcgLyogV2ViR0xQb2xpY3kubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTFBvbGljeS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUM5QjU0OEMyMjNDNEJGNTAwQjE1MEM0IC8qIFRDUFNlcnZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUQ1BTZXJ2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzlCNTQ4RDIyM0M0QkY1MDBCMTUwQzQgLyogVENQ
U2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRDUFNlcnZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTY4NDFERjkxNDNEMDBDOUVFMzMgLyog
V2Vic2l0ZVBvbGljaWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2Vic2l0ZVBvbGljaWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlF
NTY4NjFERjkxNDhFMDBDOUVFMzMgLyogY29udGVudEJsb2NrZXJDaGVjay5odG1sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5odG1sOyBwYXRoID0gY29udGVudEJsb2NrZXJDaGVjay5odG1sOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTkzRTFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGljYXRp
b25DYWNoZS5kYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IGZpbGU7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlLmRiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjM5MCw2ICsyMzkzLDggQEAKIAkJCQlCQzU3NUJCRjEyNkY1NzUyMDA2RjBG
MTIgLyogUGxhdGZvcm1VdGlsaXRpZXMuY3BwICovLAogCQkJCUJDMTMxODgzMTE3MTE0QTgwMEI2
OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllcy5oICovLAogCQkJCUJDOTA5NTFCMTI1NTMzRDcwMDA4
Mzc1NiAvKiBQbGF0Zm9ybVdlYlZpZXcuaCAqLywKKwkJCQk1QzlCNTQ4QzIyM0M0QkY1MDBCMTUw
QzQgLyogVENQU2VydmVyLmNwcCAqLywKKwkJCQk1QzlCNTQ4RDIyM0M0QkY1MDBCMTUwQzQgLyog
VENQU2VydmVyLmggKi8sCiAJCQkJQkNCOUU3RkExMTIzNTlBMzAwQTEzN0UwIC8qIFRlc3QuaCAq
LywKIAkJCQlCQzEzMUFBODExNzEzMUZDMDBCNjk3MjcgLyogVGVzdHNDb250cm9sbGVyLmNwcCAq
LywKIAkJCQlCQ0I5RTdDNzExMjM0RTNBMDBBMTM3RTAgLyogVGVzdHNDb250cm9sbGVyLmggKi8s
CkBAIC00MjgwLDYgKzQyODUsNyBAQAogCQkJCTdDQ0U3RUE4MUE0MTFBMTkwMDQ0N0M0QyAvKiBT
eW50aGV0aWNCYWNraW5nU2NhbGVGYWN0b3JXaW5kb3cubSBpbiBTb3VyY2VzICovLAogCQkJCTFD
NzM0QjUzMjA3ODhDNDgwMEY0MzBFQSAvKiBTeXN0ZW1Db2xvcnMubW0gaW4gU291cmNlcyAqLywK
IAkJCQkyRDcwMDU5NjIxRURBMEM2MDAzNDYzQ0IgLyogVGFiT3V0T2ZXZWJWaWV3Lm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJNUM5QjU0OEUyMjNDNENCRTAwQjE1MEM0IC8qIFRDUFNlcnZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YxNjFBNDExQUU2MDA0NDdDNEMgLyogVGVybWluYXRl
VHdpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQTkxQTQxMUExRDAwNDQ3QzRDIC8q
IFRlc3RCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlG
NDYxMjhDQjIxMUQ0NzUxMDBEOUZBREIgLyogVGVzdERyYWdnaW5nSW5mby5tbSBpbiBTb3VyY2Vz
ICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9h
ZC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0Rvd25sb2FkLm1tCShyZXZpc2lvbiAyNDI4NDIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxOCArMjks
MjEgQEAKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiUGxh
dGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRDUFNlcnZlci5oIgogI2ltcG9ydCAiVGVzdC5o
IgogI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0j
aW1wb3J0IDxXZWJLaXQvX1dLRG93bmxvYWQuaD4KLSNpbXBvcnQgPFdlYktpdC9fV0tEb3dubG9h
ZERlbGVnYXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oPgorI2ltcG9ydCA8V2Vi
S2l0L19XS0Rvd25sb2FkLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLRG93bmxvYWREZWxlZ2F0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9y
dCA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW1wb3J0
IDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9y
dCA8d3RmL1dlYWtPYmpDUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAg
LTc3Niw0ICs3NzksMTM5IEBAIFRFU1QoX1dLRG93bmxvYWQsIENyYXNoQWZ0ZXJEb3dubG9hZERp
ZEYKICAgICBFWFBFQ1RfTlVMTChwcm9jZXNzUG9vbC5nZXQoKSk7CiB9CiAKLSNlbmRpZgorc3Rh
dGljIGJvb2wgcmVjZWl2ZWREYXRhOworc3RhdGljIGJvb2wgZGlkQ2FuY2VsOworc3RhdGljIFJl
dGFpblB0cjxOU1N0cmluZz4gZGVzdGluYXRpb247CisKK0BpbnRlcmZhY2UgRG93bmxvYWRNb25p
dG9yVGVzdERlbGVnYXRlIDogTlNPYmplY3QgPF9XS0Rvd25sb2FkRGVsZWdhdGU+CitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUKKworLSAodm9pZClf
ZG93bmxvYWREaWRTdGFydDooX1dLRG93bmxvYWQgKilkb3dubG9hZAoreworICAgIGRpZERvd25s
b2FkU3RhcnQgPSB0cnVlOworfQorCistICh2b2lkKV9kb3dubG9hZERpZENhbmNlbDooX1dLRG93
bmxvYWQgKilkb3dubG9hZAoreworICAgIGRpZENhbmNlbCA9IHRydWU7Cit9CisKKy0gKHZvaWQp
X2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShCT09MIGFsbG93T3ZlcndyaXRlLCBOU1N0cmluZyAqZGVzdGluYXRpb24pKWNvbXBs
ZXRpb25IYW5kbGVyCit7CisgICAgRVhQRUNUX1RSVUUoW2ZpbGVuYW1lIGlzRXF1YWxUb1N0cmlu
ZzpAImZpbGVuYW1lLmRhdCJdKTsKKyAgICBkZXN0aW5hdGlvbiA9IFtOU1RlbXBvcmFyeURpcmVj
dG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmaWxlbmFtZV07CisgICAgY29t
cGxldGlvbkhhbmRsZXIoWUVTLCBkZXN0aW5hdGlvbi5nZXQoKSk7Cit9CisKKy0gKHZvaWQpX2Rv
d25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRpZFJlY2VpdmVEYXRhOih1aW50NjRfdCls
ZW5ndGgKK3sKKyAgICByZWNlaXZlZERhdGEgPSB0cnVlOworfQorCitAZW5kCisKK25hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKKwordm9pZCByZXNwb25kU2xvd2x5KGludCBzb2NrZXQsIGRvdWJs
ZSBrYnBzLCBib29sJiB0ZXJtaW5hdGVTZXJ2ZXIpCit7CisgICAgRVhQRUNUX0ZBTFNFKGlzTWFp
blRocmVhZCgpKTsKKyAgICBjaGFyIHJlYWRCdWZmZXJbMTAwMF07CisgICAgYXV0byBieXRlc1Jl
YWQgPSA6OnJlYWQoc29ja2V0LCByZWFkQnVmZmVyLCBzaXplb2YocmVhZEJ1ZmZlcikpOworICAg
IEVYUEVDVF9HVChieXRlc1JlYWQsIDApOworICAgIEVYUEVDVF9UUlVFKHN0YXRpY19jYXN0PHNp
emVfdD4oYnl0ZXNSZWFkKSA8IHNpemVvZihyZWFkQnVmZmVyKSk7CisgICAgCisgICAgY29uc3Qg
Y2hhciogcmVzcG9uc2VIZWFkZXIgPQorICAgICJIVFRQLzEuMSAyMDAgT0tcclxuIgorICAgICJD
b250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cImZpbGVuYW1lLmRhdFwi
XHJcbiIKKyAgICAiQ29udGVudC1MZW5ndGg6IDEwMDAwMDAwMFxyXG5cclxuIjsKKyAgICBhdXRv
IGJ5dGVzV3JpdHRlbiA9IDo6d3JpdGUoc29ja2V0LCByZXNwb25zZUhlYWRlciwgc3RybGVuKHJl
c3BvbnNlSGVhZGVyKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNX
cml0dGVuKSwgc3RybGVuKHJlc3BvbnNlSGVhZGVyKSk7CisgICAgCisgICAgY29uc3QgZG91Ymxl
IHdyaXRlc1BlclNlY29uZCA9IDEwMDsKKyAgICBWZWN0b3I8Y2hhcj4gd3JpdGVCdWZmZXIoc3Rh
dGljX2Nhc3Q8c2l6ZV90PigxMDI0ICoga2JwcyAvIHdyaXRlc1BlclNlY29uZCkpOworICAgIHdo
aWxlICghdGVybWluYXRlU2VydmVyKSB7CisgICAgICAgIGF1dG8gYmVmb3JlID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CisgICAgICAgIDo6d3JpdGUoc29ja2V0LCB3cml0ZUJ1ZmZlci5kYXRhKCks
IHdyaXRlQnVmZmVyLnNpemUoKSk7CisgICAgICAgIGRvdWJsZSB3cml0ZUR1cmF0aW9uID0gKE1v
bm90b25pY1RpbWU6Om5vdygpIC0gYmVmb3JlKS5zZWNvbmRzKCk7CisgICAgICAgIGRvdWJsZSBk
ZXNpcmVkU2xlZXAgPSAxLjAgLyB3cml0ZXNQZXJTZWNvbmQ7CisgICAgICAgIGlmICh3cml0ZUR1
cmF0aW9uIDwgZGVzaXJlZFNsZWVwKQorICAgICAgICAgICAgdXNsZWVwKFVTRUNfUEVSX1NFQyAq
IChkZXNpcmVkU2xlZXAgLSB3cml0ZUR1cmF0aW9uKSk7CisgICAgfQorfQorCitSZXRhaW5QdHI8
V0tXZWJWaWV3PiB3ZWJWaWV3V2l0aERvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcihzaXpl
X3QgbXVsdGlwbGllcikKK3sKKyAgICBzdGF0aWMgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBh
ZG9wdE5TKFtEb3dubG9hZE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXddKTsKKyAgICBzdGF0aWMgYXV0
byBkb3dubG9hZERlbGVnYXRlID0gYWRvcHROUyhbRG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRl
IG5ld10pOworICAgIGF1dG8gcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uID0gYWRvcHROUyhbX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIG5ld10pOworICAgIFtwcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24gc2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyOm11bHRpcGxpZXJdOworICAg
IGF1dG8gcHJvY2Vzc1Bvb2wgPSBhZG9wdE5TKFtbV0tQcm9jZXNzUG9vbCBhbGxvY10gX2luaXRX
aXRoQ29uZmlndXJhdGlvbjpwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBh
dXRvIHdlYlZpZXdDb25maWd1cmF0aW9uID0gYWRvcHROUyhbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBuZXddKTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24gc2V0UHJvY2Vzc1Bvb2w6cHJvY2Vz
c1Bvb2wuZ2V0KCldOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlv
bjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRp
b25EZWxlZ2F0ZTpuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLnByb2Nlc3NQb29sLl9kb3dubG9hZERlbGVnYXRlID0gZG93bmxvYWREZWxlZ2F0
ZS5nZXQoKTsKKyAgICByZXR1cm4gd2ViVmlldzsKK30KKworZW51bSBjbGFzcyBBcHBSZXR1cm5z
VG9Gb3JlZ3JvdW5kIHsgTm8sIFllcyB9OworICAgIAordm9pZCBkb3dubG9hZEF0UmF0ZShkb3Vi
bGUgZGVzaXJlZEticHMsIHVuc2lnbmVkIHNwZWVkTXVsdGlwbGllciwgQXBwUmV0dXJuc1RvRm9y
ZWdyb3VuZCByZXR1cm5Ub0ZvcmVncm91bmQgPSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpObykK
K3sKKyAgICBib29sIHRlcm1pbmF0ZVNlcnZlciA9IGZhbHNlOworICAgIFRDUFNlcnZlciBzZXJ2
ZXIoWyZdKGF1dG8gc29ja2V0KSB7CisgICAgICAgIHJlc3BvbmRTbG93bHkoc29ja2V0LCBkZXNp
cmVkS2JwcywgdGVybWluYXRlU2VydmVyKTsKKyAgICB9KTsKKyAgICAKKyAgICBhdXRvIHdlYlZp
ZXcgPSB3ZWJWaWV3V2l0aERvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcihzcGVlZE11bHRp
cGxpZXIpOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJo
dHRwOi8vMTI3LjAuMC4xOiVkLyIsIHNlcnZlci5wb3J0KCldXV1dOworICAgIHJlY2VpdmVkRGF0
YSA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigmcmVjZWl2ZWREYXRhKTsKKyAgICAvLyBTdGFydCB0
aGUgRG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CisgICAgaWYgKHJl
dHVyblRvRm9yZWdyb3VuZCA9PSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCisgICAgICAg
IFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZDpOT107CisgICAgZGlkQ2FuY2VsID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZkaWRD
YW5jZWwpOworICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CisgICAgW1tOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpk
ZXN0aW5hdGlvbi5nZXQoKSBpc0RpcmVjdG9yeTpOT10gZXJyb3I6bmlsXTsKK30KKworVEVTVChf
V0tEb3dubG9hZCwgRG93bmxvYWRNb25pdG9yQ2FuY2VsKQoreworICAgIGRvd25sb2FkQXRSYXRl
KDAuNSwgMTIwKTsgLy8gU2hvdWxkIGNhbmNlbCBpbiB+MC41IHNlY29uZHMKKyAgICBkb3dubG9h
ZEF0UmF0ZSgxLjUsIDEyMCk7IC8vIFNob3VsZCBjYW5jZWwgaW4gfjIuNSBzZWNvbmRzCit9CisK
K1RFU1QoX1dLRG93bmxvYWQsIERvd25sb2FkTW9uaXRvclN1cnZpdmUpCit7CisgICAgX19ibG9j
ayBCT09MIHRpbWVvdXRSZWFjaGVkID0gTk87CisgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hf
dGltZShESVNQQVRDSF9USU1FX05PVywgMi41ICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGRpZENhbmNlbCk7CisgICAg
ICAgIGRpZENhbmNlbCA9IHRydWU7CisgICAgICAgIHRpbWVvdXRSZWFjaGVkID0gWUVTOworICAg
IH0pOworCisgICAgLy8gU2ltdWxhdGVzIGFuIGhvdXIgb2YgZG93bmxvYWRpbmcgMTUwa2IvcyBp
biAxIHNlY29uZC4KKyAgICAvLyBUaW1lb3V0IHNob3VsZCBiZSByZWFjaGVkIGJlZm9yZSB0aGlz
IGlzIGNhbmNlbGxlZCBiZWNhdXNlIHRoZSBkb3dubG9hZCByYXRlIGlzIGhpZ2ggZW5vdWdoLgor
ICAgIGRvd25sb2FkQXRSYXRlKDE1MC4wLCAzNjAwKTsKKyAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0
UmVhY2hlZCk7Cit9CisKK1RFU1QoX1dLRG93bmxvYWQsIERvd25sb2FkTW9uaXRvclJldHVyblRv
Rm9yZWdyb3VuZCkKK3sKKyAgICBfX2Jsb2NrIEJPT0wgdGltZW91dFJlYWNoZWQgPSBOTzsKKyAg
ICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAyLjUgKiBO
U0VDX1BFUl9TRUMpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBFWFBF
Q1RfRkFMU0UoZGlkQ2FuY2VsKTsKKyAgICAgICAgZGlkQ2FuY2VsID0gdHJ1ZTsKKyAgICAgICAg
dGltZW91dFJlYWNoZWQgPSBZRVM7CisgICAgfSk7CisgICAgZG93bmxvYWRBdFJhdGUoMC41LCAx
MjAsIEFwcFJldHVybnNUb0ZvcmVncm91bmQ6Olllcyk7CisgICAgRVhQRUNUX1RSVUUodGltZW91
dFJlYWNoZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364934</attachid>
            <date>2019-03-16 09:58:19 -0700</date>
            <delta_ts>2019-03-16 20:36:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195785-20190316095818.patch</filename>
            <type>text/plain</type>
            <size>83656</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDMwMTYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxOS0wMy0xNSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBE
b3dubG9hZE1vbml0b3IgdG8gcHJldmVudCBsb25nLXJ1bm5pbmcgc2xvdyBkb3dubG9hZHMgZnJv
bSBiYWNrZ3JvdW5kIGFwcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NTc4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IHdhcyB1cGRhdGVkIGluIDxyZGFyOi8v
cHJvYmxlbS80MjY3NzY4NT4gYnV0IGZvciBXZWJLaXQgRG93bmxvYWRzLgorICAgICAgICBUbyB0
ZXN0IGl0IEkgaW1wbGVtZW50ZWQgYSB0aHJvdHRsZWQgVENQIHNlcnZlciwgU1BJIHRvIHNwZWVk
IHVwIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLAorICAgICAgICBhbmQgU1BJIHRvIHN5bnRoZXNp
emUgdGhlIGFwcGxpY2F0aW9uIGdvaW5nIGludG8gdGhlIGJhY2tncm91bmQgYW5kIGZvcmVncm91
bmQsIHdoaWNoCisgICAgICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyIGRvZXMgb24gaU9TLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWQ6OmRpZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZENhbmNlbCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmg6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
OjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OmFwcGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZDo6bWFuYWdlciBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6
ZG93bmxvYWRGaW5pc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6YXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1h
bmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTWFwOjp2YWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hcC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1v
bml0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IgX2ticHMpOgorICAg
ICAgICAoV2ViS2l0Ojp0aW1lVW50aWxOZXh0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1vbml0b3I6OkRvd25sb2FkTW9uaXRvcik6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTW9uaXRvcjo6bWVhc3VyZWRUaHJvdWdocHV0UmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkTW9uaXRvcjo6ZG93bmxvYWRSZWNlaXZlZEJ5dGVzKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKToKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjpzcGVlZE11bHRpcGxpZXIg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaDogQWRk
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uV2lsbEVu
dGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb246OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXS0NvbnRleHREb3dubG9hZFVSTFJlcXVlc3QpOgorICAgICAgICAoV0tDb250ZXh0
UmVzdW1lRG93bmxvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDpdKToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfZG93bmxvYWRVUkxSZXF1ZXN0Om9y
aWdpbmF0aW5nV2ViVmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbToKKyAgICAgICAgKC1bX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uIGRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcl0pOgorICAgICAgICAo
LVtfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gc2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29j
b2EubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bUNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVz
dHJveSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmluaXNoKToKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHk6OmRpZENhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6On5E
b3dubG9hZFByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6cGxh
dGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bURlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlv
bkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
cm94eTo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxl
RG93bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
TWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDMtMTUg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBf
V0tEb3dubG9hZCBzaG91bGQgY29uZm9ybSB0byBOU0NvcHlpbmcgcHJvdG9jb2wKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuCiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCiBO
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmNwcAorTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkTW9uaXRvci5jcHAKIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxv
YWQuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiw3IEBA
IFVJUHJvY2Vzcy9Db2NvYS9BdXRvbWF0aW9uQ2xpZW50Lm1tCiBVSVByb2Nlc3MvQ29jb2EvQXV0
b21hdGlvblNlc3Npb25DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9EaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5tbQogVUlQcm9jZXNzL0NvY29hL0Rvd25sb2FkQ2xpZW50Lm1tCitVSVByb2Nlc3Mv
Q29jb2EvRG93bmxvYWRQcm94eU1hcENvY29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvRmluZENsaWVu
dC5tbQogVUlQcm9jZXNzL0NvY29hL0Z1bGxzY3JlZW5DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2Nv
YS9HbG9iYWxGaW5kSW5QYWdlU3RhdGUubW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYxLDYgKzM2MSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3
b3JrUHIKIAogICAgIGZvciAoYXV0byYgc2NoZW1lIDogcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzQ2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QpCiAgICAgICAgIHJlZ2lzdGVyVVJM
U2NoZW1lQXNDYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChzY2hlbWUpOworICAgIAorICAgIG1f
ZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyID0gcGFyYW1ldGVycy5kb3dubG9hZE1vbml0
b3JTcGVlZE11bHRpcGxpZXI7CiAKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzLCAiJXAgLSBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzOiBQcmVzZW50aW5nIHByb2Nlc3Mg
PSAlZCIsIHRoaXMsIFdlYkNvcmU6OnByZXNlbnRpbmdBcHBsaWNhdGlvblBJRCgpKTsKIH0KQEAg
LTE5NDAsNiArMTk0MiwxNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjYW5jZWxQcmVwYXJlVG9T
dXNwCiAgICAgICAgIGNvbm5lY3Rpb24tPmVuZFN1c3BlbnNpb24oKTsKIH0KIAordm9pZCBOZXR3
b3JrUHJvY2Vzczo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQoreworICAgIG1fZG93
bmxvYWRNYW5hZ2VyLmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7Cit9CisKK3ZvaWQg
TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCit7CisgICAg
bV9kb3dubG9hZE1hbmFnZXIuYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7Cit9CisK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByb2Nlc3NEaWRSZXN1bWUoKQogewogICAgIFJFTEVBU0Vf
TE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiJXAgLSBOZXR3b3JrUHJvY2Vzczo6cHJvY2Vzc0RpZFJl
c3VtZSgpIiwgdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw2ICszNjYs
NyBAQCBwcml2YXRlOgogICAgIElQQzo6Q29ubmVjdGlvbiogcGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b25Gb3JEb3dubG9hZHMoKSBvdmVycmlkZSB7IHJldHVybiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpOyB9CiAgICAgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3dubG9hZHNBdXRoZW50aWNhdGlv
bk1hbmFnZXIoKSBvdmVycmlkZTsKICAgICB2b2lkIHBlbmRpbmdEb3dubG9hZENhbmNlbGVkKERv
d25sb2FkSUQpIG92ZXJyaWRlOworICAgIHVpbnQzMl90IGRvd25sb2FkTW9uaXRvclNwZWVkTXVs
dGlwbGllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZG93bmxvYWRNb25pdG9yU3BlZWRN
dWx0aXBsaWVyOyB9CiAKICAgICAvLyBNZXNzYWdlIEhhbmRsZXJzCiAgICAgdm9pZCBkaWRSZWNl
aXZlU3luY05ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwpAQCAtMzkxLDYgKzM5Miw4IEBA
IHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KERvd25s
b2FkSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsKICAgICB2b2lkIGNvbnRpbnVlRGVj
aWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oRG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0
aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJiwgYm9vbCBhbGxvd092ZXJ3cml0ZSk7Cisg
ICAgdm9pZCBhcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpOworICAgIHZvaWQgYXBwbGlj
YXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7CiAKICAgICB2b2lkIHNldENhY2hlTW9kZWwoQ2Fj
aGVNb2RlbCk7CiAgICAgdm9pZCBhbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Qo
Y29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiwgY29uc3QgU3RyaW5nJiBob3N0KTsKQEAg
LTUyOCw2ICs1MzEsNyBAQCBwcml2YXRlOgogICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBt
YW5hZ2Vyc1Blck9yaWdpbjsKICAgICB9OwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0
b3JhZ2VRdW90YU1hbmFnZXJzPiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOworICAgIHVpbnQzMl90
IG1fZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyIHsgMSB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI0Mjg0MikKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3Mg
TGVnYWN5UmVjZWl2ZQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFB1Ymxpc2hEb3dubG9hZFBy
b2dyZXNzKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9hZElELCBVUkwgdXJsLCBXZWJLaXQ6OlNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQogI2VuZGlmCisg
ICAgQXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQorICAgIEFwcGxpY2F0aW9uV2lsbEVu
dGVyRm9yZWdyb3VuZCgpCiAKICAgICBDb250aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJLaXQ6OkRv
d25sb2FkSUQgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCiAg
ICAgQ29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihXZWJLaXQ6OkRvd25s
b2FkSUQgZG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBXZWJLaXQ6OlNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3ZlcndyaXRl
KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI0Mjg0
MikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmUKICAgICBlbmNvZGVyIDw8IHNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCB1cmxTY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5k
bGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsK
ICNlbmRpZgogICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CisgICAgZW5j
b2RlciA8PCBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXI7CiB9CiAKIGJvb2wgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIs
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0yMjEsNiArMjIy
LDEyIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIE9wdGlvbmFsPHVpbnQzMl90PiBkb3dubG9hZE1vbml0b3JT
cGVlZE11bHRpcGxpZXI7CisgICAgZGVjb2RlciA+PiBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRp
cGxpZXI7CisgICAgaWYgKCFkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQuZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVy
ID0gKmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjsKKyAgICAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjQy
ODQyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIGJvb2wgc2hvdWxkRGlzYWJs
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07CiAjZW5kaWYK
ICAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICB1aW50MzJf
dCBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgeyAxIH07CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJEYXRh
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93
bmxvYWRNb25pdG9yLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgpAQCAtMTE0LDYg
KzExNSw4IEBAIHZvaWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGwKICAgICAg
ICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZURhdGE6IFN0YXJ0ZWQgcmVjZWl2
aW5nIGRhdGEgKGlkID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7
CiAgICAgICAgIG1faGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTsKICAgICB9CisgICAgCisgICAgbV9t
b25pdG9yLmRvd25sb2FkUmVjZWl2ZWRCeXRlcyhsZW5ndGgpOwogCiAgICAgc2VuZChNZXNzYWdl
czo6RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZURhdGEobGVuZ3RoKSk7CiB9CkBAIC0xMjksNyAr
MTMyLDcgQEAgdm9pZCBEb3dubG9hZDo6ZGlkRmluaXNoKCkKICAgICAgICAgbV9zYW5kYm94RXh0
ZW5zaW9uID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9h
ZEZpbmlzaGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQo
KnRoaXMpOwogfQogCiB2b2lkIERvd25sb2FkOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCkBAIC0xNDMsNyAr
MTQ2LDcgQEAgdm9pZCBEb3dubG9hZDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycgogICAgICAg
ICBtX3NhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwogICAgICAgICBtX3NhbmRib3hFeHRlbnNp
b24gPSBudWxscHRyOwogICAgIH0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlz
aGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQoKnRoaXMp
OwogfQogCiB2b2lkIERvd25sb2FkOjpkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiByZXN1bWVEYXRhKQpAQCAtMTU2LDcgKzE1OSw3IEBAIHZvaWQgRG93bmxvYWQ6OmRpZENhbmNl
bChjb25zdCBJUEM6OkRhdGEKICAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uLT5yZXZva2UoKTsK
ICAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gbnVsbHB0cjsKICAgICB9Ci0gICAgbV9kb3du
bG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rvd25sb2FkTWFuYWdl
ci5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKIH0KIAogSVBDOjpDb25uZWN0aW9uKiBEb3dubG9h
ZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCShyZXZpc2lvbiAyNDI4
NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJEb3dubG9hZElE
LmgiCiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93bmxvYWRNb25p
dG9yLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtEYXRh
VGFzay5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKQEAgLTU4LDYgKzU5LDcgQEAg
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIERv
d25sb2FkTW9uaXRvcjsKIGNsYXNzIE5ldHdvcmtEYXRhVGFzazsKIGNsYXNzIE5ldHdvcmtTZXNz
aW9uOwogY2xhc3MgV2ViUGFnZTsKQEAgLTg5LDYgKzkxLDEyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYgcmVzdW1lRGF0YSk7CiAgICAgdm9pZCBkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKIAorICAgIGJvb2wgaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGxpY2F0aW9uRW50ZXJlZEJhY2tncm91bmQoKSB7
IG1fbW9uaXRvci5hcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKCk7IH0KKyAgICB2b2lkIGFw
cGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQoKSB7IG1fbW9uaXRvci5hcHBsaWNhdGlvbkVudGVy
ZWRGb3JlZ3JvdW5kKCk7IH0KKyAgICBEb3dubG9hZE1hbmFnZXImIG1hbmFnZXIoKSBjb25zdCB7
IHJldHVybiBtX2Rvd25sb2FkTWFuYWdlcjsgfQorCiBwcml2YXRlOgogICAgIC8vIElQQzo6TWVz
c2FnZVNlbmRlcgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KSBjb25zdCBvdmVycmlkZTsKQEAgLTk3LDggKzEwNSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
bGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3lEb3du
bG9hZCgpOwogCi0gICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKLQog
ICAgIERvd25sb2FkTWFuYWdlciYgbV9kb3dubG9hZE1hbmFnZXI7CiAgICAgRG93bmxvYWRJRCBt
X2Rvd25sb2FkSUQ7CiAgICAgUmVmPERvd25sb2FkTWFuYWdlcjo6Q2xpZW50PiBtX2NsaWVudDsK
QEAgLTExNCw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lv
bklEOwogICAgIFN0cmluZyBtX3N1Z2dlc3RlZE5hbWU7CiAgICAgYm9vbCBtX2hhc1JlY2VpdmVk
RGF0YSB7IGZhbHNlIH07CisgICAgRG93bmxvYWRNb25pdG9yIG1fbW9uaXRvciB7ICp0aGlzIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDExICsxNjksMTAg
QEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OnB1Ymxpc2hEb3dubG9hZFBybwogfQogI2VuZGlmIC8v
IFBMQVRGT1JNKENPQ09BKQogCi12b2lkIERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRGaW5pc2hl
ZChEb3dubG9hZCogZG93bmxvYWQpCit2b2lkIERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRGaW5p
c2hlZChEb3dubG9hZCYgZG93bmxvYWQpCiB7Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRh
aW5zKGRvd25sb2FkLT5kb3dubG9hZElEKCkpKTsKLSAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93
bmxvYWQtPmRvd25sb2FkSUQoKSk7Ci0gICAgCisgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRh
aW5zKGRvd25sb2FkLmRvd25sb2FkSUQoKSkpOworICAgIG1fZG93bmxvYWRzLnJlbW92ZShkb3du
bG9hZC5kb3dubG9hZElEKCkpOwogfQogCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6ZGlkQ3JlYXRl
RG93bmxvYWQoKQpAQCAtMTk2LDQgKzE5NSwxNiBAQCBBdXRoZW50aWNhdGlvbk1hbmFnZXImIERv
d25sb2FkTWFuYWdlcjo6CiAgICAgcmV0dXJuIG1fY2xpZW50LmRvd25sb2Fkc0F1dGhlbnRpY2F0
aW9uTWFuYWdlcigpOwogfQogCit2b2lkIERvd25sb2FkTWFuYWdlcjo6YXBwbGljYXRpb25EaWRF
bnRlckJhY2tncm91bmQoKQoreworICAgIGZvciAoYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fk
cy52YWx1ZXMoKSkKKyAgICAgICAgZG93bmxvYWQtPmFwcGxpY2F0aW9uRW50ZXJlZEJhY2tncm91
bmQoKTsKK30KKwordm9pZCBEb3dubG9hZE1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9y
ZWdyb3VuZCgpCit7CisgICAgZm9yIChhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVl
cygpKQorICAgICAgICBkb3dubG9hZC0+YXBwbGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCShyZXZpc2lv
biAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHZpcnR1YWwgTmV0d29ya0Jsb2JSZWdpc3RyeSYgbmV0d29ya0Jsb2JSZWdpc3RyeSgp
ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZigpIGNvbnN0ID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRlcmVmKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGRv
d25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcigpIGNvbnN0ID0gMDsKICAgICB9OwogCiAgICAg
ZXhwbGljaXQgRG93bmxvYWRNYW5hZ2VyKENsaWVudCYpOwpAQCAtOTgsMTAgKzk5LDEzIEBAIHB1
YmxpYzoKICAgICAKICAgICBEb3dubG9hZCogZG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElE
KSB7IHJldHVybiBtX2Rvd25sb2Fkcy5nZXQoZG93bmxvYWRJRCk7IH0KIAotICAgIHZvaWQgZG93
bmxvYWRGaW5pc2hlZChEb3dubG9hZCopOworICAgIHZvaWQgZG93bmxvYWRGaW5pc2hlZChEb3du
bG9hZCYpOwogICAgIGJvb2wgaXNEb3dubG9hZGluZygpIGNvbnN0IHsgcmV0dXJuICFtX2Rvd25s
b2Fkcy5pc0VtcHR5KCk7IH0KICAgICB1aW50NjRfdCBhY3RpdmVEb3dubG9hZENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9kb3dubG9hZHMuc2l6ZSgpOyB9CiAKKyAgICB2b2lkIGFwcGxpY2F0aW9u
RGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckZvcmVn
cm91bmQoKTsKKwogICAgIHZvaWQgZGlkQ3JlYXRlRG93bmxvYWQoKTsKICAgICB2b2lkIGRpZERl
c3Ryb3lEb3dubG9hZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYXAuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDExIEBAIGJvb2wgRG93bmxvYWRNYXA6OnJlbW92
ZShEb3dubG9hZElEIGRvd24KICAgICByZXR1cm4gcmVzdWx0OwogfQogCithdXRvIERvd25sb2Fk
TWFwOjp2YWx1ZXMoKSAtPiBEb3dubG9hZE1hcFR5cGU6OlZhbHVlc0l0ZXJhdG9yUmFuZ2UKK3sK
KyAgICByZXR1cm4gbV9kb3dubG9hZHMudmFsdWVzKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKFRBS0VfVU5CT1VOREVEX05FVFdPUktJTkdfQVNTRVJU
SU9OKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hcC5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICBEb3dubG9hZE1hcFR5cGU6OkFkZFJlc3VsdCBhZGQo
RG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPiYmKTsKICAgICBib29sIHJlbW92
ZShEb3dubG9hZElEKTsKIAorICAgIERvd25sb2FkTWFwVHlwZTo6VmFsdWVzSXRlcmF0b3JSYW5n
ZSB2YWx1ZXMoKTsKKwogcHJpdmF0ZToKICAgICBEb3dubG9hZE1hcFR5cGUgbV9kb3dubG9hZHM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NBc3NlcnRpb24+IG1fZG93bmxvYWRBc3NlcnRp
b247CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1vbml0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkTW9uaXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEb3dubG9hZE1vbml0b3IuaCIKKworI2luY2x1ZGUgIkRvd25sb2FkLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCisjdW5kZWYgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRAor
I2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRiht
X2Rvd25sb2FkLmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBOZXR3b3JrLCAiJXAgLSBEb3du
bG9hZE1vbml0b3I6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY29uc3RleHByIHVpbnQ2NF90IG9wZXJhdG9yIiIgX2ticHModW5zaWduZWQgbG9u
ZyBsb25nIGtpbG9ieXRlc1BlclNlY29uZCkKK3sKKyAgICByZXR1cm4ga2lsb2J5dGVzUGVyU2Vj
b25kICogMTAyNDsKK30KKworc3RydWN0IFRocm91Z2hwdXRJbnRlcnZhbCB7CisgICAgU2Vjb25k
cyB0aW1lOworICAgIHVpbnQ2NF90IGJ5dGVzUGVyU2Vjb25kOworfTsKKworc3RhdGljIGNvbnN0
IFRocm91Z2hwdXRJbnRlcnZhbCB0aHJvdWdocHV0SW50ZXJ2YWxzW10gPSB7CisgICAgeyAxX21p
biwgMV9rYnBzIH0sCisgICAgeyA1X21pbiwgMl9rYnBzIH0sCisgICAgeyAxMF9taW4sIDRfa2Jw
cyB9LAorICAgIHsgMTVfbWluLCA4X2ticHMgfSwKKyAgICB7IDIwX21pbiwgMTZfa2JwcyB9LAor
ICAgIHsgMjVfbWluLCAzMl9rYnBzIH0sCisgICAgeyAzMF9taW4sIDY0X2ticHMgfSwKKyAgICB7
IDQ1X21pbiwgOTZfa2JwcyB9LAorICAgIHsgNjBfbWluLCAxMjhfa2JwcyB9Cit9OworCitzdGF0
aWMgU2Vjb25kcyB0aW1lVW50aWxOZXh0SW50ZXJ2YWwoc2l6ZV90IGN1cnJlbnRJbnRlcnZhbCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50SW50ZXJ2YWwgKyAxIDwgV1RGX0FSUkFZX0xF
TkdUSCh0aHJvdWdocHV0SW50ZXJ2YWxzKSk7CisgICAgcmV0dXJuIHRocm91Z2hwdXRJbnRlcnZh
bHNbY3VycmVudEludGVydmFsICsgMV0udGltZSAtIHRocm91Z2hwdXRJbnRlcnZhbHNbY3VycmVu
dEludGVydmFsXS50aW1lOworfQorCitEb3dubG9hZE1vbml0b3I6OkRvd25sb2FkTW9uaXRvcihE
b3dubG9hZCYgZG93bmxvYWQpCisgICAgOiBtX2Rvd25sb2FkKGRvd25sb2FkKQoreworfQorCitk
b3VibGUgRG93bmxvYWRNb25pdG9yOjptZWFzdXJlZFRocm91Z2hwdXRSYXRlKCkgY29uc3QKK3sK
KyAgICB1aW50NjRfdCBieXRlcyB7IDAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRpbWVzdGFt
cCA6IG1fdGltZXN0YW1wcykKKyAgICAgICAgYnl0ZXMgKz0gdGltZXN0YW1wLmJ5dGVzUmVjZWl2
ZWQ7CisgICAgaWYgKCFieXRlcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKCFtX3Rp
bWVzdGFtcHMuaXNFbXB0eSgpKTsKKyAgICBTZWNvbmRzIHRpbWVEaWZmZXJlbmNlID0gbV90aW1l
c3RhbXBzLmxhc3QoKS50aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkgLSBtX3RpbWVzdGFtcHMuZmly
c3QoKS50aW1lLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgZG91YmxlIHNlY29uZHMgPSB0aW1l
RGlmZmVyZW5jZS5zZWNvbmRzKCk7CisgICAgaWYgKCFzZWNvbmRzKQorICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsKKyAgICByZXR1cm4gYnl0ZXMgLyBz
ZWNvbmRzOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6ZG93bmxvYWRSZWNlaXZlZEJ5dGVz
KHVpbnQ2NF90IGJ5dGVzUmVjZWl2ZWQpCit7CisgICAgaWYgKG1fdGltZXN0YW1wcy5zaXplKCkg
PiB0aW1lc3RhbXBDYXBhY2l0eSAtIDEpIHsKKyAgICAgICAgQVNTRVJUKG1fdGltZXN0YW1wcy5z
aXplKCkgPT0gdGltZXN0YW1wQ2FwYWNpdHkpOworICAgICAgICBtX3RpbWVzdGFtcHMucmVtb3Zl
Rmlyc3QoKTsKKyAgICB9CisgICAgbV90aW1lc3RhbXBzLmFwcGVuZCh7IE1vbm90b25pY1RpbWU6
Om5vdygpLCBieXRlc1JlY2VpdmVkIH0pOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6YXBw
bGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCgpCit7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgiYXBwbGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rv
d25sb2FkLmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgIG1fdGltZXIuc3RvcCgpOwor
ICAgIG1faW50ZXJ2YWwgPSAwOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6YXBwbGljYXRp
b25FbnRlcmVkQmFja2dyb3VuZCgpCit7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiYXBw
bGljYXRpb25FbnRlcmVkQmFja2dyb3VuZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rvd25sb2Fk
LmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVCghbV90aW1lci5pc0FjdGl2
ZSgpKTsKKyAgICBBU1NFUlQoIW1faW50ZXJ2YWwpOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KHRocm91Z2hwdXRJbnRlcnZhbHNbMF0udGltZSAvIHNwZWVkTXVsdGlwbGllcigpKTsKK30KKwor
dWludDMyX3QgRG93bmxvYWRNb25pdG9yOjpzcGVlZE11bHRpcGxpZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2Rvd25sb2FkLm1hbmFnZXIoKS5jbGllbnQoKS5kb3dubG9hZE1vbml0b3JTcGVl
ZE11bHRpcGxpZXIoKTsKK30KKwordm9pZCBEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1faW50ZXJ2YWwgPCBXVEZfQVJSQVlfTEVOR1RIKHRocm91
Z2hwdXRJbnRlcnZhbHMpKTsKKyAgICBpZiAobWVhc3VyZWRUaHJvdWdocHV0UmF0ZSgpIDwgdGhy
b3VnaHB1dEludGVydmFsc1ttX2ludGVydmFsXS5ieXRlc1BlclNlY29uZCkgeworICAgICAgICBS
RUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVkOiBjYW5jZWxsaW5nIGRvd25sb2FkIChp
ZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7
CisgICAgICAgIG1fZG93bmxvYWQuY2FuY2VsKCk7CisgICAgfSBlbHNlIGlmIChtX2ludGVydmFs
ICsgMSA8IFdURl9BUlJBWV9MRU5HVEgodGhyb3VnaHB1dEludGVydmFscykpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidGltZXJGaXJlZDogc3VmZmljaWVudCB0aHJvdWdocHV0
IHJhdGUgKGlkID0gJSIgUFJJdTY0ICIpIiwgbV9kb3dubG9hZC5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpKTsKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QodGltZVVudGlsTmV4dEludGVy
dmFsKG1faW50ZXJ2YWwrKykgLyBzcGVlZE11bHRpcGxpZXIoKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInRpbWVyRmlyZWQ6IERvd25sb2FkIHJlYWNoZWQg
dGhyZXNob2xkIHRvIG5vdCBiZSB0ZXJtaW5hdGVkIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93
bmxvYWQuZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNb25pdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgRG93bmxvYWQ7CisKK2NsYXNzIERvd25sb2FkTW9uaXRvciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRNb25pdG9yKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG93bmxvYWRNb25pdG9yKERvd25sb2FkJik7CisgICAg
CisgICAgdm9pZCBhcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBs
aWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKCk7CisgICAgdm9pZCBkb3dubG9hZFJlY2VpdmVkQnl0
ZXModWludDY0X3QpOworICAgIHZvaWQgdGltZXJGaXJlZCgpOworCitwcml2YXRlOgorICAgIERv
d25sb2FkJiBtX2Rvd25sb2FkOworCisgICAgZG91YmxlIG1lYXN1cmVkVGhyb3VnaHB1dFJhdGUo
KSBjb25zdDsKKyAgICB1aW50MzJfdCBzcGVlZE11bHRpcGxpZXIoKSBjb25zdDsKKyAgICAKKyAg
ICBzdHJ1Y3QgVGltZXN0YW1wIHsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lOworICAgICAg
ICB1aW50NjRfdCBieXRlc1JlY2VpdmVkOworICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgdGltZXN0YW1wQ2FwYWNpdHkgPSAxMDsKKyAgICBEZXF1ZTxUaW1lc3RhbXAsIHRpbWVz
dGFtcENhcGFjaXR5PiBtX3RpbWVzdGFtcHM7CisgICAgV2ViQ29yZTo6VGltZXIgbV90aW1lciB7
ICp0aGlzLCAmRG93bmxvYWRNb25pdG9yOjp0aW1lckZpcmVkIH07CisgICAgc2l6ZV90IG1faW50
ZXJ2YWwgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlcy5jcHAJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBjYWNoZXNPcmln
aW5GaWxlbmFtCiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChjYWNoZXNSb290UGF0aCwgIm9yaWdpbiJfcyk7CiB9CiAKLUNhY2hlczo6Q2FjaGVzKEVuZ2lu
ZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQ
YXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFnZXIpCitDYWNoZXM6OkNhY2hlcyhF
bmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiBy
b290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQogICAg
IDogbV9lbmdpbmUoJmVuZ2luZSkKICAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAg
ICAsIG1fcm9vdFBhdGgoV1RGTW92ZShyb290UGF0aCkpCkBAIC01MDAsMTAgKzUwMCwxMCBAQCB2
b2lkIENhY2hlczo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlCiAKICAgICBtX3F1b3RhTWFu
YWdlci0+cmVxdWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShhdXRvIGRlY2lzaW9uKSB7CiAgICAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAg
ICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueToKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueToKICAgICAg
ICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVkKTsKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50
OgogICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKICAgICAgICAgfTsKICAgICB9KTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ29u
bmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uLmNwcAkocmV2aXNpb24gMjQyODQyKQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
b25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTsKIHVzaW5n
IG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2U7CiAKKyN1bmRlZiBSRUxFQVNFX0xPR19JRl9BTExPV0VE
CiAjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lG
KHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgQ2FjaGVTdG9yYWdlLCAiJXAg
LSBDYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uOjoiIGZtdCwgJm1fY29ubmVjdGlvbi5jb25u
ZWN0aW9uKCksICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0ZVTkNUSU9OX0lG
X0FMTE9XRURfSU5fQ0FMTEJBQ0soZnVuY3Rpb25OYW1lLCBmbXQsIHJlc3VsdEdldHRlcikgXAog
ICAgIGlmICghcmVzdWx0Lmhhc192YWx1ZSgpKVwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIHsg
fTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgPSAwOwogCi0gICAg
dmlydHVhbCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpID0g
MDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVSdW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5Kiwg
V2ViRnJhbWVQcm94eSosIEFQSTo6T3BlblBhbmVsUGFyYW1ldGVycyosIFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyUHJveHkqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBz
aG93U2hhcmVTaGVldChjb25zdCBXZWJDb3JlOjpTaGFyZURhdGFXaXRoUGFyc2VkVVJMJiwgV1RG
OjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJikgeyByZXR1cm4gZmFsc2U7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjQy
ODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgzNSwxMyArMjgzNSwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjZWl2
ZWRQb2xpY3lEZWNpc2lvCiAgICAgRG93bmxvYWRJRCBkb3dubG9hZElEID0geyB9OwogICAgIGlm
IChhY3Rpb24gPT0gUG9saWN5QWN0aW9uOjpEb3dubG9hZCkgewogICAgICAgICAvLyBDcmVhdGUg
YSBkb3dubG9hZCBwcm94eS4KLSAgICAgICAgYXV0byogZG93bmxvYWQgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkuY3JlYXRlRG93bmxvYWRQcm94eShtX2RlY2lkZVBvbGljeUZvclJlc3BvbnNl
UmVxdWVzdCwgdGhpcyk7CisgICAgICAgIGF1dG8mIGRvd25sb2FkID0gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLmNyZWF0ZURvd25sb2FkUHJveHkobV9kZWNpZGVQb2xpY3lGb3JSZXNwb25zZVJl
cXVlc3QsIHRoaXMpOwogICAgICAgICBpZiAobmF2aWdhdGlvbikgewotICAgICAgICAgICAgZG93
bmxvYWQtPnNldFdhc1VzZXJJbml0aWF0ZWQobmF2aWdhdGlvbi0+d2FzVXNlckluaXRpYXRlZCgp
KTsKLSAgICAgICAgICAgIGRvd25sb2FkLT5zZXRSZWRpcmVjdENoYWluKG5hdmlnYXRpb24tPnRh
a2VSZWRpcmVjdENoYWluKCkpOworICAgICAgICAgICAgZG93bmxvYWQuc2V0V2FzVXNlckluaXRp
YXRlZChuYXZpZ2F0aW9uLT53YXNVc2VySW5pdGlhdGVkKCkpOworICAgICAgICAgICAgZG93bmxv
YWQuc2V0UmVkaXJlY3RDaGFpbihuYXZpZ2F0aW9uLT50YWtlUmVkaXJlY3RDaGFpbigpKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGRvd25sb2FkSUQgPSBkb3dubG9hZC0+ZG93bmxvYWRJRCgpOwor
ICAgICAgICBkb3dubG9hZElEID0gZG93bmxvYWQuZG93bmxvYWRJRCgpOwogICAgICAgICBoYW5k
bGVEb3dubG9hZFJlcXVlc3QoZG93bmxvYWQpOwogICAgICAgICBtX2RlY2lkZVBvbGljeUZvclJl
c3BvbnNlUmVxdWVzdCA9IHsgfTsKICAgICB9CkBAIC01NDEwLDcgKzU0MTAsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0TWF5U3RhcnRNZWRpYVdoZW5JCiAgICAgcHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldE1heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3cobWF5U3RhcnRNZWRp
YSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVx
dWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVE
b3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7CiAgICAgcGFnZUNsaWVu
dCgpLmhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOTIsNyAr
MTA5Miw3IEBAIHB1YmxpYzoKIAogICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgY3JlYXRp
b25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYsIERyYXdpbmdBcmVhUHJveHkmKTsKIAotICAg
IHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKTsKKyAgICB2b2lkIGhh
bmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jik7CiAKICAgICB2b2lkIGFkdmFuY2VU
b05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKICAgICB2b2lkIGNo
YW5nZVNwZWxsaW5nVG9Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyOTgsOSArMTI5OCw5IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdX
ZWJzaXQKICAgICByZXR1cm4gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmNvbnRhaW5zKGRhdGFTdG9y
ZS5zZXNzaW9uSUQoKSk7CiB9CiAKLURvd25sb2FkUHJveHkqIFdlYlByb2Nlc3NQb29sOjpkb3du
bG9hZChXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCitEb3dubG9hZFByb3h5
JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVuYW1lKQogewotICAgIGF1dG8qIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5
KHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlKTsKKyAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3Jl
YXRlRG93bmxvYWRQcm94eShyZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSk7CiAgICAgUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEID0gaW5pdGlhdGluZ1BhZ2UgPyBpbml0aWF0aW5nUGFnZS0+c2Vzc2lv
bklEKCkgOiBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwogCiAgICAgaWYgKGlu
aXRpYXRpbmdQYWdlKQpAQCAtMTMyMywxNiArMTMyMywxNiBAQCBEb3dubG9hZFByb3h5KiBXZWJQ
cm9jZXNzUG9vbDo6ZG93bmxvYWQoCiAgICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0
SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgICAg
ICB9CiAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9h
ZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHVwZGF0ZWRS
ZXF1ZXN0LCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzcygp
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25J
RCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBzdWdnZXN0ZWRG
aWxlbmFtZSksIDApOwogICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKICAgICB9CiAKICAg
ICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIAotRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bv
b2w6OnJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQ
STo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQorRG93bmxvYWRQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1Bh
Z2UsIGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewot
ICAgIGF1dG8qIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KFJlc291cmNlUmVx
dWVzdCgpLCBpbml0aWF0aW5nUGFnZSk7CisgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0
ZURvd25sb2FkUHJveHkoUmVzb3VyY2VSZXF1ZXN0KCksIGluaXRpYXRpbmdQYWdlKTsKICAgICBQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBpbml0aWF0aW5nUGFnZSA/IGluaXRpYXRpbmdQYWdl
LT5zZXNzaW9uSUQoKSA6IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CiAKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKQEAgLTEz
NDAsNyArMTM0MCw3IEBAIERvd25sb2FkUHJveHkqIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3cK
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBp
ZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9h
ZFByb3h5LT5kb3dubG9hZElEKCksIHJlc3VtZURhdGEtPmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBk
b3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS0+ZGF0YVJlZmVyZW5jZSgpLCBw
YXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgICAgIHJldHVybiBkb3dubG9h
ZFByb3h5OwogICAgIH0KIApAQCAtMTU5MSwxMyArMTU5MSwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCh0aW1lb3V0SW50
ZXJ2YWwpKTsKIH0KIAotRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25s
b2FkUHJveHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBv
cmlnaW5hdGluZ1BhZ2UpCiB7Ci0gICAgYXV0byBkb3dubG9hZFByb3h5ID0gZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QpOwotICAgIGRvd25sb2FkUHJv
eHktPnNldE9yaWdpbmF0aW5nUGFnZShvcmlnaW5hdGluZ1BhZ2UpOworICAgIGF1dG8mIGRvd25s
b2FkUHJveHkgPSBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkocmVx
dWVzdCk7CisgICAgZG93bmxvYWRQcm94eS5zZXRPcmlnaW5hdGluZ1BhZ2Uob3JpZ2luYXRpbmdQ
YWdlKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIAordm9pZCBXZWJQcm9jZXNzUG9v
bDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCit7CisgICAgZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQp
OworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1l
c3NhZ2VSZWNlaXZlcikKIHsKICAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVj
ZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwgbWVzc2FnZVJlY2VpdmVyKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24gMjQyODQyKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkod29ya2luZyBjb3B5KQpA
QCAtMTk0LDggKzE5NCw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZyYgaW5qZWN0ZWRC
dW5kbGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5pbmplY3RlZEJ1bmRs
ZVBhdGgoKTsgfQogCi0gICAgRG93bmxvYWRQcm94eSogZG93bmxvYWQoV2ViUGFnZVByb3h5KiBp
bml0aWF0aW5nUGFnZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7Ci0gICAgRG93bmxvYWRQcm94eSogcmVzdW1l
RG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhKiBy
ZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIERvd25sb2FkUHJveHkmIGRvd25s
b2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7IH0pOworICAgIERv
d25sb2FkUHJveHkmIHJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2Us
IGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogICAg
IHZvaWQgc2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKFJlZlB0cjxBUEk6
Ok9iamVjdD4mJiB1c2VyRGF0YSkgeyBtX2luamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2Vy
RGF0YSA9IFdURk1vdmUodXNlckRhdGEpOyB9CiAKQEAgLTI2Nyw3ICsyNjcsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkoYm9vbCk7CiAgICAgCiAgICAgLy8g
RG93bmxvYWRzLgotICAgIERvd25sb2FkUHJveHkqIGNyZWF0ZURvd25sb2FkUHJveHkoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwogICAgIEFQ
STo6RG93bmxvYWRDbGllbnQmIGRvd25sb2FkQ2xpZW50KCkgeyByZXR1cm4gKm1fZG93bmxvYWRD
bGllbnQ7IH0KIAogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlD
bGllbnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CkBAIC00MzAsNiArNDMwLDggQEAg
cHVibGljOgogICAgIGJvb2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0KICAgICBib29sIHNo
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFRh
a2VVSUJhY2tncm91bmRBc3NlcnRpb247IH0KIAorICAgIHZvaWQgc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChib29sIGJhY2tncm91bmQpOworICAgIAogI2lmIEVOQUJMRShHQU1FUEFEKQogICAg
IHZvaWQgZ2FtZXBhZENvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmKTsKICAgICB2b2lkIGdhbWVw
YWREaXNjb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
LmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsx
MTUsNyBAQCBSZWY8UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uPiBQcm9jZXNzUG9vCiAgICAgY29w
eS0+bV9zaG91bGRDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IHRoaXMtPm1fc2hvdWxkQ2FwdHVy
ZUF1ZGlvSW5VSVByb2Nlc3M7CiAgICAgY29weS0+bV9zaG91bGRDYXB0dXJlRGlzcGxheUluVUlQ
cm9jZXNzID0gdGhpcy0+bV9zaG91bGRDYXB0dXJlRGlzcGxheUluVUlQcm9jZXNzOwogICAgIGNv
cHktPm1faXNKSVRFbmFibGVkID0gdGhpcy0+bV9pc0pJVEVuYWJsZWQ7CisgICAgY29weS0+bV9k
b3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgPSB0aGlzLT5tX2Rvd25sb2FkTW9uaXRvclNw
ZWVkTXVsdGlwbGllcjsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGNvcHktPm1fY3RE
YXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlID0gdGhpcy0+bV9jdERhdGFDb25uZWN0aW9uU2Vydmlj
ZVR5cGU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHJldmlzaW9uIDI0Mjg0MikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1
c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1NpbmdsZVdlYlByb2Nl
c3M7IH0KICAgICB2b2lkIHNldFVzZXNTaW5nbGVXZWJQcm9jZXNzKGJvb2wgZW5hYmxlZCkgeyBt
X3VzZXNTaW5nbGVXZWJQcm9jZXNzID0gZW5hYmxlZDsgfQogCisgICAgdWludDMyX3QgZG93bmxv
YWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZE1vbml0
b3JTcGVlZE11bHRpcGxpZXI7IH0KKyAgICB2b2lkIHNldERvd25sb2FkTW9uaXRvclNwZWVkTXVs
dGlwbGllcih1aW50MzJfdCBtdWx0aXBsaWVyKSB7IG1fZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyID0gbXVsdGlwbGllcjsgfQorICAgIAogICAgIGJvb2wgaXNBdXRvbWF0aWNQcm9jZXNz
V2FybWluZ0VuYWJsZWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1faXNBdXRvbWF0
aWNQcm9jZXNzV2FybWluZ0VuYWJsZWRCeUNsaWVudC52YWx1ZU9yKG1fY2xpZW50V291bGRCZW5l
Zml0RnJvbUF1dG9tYXRpY1Byb2Nlc3NQcmV3YXJtaW5nKTsKQEAgLTIyOCw2ICsyMzEsNyBAQCBw
cml2YXRlOgogICAgIFdURjo6U3RyaW5nIG1fY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJ
ZGVudGlmaWVyOwogICAgIGJvb2wgbV9pc0pJVEVuYWJsZWQgeyB0cnVlIH07CiAgICAgYm9vbCBt
X3VzZXNTaW5nbGVXZWJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICB1aW50MzJfdCBtX2Rvd25sb2Fk
TW9uaXRvclNwZWVkTXVsdGlwbGllciB7IDEgfTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgV1RGOjpTdHJpbmcgbV9jdERhdGFDb25uZWN0aW9uU2VydmljZVR5cGU7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDI0
Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3NSwxMiArMjc1LDEyIEBAIHZvaWQgV0tDb250ZXh0U2V0Q29ubmVj
dGlvbkNsaWVudChXS0NvbnQKIAogV0tEb3dubG9hZFJlZiBXS0NvbnRleHREb3dubG9hZFVSTFJl
cXVlc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0UmVm
KQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYp
LT5kb3dubG9hZCgwLCBXZWJLaXQ6OnRvSW1wbChyZXF1ZXN0UmVmKS0+cmVzb3VyY2VSZXF1ZXN0
KCkpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJl
ZiktPmRvd25sb2FkKDAsIFdlYktpdDo6dG9JbXBsKHJlcXVlc3RSZWYpLT5yZXNvdXJjZVJlcXVl
c3QoKSkpOwogfQogCiBXS0Rvd25sb2FkUmVmIFdLQ29udGV4dFJlc3VtZURvd25sb2FkKFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmLCBXS0RhdGFSZWYgcmVzdW1lRGF0YSwgV0tTdHJpbmdSZWYgcGF0
aCkKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVm
KS0+cmVzdW1lRG93bmxvYWQobnVsbHB0ciwgV2ViS2l0Ojp0b0ltcGwocmVzdW1lRGF0YSksIFdl
YktpdDo6dG9XVEZTdHJpbmcocGF0aCkpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2Vi
S2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnJlc3VtZURvd25sb2FkKG51bGxwdHIsIFdlYktpdDo6
dG9JbXBsKHJlc3VtZURhdGEpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKHBhdGgpKSk7CiB9CiAKIHZv
aWQgV0tDb250ZXh0U2V0SW5pdGlhbGl6YXRpb25Vc2VyRGF0YUZvckluamVjdGVkQnVuZGxlKFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCAgV0tUeXBlUmVmIHVzZXJEYXRhUmVmKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0J
KHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsNiArNTU4LDExIEBAIC0gKHZv
aWQpX3NldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkOihCT08KICAgICBfcHJvY2Vzc1Bvb2wtPnNl
dFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGVuYWJsZWQpOwogfQogCistICh2b2lkKV9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKK3sKKyAgICBfcHJvY2Vzc1Bvb2wt
PnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisKIC0gKHZvaWQpX3Nl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTCkgYWxsb3dzCiB7
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNTgyLDcgKzU4Nyw3IEBAIC0gKHZvaWQp
X3NldENvcmVMb2NhdGlvblByb3ZpZGVyOihpZDxfV0sKIAogLSAoX1dLRG93bmxvYWQgKilfZG93
bmxvYWRVUkxSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0IG9yaWdpbmF0aW5nV2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldwogewotICAgIHJldHVybiAoX1dLRG93bmxvYWQgKilfcHJv
Y2Vzc1Bvb2wtPmRvd25sb2FkKFt3ZWJWaWV3IF9wYWdlXSwgcmVxdWVzdCktPndyYXBwZXIoKTsK
KyAgICByZXR1cm4gKF9XS0Rvd25sb2FkICopX3Byb2Nlc3NQb29sLT5kb3dubG9hZChbd2ViVmll
dyBfcGFnZV0sIHJlcXVlc3QpLndyYXBwZXIoKTsKIH0KIAogLSAoX1dLRG93bmxvYWQgKilfcmVz
dW1lRG93bmxvYWRGcm9tRGF0YTooTlNEYXRhICopcmVzdW1lRGF0YSBwYXRoOihOU1N0cmluZyAq
KXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw1
ICsxMTksNiBAQAogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3Jh
Z2VQYXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25p
bmdFbmFibGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJ
X0RFUFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQi
LCBtYWNvc3goMTAuMTIuMywgV0tfTUFDX1RCQSksIGlvcygxMC4zLCBXS19JT1NfVEJBKSk7CiBA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc1N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkLCBz
ZXR0ZXI9X3NldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkOikgQk9PTCBfc3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMuNCksIGlvcygxMS4zKSk7Cist
ICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBlbmQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHJldmlzaW9uIDI0Mjg0MikKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBXS19DTEFTU19BVkFJTEFC
TEUobWFjb3N4KDEwLjEwKSwgaW9zKDguCiBAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBwYWdl
Q2FjaGVFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjE0KSwgaW9zKDEyLjApKTsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRp
b25PblN5c3RlbUNoYW5nZSBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xNCksIGlvcygxMi4w
KSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzSklURW5hYmxlZCkgQk9PTCBKSVRF
bmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOworQHByb3BlcnR5IChub25hdG9taWMpIE5TVUludGVnZXIgZG93bmxvYWRNb25pdG9yU3Bl
ZWRNdWx0aXBsaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5t
bQkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYg
KzMyNCwxNiBAQCAtICh2b2lkKXNldEpJVEVuYWJsZWQ6KEJPT0wpZW5hYmxlZAogICAgIF9wcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24tPnNldEpJVEVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKKy0gKE5T
VUludGVnZXIpZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyCit7CisgICAgcmV0dXJuIF9w
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24tPmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcigp
OworfQorCistICh2b2lkKXNldERvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjooTlNVSW50
ZWdlciltdWx0aXBsaWVyCit7CisgICAgX3Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi0+c2V0RG93
bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKG11bHRpcGxpZXIpOworfQorCiAtICh2b2lkKXNl
dFN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5nZTooQk9PTClzdXBw
cmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2UKIHsKICAgICBfcHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLT5zZXRTdXBwcmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25T
eXN0ZW1DaGFuZ2Uoc3VwcHJlc3Nlc0Nvbm5lY3Rpb25UZXJtaW5hdGlvbk9uU3lzdGVtQ2hhbmdl
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNs
aWVudEltcGwuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDEwICsy
OTksMTAgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c3RhcnREcmFnKFJlZjxTZWxlYwogfQogI2Vu
ZGlmCiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9h
ZFByb3h5KiBkb3dubG9hZCkKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVx
dWVzdChEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKIHsKICAgICBpZiAoV0VCS0lUX0lTX1dFQl9W
SUVXKG1fdmlld1dpZGdldCkpCi0gICAgICAgIHdlYmtpdFdlYlZpZXdIYW5kbGVEb3dubG9hZFJl
cXVlc3QoV0VCS0lUX1dFQl9WSUVXKG1fdmlld1dpZGdldCksIGRvd25sb2FkKTsKKyAgICAgICAg
d2Via2l0V2ViVmlld0hhbmRsZURvd25sb2FkUmVxdWVzdChXRUJLSVRfV0VCX1ZJRVcobV92aWV3
V2lkZ2V0KSwgJmRvd25sb2FkKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ29tbWl0
TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIC8qIG1pbWVUeXBlICovLCBib29sIC8qIHVz
ZUN1c3RvbUNvbnRlbnRQcm92aWRlciAqLyApCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhpdEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB1cGRhdGVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92
ZXJyaWRlOwogICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkaWRGYWlsTG9hZEZvck1haW5GcmFtZSgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAJKHJldmlz
aW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTAgKzEyNCw5IEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZENvbW1pdExvYWRGb3JNYWkKIHsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmIGRvd25s
b2FkKQogewotICAgIEFTU0VSVChkb3dubG9hZCk7Ci0gICAgbV92aWV3LmhhbmRsZURvd25sb2Fk
UmVxdWVzdCgqZG93bmxvYWQpOworICAgIG1fdmlldy5oYW5kbGVEb3dubG9hZFJlcXVlc3QoZG93
bmxvYWQpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDaGFuZ2VDb250ZW50U2l6ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdG9vbFRpcENoYW5nZWQoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRpZENvbW1p
dExvYWRGb3JNYWluRnJhbWUoY29uc3QgU3RyaW5nJiwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopIG92ZXJyaWRlOworICAgIHZv
aWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSBvdmVycmlkZTsKIAogICAg
IHZvaWQgZGlkQ2hhbmdlQ29udGVudFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJy
aWRlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5
TWFwQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
RG93bmxvYWRQcm94eU1hcENvY29hLm1tCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL0Rvd25sb2FkUHJveHlNYXBDb2NvYS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJEb3dubG9hZFByb3h5TWFwLmgiCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2ltcG9y
dCA8VUlLaXQvVUlLaXQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBE
b3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybUNyZWF0ZSgpCit7CisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICBtX2JhY2tncm91bmRPYnNlcnZlciA9IFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJGb3JOYW1lOlVJQXBwbGljYXRpb25EaWRFbnRlckJh
Y2tncm91bmROb3RpZmljYXRpb24gb2JqZWN0OltVSUFwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0
aW9uXSBxdWV1ZTpuaWwgdXNpbmdCbG9jazptYWtlQmxvY2tQdHIoW3dlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpXShOU05vdGlmaWNhdGlvbiAqKSB7CisgICAgICAgIGlmICghd2Vha1RoaXMp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5hcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCgpOworICAgIH0pLmdldCgpXTsKKyAgICBtX2ZvcmVncm91bmRPYnNlcnZl
ciA9IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJGb3JO
YW1lOlVJQXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kTm90aWZpY2F0aW9uIG9iamVjdDpb
VUlBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl0gcXVldWU6bmlsIHVzaW5nQmxvY2s6bWFr
ZUJsb2NrUHRyKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oTlNOb3RpZmljYXRpb24g
KikgeworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB3ZWFrVGhpcy0+YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7CisgICAgfSkuZ2V0
KCldOworI2VuZGlmCit9CisKK3ZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95
KCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFtbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9iYWNrZ3JvdW5kT2JzZXJ2ZXIuZ2V0
KCldOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2Jz
ZXJ2ZXI6bV9mb3JlZ3JvdW5kT2JzZXJ2ZXIuZ2V0KCldOworI2VuZGlmCit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01MywxMSArNTMsMTQgQEAKICNpbXBvcnQgPHN5cy9wYXJhbS5oPgogI2ltcG9ydCA8
d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CisjaW1w
b3J0IDx3dGYvU29mdExpbmtpbmcuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9FbnRpdGxlbWVudHMu
aD4KICNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL2R5bGRTUEkuaD4KIAogI2lmIFBMQVRGT1JNKE1B
QykKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FSZW1vdGVMYXllclNlcnZlci5oPgorI2Vsc2UKKyNp
bXBvcnQgIlVJS2l0U1BJLmgiCiAjZW5kaWYKIAogTlNTdHJpbmcgKldlYlNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlEZWZhdWx0c0tleSA9IEAiV2ViU2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSI7CkBAIC0zMDMsNiArMzA2LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1Jbml0aWFsaXplTgogI2VuZGlmCiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVu
YWJsZUlUUERhdGFiYXNlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRh
YmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CisgICAgcGFyYW1ldGVy
cy5kb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgPSBtX2NvbmZpZ3VyYXRpb24tPmRvd25s
b2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAJKHJldmlzaW9uIDI0Mjg0MikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlk
RmluaXNoKCkKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZEZpbmlzaCgq
bV9wcm9jZXNzUG9vbCwgKnRoaXMpOwogCiAgICAgLy8gVGhpcyBjYW4gY2F1c2UgdGhlIERvd25s
b2FkUHJveHkgb2JqZWN0IHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9kb3dubG9hZFByb3h5TWFwLmRv
d25sb2FkRmluaXNoZWQodGhpcyk7CisgICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmlu
aXNoZWQoKnRoaXMpOwogfQogCiBzdGF0aWMgUmVmUHRyPEFQSTo6RGF0YT4gY3JlYXRlRGF0YShj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEpCkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBE
b3dubG9hZFByb3h5OjpkaWRGYWlsKGNvbnN0IFJlc291cgogICAgIG1fcHJvY2Vzc1Bvb2wtPmRv
d25sb2FkQ2xpZW50KCkuZGlkRmFpbCgqbV9wcm9jZXNzUG9vbCwgKnRoaXMsIGVycm9yKTsKIAog
ICAgIC8vIFRoaXMgY2FuIGNhdXNlIHRoZSBEb3dubG9hZFByb3h5IG9iamVjdCB0byBiZSBkZWxl
dGVkLgotICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKHRoaXMpOworICAg
IG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBE
b3dubG9hZFByb3h5OjpkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVE
YXRhKQpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkQ2FuY2VsKGNv
bnN0IElQQzoKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZENhbmNlbCgq
bV9wcm9jZXNzUG9vbCwgKnRoaXMpOwogCiAgICAgLy8gVGhpcyBjYW4gY2F1c2UgdGhlIERvd25s
b2FkUHJveHkgb2JqZWN0IHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9kb3dubG9hZFByb3h5TWFwLmRv
d25sb2FkRmluaXNoZWQodGhpcyk7CisgICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmlu
aXNoZWQoKnRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5j
cHAJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTkgKzQwLDQzIEBA
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1h
cChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQotICAgIDogbV9wcm9jZXNzKCZwcm9jZXNz
KQorICAgIDogbV9wcm9jZXNzKG1ha2VXZWFrUHRyKHByb2Nlc3MpKQogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVt
ZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRp
ZgogeworICAgIHBsYXRmb3JtQ3JlYXRlKCk7CiB9CiAKIERvd25sb2FkUHJveHlNYXA6On5Eb3du
bG9hZFByb3h5TWFwKCkKIHsKICAgICBBU1NFUlQobV9kb3dubG9hZHMuaXNFbXB0eSgpKTsKKyAg
ICBwbGF0Zm9ybURlc3Ryb3koKTsKIH0KIAotRG93bmxvYWRQcm94eSogRG93bmxvYWRQcm94eU1h
cDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQorI2lmICFQTEFURk9S
TShDT0NPQSkKK3ZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1DcmVhdGUoKQoreworfQor
Cit2b2lkIERvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisjZW5kaWYK
Kwordm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgp
Cit7CisgICAgaWYgKG1fcHJvY2VzcykKKyAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7Cit9
CisKK3ZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KCkKK3sKKyAgICBpZiAobV9wcm9jZXNzKQorICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7
Cit9CisKK0Rvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJv
eHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICBhdXRvIGRvd25sb2FkUHJveHkgPSBEb3du
bG9hZFByb3h5OjpjcmVhdGUoKnRoaXMsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QpOwog
ICAgIG1fZG93bmxvYWRzLnNldChkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIGRvd25sb2Fk
UHJveHkuY29weVJlZigpKTsKQEAgLTY0LDEyICs4OCwxMiBAQCBEb3dubG9hZFByb3h5KiBEb3du
bG9hZFByb3h5TWFwOjpjcmVhdGVECiAKICAgICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9h
ZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsK
IAotICAgIHJldHVybiBkb3dubG9hZFByb3h5LnB0cigpOworICAgIHJldHVybiBkb3dubG9hZFBy
b3h5OwogfQogCi12b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93bmxv
YWRQcm94eSogZG93bmxvYWRQcm94eSkKK3ZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRG
aW5pc2hlZChEb3dubG9hZFByb3h5JiBkb3dubG9hZFByb3h5KQogewotICAgIGF1dG8gZG93bmxv
YWRJRCA9IGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKTsKKyAgICBhdXRvIGRvd25sb2FkSUQg
PSBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKTsKIAogICAgIC8vIFRoZSBEb3dubG9hZFByb3h5
IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBwb29sLgog
ICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmUHRyKG1fcHJvY2Vzcy0+cHJv
Y2Vzc1Bvb2woKSk7CkBAIC03Nyw3ICsxMDEsNyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRv
d25sb2FkRmluaXNoZWQoCiAgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2Fk
SUQpKTsKIAogICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJ
RCgpKTsKLSAgICBkb3dubG9hZFByb3h5LT5pbnZhbGlkYXRlKCk7CisgICAgZG93bmxvYWRQcm94
eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCiAg
ICAgaWYgKG1fZG93bmxvYWRzLmlzRW1wdHkoKSAmJiBtX3Nob3VsZFRha2VBc3NlcnRpb24pIHsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsMTIgQEAKICNpbmNsdWRlICJEb3dubG9hZElELmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisjaW5jbHVkZSA8b2JqYy9vYmpjLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwpAQCAtNDAsNyArNDYsNyBAQCBjbGFzcyBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OwogY2xhc3MgUHJvY2Vzc0Fzc2VydGlvbjsKIGNsYXNzIFdlYlByb2Nlc3NQb29s
OwogCi1jbGFzcyBEb3dubG9hZFByb3h5TWFwIHsKK2NsYXNzIERvd25sb2FkUHJveHlNYXAgOiBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8RG93bmxvYWRQcm94eU1hcD4gewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERvd25sb2FkUHJveHlNYXAp
OwogCkBAIC00OCwxOSArNTQsMjkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IERvd25sb2FkUHJv
eHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogICAgIH5Eb3dubG9hZFByb3h5TWFwKCk7CiAK
LSAgICBEb3dubG9hZFByb3h5KiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYlByb2Nlc3NQb29sJiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBkb3dubG9hZEZpbmlz
aGVkKERvd25sb2FkUHJveHkqKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFBy
b3h5KFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Cisg
ICAgdm9pZCBkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmKTsKIAogICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZG93bmxvYWRzLmlzRW1wdHkoKTsgfQogCiAgICAgdm9p
ZCBwcm9jZXNzRGlkQ2xvc2UoKTsKIAorICAgIHZvaWQgYXBwbGljYXRpb25EaWRFbnRlckJhY2tn
cm91bmQoKTsKKyAgICB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpOworCiBw
cml2YXRlOgotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkqIG1fcHJvY2VzczsKKyAgICB2b2lkIHBs
YXRmb3JtQ3JlYXRlKCk7CisgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKKworICAgIFdlYWtQ
dHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9wcm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxvYWRJ
RCwgUmVmUHRyPERvd25sb2FkUHJveHk+PiBtX2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9zaG91
bGRUYWtlQXNzZXJ0aW9uIHsgZmFsc2UgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0Fz
c2VydGlvbj4gbV9kb3dubG9hZEFzc2VydGlvbjsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgIFJldGFpblB0cjxpZD4gbV9iYWNrZ3JvdW5kT2JzZXJ2ZXI7CisgICAgUmV0YWluUHRyPGlk
PiBtX2ZvcmVncm91bmRPYnNlcnZlcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Nyw3ICsxNDcsMTcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXROZXR3
b3JrUHJvYwogICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNyZWF0ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKGlzU2VydmljZVdvcmtlclByb2Nl
c3MsIHNlY3VyaXR5T3JpZ2luKSwgMCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VF
dmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogfQogCi1Eb3dubG9hZFByb3h5KiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVzb3VyY2VSZXF1ZXN0KQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKK3sKKyAgICBpZiAobV9kb3dubG9hZFByb3h5
TWFwKSB7CisgICAgICAgIGlmIChiYWNrZ3JvdW5kKQorICAgICAgICAgICAgbV9kb3dubG9hZFBy
b3h5TWFwLT5hcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdy
b3VuZCgpOworICAgIH0KK30KKworRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6
Y3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCkKIHsKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFBy
b3h5TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2
LDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogY2xhc3MgV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk7CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CiAKLWNsYXNz
IE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5
LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQgeworY2xhc3MgTmV0d29ya1Byb2Nlc3NQ
cm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vz
c1Rocm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJv
eHk+IHsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIFRvcEZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW47CkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2V0
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYp
OwogCi0gICAgRG93bmxvYWRQcm94eSogY3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFBy
b3h5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwogCiAgICAgdm9pZCBmZXRjaFdl
YnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25J
RCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0xNTQsNiAr
MTU0LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2VuZFByb2Nlc3NEaWRUcmFuc2l0aW9u
VG9Gb3JlZ3JvdW5kKCk7CiAgICAgdm9pZCBzZW5kUHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tn
cm91bmQoKTsKKyAgICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3Jv
dW5kKTsKIAogICAgIHZvaWQgc2V0SXNIb2xkaW5nTG9ja2VkRmlsZXMoYm9vbCk7CiAgICAgdm9p
ZCBzZXRJc0lEQkRhdGFiYXNlSG9sZGluZ0xvY2tlZEZpbGVzKGJvb2wpOwpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9u
IDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBk
aWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVz
ZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoYW5kbGVEb3dubG9h
ZFJlcXVlc3QoRG93bmxvYWRQcm94eSopIG92ZXJyaWRlOworICAgIHZvaWQgaGFuZGxlRG93bmxv
YWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENoYW5nZUNv
bnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNl
dEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1
cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9u
IDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgUGFnZUNsaWVudElt
cGw6OmRpZENvbW1pdExvYWRGb3JNYWkKICAgICBbbV9jb250ZW50VmlldyBfZGlkQ29tbWl0TG9h
ZEZvck1haW5GcmFtZV07CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2Fk
UmVxdWVzdChEb3dubG9hZFByb3h5KikKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25s
b2FkUmVxdWVzdChEb3dubG9hZFByb3h5JikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDI0Mjg0MikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b29sVGlwQ2hh
bmdlZChjb25zdCBTdHJpbmcmIG9sZFRvb2xUaXAsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRpcCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyKGNvbnN0
IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpIG92
ZXJyaWRlOwotICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBv
dmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vy
c29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMo
Ym9vbCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGxNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5
NSw3ICsyOTUsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkaW5nRGF0CiB7
CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9h
ZFByb3h5KikKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3du
bG9hZFByb3h5JikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDU4
LDYgKzM0NTgsOSBAQAogCQk1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Np
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1Nlc3Npb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMyNjk1ODQyMDA0MkYxMjAwNUM0MzlCIC8q
IFdLT3BlblBhbmVsUGFyYW1ldGVyc1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVuZGluZ0Rvd25sb2Fk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBlbmRpbmdEb3dubG9hZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzJCMUFGMzIyM0FCNzI4MDBCOTFDRjcgLyog
RG93bmxvYWRNb25pdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERvd25sb2FkTW9uaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMkIx
QUY0MjIzQUI3MjgwMEI5MUNGNyAvKiBEb3dubG9hZE1vbml0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRG93bmxvYWRNb25pdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDMkIxQUY1MjIzQzFGRDIwMEI5MUNGNyAvKiBEb3dubG9hZFByb3h5TWFwQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEb3dubG9hZFBy
b3h5TWFwQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMzU5QzBDMjE1
NDczMjEwMDlFNzk0OCAvKiBXS0RlcHJlY2F0ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tEZXByZWNhdGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVD
M0FFQThFMUZFMUYxREYwMDIzMThEMyAvKiBXZWJzaXRlUG9saWNpZXNEYXRhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYnNpdGVQb2xpY2llc0RhdGEuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzQ2QzBBQzIxQjcxOThCMDBCQzU5OTEgLyog
V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMzOCw2ICs1MzQxLDcgQEAKIAkJCQk4Mzg5MUI2QjFB
NjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubW0gKi8sCiAJCQkJQTFE
RjYzMTExOEUwQjdDODAwM0EzRTJBIC8qIERvd25sb2FkQ2xpZW50LmggKi8sCiAJCQkJQTFERjYz
MTAxOEUwQjdDODAwM0EzRTJBIC8qIERvd25sb2FkQ2xpZW50Lm1tICovLAorCQkJCTVDMkIxQUY1
MjIzQzFGRDIwMEI5MUNGNyAvKiBEb3dubG9hZFByb3h5TWFwQ29jb2EubW0gKi8sCiAJCQkJMDBC
OTY2MTgxOEUyNUFFMTAwQ0UxRjg4IC8qIEZpbmRDbGllbnQuaCAqLywKIAkJCQkwMEI5NjYxNzE4
RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5tbSAqLywKIAkJCQlDRDc4RTExMzFEQjdEN0VE
MDAxNEEyREUgLyogRnVsbHNjcmVlbkNsaWVudC5oICovLApAQCAtNjg2MSw2ICs2ODY1LDggQEAK
IAkJCQk1QzE0MjZGOTFDMjNGODQzMDBENDExODMgLyogRG93bmxvYWRNYW5hZ2VyLmggKi8sCiAJ
CQkJNTEyNDBFQjkyMjBBMDhDQTAwNUNGQzYzIC8qIERvd25sb2FkTWFwLmNwcCAqLywKIAkJCQk1
MTI0MEVCODIyMEEwOENBMDA1Q0ZDNjMgLyogRG93bmxvYWRNYXAuaCAqLywKKwkJCQk1QzJCMUFG
MzIyM0FCNzI4MDBCOTFDRjcgLyogRG93bmxvYWRNb25pdG9yLmNwcCAqLywKKwkJCQk1QzJCMUFG
NDIyM0FCNzI4MDBCOTFDRjcgLyogRG93bmxvYWRNb25pdG9yLmggKi8sCiAJCQkJNUM4NUM3ODYx
QzNGMjNDNTAwNjFBNEZBIC8qIFBlbmRpbmdEb3dubG9hZC5jcHAgKi8sCiAJCQkJNUMyOThEOUUx
QzNERUYyOTAwNDcwQUZFIC8qIFBlbmRpbmdEb3dubG9hZC5oICovLAogCQkJKTsKQEAgLTEwMjMz
LDkgKzEwMjM5LDYgQEAKIAkJCQkJCUNyZWF0ZWRPblRvb2xzVmVyc2lvbiA9IDEwLjE7CiAJCQkJ
CQlQcm92aXNpb25pbmdTdHlsZSA9IEF1dG9tYXRpYzsKIAkJCQkJfTsKLQkJCQkJQTE3OThCNTky
MjM0NjRDNDAwMDc2NEJEID0gewotCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gMTAuMjsK
LQkJCQkJfTsKIAkJCQkJRTFBQzJFMjcyMEY3Qjk0QzAwQjA4OTdEID0gewogCQkJCQkJQ3JlYXRl
ZE9uVG9vbHNWZXJzaW9uID0gOS4zOwogCQkJCQkJUHJvdmlzaW9uaW5nU3R5bGUgPSBBdXRvbWF0
aWM7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDMwMzIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyOCBAQAorMjAxOS0wMy0xNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBEb3dubG9hZE1vbml0b3IgdG8gcHJl
dmVudCBsb25nLXJ1bm5pbmcgc2xvdyBkb3dubG9hZHMgZnJvbSBiYWNrZ3JvdW5kIGFwcHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc4NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UQ1BTZXJ2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNl
cnZlcjo6VENQU2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6flRD
UFNlcnZlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OnNvY2tldEJpbmRM
aXN0ZW4pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjp3YWl0Rm9yQW5kUmVw
bHlUb1JlcXVlc3RzKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6cG9ydCBjb25zdCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5t
bToKKyAgICAgICAgKC1bRG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlIF9kb3dubG9hZERpZFN0
YXJ0Ol0pOgorICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rvd25sb2Fk
RGlkQ2FuY2VsOl0pOgorICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rv
d25sb2FkOmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOmNvbXBsZXRpb25I
YW5kbGVyOl0pOgorICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rvd25s
b2FkOmRpZFJlY2VpdmVEYXRhOl0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cmVzcG9uZFNs
b3dseSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp3ZWJWaWV3V2l0aERvd25sb2FkTW9uaXRv
clNwZWVkTXVsdGlwbGllcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkb3dubG9hZEF0UmF0
ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxOS0wMy0xNSAgSm9uYXRo
YW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgd2Via2l0cHk6IFVwbG9h
ZCB0ZXN0IHJlc3VsdHMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVENQU2VydmVyLmgiCisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8
dGhyZWFkPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgeworCitUQ1BTZXJ2ZXI6OlRDUFNlcnZlcihGdW5jdGlvbjx2b2lk
KFNvY2tldCk+JiYgc29ja2V0SGFuZGxlcikKKyAgICA6IG1fc29ja2V0SGFuZGxlcihXVEZNb3Zl
KHNvY2tldEhhbmRsZXIpKQoreworICAgIHNvY2tldEJpbmRMaXN0ZW4oKTsKKyAgICBtX3RocmVh
ZCA9IHN0ZDo6dGhyZWFkKCZUQ1BTZXJ2ZXI6OndhaXRGb3JBbmRSZXBseVRvUmVxdWVzdHMsIHRo
aXMpOworfQorCitUQ1BTZXJ2ZXI6On5UQ1BTZXJ2ZXIoKQoreworICAgIG1fdGhyZWFkLmpvaW4o
KTsKKyAgICBpZiAobV9saXN0ZW5pbmdTb2NrZXQgIT0gSW52YWxpZFNvY2tldCkgeworICAgICAg
ICBjbG9zZShtX2xpc3RlbmluZ1NvY2tldCk7CisgICAgICAgIG1fbGlzdGVuaW5nU29ja2V0ID0g
SW52YWxpZFNvY2tldDsKKyAgICB9CisgICAgaWYgKG1fY29ubmVjdGlvblNvY2tldCAhPSBJbnZh
bGlkU29ja2V0KSB7CisgICAgICAgIGNsb3NlKG1fY29ubmVjdGlvblNvY2tldCk7CisgICAgICAg
IG1fY29ubmVjdGlvblNvY2tldCA9IEludmFsaWRTb2NrZXQ7CisgICAgfQorfQorCit2b2lkIFRD
UFNlcnZlcjo6c29ja2V0QmluZExpc3RlbigpCit7CisgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBz
b2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOworICAgIGlmIChtX2xpc3RlbmluZ1NvY2tl
dCA9PSBJbnZhbGlkU29ja2V0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gUG9ydHMg
NDkxNTItNjU1MzUgYXJlIHVuYWxsb2NhdGVkIHBvcnRzLiBUcnkgdW50aWwgd2UgZmluZCBvbmUg
dGhhdCdzIGZyZWUuCisgICAgZm9yIChQb3J0IHBvcnQgPSA0OTE1MjsgcG9ydDsgcG9ydCsrKSB7
CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBuYW1lOworICAgICAgICBtZW1zZXQoJm5hbWUs
IDAsIHNpemVvZihuYW1lKSk7CisgICAgICAgIG5hbWUuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cisg
ICAgICAgIG5hbWUuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAgICAgbmFtZS5zaW5fYWRk
ci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKyAgICAgICAgaWYgKGJpbmQobV9saXN0ZW5p
bmdTb2NrZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHIqPigmbmFtZSksIHNpemVvZihuYW1l
KSkgPCAwKSB7CisgICAgICAgICAgICAvLyBUaGlzIHBvcnQgaXMgYnVzeS4gVHJ5IHRoZSBuZXh0
IHBvcnQuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCB1
bnNpZ25lZCBtYXhDb25uZWN0aW9ucyA9IDE7CisgICAgICAgIGlmIChsaXN0ZW4obV9saXN0ZW5p
bmdTb2NrZXQsIG1heENvbm5lY3Rpb25zKSA9PSAtMSkgeworICAgICAgICAgICAgLy8gTGlzdGVu
aW5nIGZhaWxlZC4KKyAgICAgICAgICAgIGNsb3NlKG1fbGlzdGVuaW5nU29ja2V0KTsKKyAgICAg
ICAgICAgIG1fbGlzdGVuaW5nU29ja2V0ID0gSW52YWxpZFNvY2tldDsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3BvcnQgPSBwb3J0OworICAgICAgICByZXR1cm47
IC8vIFN1Y2Nlc3NmdWxseSBzZXQgdXAgbGlzdGVuaW5nIHBvcnQuCisgICAgfQorICAgIAorICAg
IC8vIENvdWxkbid0IGZpbmQgYW4gYXZhaWxhYmxlIHBvcnQuCisgICAgY2xvc2UobV9saXN0ZW5p
bmdTb2NrZXQpOworICAgIG1fbGlzdGVuaW5nU29ja2V0ID0gSW52YWxpZFNvY2tldDsKK30KKwor
dm9pZCBUQ1BTZXJ2ZXI6OndhaXRGb3JBbmRSZXBseVRvUmVxdWVzdHMoKQoreworICAgIGlmICht
X2xpc3RlbmluZ1NvY2tldCA9PSBJbnZhbGlkU29ja2V0KQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgbV9jb25uZWN0aW9uU29ja2V0ID0gYWNjZXB0KG1fbGlzdGVuaW5nU29ja2V0LCBudWxs
cHRyLCBudWxscHRyKTsKKyAgICBtX3NvY2tldEhhbmRsZXIobV9jb25uZWN0aW9uU29ja2V0KTsK
KyAgICBzaHV0ZG93bihtX2Nvbm5lY3Rpb25Tb2NrZXQsIFNIVVRfUkRXUik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2Vy
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuaAkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgeworCitjbGFzcyBUQ1BTZXJ2ZXIgeworcHVibGljOgorICAgIHVzaW5nIFNvY2tl
dCA9IGludDsKKyAgICBzdGF0aWMgY29uc3RleHByIFNvY2tldCBJbnZhbGlkU29ja2V0ID0gLTE7
CisgICAgdXNpbmcgUG9ydCA9IHVpbnQxNl90OworICAgIHN0YXRpYyBjb25zdGV4cHIgUG9ydCBJ
bnZhbGlkUG9ydCA9IDA7CisgICAgCisgICAgVENQU2VydmVyKEZ1bmN0aW9uPHZvaWQoU29ja2V0
KT4mJik7CisgICAgflRDUFNlcnZlcigpOworICAgIAorICAgIFBvcnQgcG9ydCgpIGNvbnN0IHsg
cmV0dXJuIG1fcG9ydDsgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHNvY2tldEJpbmRMaXN0
ZW4oKTsKKyAgICB2b2lkIHdhaXRGb3JBbmRSZXBseVRvUmVxdWVzdHMoKTsKKworICAgIFBvcnQg
bV9wb3J0IHsgSW52YWxpZFBvcnQgfTsKKyAgICBTb2NrZXQgbV9saXN0ZW5pbmdTb2NrZXQgeyBJ
bnZhbGlkU29ja2V0IH07CisgICAgU29ja2V0IG1fY29ubmVjdGlvblNvY2tldCB7IEludmFsaWRT
b2NrZXQgfTsKKyAgICBzdGQ6OnRocmVhZCBtX3RocmVhZDsKKyAgICBGdW5jdGlvbjx2b2lkKFNv
Y2tldCk+IG1fc29ja2V0SGFuZGxlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDI4NDIpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzIxLDYgKzMyMSw3IEBACiAJCTVDODM4RjdGMURCMDRGOTAwMDgy
ODU4RiAvKiBMb2FkSW52YWxpZFVSTFJlcXVlc3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwMUZBRTFDQUYxMzcxMDBFRDY0RjkgLyogTG9hZElu
dmFsaWRVUkxSZXF1ZXN0Lm1tICovOyB9OwogCQk1QzhCQzc5OTIxOENGNDQ3MDA4MTM4ODYgLyog
TmV0d29ya1Byb2Nlc3MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzhCQzc5ODIxOENGM0U5MDA4MTM4ODYgLyogTmV0d29ya1Byb2Nlc3MubW0gKi87
IH07CiAJCTVDOTczRjVDMUY1OEVGOEIwMDM1OUMyNyAvKiBXZWJHTFBvbGljeS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOTczRjVCMUY1OEVGMEEw
MDM1OUMyNyAvKiBXZWJHTFBvbGljeS5tbSAqLzsgfTsKKwkJNUM5QjU0OEUyMjNDNENCRTAwQjE1
MEM0IC8qIFRDUFNlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QzlCNTQ4QzIyM0M0QkY1MDBCMTUwQzQgLyogVENQU2VydmVyLmNwcCAqLzsg
fTsKIAkJNUM5RTU2ODUxREY5MTQ1NDAwQzlFRTMzIC8qIFdlYnNpdGVQb2xpY2llcy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1Njg0MURGOTE0
M0QwMEM5RUUzMyAvKiBXZWJzaXRlUG9saWNpZXMubW0gKi87IH07CiAJCTVDOUU1Njg3MURGOTE0
QUUwMEM5RUUzMyAvKiBjb250ZW50QmxvY2tlckNoZWNrLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU2ODYxREY5MTQ4RTAwQzlF
RTMzIC8qIGNvbnRlbnRCbG9ja2VyQ2hlY2suaHRtbCAqLzsgfTsKIAkJNUM5RTU5NDExRDNFQjVB
QzAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGIgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU5M0UxRDNFQjFERTAwRTNDNjJFIC8q
IEFwcGxpY2F0aW9uQ2FjaGUuZGIgKi87IH07CkBAIC0xNzEzLDYgKzE3MTQsOCBAQAogCQk1QzdD
NzRDQTFGQjUyOEQ0MDAyRjlBQkUgLyogV2ViVmlld1NjaGVkdWxlSW5SdW5Mb29wLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlld1NjaGVkdWxlSW5SdW5M
b29wLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzhCQzc5ODIxOENGM0U5MDA4
MTM4ODYgLyogTmV0d29ya1Byb2Nlc3MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUM5NzNGNUIxRjU4RUYwQTAwMzU5QzI3IC8qIFdlYkdMUG9saWN5Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViR0xQb2xpY3kubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDOUI1NDhDMjIzQzRCRjUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVENQU2VydmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5QjU0OEQyMjNDNEJGNTAwQjE1MEM0IC8q
IFRDUFNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUQ1BTZXJ2ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM5RTU2ODQxREY5MTQzRDAwQzlFRTMz
IC8qIFdlYnNpdGVQb2xpY2llcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYnNpdGVQb2xpY2llcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUM5RTU2ODYxREY5MTQ4RTAwQzlFRTMzIC8qIGNvbnRlbnRCbG9ja2VyQ2hlY2suaHRtbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IGNvbnRlbnRCbG9ja2VyQ2hlY2suaHRtbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM5RTU5M0UxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxp
Y2F0aW9uQ2FjaGUuZGIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBmaWxlOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZS5kYjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIzOTAsNiArMjM5Myw4IEBACiAJCQkJQkM1NzVCQkYxMjZGNTc1MjAw
NkYwRjEyIC8qIFBsYXRmb3JtVXRpbGl0aWVzLmNwcCAqLywKIAkJCQlCQzEzMTg4MzExNzExNEE4
MDBCNjk3MjcgLyogUGxhdGZvcm1VdGlsaXRpZXMuaCAqLywKIAkJCQlCQzkwOTUxQjEyNTUzM0Q3
MDAwODM3NTYgLyogUGxhdGZvcm1XZWJWaWV3LmggKi8sCisJCQkJNUM5QjU0OEMyMjNDNEJGNTAw
QjE1MEM0IC8qIFRDUFNlcnZlci5jcHAgKi8sCisJCQkJNUM5QjU0OEQyMjNDNEJGNTAwQjE1MEM0
IC8qIFRDUFNlcnZlci5oICovLAogCQkJCUJDQjlFN0ZBMTEyMzU5QTMwMEExMzdFMCAvKiBUZXN0
LmggKi8sCiAJCQkJQkMxMzFBQTgxMTcxMzFGQzAwQjY5NzI3IC8qIFRlc3RzQ29udHJvbGxlci5j
cHAgKi8sCiAJCQkJQkNCOUU3QzcxMTIzNEUzQTAwQTEzN0UwIC8qIFRlc3RzQ29udHJvbGxlci5o
ICovLApAQCAtNDI4MCw2ICs0Mjg1LDcgQEAKIAkJCQk3Q0NFN0VBODFBNDExQTE5MDA0NDdDNEMg
LyogU3ludGhldGljQmFja2luZ1NjYWxlRmFjdG9yV2luZG93Lm0gaW4gU291cmNlcyAqLywKIAkJ
CQkxQzczNEI1MzIwNzg4QzQ4MDBGNDMwRUEgLyogU3lzdGVtQ29sb3JzLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkQ3MDA1OTYyMUVEQTBDNjAwMzQ2M0NCIC8qIFRhYk91dE9mV2ViVmlldy5tbSBp
biBTb3VyY2VzICovLAorCQkJCTVDOUI1NDhFMjIzQzRDQkUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMTYxQTQxMUFFNjAwNDQ3QzRDIC8qIFRlcm1p
bmF0ZVR3aWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUE5MUE0MTFBMUQwMDQ0N0M0
QyAvKiBUZXN0QnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRjQ2MTI4Q0IyMTFENDc1MTAwRDlGQURCIC8qIFRlc3REcmFnZ2luZ0luZm8ubW0gaW4gU291
cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93
bmxvYWQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Eb3dubG9hZC5tbQkocmV2aXNpb24gMjQyODQyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksMTgg
KzI5LDIxIEBACiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCiAKICNpbXBvcnQg
IlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUQ1BTZXJ2ZXIuaCIKICNpbXBvcnQgIlRl
c3QuaCIKICNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5o
IgotI2ltcG9ydCA8V2ViS2l0L19XS0Rvd25sb2FkLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLRG93
bmxvYWREZWxlZ2F0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
dy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaD4KKyNpbXBvcnQg
PFdlYktpdC9fV0tEb3dubG9hZC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS0Rvd25sb2FkRGVsZWdh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNp
bXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorI2lt
cG9ydCA8d3RmL01vbm90b25pY1RpbWUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CkBAIC03NzYsNCArNzc5LDEzOSBAQCBURVNUKF9XS0Rvd25sb2FkLCBDcmFzaEFmdGVyRG93bmxv
YWREaWRGCiAgICAgRVhQRUNUX05VTEwocHJvY2Vzc1Bvb2wuZ2V0KCkpOwogfQogCi0jZW5kaWYK
K3N0YXRpYyBib29sIHJlY2VpdmVkRGF0YTsKK3N0YXRpYyBib29sIGRpZENhbmNlbDsKK3N0YXRp
YyBSZXRhaW5QdHI8TlNTdHJpbmc+IGRlc3RpbmF0aW9uOworCitAaW50ZXJmYWNlIERvd25sb2Fk
TW9uaXRvclRlc3REZWxlZ2F0ZSA6IE5TT2JqZWN0IDxfV0tEb3dubG9hZERlbGVnYXRlPgorQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gRG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlCisKKy0gKHZv
aWQpX2Rvd25sb2FkRGlkU3RhcnQ6KF9XS0Rvd25sb2FkICopZG93bmxvYWQKK3sKKyAgICBkaWRE
b3dubG9hZFN0YXJ0ID0gdHJ1ZTsKK30KKworLSAodm9pZClfZG93bmxvYWREaWRDYW5jZWw6KF9X
S0Rvd25sb2FkICopZG93bmxvYWQKK3sKKyAgICBkaWRDYW5jZWwgPSB0cnVlOworfQorCistICh2
b2lkKV9kb3dubG9hZDooX1dLRG93bmxvYWQgKilkb3dubG9hZCBkZWNpZGVEZXN0aW5hdGlvbldp
dGhTdWdnZXN0ZWRGaWxlbmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZSBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoQk9PTCBhbGxvd092ZXJ3cml0ZSwgTlNTdHJpbmcgKmRlc3RpbmF0aW9uKSlj
b21wbGV0aW9uSGFuZGxlcgoreworICAgIEVYUEVDVF9UUlVFKFtmaWxlbmFtZSBpc0VxdWFsVG9T
dHJpbmc6QCJmaWxlbmFtZS5kYXQiXSk7CisgICAgZGVzdGluYXRpb24gPSBbTlNUZW1wb3JhcnlE
aXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6ZmlsZW5hbWVdOworICAg
IGNvbXBsZXRpb25IYW5kbGVyKFlFUywgZGVzdGluYXRpb24uZ2V0KCkpOworfQorCistICh2b2lk
KV9kb3dubG9hZDooX1dLRG93bmxvYWQgKilkb3dubG9hZCBkaWRSZWNlaXZlRGF0YToodWludDY0
X3QpbGVuZ3RoCit7CisgICAgcmVjZWl2ZWREYXRhID0gdHJ1ZTsKK30KKworQGVuZAorCituYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3ZvaWQgcmVzcG9uZFNsb3dseShpbnQgc29ja2V0LCBk
b3VibGUga2JwcywgYm9vbCYgdGVybWluYXRlU2VydmVyKQoreworICAgIEVYUEVDVF9GQUxTRShp
c01haW5UaHJlYWQoKSk7CisgICAgY2hhciByZWFkQnVmZmVyWzEwMDBdOworICAgIGF1dG8gYnl0
ZXNSZWFkID0gOjpyZWFkKHNvY2tldCwgcmVhZEJ1ZmZlciwgc2l6ZW9mKHJlYWRCdWZmZXIpKTsK
KyAgICBFWFBFQ1RfR1QoYnl0ZXNSZWFkLCAwKTsKKyAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2Fz
dDxzaXplX3Q+KGJ5dGVzUmVhZCkgPCBzaXplb2YocmVhZEJ1ZmZlcikpOworICAgIAorICAgIGNv
bnN0IGNoYXIqIHJlc3BvbnNlSGVhZGVyID0KKyAgICAiSFRUUC8xLjEgMjAwIE9LXHJcbiIKKyAg
ICAiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCJmaWxlbmFtZS5k
YXRcIlxyXG4iCisgICAgIkNvbnRlbnQtTGVuZ3RoOiAxMDAwMDAwMDBcclxuXHJcbiI7CisgICAg
YXV0byBieXRlc1dyaXR0ZW4gPSA6OndyaXRlKHNvY2tldCwgcmVzcG9uc2VIZWFkZXIsIHN0cmxl
bihyZXNwb25zZUhlYWRlcikpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KGJ5
dGVzV3JpdHRlbiksIHN0cmxlbihyZXNwb25zZUhlYWRlcikpOworICAgIAorICAgIGNvbnN0IGRv
dWJsZSB3cml0ZXNQZXJTZWNvbmQgPSAxMDA7CisgICAgVmVjdG9yPGNoYXI+IHdyaXRlQnVmZmVy
KHN0YXRpY19jYXN0PHNpemVfdD4oMTAyNCAqIGticHMgLyB3cml0ZXNQZXJTZWNvbmQpKTsKKyAg
ICB3aGlsZSAoIXRlcm1pbmF0ZVNlcnZlcikgeworICAgICAgICBhdXRvIGJlZm9yZSA9IE1vbm90
b25pY1RpbWU6Om5vdygpOworICAgICAgICA6OndyaXRlKHNvY2tldCwgd3JpdGVCdWZmZXIuZGF0
YSgpLCB3cml0ZUJ1ZmZlci5zaXplKCkpOworICAgICAgICBkb3VibGUgd3JpdGVEdXJhdGlvbiA9
IChNb25vdG9uaWNUaW1lOjpub3coKSAtIGJlZm9yZSkuc2Vjb25kcygpOworICAgICAgICBkb3Vi
bGUgZGVzaXJlZFNsZWVwID0gMS4wIC8gd3JpdGVzUGVyU2Vjb25kOworICAgICAgICBpZiAod3Jp
dGVEdXJhdGlvbiA8IGRlc2lyZWRTbGVlcCkKKyAgICAgICAgICAgIHVzbGVlcChVU0VDX1BFUl9T
RUMgKiAoZGVzaXJlZFNsZWVwIC0gd3JpdGVEdXJhdGlvbikpOworICAgIH0KK30KKworUmV0YWlu
UHRyPFdLV2ViVmlldz4gd2ViVmlld1dpdGhEb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIo
c2l6ZV90IG11bHRpcGxpZXIpCit7CisgICAgc3RhdGljIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gYWRvcHROUyhbRG93bmxvYWROYXZpZ2F0aW9uRGVsZWdhdGUgbmV3XSk7CisgICAgc3RhdGlj
IGF1dG8gZG93bmxvYWREZWxlZ2F0ZSA9IGFkb3B0TlMoW0Rvd25sb2FkTW9uaXRvclRlc3REZWxl
Z2F0ZSBuZXddKTsKKyAgICBhdXRvIHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMo
W19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbiBuZXddKTsKKyAgICBbcHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uIHNldERvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjptdWx0aXBsaWVyXTsK
KyAgICBhdXRvIHByb2Nlc3NQb29sID0gYWRvcHROUyhbW1dLUHJvY2Vzc1Bvb2wgYWxsb2NdIF9p
bml0V2l0aENvbmZpZ3VyYXRpb246cHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmdldCgpXSk7Cisg
ICAgYXV0byB3ZWJWaWV3Q29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gbmV3XSk7CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uIHNldFByb2Nlc3NQb29sOnBy
b2Nlc3NQb29sLmdldCgpXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3Vy
YXRpb246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbd2ViVmlldyBzZXROYXZp
Z2F0aW9uRGVsZWdhdGU6bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldyBj
b25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbC5fZG93bmxvYWREZWxlZ2F0ZSA9IGRvd25sb2FkRGVs
ZWdhdGUuZ2V0KCk7CisgICAgcmV0dXJuIHdlYlZpZXc7Cit9CisKK2VudW0gY2xhc3MgQXBwUmV0
dXJuc1RvRm9yZWdyb3VuZCB7IE5vLCBZZXMgfTsKKyAgICAKK3ZvaWQgZG93bmxvYWRBdFJhdGUo
ZG91YmxlIGRlc2lyZWRLYnBzLCB1bnNpZ25lZCBzcGVlZE11bHRpcGxpZXIsIEFwcFJldHVybnNU
b0ZvcmVncm91bmQgcmV0dXJuVG9Gb3JlZ3JvdW5kID0gQXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6
Tm8pCit7CisgICAgYm9vbCB0ZXJtaW5hdGVTZXJ2ZXIgPSBmYWxzZTsKKyAgICBUQ1BTZXJ2ZXIg
c2VydmVyKFsmXShhdXRvIHNvY2tldCkgeworICAgICAgICByZXNwb25kU2xvd2x5KHNvY2tldCwg
ZGVzaXJlZEticHMsIHRlcm1pbmF0ZVNlcnZlcik7CisgICAgfSk7CisgICAgCisgICAgYXV0byB3
ZWJWaWV3ID0gd2ViVmlld1dpdGhEb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIoc3BlZWRN
dWx0aXBsaWVyKTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVl
c3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiaHR0cDovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKKyAgICByZWNlaXZl
ZERhdGEgPSBmYWxzZTsKKyAgICBVdGlsOjpydW4oJnJlY2VpdmVkRGF0YSk7CisgICAgLy8gU3Rh
cnQgdGhlIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLgorICAgIFtbd2ViVmlldyBjb25maWd1cmF0
aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOworICAgIGlm
IChyZXR1cm5Ub0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6WWVzKQorICAg
ICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQ6Tk9dOworICAgIGRpZENhbmNlbCA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigm
ZGlkQ2FuY2VsKTsKKyAgICB0ZXJtaW5hdGVTZXJ2ZXIgPSB0cnVlOworICAgIFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBh
dGg6ZGVzdGluYXRpb24uZ2V0KCkgaXNEaXJlY3Rvcnk6Tk9dIGVycm9yOm5pbF07Cit9CisKK1RF
U1QoX1dLRG93bmxvYWQsIERvd25sb2FkTW9uaXRvckNhbmNlbCkKK3sKKyAgICBkb3dubG9hZEF0
UmF0ZSgwLjUsIDEyMCk7IC8vIFNob3VsZCBjYW5jZWwgaW4gfjAuNSBzZWNvbmRzCisgICAgZG93
bmxvYWRBdFJhdGUoMS41LCAxMjApOyAvLyBTaG91bGQgY2FuY2VsIGluIH4yLjUgc2Vjb25kcwor
fQorCitURVNUKF9XS0Rvd25sb2FkLCBEb3dubG9hZE1vbml0b3JTdXJ2aXZlKQoreworICAgIF9f
YmxvY2sgQk9PTCB0aW1lb3V0UmVhY2hlZCA9IE5POworICAgIGRpc3BhdGNoX2FmdGVyKGRpc3Bh
dGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIDIuNSAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEVYUEVDVF9GQUxTRShkaWRDYW5jZWwpOwor
ICAgICAgICBkaWRDYW5jZWwgPSB0cnVlOworICAgICAgICB0aW1lb3V0UmVhY2hlZCA9IFlFUzsK
KyAgICB9KTsKKworICAgIC8vIFNpbXVsYXRlcyBhbiBob3VyIG9mIGRvd25sb2FkaW5nIDE1MGti
L3MgaW4gMSBzZWNvbmQuCisgICAgLy8gVGltZW91dCBzaG91bGQgYmUgcmVhY2hlZCBiZWZvcmUg
dGhpcyBpcyBjYW5jZWxsZWQgYmVjYXVzZSB0aGUgZG93bmxvYWQgcmF0ZSBpcyBoaWdoIGVub3Vn
aC4KKyAgICBkb3dubG9hZEF0UmF0ZSgxNTAuMCwgMzYwMCk7CisgICAgRVhQRUNUX1RSVUUodGlt
ZW91dFJlYWNoZWQpOworfQorCitURVNUKF9XS0Rvd25sb2FkLCBEb3dubG9hZE1vbml0b3JSZXR1
cm5Ub0ZvcmVncm91bmQpCit7CisgICAgX19ibG9jayBCT09MIHRpbWVvdXRSZWFjaGVkID0gTk87
CisgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMi41
ICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKGRpZENhbmNlbCk7CisgICAgICAgIGRpZENhbmNlbCA9IHRydWU7CisgICAg
ICAgIHRpbWVvdXRSZWFjaGVkID0gWUVTOworICAgIH0pOworICAgIGRvd25sb2FkQXRSYXRlKDAu
NSwgMTIwLCBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpOworICAgIEVYUEVDVF9UUlVFKHRp
bWVvdXRSZWFjaGVkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364957</attachid>
            <date>2019-03-16 20:36:07 -0700</date>
            <delta_ts>2019-03-18 10:25:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195785-20190316203606.patch</filename>
            <type>text/plain</type>
            <size>84480</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDMwMTYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxOS0wMy0xNSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBE
b3dubG9hZE1vbml0b3IgdG8gcHJldmVudCBsb25nLXJ1bm5pbmcgc2xvdyBkb3dubG9hZHMgZnJv
bSBiYWNrZ3JvdW5kIGFwcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NTc4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IHdhcyB1cGRhdGVkIGluIDxyZGFyOi8v
cHJvYmxlbS80MjY3NzY4NT4gYnV0IGZvciBXZWJLaXQgRG93bmxvYWRzLgorICAgICAgICBUbyB0
ZXN0IGl0IEkgaW1wbGVtZW50ZWQgYSB0aHJvdHRsZWQgVENQIHNlcnZlciwgU1BJIHRvIHNwZWVk
IHVwIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLAorICAgICAgICBhbmQgU1BJIHRvIHN5bnRoZXNp
emUgdGhlIGFwcGxpY2F0aW9uIGdvaW5nIGludG8gdGhlIGJhY2tncm91bmQgYW5kIGZvcmVncm91
bmQsIHdoaWNoCisgICAgICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyIGRvZXMgb24gaU9TLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWQ6OmRpZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZENhbmNlbCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmg6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
OjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OmFwcGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZDo6bWFuYWdlciBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6
ZG93bmxvYWRGaW5pc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6YXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1h
bmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTWFwOjp2YWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hcC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1v
bml0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IgX2ticHMpOgorICAg
ICAgICAoV2ViS2l0Ojp0aW1lVW50aWxOZXh0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1vbml0b3I6OkRvd25sb2FkTW9uaXRvcik6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTW9uaXRvcjo6bWVhc3VyZWRUaHJvdWdocHV0UmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkTW9uaXRvcjo6ZG93bmxvYWRSZWNlaXZlZEJ5dGVzKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKToKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjpzcGVlZE11bHRpcGxpZXIg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaDogQWRk
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uV2lsbEVu
dGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb246OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXS0NvbnRleHREb3dubG9hZFVSTFJlcXVlc3QpOgorICAgICAgICAoV0tDb250ZXh0
UmVzdW1lRG93bmxvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDpdKToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfZG93bmxvYWRVUkxSZXF1ZXN0Om9y
aWdpbmF0aW5nV2ViVmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbToKKyAgICAgICAgKC1bX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uIGRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcl0pOgorICAgICAgICAo
LVtfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gc2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29j
b2EubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bUNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVz
dHJveSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmluaXNoKToKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHk6OmRpZENhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6On5E
b3dubG9hZFByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6cGxh
dGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bURlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlv
bkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
cm94eTo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxl
RG93bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
TWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDMtMTUg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBf
V0tEb3dubG9hZCBzaG91bGQgY29uZm9ybSB0byBOU0NvcHlpbmcgcHJvdG9jb2wKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuCiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCiBO
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmNwcAorTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkTW9uaXRvci5jcHAKIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxv
YWQuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiw3IEBA
IFVJUHJvY2Vzcy9Db2NvYS9BdXRvbWF0aW9uQ2xpZW50Lm1tCiBVSVByb2Nlc3MvQ29jb2EvQXV0
b21hdGlvblNlc3Npb25DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9EaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5tbQogVUlQcm9jZXNzL0NvY29hL0Rvd25sb2FkQ2xpZW50Lm1tCitVSVByb2Nlc3Mv
Q29jb2EvRG93bmxvYWRQcm94eU1hcENvY29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvRmluZENsaWVu
dC5tbQogVUlQcm9jZXNzL0NvY29hL0Z1bGxzY3JlZW5DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2Nv
YS9HbG9iYWxGaW5kSW5QYWdlU3RhdGUubW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYxLDYgKzM2MSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3
b3JrUHIKIAogICAgIGZvciAoYXV0byYgc2NoZW1lIDogcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzQ2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QpCiAgICAgICAgIHJlZ2lzdGVyVVJM
U2NoZW1lQXNDYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChzY2hlbWUpOworICAgIAorICAgIG1f
ZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyID0gcGFyYW1ldGVycy5kb3dubG9hZE1vbml0
b3JTcGVlZE11bHRpcGxpZXI7CiAKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzLCAiJXAgLSBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzOiBQcmVzZW50aW5nIHByb2Nlc3Mg
PSAlZCIsIHRoaXMsIFdlYkNvcmU6OnByZXNlbnRpbmdBcHBsaWNhdGlvblBJRCgpKTsKIH0KQEAg
LTE5NDAsNiArMTk0MiwxNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjYW5jZWxQcmVwYXJlVG9T
dXNwCiAgICAgICAgIGNvbm5lY3Rpb24tPmVuZFN1c3BlbnNpb24oKTsKIH0KIAordm9pZCBOZXR3
b3JrUHJvY2Vzczo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQoreworICAgIG1fZG93
bmxvYWRNYW5hZ2VyLmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7Cit9CisKK3ZvaWQg
TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCit7CisgICAg
bV9kb3dubG9hZE1hbmFnZXIuYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7Cit9CisK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByb2Nlc3NEaWRSZXN1bWUoKQogewogICAgIFJFTEVBU0Vf
TE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiJXAgLSBOZXR3b3JrUHJvY2Vzczo6cHJvY2Vzc0RpZFJl
c3VtZSgpIiwgdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw2ICszNjYs
NyBAQCBwcml2YXRlOgogICAgIElQQzo6Q29ubmVjdGlvbiogcGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b25Gb3JEb3dubG9hZHMoKSBvdmVycmlkZSB7IHJldHVybiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpOyB9CiAgICAgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3dubG9hZHNBdXRoZW50aWNhdGlv
bk1hbmFnZXIoKSBvdmVycmlkZTsKICAgICB2b2lkIHBlbmRpbmdEb3dubG9hZENhbmNlbGVkKERv
d25sb2FkSUQpIG92ZXJyaWRlOworICAgIHVpbnQzMl90IGRvd25sb2FkTW9uaXRvclNwZWVkTXVs
dGlwbGllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZG93bmxvYWRNb25pdG9yU3BlZWRN
dWx0aXBsaWVyOyB9CiAKICAgICAvLyBNZXNzYWdlIEhhbmRsZXJzCiAgICAgdm9pZCBkaWRSZWNl
aXZlU3luY05ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwpAQCAtMzkxLDYgKzM5Miw4IEBA
IHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KERvd25s
b2FkSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsKICAgICB2b2lkIGNvbnRpbnVlRGVj
aWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oRG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0
aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJiwgYm9vbCBhbGxvd092ZXJ3cml0ZSk7Cisg
ICAgdm9pZCBhcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpOworICAgIHZvaWQgYXBwbGlj
YXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7CiAKICAgICB2b2lkIHNldENhY2hlTW9kZWwoQ2Fj
aGVNb2RlbCk7CiAgICAgdm9pZCBhbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Qo
Y29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiwgY29uc3QgU3RyaW5nJiBob3N0KTsKQEAg
LTUyOCw2ICs1MzEsNyBAQCBwcml2YXRlOgogICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBt
YW5hZ2Vyc1Blck9yaWdpbjsKICAgICB9OwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0
b3JhZ2VRdW90YU1hbmFnZXJzPiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOworICAgIHVpbnQzMl90
IG1fZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyIHsgMSB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI0Mjg0MikKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3Mg
TGVnYWN5UmVjZWl2ZQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFB1Ymxpc2hEb3dubG9hZFBy
b2dyZXNzKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9hZElELCBVUkwgdXJsLCBXZWJLaXQ6OlNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQogI2VuZGlmCisg
ICAgQXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQorICAgIEFwcGxpY2F0aW9uV2lsbEVu
dGVyRm9yZWdyb3VuZCgpCiAKICAgICBDb250aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJLaXQ6OkRv
d25sb2FkSUQgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCiAg
ICAgQ29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihXZWJLaXQ6OkRvd25s
b2FkSUQgZG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBXZWJLaXQ6OlNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3ZlcndyaXRl
KQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI0Mjg0
MikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmUKICAgICBlbmNvZGVyIDw8IHNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCB1cmxTY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5k
bGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsK
ICNlbmRpZgogICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CisgICAgZW5j
b2RlciA8PCBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXI7CiB9CiAKIGJvb2wgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIs
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0yMjEsNiArMjIy
LDEyIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIE9wdGlvbmFsPHVpbnQzMl90PiBkb3dubG9hZE1vbml0b3JT
cGVlZE11bHRpcGxpZXI7CisgICAgZGVjb2RlciA+PiBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRp
cGxpZXI7CisgICAgaWYgKCFkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQuZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVy
ID0gKmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjsKKyAgICAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjQy
ODQyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIGJvb2wgc2hvdWxkRGlzYWJs
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07CiAjZW5kaWYK
ICAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICB1aW50MzJf
dCBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgeyAxIH07CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJEYXRh
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93
bmxvYWRNb25pdG9yLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgpAQCAtMTE0LDYg
KzExNSw4IEBAIHZvaWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGwKICAgICAg
ICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZURhdGE6IFN0YXJ0ZWQgcmVjZWl2
aW5nIGRhdGEgKGlkID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7
CiAgICAgICAgIG1faGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTsKICAgICB9CisgICAgCisgICAgbV9t
b25pdG9yLmRvd25sb2FkUmVjZWl2ZWRCeXRlcyhsZW5ndGgpOwogCiAgICAgc2VuZChNZXNzYWdl
czo6RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZURhdGEobGVuZ3RoKSk7CiB9CkBAIC0xMjksNyAr
MTMyLDcgQEAgdm9pZCBEb3dubG9hZDo6ZGlkRmluaXNoKCkKICAgICAgICAgbV9zYW5kYm94RXh0
ZW5zaW9uID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9h
ZEZpbmlzaGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQo
KnRoaXMpOwogfQogCiB2b2lkIERvd25sb2FkOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCkBAIC0xNDMsNyAr
MTQ2LDcgQEAgdm9pZCBEb3dubG9hZDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycgogICAgICAg
ICBtX3NhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwogICAgICAgICBtX3NhbmRib3hFeHRlbnNp
b24gPSBudWxscHRyOwogICAgIH0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlz
aGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQoKnRoaXMp
OwogfQogCiB2b2lkIERvd25sb2FkOjpkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiByZXN1bWVEYXRhKQpAQCAtMTU2LDcgKzE1OSw3IEBAIHZvaWQgRG93bmxvYWQ6OmRpZENhbmNl
bChjb25zdCBJUEM6OkRhdGEKICAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uLT5yZXZva2UoKTsK
ICAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gbnVsbHB0cjsKICAgICB9Ci0gICAgbV9kb3du
bG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rvd25sb2FkTWFuYWdl
ci5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKIH0KIAogSVBDOjpDb25uZWN0aW9uKiBEb3dubG9h
ZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCShyZXZpc2lvbiAyNDI4
NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJEb3dubG9hZElE
LmgiCiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93bmxvYWRNb25p
dG9yLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtEYXRh
VGFzay5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKQEAgLTU4LDYgKzU5LDcgQEAg
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIERv
d25sb2FkTW9uaXRvcjsKIGNsYXNzIE5ldHdvcmtEYXRhVGFzazsKIGNsYXNzIE5ldHdvcmtTZXNz
aW9uOwogY2xhc3MgV2ViUGFnZTsKQEAgLTg5LDYgKzkxLDEyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYgcmVzdW1lRGF0YSk7CiAgICAgdm9pZCBkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKIAorICAgIGJvb2wgaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGxpY2F0aW9uRW50ZXJlZEJhY2tncm91bmQoKSB7
IG1fbW9uaXRvci5hcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKCk7IH0KKyAgICB2b2lkIGFw
cGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQoKSB7IG1fbW9uaXRvci5hcHBsaWNhdGlvbkVudGVy
ZWRGb3JlZ3JvdW5kKCk7IH0KKyAgICBEb3dubG9hZE1hbmFnZXImIG1hbmFnZXIoKSBjb25zdCB7
IHJldHVybiBtX2Rvd25sb2FkTWFuYWdlcjsgfQorCiBwcml2YXRlOgogICAgIC8vIElQQzo6TWVz
c2FnZVNlbmRlcgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KSBjb25zdCBvdmVycmlkZTsKQEAgLTk3LDggKzEwNSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
bGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3lEb3du
bG9hZCgpOwogCi0gICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKLQog
ICAgIERvd25sb2FkTWFuYWdlciYgbV9kb3dubG9hZE1hbmFnZXI7CiAgICAgRG93bmxvYWRJRCBt
X2Rvd25sb2FkSUQ7CiAgICAgUmVmPERvd25sb2FkTWFuYWdlcjo6Q2xpZW50PiBtX2NsaWVudDsK
QEAgLTExNCw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lv
bklEOwogICAgIFN0cmluZyBtX3N1Z2dlc3RlZE5hbWU7CiAgICAgYm9vbCBtX2hhc1JlY2VpdmVk
RGF0YSB7IGZhbHNlIH07CisgICAgRG93bmxvYWRNb25pdG9yIG1fbW9uaXRvciB7ICp0aGlzIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDExICsxNjksMTAg
QEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OnB1Ymxpc2hEb3dubG9hZFBybwogfQogI2VuZGlmIC8v
IFBMQVRGT1JNKENPQ09BKQogCi12b2lkIERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRGaW5pc2hl
ZChEb3dubG9hZCogZG93bmxvYWQpCit2b2lkIERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRGaW5p
c2hlZChEb3dubG9hZCYgZG93bmxvYWQpCiB7Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRh
aW5zKGRvd25sb2FkLT5kb3dubG9hZElEKCkpKTsKLSAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93
bmxvYWQtPmRvd25sb2FkSUQoKSk7Ci0gICAgCisgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRh
aW5zKGRvd25sb2FkLmRvd25sb2FkSUQoKSkpOworICAgIG1fZG93bmxvYWRzLnJlbW92ZShkb3du
bG9hZC5kb3dubG9hZElEKCkpOwogfQogCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6ZGlkQ3JlYXRl
RG93bmxvYWQoKQpAQCAtMTk2LDQgKzE5NSwxNiBAQCBBdXRoZW50aWNhdGlvbk1hbmFnZXImIERv
d25sb2FkTWFuYWdlcjo6CiAgICAgcmV0dXJuIG1fY2xpZW50LmRvd25sb2Fkc0F1dGhlbnRpY2F0
aW9uTWFuYWdlcigpOwogfQogCit2b2lkIERvd25sb2FkTWFuYWdlcjo6YXBwbGljYXRpb25EaWRF
bnRlckJhY2tncm91bmQoKQoreworICAgIGZvciAoYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fk
cy52YWx1ZXMoKSkKKyAgICAgICAgZG93bmxvYWQtPmFwcGxpY2F0aW9uRW50ZXJlZEJhY2tncm91
bmQoKTsKK30KKwordm9pZCBEb3dubG9hZE1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9y
ZWdyb3VuZCgpCit7CisgICAgZm9yIChhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVl
cygpKQorICAgICAgICBkb3dubG9hZC0+YXBwbGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCShyZXZpc2lv
biAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHZpcnR1YWwgTmV0d29ya0Jsb2JSZWdpc3RyeSYgbmV0d29ya0Jsb2JSZWdpc3RyeSgp
ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZigpIGNvbnN0ID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRlcmVmKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGRv
d25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcigpIGNvbnN0ID0gMDsKICAgICB9OwogCiAgICAg
ZXhwbGljaXQgRG93bmxvYWRNYW5hZ2VyKENsaWVudCYpOwpAQCAtOTgsMTAgKzk5LDEzIEBAIHB1
YmxpYzoKICAgICAKICAgICBEb3dubG9hZCogZG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElE
KSB7IHJldHVybiBtX2Rvd25sb2Fkcy5nZXQoZG93bmxvYWRJRCk7IH0KIAotICAgIHZvaWQgZG93
bmxvYWRGaW5pc2hlZChEb3dubG9hZCopOworICAgIHZvaWQgZG93bmxvYWRGaW5pc2hlZChEb3du
bG9hZCYpOwogICAgIGJvb2wgaXNEb3dubG9hZGluZygpIGNvbnN0IHsgcmV0dXJuICFtX2Rvd25s
b2Fkcy5pc0VtcHR5KCk7IH0KICAgICB1aW50NjRfdCBhY3RpdmVEb3dubG9hZENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9kb3dubG9hZHMuc2l6ZSgpOyB9CiAKKyAgICB2b2lkIGFwcGxpY2F0aW9u
RGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckZvcmVn
cm91bmQoKTsKKwogICAgIHZvaWQgZGlkQ3JlYXRlRG93bmxvYWQoKTsKICAgICB2b2lkIGRpZERl
c3Ryb3lEb3dubG9hZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYXAuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDExIEBAIGJvb2wgRG93bmxvYWRNYXA6OnJlbW92
ZShEb3dubG9hZElEIGRvd24KICAgICByZXR1cm4gcmVzdWx0OwogfQogCithdXRvIERvd25sb2Fk
TWFwOjp2YWx1ZXMoKSAtPiBEb3dubG9hZE1hcFR5cGU6OlZhbHVlc0l0ZXJhdG9yUmFuZ2UKK3sK
KyAgICByZXR1cm4gbV9kb3dubG9hZHMudmFsdWVzKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKFRBS0VfVU5CT1VOREVEX05FVFdPUktJTkdfQVNTRVJU
SU9OKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hcC5oCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICBEb3dubG9hZE1hcFR5cGU6OkFkZFJlc3VsdCBhZGQo
RG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPiYmKTsKICAgICBib29sIHJlbW92
ZShEb3dubG9hZElEKTsKIAorICAgIERvd25sb2FkTWFwVHlwZTo6VmFsdWVzSXRlcmF0b3JSYW5n
ZSB2YWx1ZXMoKTsKKwogcHJpdmF0ZToKICAgICBEb3dubG9hZE1hcFR5cGUgbV9kb3dubG9hZHM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NBc3NlcnRpb24+IG1fZG93bmxvYWRBc3NlcnRp
b247CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1vbml0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkTW9uaXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEb3dubG9hZE1vbml0b3IuaCIKKworI2luY2x1ZGUgIkRvd25sb2FkLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCisjdW5kZWYgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRAor
I2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRiht
X2Rvd25sb2FkLmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBOZXR3b3JrLCAiJXAgLSBEb3du
bG9hZE1vbml0b3I6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY29uc3RleHByIHVpbnQ2NF90IG9wZXJhdG9yIiIgX2ticHModW5zaWduZWQgbG9u
ZyBsb25nIGtpbG9ieXRlc1BlclNlY29uZCkKK3sKKyAgICByZXR1cm4ga2lsb2J5dGVzUGVyU2Vj
b25kICogMTAyNDsKK30KKworc3RydWN0IFRocm91Z2hwdXRJbnRlcnZhbCB7CisgICAgU2Vjb25k
cyB0aW1lOworICAgIHVpbnQ2NF90IGJ5dGVzUGVyU2Vjb25kOworfTsKKworc3RhdGljIGNvbnN0
IFRocm91Z2hwdXRJbnRlcnZhbCB0aHJvdWdocHV0SW50ZXJ2YWxzW10gPSB7CisgICAgeyAxX21p
biwgMV9rYnBzIH0sCisgICAgeyA1X21pbiwgMl9rYnBzIH0sCisgICAgeyAxMF9taW4sIDRfa2Jw
cyB9LAorICAgIHsgMTVfbWluLCA4X2ticHMgfSwKKyAgICB7IDIwX21pbiwgMTZfa2JwcyB9LAor
ICAgIHsgMjVfbWluLCAzMl9rYnBzIH0sCisgICAgeyAzMF9taW4sIDY0X2ticHMgfSwKKyAgICB7
IDQ1X21pbiwgOTZfa2JwcyB9LAorICAgIHsgNjBfbWluLCAxMjhfa2JwcyB9Cit9OworCitzdGF0
aWMgU2Vjb25kcyB0aW1lVW50aWxOZXh0SW50ZXJ2YWwoc2l6ZV90IGN1cnJlbnRJbnRlcnZhbCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50SW50ZXJ2YWwgKyAxIDwgV1RGX0FSUkFZX0xF
TkdUSCh0aHJvdWdocHV0SW50ZXJ2YWxzKSk7CisgICAgcmV0dXJuIHRocm91Z2hwdXRJbnRlcnZh
bHNbY3VycmVudEludGVydmFsICsgMV0udGltZSAtIHRocm91Z2hwdXRJbnRlcnZhbHNbY3VycmVu
dEludGVydmFsXS50aW1lOworfQorCitEb3dubG9hZE1vbml0b3I6OkRvd25sb2FkTW9uaXRvcihE
b3dubG9hZCYgZG93bmxvYWQpCisgICAgOiBtX2Rvd25sb2FkKGRvd25sb2FkKQoreworfQorCitk
b3VibGUgRG93bmxvYWRNb25pdG9yOjptZWFzdXJlZFRocm91Z2hwdXRSYXRlKCkgY29uc3QKK3sK
KyAgICB1aW50NjRfdCBieXRlcyB7IDAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRpbWVzdGFt
cCA6IG1fdGltZXN0YW1wcykKKyAgICAgICAgYnl0ZXMgKz0gdGltZXN0YW1wLmJ5dGVzUmVjZWl2
ZWQ7CisgICAgaWYgKCFieXRlcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKCFtX3Rp
bWVzdGFtcHMuaXNFbXB0eSgpKTsKKyAgICBTZWNvbmRzIHRpbWVEaWZmZXJlbmNlID0gbV90aW1l
c3RhbXBzLmxhc3QoKS50aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkgLSBtX3RpbWVzdGFtcHMuZmly
c3QoKS50aW1lLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgZG91YmxlIHNlY29uZHMgPSB0aW1l
RGlmZmVyZW5jZS5zZWNvbmRzKCk7CisgICAgaWYgKCFzZWNvbmRzKQorICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsKKyAgICByZXR1cm4gYnl0ZXMgLyBz
ZWNvbmRzOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6ZG93bmxvYWRSZWNlaXZlZEJ5dGVz
KHVpbnQ2NF90IGJ5dGVzUmVjZWl2ZWQpCit7CisgICAgaWYgKG1fdGltZXN0YW1wcy5zaXplKCkg
PiB0aW1lc3RhbXBDYXBhY2l0eSAtIDEpIHsKKyAgICAgICAgQVNTRVJUKG1fdGltZXN0YW1wcy5z
aXplKCkgPT0gdGltZXN0YW1wQ2FwYWNpdHkpOworICAgICAgICBtX3RpbWVzdGFtcHMucmVtb3Zl
Rmlyc3QoKTsKKyAgICB9CisgICAgbV90aW1lc3RhbXBzLmFwcGVuZCh7IE1vbm90b25pY1RpbWU6
Om5vdygpLCBieXRlc1JlY2VpdmVkIH0pOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6YXBw
bGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCgpCit7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgiYXBwbGljYXRpb25FbnRlcmVkRm9yZWdyb3VuZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rv
d25sb2FkLmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgIG1fdGltZXIuc3RvcCgpOwor
ICAgIG1faW50ZXJ2YWwgPSAwOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6YXBwbGljYXRp
b25FbnRlcmVkQmFja2dyb3VuZCgpCit7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiYXBw
bGljYXRpb25FbnRlcmVkQmFja2dyb3VuZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rvd25sb2Fk
LmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVCghbV90aW1lci5pc0FjdGl2
ZSgpKTsKKyAgICBBU1NFUlQoIW1faW50ZXJ2YWwpOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KHRocm91Z2hwdXRJbnRlcnZhbHNbMF0udGltZSAvIHNwZWVkTXVsdGlwbGllcigpKTsKK30KKwor
dWludDMyX3QgRG93bmxvYWRNb25pdG9yOjpzcGVlZE11bHRpcGxpZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2Rvd25sb2FkLm1hbmFnZXIoKS5jbGllbnQoKS5kb3dubG9hZE1vbml0b3JTcGVl
ZE11bHRpcGxpZXIoKTsKK30KKwordm9pZCBEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1faW50ZXJ2YWwgPCBXVEZfQVJSQVlfTEVOR1RIKHRocm91
Z2hwdXRJbnRlcnZhbHMpKTsKKyAgICBpZiAobWVhc3VyZWRUaHJvdWdocHV0UmF0ZSgpIDwgdGhy
b3VnaHB1dEludGVydmFsc1ttX2ludGVydmFsXS5ieXRlc1BlclNlY29uZCkgeworICAgICAgICBS
RUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVkOiBjYW5jZWxsaW5nIGRvd25sb2FkIChp
ZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7
CisgICAgICAgIG1fZG93bmxvYWQuY2FuY2VsKCk7CisgICAgfSBlbHNlIGlmIChtX2ludGVydmFs
ICsgMSA8IFdURl9BUlJBWV9MRU5HVEgodGhyb3VnaHB1dEludGVydmFscykpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidGltZXJGaXJlZDogc3VmZmljaWVudCB0aHJvdWdocHV0
IHJhdGUgKGlkID0gJSIgUFJJdTY0ICIpIiwgbV9kb3dubG9hZC5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpKTsKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QodGltZVVudGlsTmV4dEludGVy
dmFsKG1faW50ZXJ2YWwrKykgLyBzcGVlZE11bHRpcGxpZXIoKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInRpbWVyRmlyZWQ6IERvd25sb2FkIHJlYWNoZWQg
dGhyZXNob2xkIHRvIG5vdCBiZSB0ZXJtaW5hdGVkIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93
bmxvYWQuZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNb25pdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgRG93bmxvYWQ7CisKK2NsYXNzIERvd25sb2FkTW9uaXRvciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRNb25pdG9yKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG93bmxvYWRNb25pdG9yKERvd25sb2FkJik7CisgICAg
CisgICAgdm9pZCBhcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBs
aWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKCk7CisgICAgdm9pZCBkb3dubG9hZFJlY2VpdmVkQnl0
ZXModWludDY0X3QpOworICAgIHZvaWQgdGltZXJGaXJlZCgpOworCitwcml2YXRlOgorICAgIERv
d25sb2FkJiBtX2Rvd25sb2FkOworCisgICAgZG91YmxlIG1lYXN1cmVkVGhyb3VnaHB1dFJhdGUo
KSBjb25zdDsKKyAgICB1aW50MzJfdCBzcGVlZE11bHRpcGxpZXIoKSBjb25zdDsKKyAgICAKKyAg
ICBzdHJ1Y3QgVGltZXN0YW1wIHsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lOworICAgICAg
ICB1aW50NjRfdCBieXRlc1JlY2VpdmVkOworICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgdGltZXN0YW1wQ2FwYWNpdHkgPSAxMDsKKyAgICBEZXF1ZTxUaW1lc3RhbXAsIHRpbWVz
dGFtcENhcGFjaXR5PiBtX3RpbWVzdGFtcHM7CisgICAgV2ViQ29yZTo6VGltZXIgbV90aW1lciB7
ICp0aGlzLCAmRG93bmxvYWRNb25pdG9yOjp0aW1lckZpcmVkIH07CisgICAgc2l6ZV90IG1faW50
ZXJ2YWwgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlcy5jcHAJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBjYWNoZXNPcmln
aW5GaWxlbmFtCiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChjYWNoZXNSb290UGF0aCwgIm9yaWdpbiJfcyk7CiB9CiAKLUNhY2hlczo6Q2FjaGVzKEVuZ2lu
ZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQ
YXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFnZXIpCitDYWNoZXM6OkNhY2hlcyhF
bmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiBy
b290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQogICAg
IDogbV9lbmdpbmUoJmVuZ2luZSkKICAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAg
ICAsIG1fcm9vdFBhdGgoV1RGTW92ZShyb290UGF0aCkpCkBAIC01MDAsMTAgKzUwMCwxMCBAQCB2
b2lkIENhY2hlczo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlCiAKICAgICBtX3F1b3RhTWFu
YWdlci0+cmVxdWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShhdXRvIGRlY2lzaW9uKSB7CiAgICAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAg
ICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueToKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueToKICAgICAg
ICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVkKTsKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50
OgogICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKICAgICAgICAgfTsKICAgICB9KTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ29u
bmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uLmNwcAkocmV2aXNpb24gMjQyODQyKQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
b25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTsKIHVzaW5n
IG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2U7CiAKKyN1bmRlZiBSRUxFQVNFX0xPR19JRl9BTExPV0VE
CiAjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lG
KHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgQ2FjaGVTdG9yYWdlLCAiJXAg
LSBDYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uOjoiIGZtdCwgJm1fY29ubmVjdGlvbi5jb25u
ZWN0aW9uKCksICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0ZVTkNUSU9OX0lG
X0FMTE9XRURfSU5fQ0FMTEJBQ0soZnVuY3Rpb25OYW1lLCBmbXQsIHJlc3VsdEdldHRlcikgXAog
ICAgIGlmICghcmVzdWx0Lmhhc192YWx1ZSgpKVwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpIHsg
fTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgPSAwOwogCi0gICAg
dmlydHVhbCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpID0g
MDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVSdW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5Kiwg
V2ViRnJhbWVQcm94eSosIEFQSTo6T3BlblBhbmVsUGFyYW1ldGVycyosIFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyUHJveHkqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBz
aG93U2hhcmVTaGVldChjb25zdCBXZWJDb3JlOjpTaGFyZURhdGFXaXRoUGFyc2VkVVJMJiwgV1RG
OjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJikgeyByZXR1cm4gZmFsc2U7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjQy
ODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgzNSwxMyArMjgzNSwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjZWl2
ZWRQb2xpY3lEZWNpc2lvCiAgICAgRG93bmxvYWRJRCBkb3dubG9hZElEID0geyB9OwogICAgIGlm
IChhY3Rpb24gPT0gUG9saWN5QWN0aW9uOjpEb3dubG9hZCkgewogICAgICAgICAvLyBDcmVhdGUg
YSBkb3dubG9hZCBwcm94eS4KLSAgICAgICAgYXV0byogZG93bmxvYWQgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkuY3JlYXRlRG93bmxvYWRQcm94eShtX2RlY2lkZVBvbGljeUZvclJlc3BvbnNl
UmVxdWVzdCwgdGhpcyk7CisgICAgICAgIGF1dG8mIGRvd25sb2FkID0gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLmNyZWF0ZURvd25sb2FkUHJveHkobV9kZWNpZGVQb2xpY3lGb3JSZXNwb25zZVJl
cXVlc3QsIHRoaXMpOwogICAgICAgICBpZiAobmF2aWdhdGlvbikgewotICAgICAgICAgICAgZG93
bmxvYWQtPnNldFdhc1VzZXJJbml0aWF0ZWQobmF2aWdhdGlvbi0+d2FzVXNlckluaXRpYXRlZCgp
KTsKLSAgICAgICAgICAgIGRvd25sb2FkLT5zZXRSZWRpcmVjdENoYWluKG5hdmlnYXRpb24tPnRh
a2VSZWRpcmVjdENoYWluKCkpOworICAgICAgICAgICAgZG93bmxvYWQuc2V0V2FzVXNlckluaXRp
YXRlZChuYXZpZ2F0aW9uLT53YXNVc2VySW5pdGlhdGVkKCkpOworICAgICAgICAgICAgZG93bmxv
YWQuc2V0UmVkaXJlY3RDaGFpbihuYXZpZ2F0aW9uLT50YWtlUmVkaXJlY3RDaGFpbigpKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGRvd25sb2FkSUQgPSBkb3dubG9hZC0+ZG93bmxvYWRJRCgpOwor
ICAgICAgICBkb3dubG9hZElEID0gZG93bmxvYWQuZG93bmxvYWRJRCgpOwogICAgICAgICBoYW5k
bGVEb3dubG9hZFJlcXVlc3QoZG93bmxvYWQpOwogICAgICAgICBtX2RlY2lkZVBvbGljeUZvclJl
c3BvbnNlUmVxdWVzdCA9IHsgfTsKICAgICB9CkBAIC01NDEwLDcgKzU0MTAsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0TWF5U3RhcnRNZWRpYVdoZW5JCiAgICAgcHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldE1heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3cobWF5U3RhcnRNZWRp
YSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVx
dWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVE
b3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7CiAgICAgcGFnZUNsaWVu
dCgpLmhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOTIsNyAr
MTA5Miw3IEBAIHB1YmxpYzoKIAogICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgY3JlYXRp
b25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYsIERyYXdpbmdBcmVhUHJveHkmKTsKIAotICAg
IHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKTsKKyAgICB2b2lkIGhh
bmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jik7CiAKICAgICB2b2lkIGFkdmFuY2VU
b05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKICAgICB2b2lkIGNo
YW5nZVNwZWxsaW5nVG9Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyOTgsOSArMTI5OCw5IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdX
ZWJzaXQKICAgICByZXR1cm4gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmNvbnRhaW5zKGRhdGFTdG9y
ZS5zZXNzaW9uSUQoKSk7CiB9CiAKLURvd25sb2FkUHJveHkqIFdlYlByb2Nlc3NQb29sOjpkb3du
bG9hZChXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCitEb3dubG9hZFByb3h5
JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVuYW1lKQogewotICAgIGF1dG8qIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5
KHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlKTsKKyAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3Jl
YXRlRG93bmxvYWRQcm94eShyZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSk7CiAgICAgUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEID0gaW5pdGlhdGluZ1BhZ2UgPyBpbml0aWF0aW5nUGFnZS0+c2Vzc2lv
bklEKCkgOiBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwogCiAgICAgaWYgKGlu
aXRpYXRpbmdQYWdlKQpAQCAtMTMyMywxNiArMTMyMywxNiBAQCBEb3dubG9hZFByb3h5KiBXZWJQ
cm9jZXNzUG9vbDo6ZG93bmxvYWQoCiAgICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0
SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgICAg
ICB9CiAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9h
ZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHVwZGF0ZWRS
ZXF1ZXN0LCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzcygp
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25J
RCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBzdWdnZXN0ZWRG
aWxlbmFtZSksIDApOwogICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKICAgICB9CiAKICAg
ICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIAotRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bv
b2w6OnJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQ
STo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQorRG93bmxvYWRQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1Bh
Z2UsIGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewot
ICAgIGF1dG8qIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KFJlc291cmNlUmVx
dWVzdCgpLCBpbml0aWF0aW5nUGFnZSk7CisgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0
ZURvd25sb2FkUHJveHkoUmVzb3VyY2VSZXF1ZXN0KCksIGluaXRpYXRpbmdQYWdlKTsKICAgICBQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBpbml0aWF0aW5nUGFnZSA/IGluaXRpYXRpbmdQYWdl
LT5zZXNzaW9uSUQoKSA6IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CiAKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKQEAgLTEz
NDAsNyArMTM0MCw3IEBAIERvd25sb2FkUHJveHkqIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3cK
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBp
ZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9h
ZFByb3h5LT5kb3dubG9hZElEKCksIHJlc3VtZURhdGEtPmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBk
b3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS0+ZGF0YVJlZmVyZW5jZSgpLCBw
YXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgICAgIHJldHVybiBkb3dubG9h
ZFByb3h5OwogICAgIH0KIApAQCAtMTU5MSwxMyArMTU5MSwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCh0aW1lb3V0SW50
ZXJ2YWwpKTsKIH0KIAotRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25s
b2FkUHJveHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBv
cmlnaW5hdGluZ1BhZ2UpCiB7Ci0gICAgYXV0byBkb3dubG9hZFByb3h5ID0gZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QpOwotICAgIGRvd25sb2FkUHJv
eHktPnNldE9yaWdpbmF0aW5nUGFnZShvcmlnaW5hdGluZ1BhZ2UpOworICAgIGF1dG8mIGRvd25s
b2FkUHJveHkgPSBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkocmVx
dWVzdCk7CisgICAgZG93bmxvYWRQcm94eS5zZXRPcmlnaW5hdGluZ1BhZ2Uob3JpZ2luYXRpbmdQ
YWdlKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIAordm9pZCBXZWJQcm9jZXNzUG9v
bDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCit7CisgICAgZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQp
OworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1l
c3NhZ2VSZWNlaXZlcikKIHsKICAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVj
ZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwgbWVzc2FnZVJlY2VpdmVyKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24gMjQyODQyKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkod29ya2luZyBjb3B5KQpA
QCAtMTk0LDggKzE5NCw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZyYgaW5qZWN0ZWRC
dW5kbGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5pbmplY3RlZEJ1bmRs
ZVBhdGgoKTsgfQogCi0gICAgRG93bmxvYWRQcm94eSogZG93bmxvYWQoV2ViUGFnZVByb3h5KiBp
bml0aWF0aW5nUGFnZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7Ci0gICAgRG93bmxvYWRQcm94eSogcmVzdW1l
RG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhKiBy
ZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIERvd25sb2FkUHJveHkmIGRvd25s
b2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7IH0pOworICAgIERv
d25sb2FkUHJveHkmIHJlc3VtZURvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2Us
IGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogICAg
IHZvaWQgc2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKFJlZlB0cjxBUEk6
Ok9iamVjdD4mJiB1c2VyRGF0YSkgeyBtX2luamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2Vy
RGF0YSA9IFdURk1vdmUodXNlckRhdGEpOyB9CiAKQEAgLTI2Nyw3ICsyNjcsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkoYm9vbCk7CiAgICAgCiAgICAgLy8g
RG93bmxvYWRzLgotICAgIERvd25sb2FkUHJveHkqIGNyZWF0ZURvd25sb2FkUHJveHkoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwogICAgIEFQ
STo6RG93bmxvYWRDbGllbnQmIGRvd25sb2FkQ2xpZW50KCkgeyByZXR1cm4gKm1fZG93bmxvYWRD
bGllbnQ7IH0KIAogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlD
bGllbnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CkBAIC00MzAsNiArNDMwLDggQEAg
cHVibGljOgogICAgIGJvb2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0KICAgICBib29sIHNo
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFRh
a2VVSUJhY2tncm91bmRBc3NlcnRpb247IH0KIAorICAgIHZvaWQgc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChib29sIGJhY2tncm91bmQpOworICAgIAogI2lmIEVOQUJMRShHQU1FUEFEKQogICAg
IHZvaWQgZ2FtZXBhZENvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmKTsKICAgICB2b2lkIGdhbWVw
YWREaXNjb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
LmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsx
MTUsNyBAQCBSZWY8UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uPiBQcm9jZXNzUG9vCiAgICAgY29w
eS0+bV9zaG91bGRDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IHRoaXMtPm1fc2hvdWxkQ2FwdHVy
ZUF1ZGlvSW5VSVByb2Nlc3M7CiAgICAgY29weS0+bV9zaG91bGRDYXB0dXJlRGlzcGxheUluVUlQ
cm9jZXNzID0gdGhpcy0+bV9zaG91bGRDYXB0dXJlRGlzcGxheUluVUlQcm9jZXNzOwogICAgIGNv
cHktPm1faXNKSVRFbmFibGVkID0gdGhpcy0+bV9pc0pJVEVuYWJsZWQ7CisgICAgY29weS0+bV9k
b3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgPSB0aGlzLT5tX2Rvd25sb2FkTW9uaXRvclNw
ZWVkTXVsdGlwbGllcjsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGNvcHktPm1fY3RE
YXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlID0gdGhpcy0+bV9jdERhdGFDb25uZWN0aW9uU2Vydmlj
ZVR5cGU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHJldmlzaW9uIDI0Mjg0MikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1
c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1NpbmdsZVdlYlByb2Nl
c3M7IH0KICAgICB2b2lkIHNldFVzZXNTaW5nbGVXZWJQcm9jZXNzKGJvb2wgZW5hYmxlZCkgeyBt
X3VzZXNTaW5nbGVXZWJQcm9jZXNzID0gZW5hYmxlZDsgfQogCisgICAgdWludDMyX3QgZG93bmxv
YWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZE1vbml0
b3JTcGVlZE11bHRpcGxpZXI7IH0KKyAgICB2b2lkIHNldERvd25sb2FkTW9uaXRvclNwZWVkTXVs
dGlwbGllcih1aW50MzJfdCBtdWx0aXBsaWVyKSB7IG1fZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyID0gbXVsdGlwbGllcjsgfQorICAgIAogICAgIGJvb2wgaXNBdXRvbWF0aWNQcm9jZXNz
V2FybWluZ0VuYWJsZWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1faXNBdXRvbWF0
aWNQcm9jZXNzV2FybWluZ0VuYWJsZWRCeUNsaWVudC52YWx1ZU9yKG1fY2xpZW50V291bGRCZW5l
Zml0RnJvbUF1dG9tYXRpY1Byb2Nlc3NQcmV3YXJtaW5nKTsKQEAgLTIyOCw2ICsyMzEsNyBAQCBw
cml2YXRlOgogICAgIFdURjo6U3RyaW5nIG1fY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJ
ZGVudGlmaWVyOwogICAgIGJvb2wgbV9pc0pJVEVuYWJsZWQgeyB0cnVlIH07CiAgICAgYm9vbCBt
X3VzZXNTaW5nbGVXZWJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICB1aW50MzJfdCBtX2Rvd25sb2Fk
TW9uaXRvclNwZWVkTXVsdGlwbGllciB7IDEgfTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgV1RGOjpTdHJpbmcgbV9jdERhdGFDb25uZWN0aW9uU2VydmljZVR5cGU7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDI0
Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3NSwxMiArMjc1LDEyIEBAIHZvaWQgV0tDb250ZXh0U2V0Q29ubmVj
dGlvbkNsaWVudChXS0NvbnQKIAogV0tEb3dubG9hZFJlZiBXS0NvbnRleHREb3dubG9hZFVSTFJl
cXVlc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0UmVm
KQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYp
LT5kb3dubG9hZCgwLCBXZWJLaXQ6OnRvSW1wbChyZXF1ZXN0UmVmKS0+cmVzb3VyY2VSZXF1ZXN0
KCkpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJl
ZiktPmRvd25sb2FkKDAsIFdlYktpdDo6dG9JbXBsKHJlcXVlc3RSZWYpLT5yZXNvdXJjZVJlcXVl
c3QoKSkpOwogfQogCiBXS0Rvd25sb2FkUmVmIFdLQ29udGV4dFJlc3VtZURvd25sb2FkKFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmLCBXS0RhdGFSZWYgcmVzdW1lRGF0YSwgV0tTdHJpbmdSZWYgcGF0
aCkKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVm
KS0+cmVzdW1lRG93bmxvYWQobnVsbHB0ciwgV2ViS2l0Ojp0b0ltcGwocmVzdW1lRGF0YSksIFdl
YktpdDo6dG9XVEZTdHJpbmcocGF0aCkpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2Vi
S2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnJlc3VtZURvd25sb2FkKG51bGxwdHIsIFdlYktpdDo6
dG9JbXBsKHJlc3VtZURhdGEpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKHBhdGgpKSk7CiB9CiAKIHZv
aWQgV0tDb250ZXh0U2V0SW5pdGlhbGl6YXRpb25Vc2VyRGF0YUZvckluamVjdGVkQnVuZGxlKFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCAgV0tUeXBlUmVmIHVzZXJEYXRhUmVmKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0J
KHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsNiArNTU4LDExIEBAIC0gKHZv
aWQpX3NldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkOihCT08KICAgICBfcHJvY2Vzc1Bvb2wtPnNl
dFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGVuYWJsZWQpOwogfQogCistICh2b2lkKV9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKK3sKKyAgICBfcHJvY2Vzc1Bvb2wt
PnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisKIC0gKHZvaWQpX3Nl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTCkgYWxsb3dzCiB7
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNTgyLDcgKzU4Nyw3IEBAIC0gKHZvaWQp
X3NldENvcmVMb2NhdGlvblByb3ZpZGVyOihpZDxfV0sKIAogLSAoX1dLRG93bmxvYWQgKilfZG93
bmxvYWRVUkxSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0IG9yaWdpbmF0aW5nV2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldwogewotICAgIHJldHVybiAoX1dLRG93bmxvYWQgKilfcHJv
Y2Vzc1Bvb2wtPmRvd25sb2FkKFt3ZWJWaWV3IF9wYWdlXSwgcmVxdWVzdCktPndyYXBwZXIoKTsK
KyAgICByZXR1cm4gKF9XS0Rvd25sb2FkICopX3Byb2Nlc3NQb29sLT5kb3dubG9hZChbd2ViVmll
dyBfcGFnZV0sIHJlcXVlc3QpLndyYXBwZXIoKTsKIH0KIAogLSAoX1dLRG93bmxvYWQgKilfcmVz
dW1lRG93bmxvYWRGcm9tRGF0YTooTlNEYXRhICopcmVzdW1lRGF0YSBwYXRoOihOU1N0cmluZyAq
KXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw1
ICsxMTksNiBAQAogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3Jh
Z2VQYXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25p
bmdFbmFibGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJ
X0RFUFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQi
LCBtYWNvc3goMTAuMTIuMywgV0tfTUFDX1RCQSksIGlvcygxMC4zLCBXS19JT1NfVEJBKSk7CiBA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc1N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkLCBz
ZXR0ZXI9X3NldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkOikgQk9PTCBfc3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMuNCksIGlvcygxMS4zKSk7Cist
ICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBlbmQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHJldmlzaW9uIDI0Mjg0MikKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBXS19DTEFTU19BVkFJTEFC
TEUobWFjb3N4KDEwLjEwKSwgaW9zKDguCiBAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBwYWdl
Q2FjaGVFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjE0KSwgaW9zKDEyLjApKTsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRp
b25PblN5c3RlbUNoYW5nZSBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xNCksIGlvcygxMi4w
KSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzSklURW5hYmxlZCkgQk9PTCBKSVRF
bmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOworQHByb3BlcnR5IChub25hdG9taWMpIE5TVUludGVnZXIgZG93bmxvYWRNb25pdG9yU3Bl
ZWRNdWx0aXBsaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5t
bQkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYg
KzMyNCwxNiBAQCAtICh2b2lkKXNldEpJVEVuYWJsZWQ6KEJPT0wpZW5hYmxlZAogICAgIF9wcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24tPnNldEpJVEVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKKy0gKE5T
VUludGVnZXIpZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyCit7CisgICAgcmV0dXJuIF9w
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24tPmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcigp
OworfQorCistICh2b2lkKXNldERvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjooTlNVSW50
ZWdlciltdWx0aXBsaWVyCit7CisgICAgX3Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi0+c2V0RG93
bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKG11bHRpcGxpZXIpOworfQorCiAtICh2b2lkKXNl
dFN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5nZTooQk9PTClzdXBw
cmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2UKIHsKICAgICBfcHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLT5zZXRTdXBwcmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25T
eXN0ZW1DaGFuZ2Uoc3VwcHJlc3Nlc0Nvbm5lY3Rpb25UZXJtaW5hdGlvbk9uU3lzdGVtQ2hhbmdl
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYkNvbnRleHQuY3BwCShyZXZpc2lvbiAyNDI4NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYzOSw3ICsxNjM5LDcgQEAgV2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRleHRHZXRPckNy
ZQogV2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRleHRTdGFydERvd25sb2FkKFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHVyaSwgV2ViUGFnZVByb3h5KiBpbml0aWF0
aW5nUGFnZSkKIHsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChTdHJpbmc6
OmZyb21VVEY4KHVyaSkpOwotICAgIHJldHVybiB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVE
b3dubG9hZChjb250ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+ZG93bmxvYWQoaW5pdGlhdGluZ1Bh
Z2UsIHJlcXVlc3QpKTsKKyAgICByZXR1cm4gd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93
bmxvYWQoJmNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5kb3dubG9hZChpbml0aWF0aW5nUGFn
ZSwgcmVxdWVzdCkpOwogfQogCiB2b2lkIHdlYmtpdFdlYkNvbnRleHRSZW1vdmVEb3dubG9hZChE
b3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDI0Mjg0MikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTksMTAgKzI5OSwxMCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
dGFydERyYWcoUmVmPFNlbGVjCiB9CiAjZW5kaWYKIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFu
ZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmIGRvd25sb2FkKQog
ewogICAgIGlmIChXRUJLSVRfSVNfV0VCX1ZJRVcobV92aWV3V2lkZ2V0KSkKLSAgICAgICAgd2Vi
a2l0V2ViVmlld0hhbmRsZURvd25sb2FkUmVxdWVzdChXRUJLSVRfV0VCX1ZJRVcobV92aWV3V2lk
Z2V0KSwgZG93bmxvYWQpOworICAgICAgICB3ZWJraXRXZWJWaWV3SGFuZGxlRG93bmxvYWRSZXF1
ZXN0KFdFQktJVF9XRUJfVklFVyhtX3ZpZXdXaWRnZXQpLCAmZG93bmxvYWQpOwogfQogCiB2b2lk
IFBhZ2VDbGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYg
LyogbWltZVR5cGUgKi8sIGJvb2wgLyogdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyICovICkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBs
LmgJKHJldmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
UGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsK
ICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERv
d25sb2FkUHJveHkqKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChE
b3dubG9hZFByb3h5Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDb21taXRMb2Fk
Rm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVu
dFByb3ZpZGVyKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkg
b3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGll
bnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1BhZ2VDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NCwxMCArMTI0LDkgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ29tbWl0TG9hZEZvck1haQog
ewogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxv
YWRQcm94eSogZG93bmxvYWQpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9hZFJl
cXVlc3QoRG93bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7Ci0gICAgQVNTRVJUKGRvd25sb2FkKTsK
LSAgICBtX3ZpZXcuaGFuZGxlRG93bmxvYWRSZXF1ZXN0KCpkb3dubG9hZCk7CisgICAgbV92aWV3
LmhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudElt
cGw6OmRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuaAko
cmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdl
Q2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcm
LCBib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9h
ZFByb3h5Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxv
YWRQcm94eSYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL0Rvd25sb2FkUHJveHlNYXBDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29jb2EubW0JKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvRG93bmxvYWRQcm94eU1h
cENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRvd25sb2FkUHJveHlNYXAuaCIKKworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCit2b2lkIERvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtQ3JlYXRl
KCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIG1fYmFja2dyb3VuZE9ic2VydmVy
ID0gW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlckZvck5h
bWU6VUlBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZE5vdGlmaWNhdGlvbiBvYmplY3Q6W1VJ
QXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dIHF1ZXVlOm5pbCB1c2luZ0Jsb2NrOm1ha2VC
bG9ja1B0cihbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKE5TTm90aWZpY2F0aW9uICop
IHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
d2Vha1RoaXMtPmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgfSkuZ2V0KCld
OworICAgIG1fZm9yZWdyb3VuZE9ic2VydmVyID0gW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlckZvck5hbWU6VUlBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVn
cm91bmROb3RpZmljYXRpb24gb2JqZWN0OltVSUFwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9u
XSBxdWV1ZTpuaWwgdXNpbmdCbG9jazptYWtlQmxvY2tQdHIoW3dlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpXShOU05vdGlmaWNhdGlvbiAqKSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5hcHBsaWNhdGlvbldpbGxFbnRl
ckZvcmVncm91bmQoKTsKKyAgICB9KS5nZXQoKV07CisjZW5kaWYKK30KKwordm9pZCBEb3dubG9h
ZFByb3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3koKQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZl
cjptX2JhY2tncm91bmRPYnNlcnZlci5nZXQoKV07CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX2ZvcmVncm91bmRPYnNlcnZlci5nZXQo
KV07CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHJl
dmlzaW9uIDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxNCBAQAogI2ltcG9y
dCA8c3lzL3BhcmFtLmg+CiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8d3Rm
L1Byb2Nlc3NQcml2aWxlZ2UuaD4KKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9y
dCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vZHls
ZFNQSS5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVJlbW90
ZUxheWVyU2VydmVyLmg+CisjZWxzZQorI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNlbmRpZgogCiBO
U1N0cmluZyAqV2ViU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeURlZmF1bHRzS2V5
ID0gQCJXZWJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IjsKQEAgLTMwMyw2ICsz
MDYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAjZW5kaWYK
IAogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBbZGVmYXVsdHMgYm9v
bEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdl
YlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCldXTsKKyAgICBwYXJhbWV0ZXJzLmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGll
ciA9IG1fY29uZmlndXJhdGlvbi0+ZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKCk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5LmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNyArMjA5LDcg
QEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGaW5pc2goKQogICAgIG1fcHJvY2Vzc1Bvb2wtPmRv
d25sb2FkQ2xpZW50KCkuZGlkRmluaXNoKCptX3Byb2Nlc3NQb29sLCAqdGhpcyk7CiAKICAgICAv
LyBUaGlzIGNhbiBjYXVzZSB0aGUgRG93bmxvYWRQcm94eSBvYmplY3QgdG8gYmUgZGVsZXRlZC4K
LSAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rv
d25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKIHN0YXRpYyBSZWZQ
dHI8QVBJOjpEYXRhPiBjcmVhdGVEYXRhKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkK
QEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRpZEZhaWwoY29uc3QgUmVz
b3VyCiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRGYWlsKCptX3Byb2Nl
c3NQb29sLCAqdGhpcywgZXJyb3IpOwogCiAgICAgLy8gVGhpcyBjYW4gY2F1c2UgdGhlIERvd25s
b2FkUHJveHkgb2JqZWN0IHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9kb3dubG9hZFByb3h5TWFwLmRv
d25sb2FkRmluaXNoZWQodGhpcyk7CisgICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmlu
aXNoZWQoKnRoaXMpOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmRpZENhbmNlbChjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBE
b3dubG9hZFByb3h5OjpkaWRDYW5jZWwoY29uc3QgSVBDOgogICAgIG1fcHJvY2Vzc1Bvb2wtPmRv
d25sb2FkQ2xpZW50KCkuZGlkQ2FuY2VsKCptX3Byb2Nlc3NQb29sLCAqdGhpcyk7CiAKICAgICAv
LyBUaGlzIGNhbiBjYXVzZSB0aGUgRG93bmxvYWRQcm94eSBvYmplY3QgdG8gYmUgZGVsZXRlZC4K
LSAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsKKyAgICBtX2Rv
d25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCwxOSArNDAsNDMgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBEb3dubG9h
ZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb2Nlc3Mp
Ci0gICAgOiBtX3Byb2Nlc3MoJnByb2Nlc3MpCisgICAgOiBtX3Byb2Nlc3MobWFrZVdlYWtQdHIo
cHJvY2VzcykpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3Nob3VsZFRha2VBc3NlcnRp
b24oV1RGOjpwcm9jZXNzSGFzRW50aXRsZW1lbnQoImNvbS5hcHBsZS5tdWx0aXRhc2tpbmcuc3lz
dGVtYXBwYXNzZXJ0aW9ucyIpKQogI2VuZGlmCiB7CisgICAgcGxhdGZvcm1DcmVhdGUoKTsKIH0K
IAogRG93bmxvYWRQcm94eU1hcDo6fkRvd25sb2FkUHJveHlNYXAoKQogewogICAgIEFTU0VSVCht
X2Rvd25sb2Fkcy5pc0VtcHR5KCkpOworICAgIHBsYXRmb3JtRGVzdHJveSgpOwogfQogCi1Eb3du
bG9hZFByb3h5KiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYlByb2Nl
c3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QpCisjaWYgIVBMQVRGT1JNKENPQ09BKQordm9pZCBEb3dubG9hZFByb3h5TWFw
OjpwbGF0Zm9ybUNyZWF0ZSgpCit7Cit9CisKK3ZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZv
cm1EZXN0cm95KCkKK3sKK30KKyNlbmRpZgorCit2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKK3sKKyAgICBpZiAobV9wcm9jZXNzKQorICAgICAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRp
ZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKK30KKwordm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBs
aWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQoreworICAgIGlmIChtX3Byb2Nlc3MpCisgICAg
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9u
V2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKK30KKworRG93bmxvYWRQcm94eSYgRG93bmxvYWRQ
cm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2ws
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogewogICAg
IGF1dG8gZG93bmxvYWRQcm94eSA9IERvd25sb2FkUHJveHk6OmNyZWF0ZSgqdGhpcywgcHJvY2Vz
c1Bvb2wsIHJlc291cmNlUmVxdWVzdCk7CiAgICAgbV9kb3dubG9hZHMuc2V0KGRvd25sb2FkUHJv
eHktPmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5jb3B5UmVmKCkpOwpAQCAtNjQsMTIgKzg4
LDEyIEBAIERvd25sb2FkUHJveHkqIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZUQKIAogICAgIG1f
cHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElE
KCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCi0gICAgcmV0dXJuIGRvd25sb2FkUHJveHkucHRy
KCk7CisgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKLXZvaWQgRG93bmxvYWRQcm94eU1h
cDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5KQordm9pZCBE
b3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmIGRvd25sb2Fk
UHJveHkpCiB7Ci0gICAgYXV0byBkb3dubG9hZElEID0gZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJ
RCgpOworICAgIGF1dG8gZG93bmxvYWRJRCA9IGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpOwog
CiAgICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJl
bmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCiAgICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9
IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKQEAgLTc3LDcgKzEwMSw3IEBA
IHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZCgKICAgICBBU1NFUlQobV9k
b3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwogCiAgICAgbV9wcm9jZXNzLT5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwotICAgIGRvd25sb2FkUHJveHktPmludmFs
aWRhdGUoKTsKKyAgICBkb3dubG9hZFByb3h5LmludmFsaWRhdGUoKTsKICAgICBtX2Rvd25sb2Fk
cy5yZW1vdmUoZG93bmxvYWRJRCk7CiAKICAgICBpZiAobV9kb3dubG9hZHMuaXNFbXB0eSgpICYm
IG1fc2hvdWxkVGFrZUFzc2VydGlvbikgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCShyZXZpc2lvbiAyNDI4NDIp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwxMiBAQAogI2luY2x1ZGUgIkRvd25sb2FkSUQu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlIDxvYmpjL29iamMuaD4KKyNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CkBAIC00MCw3
ICs0Niw3IEBAIGNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBQcm9jZXNzQXNzZXJ0
aW9uOwogY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiAKLWNsYXNzIERvd25sb2FkUHJveHlNYXAgewor
Y2xhc3MgRG93bmxvYWRQcm94eU1hcCA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxEb3dubG9hZFBy
b3h5TWFwPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRG93bmxvYWRQcm94eU1hcCk7CiAKQEAgLTQ4LDE5ICs1NCwyOSBAQCBwdWJsaWM6
CiAgICAgZXhwbGljaXQgRG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAg
ICAgfkRvd25sb2FkUHJveHlNYXAoKTsKIAotICAgIERvd25sb2FkUHJveHkqIGNyZWF0ZURvd25s
b2FkUHJveHkoV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
KTsKLSAgICB2b2lkIGRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSopOworICAgIERvd25s
b2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGRvd25sb2FkRmluaXNoZWQoRG93bmxv
YWRQcm94eSYpOwogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9h
ZHMuaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZSgpOwogCisgICAgdm9p
ZCBhcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpOworICAgIHZvaWQgYXBwbGljYXRpb25X
aWxsRW50ZXJGb3JlZ3JvdW5kKCk7CisKIHByaXZhdGU6Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94
eSogbV9wcm9jZXNzOworICAgIHZvaWQgcGxhdGZvcm1DcmVhdGUoKTsKKyAgICB2b2lkIHBsYXRm
b3JtRGVzdHJveSgpOworCisgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nl
c3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93
bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzQXNzZXJ0aW9uPiBtX2Rvd25sb2FkQXNzZXJ0aW9uOwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgUmV0YWluUHRyPGlkPiBtX2JhY2tncm91bmRP
YnNlcnZlcjsKKyAgICBSZXRhaW5QdHI8aWQ+IG1fZm9yZWdyb3VuZE9ic2VydmVyOworI2VuZGlm
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNp
b24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0NywxNyBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jCiAgICAgY29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MoaXNTZXJ2aWNlV29ya2VyUHJvY2Vzcywgc2VjdXJpdHlPcmlnaW4pLCAwLCBJUEM6OlNl
bmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiB9
CiAKLURvd25sb2FkUHJveHkqIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJv
eHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCit2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQor
eworICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApIHsKKyAgICAgICAgaWYgKGJhY2tncm91bmQp
CisgICAgICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+
YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7CisgICAgfQorfQorCitEb3dubG9hZFBy
b3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5
TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25s
b2FkUHJveHlNYXA+KCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyNDI4NDIpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnM7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTsKIHN0
cnVjdCBXZWJzaXRlRGF0YTsKIAotY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1
YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVu
dCB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gewogcHVibGljOgogICAgIHVzaW5nIFJlZ2lz
dHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAgICAgdXNpbmcgVG9w
RnJhbWVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKQEAgLTg4LDcgKzg4LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJv
Y2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5KiBjcmVhdGVE
b3dubG9hZFByb3h5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIERvd25s
b2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Jik7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0
ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwg
V2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKTsKQEAgLTE1NCw2ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBzZW5kUHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKTsKICAgICB2b2lkIHNlbmRQ
cm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpOworICAgIHZvaWQgc3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpOwogCiAgICAgdm9pZCBzZXRJc0hvbGRpbmdM
b2NrZWRGaWxlcyhib29sKTsKICAgICB2b2lkIHNldElzSURCRGF0YWJhc2VIb2xkaW5nTG9ja2Vk
RmlsZXMoYm9vbCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVu
dEltcGxJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZy
YW1lKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZy
YW1lKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wp
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJ
bXBsSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5tbQkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyAr
MjI0LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ29tbWl0TG9hZEZvck1haQogICAgIFtt
X2NvbnRlbnRWaWV3IF9kaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lXTsKIH0KIAotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKQordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKQogewog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudElt
cGxNYWMuaAkocmV2aXNpb24gMjQyODQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYgb2xkVG9vbFRpcCwg
Y29uc3QgU3RyaW5nJiBuZXdUb29sVGlwKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENvbW1pdExv
YWRGb3JNYWluRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCB1c2VDdXN0b21Db250
ZW50UHJvdmlkZXIpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JD
dXN0b21Db250ZW50UHJvdmlkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoYW5kbGVEb3dubG9h
ZFJlcXVlc3QoRG93bmxvYWRQcm94eSopIG92ZXJyaWRlOworICAgIHZvaWQgaGFuZGxlRG93bmxv
YWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENoYW5nZUNv
bnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNl
dEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1
cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHJldmlzaW9u
IDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgUGFnZUNsaWVudElt
cGw6OmRpZEZpbmlzaExvYWRpbmdEYXQKIHsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFu
ZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKQogewogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI0Mjg0MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTM0NTgsNiArMzQ1OCw5IEBACiAJCTVDMjBDQjlFMUJCMERE
MTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOZXR3b3JrU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
QzI2OTU4NDIwMDQyRjEyMDA1QzQzOUIgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS09wZW5QYW5lbFBhcmFtZXRlcnNQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMjk4RDlFMUMzREVGMjkw
MDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGVuZGluZ0Rvd25sb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
MkIxQUYzMjIzQUI3MjgwMEI5MUNGNyAvKiBEb3dubG9hZE1vbml0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG93bmxvYWRNb25pdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMyQjFBRjQyMjNBQjcyODAwQjkxQ0Y3IC8qIERvd25sb2Fk
TW9uaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb3dubG9hZE1vbml0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMyQjFBRjUyMjNDMUZEMjAwQjkx
Q0Y3IC8qIERvd25sb2FkUHJveHlNYXBDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERvd25sb2FkUHJveHlNYXBDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUMzNTlDMEMyMTU0NzMyMTAwOUU3OTQ4IC8qIFdLRGVwcmVjYXRlZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0RlcHJlY2F0ZWQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMzQUVBOEUxRkUxRjFERjAwMjMxOEQzIC8qIFdlYnNp
dGVQb2xpY2llc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2Vic2l0ZVBvbGljaWVzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVD
NDZDMEFDMjFCNzE5OEIwMEJDNTk5MSAvKiBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzM4LDYg
KzUzNDEsNyBAQAogCQkJCTgzODkxQjZCMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5tbSAqLywKIAkJCQlBMURGNjMxMTE4RTBCN0M4MDAzQTNFMkEgLyogRG93bmxv
YWRDbGllbnQuaCAqLywKIAkJCQlBMURGNjMxMDE4RTBCN0M4MDAzQTNFMkEgLyogRG93bmxvYWRD
bGllbnQubW0gKi8sCisJCQkJNUMyQjFBRjUyMjNDMUZEMjAwQjkxQ0Y3IC8qIERvd25sb2FkUHJv
eHlNYXBDb2NvYS5tbSAqLywKIAkJCQkwMEI5NjYxODE4RTI1QUUxMDBDRTFGODggLyogRmluZENs
aWVudC5oICovLAogCQkJCTAwQjk2NjE3MThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50Lm1t
ICovLAogCQkJCUNENzhFMTEzMURCN0Q3RUQwMDE0QTJERSAvKiBGdWxsc2NyZWVuQ2xpZW50Lmgg
Ki8sCkBAIC02ODYxLDYgKzY4NjUsOCBAQAogCQkJCTVDMTQyNkY5MUMyM0Y4NDMwMEQ0MTE4MyAv
KiBEb3dubG9hZE1hbmFnZXIuaCAqLywKIAkJCQk1MTI0MEVCOTIyMEEwOENBMDA1Q0ZDNjMgLyog
RG93bmxvYWRNYXAuY3BwICovLAogCQkJCTUxMjQwRUI4MjIwQTA4Q0EwMDVDRkM2MyAvKiBEb3du
bG9hZE1hcC5oICovLAorCQkJCTVDMkIxQUYzMjIzQUI3MjgwMEI5MUNGNyAvKiBEb3dubG9hZE1v
bml0b3IuY3BwICovLAorCQkJCTVDMkIxQUY0MjIzQUI3MjgwMEI5MUNGNyAvKiBEb3dubG9hZE1v
bml0b3IuaCAqLywKIAkJCQk1Qzg1Qzc4NjFDM0YyM0M1MDA2MUE0RkEgLyogUGVuZGluZ0Rvd25s
b2FkLmNwcCAqLywKIAkJCQk1QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVuZGluZ0Rvd25s
b2FkLmggKi8sCiAJCQkpOwpAQCAtMTAyMzMsOSArMTAyMzksNiBAQAogCQkJCQkJQ3JlYXRlZE9u
VG9vbHNWZXJzaW9uID0gMTAuMTsKIAkJCQkJCVByb3Zpc2lvbmluZ1N0eWxlID0gQXV0b21hdGlj
OwogCQkJCQl9OwotCQkJCQlBMTc5OEI1OTIyMzQ2NEM0MDAwNzY0QkQgPSB7Ci0JCQkJCQlDcmVh
dGVkT25Ub29sc1ZlcnNpb24gPSAxMC4yOwotCQkJCQl9OwogCQkJCQlFMUFDMkUyNzIwRjdCOTRD
MDBCMDg5N0QgPSB7CiAJCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA5LjM7CiAJCQkJCQlQ
cm92aXNpb25pbmdTdHlsZSA9IEF1dG9tYXRpYzsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MzAzMikKKysrIFRvb2xzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE5LTAzLTE1ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVt
ZW50IERvd25sb2FkTW9uaXRvciB0byBwcmV2ZW50IGxvbmctcnVubmluZyBzbG93IGRvd25sb2Fk
cyBmcm9tIGJhY2tncm91bmQgYXBwcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1Nzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpUQ1BTZXJ2ZXIpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VENQU2VydmVyOjp+VENQU2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRDUFNlcnZlcjo6c29ja2V0QmluZExpc3Rlbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpUQ1BTZXJ2ZXI6OndhaXRGb3JBbmRSZXBseVRvUmVxdWVzdHMpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVENQU2VydmVyLmg6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQ
U2VydmVyOjpwb3J0IGNvbnN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JU
ZXN0RGVsZWdhdGUgX2Rvd25sb2FkRGlkU3RhcnQ6XSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9u
aXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWREaWRDYW5jZWw6XSk6CisgICAgICAgICgtW0Rvd25s
b2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWQ6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0Rvd25sb2Fk
TW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWQ6ZGlkUmVjZWl2ZURhdGE6XSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpyZXNwb25kU2xvd2x5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OndlYlZpZXdXaXRoRG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OmRvd25sb2FkQXRSYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorCiAyMDE5LTAzLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4K
IAogICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cwpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVENQU2VydmVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1RD
UFNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUQ1BTZXJ2ZXIuaCIKKworI2luY2x1ZGUg
PG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
aW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RDUFNlcnZl
cjo6VENQU2VydmVyKEZ1bmN0aW9uPHZvaWQoU29ja2V0KT4mJiBzb2NrZXRIYW5kbGVyKQorICAg
IDogbV9zb2NrZXRIYW5kbGVyKFdURk1vdmUoc29ja2V0SGFuZGxlcikpCit7CisgICAgc29ja2V0
QmluZExpc3RlbigpOworICAgIG1fdGhyZWFkID0gc3RkOjp0aHJlYWQoJlRDUFNlcnZlcjo6d2Fp
dEZvckFuZFJlcGx5VG9SZXF1ZXN0cywgdGhpcyk7Cit9CisKK1RDUFNlcnZlcjo6flRDUFNlcnZl
cigpCit7CisgICAgbV90aHJlYWQuam9pbigpOworICAgIGlmIChtX2xpc3RlbmluZ1NvY2tldCAh
PSBJbnZhbGlkU29ja2V0KSB7CisgICAgICAgIGNsb3NlKG1fbGlzdGVuaW5nU29ja2V0KTsKKyAg
ICAgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBJbnZhbGlkU29ja2V0OworICAgIH0KKyAgICBpZiAo
bV9jb25uZWN0aW9uU29ja2V0ICE9IEludmFsaWRTb2NrZXQpIHsKKyAgICAgICAgY2xvc2UobV9j
b25uZWN0aW9uU29ja2V0KTsKKyAgICAgICAgbV9jb25uZWN0aW9uU29ja2V0ID0gSW52YWxpZFNv
Y2tldDsKKyAgICB9Cit9CisKK3ZvaWQgVENQU2VydmVyOjpzb2NrZXRCaW5kTGlzdGVuKCkKK3sK
KyAgICBtX2xpc3RlbmluZ1NvY2tldCA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7
CisgICAgaWYgKG1fbGlzdGVuaW5nU29ja2V0ID09IEludmFsaWRTb2NrZXQpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAvLyBQb3J0cyA0OTE1Mi02NTUzNSBhcmUgdW5hbGxvY2F0ZWQgcG9y
dHMuIFRyeSB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0J3MgZnJlZS4KKyAgICBmb3IgKFBvcnQgcG9y
dCA9IDQ5MTUyOyBwb3J0OyBwb3J0KyspIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIG5h
bWU7CisgICAgICAgIG1lbXNldCgmbmFtZSwgMCwgc2l6ZW9mKG5hbWUpKTsKKyAgICAgICAgbmFt
ZS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgbmFtZS5zaW5fcG9ydCA9IGh0b25zKHBv
cnQpOworICAgICAgICBuYW1lLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOwor
ICAgICAgICBpZiAoYmluZChtX2xpc3RlbmluZ1NvY2tldCwgcmVpbnRlcnByZXRfY2FzdDxzb2Nr
YWRkcio+KCZuYW1lKSwgc2l6ZW9mKG5hbWUpKSA8IDApIHsKKyAgICAgICAgICAgIC8vIFRoaXMg
cG9ydCBpcyBidXN5LiBUcnkgdGhlIG5leHQgcG9ydC4KKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heENvbm5lY3Rpb25zID0gMTsKKyAg
ICAgICAgaWYgKGxpc3RlbihtX2xpc3RlbmluZ1NvY2tldCwgbWF4Q29ubmVjdGlvbnMpID09IC0x
KSB7CisgICAgICAgICAgICAvLyBMaXN0ZW5pbmcgZmFpbGVkLgorICAgICAgICAgICAgY2xvc2Uo
bV9saXN0ZW5pbmdTb2NrZXQpOworICAgICAgICAgICAgbV9saXN0ZW5pbmdTb2NrZXQgPSBJbnZh
bGlkU29ja2V0OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fcG9y
dCA9IHBvcnQ7CisgICAgICAgIHJldHVybjsgLy8gU3VjY2Vzc2Z1bGx5IHNldCB1cCBsaXN0ZW5p
bmcgcG9ydC4KKyAgICB9CisgICAgCisgICAgLy8gQ291bGRuJ3QgZmluZCBhbiBhdmFpbGFibGUg
cG9ydC4KKyAgICBjbG9zZShtX2xpc3RlbmluZ1NvY2tldCk7CisgICAgbV9saXN0ZW5pbmdTb2Nr
ZXQgPSBJbnZhbGlkU29ja2V0OworfQorCit2b2lkIFRDUFNlcnZlcjo6d2FpdEZvckFuZFJlcGx5
VG9SZXF1ZXN0cygpCit7CisgICAgaWYgKG1fbGlzdGVuaW5nU29ja2V0ID09IEludmFsaWRTb2Nr
ZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2Nvbm5lY3Rpb25Tb2NrZXQgPSBhY2Nl
cHQobV9saXN0ZW5pbmdTb2NrZXQsIG51bGxwdHIsIG51bGxwdHIpOworICAgIG1fc29ja2V0SGFu
ZGxlcihtX2Nvbm5lY3Rpb25Tb2NrZXQpOworICAgIHNodXRkb3duKG1fY29ubmVjdGlvblNvY2tl
dCwgU0hVVF9SRFdSKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1RDUFNlcnZlci5oCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVENQU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbi5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIFRDUFNlcnZlciB7
CitwdWJsaWM6CisgICAgdXNpbmcgU29ja2V0ID0gaW50OworICAgIHN0YXRpYyBjb25zdGV4cHIg
U29ja2V0IEludmFsaWRTb2NrZXQgPSAtMTsKKyAgICB1c2luZyBQb3J0ID0gdWludDE2X3Q7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBQb3J0IEludmFsaWRQb3J0ID0gMDsKKyAgICAKKyAgICBUQ1BT
ZXJ2ZXIoRnVuY3Rpb248dm9pZChTb2NrZXQpPiYmKTsKKyAgICB+VENQU2VydmVyKCk7CisgICAg
CisgICAgUG9ydCBwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9wb3J0OyB9CisgICAgCitwcml2YXRl
OgorICAgIHZvaWQgc29ja2V0QmluZExpc3RlbigpOworICAgIHZvaWQgd2FpdEZvckFuZFJlcGx5
VG9SZXF1ZXN0cygpOworCisgICAgUG9ydCBtX3BvcnQgeyBJbnZhbGlkUG9ydCB9OworICAgIFNv
Y2tldCBtX2xpc3RlbmluZ1NvY2tldCB7IEludmFsaWRTb2NrZXQgfTsKKyAgICBTb2NrZXQgbV9j
b25uZWN0aW9uU29ja2V0IHsgSW52YWxpZFNvY2tldCB9OworICAgIHN0ZDo6dGhyZWFkIG1fdGhy
ZWFkOworICAgIEZ1bmN0aW9uPHZvaWQoU29ja2V0KT4gbV9zb2NrZXRIYW5kbGVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDI0Mjg0MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNiArMzIxLDcg
QEAKIAkJNUM4MzhGN0YxREIwNEY5MDAwODI4NThGIC8qIExvYWRJbnZhbGlkVVJMUmVxdWVzdC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTAxRkFF
MUNBRjEzNzEwMEVENjRGOSAvKiBMb2FkSW52YWxpZFVSTFJlcXVlc3QubW0gKi87IH07CiAJCTVD
OEJDNzk5MjE4Q0Y0NDcwMDgxMzg4NiAvKiBOZXR3b3JrUHJvY2Vzcy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOEJDNzk4MjE4Q0YzRTkwMDgxMzg4
NiAvKiBOZXR3b3JrUHJvY2Vzcy5tbSAqLzsgfTsKIAkJNUM5NzNGNUMxRjU4RUY4QjAwMzU5QzI3
IC8qIFdlYkdMUG9saWN5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUM5NzNGNUIxRjU4RUYwQTAwMzU5QzI3IC8qIFdlYkdMUG9saWN5Lm1tICovOyB9
OworCQk1QzlCNTQ4RTIyM0M0Q0JFMDBCMTUwQzQgLyogVENQU2VydmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUI1NDhDMjIzQzRCRjUwMEIx
NTBDNCAvKiBUQ1BTZXJ2ZXIuY3BwICovOyB9OwogCQk1QzlFNTY4NTFERjkxNDU0MDBDOUVFMzMg
LyogV2Vic2l0ZVBvbGljaWVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUM5RTU2ODQxREY5MTQzRDAwQzlFRTMzIC8qIFdlYnNpdGVQb2xpY2llcy5t
bSAqLzsgfTsKIAkJNUM5RTU2ODcxREY5MTRBRTAwQzlFRTMzIC8qIGNvbnRlbnRCbG9ja2VyQ2hl
Y2suaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1QzlFNTY4NjFERjkxNDhFMDBDOUVFMzMgLyogY29udGVudEJsb2NrZXJDaGVjay5odG1s
ICovOyB9OwogCQk1QzlFNTk0MTFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5k
YiBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QzlFNTkzRTFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYiAqLzsgfTsKQEAg
LTE3MTMsNiArMTcxNCw4IEBACiAJCTVDN0M3NENBMUZCNTI4RDQwMDJGOUFCRSAvKiBXZWJWaWV3
U2NoZWR1bGVJblJ1bkxvb3AubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJWaWV3U2NoZWR1bGVJblJ1bkxvb3AubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDOEJDNzk4MjE4Q0YzRTkwMDgxMzg4NiAvKiBOZXR3b3JrUHJvY2Vzcy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Qzk3M0Y1QjFGNThFRjBBMDAzNTlDMjcgLyog
V2ViR0xQb2xpY3kubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJHTFBvbGljeS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5QjU0OEMyMjND
NEJGNTAwQjE1MEM0IC8qIFRDUFNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUQ1BTZXJ2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
QzlCNTQ4RDIyM0M0QkY1MDBCMTUwQzQgLyogVENQU2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRDUFNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1QzlFNTY4NDFERjkxNDNEMDBDOUVFMzMgLyogV2Vic2l0ZVBvbGljaWVzLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vic2l0ZVBvbGljaWVzLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTY4NjFERjkxNDhFMDBDOUVFMzMgLyogY29u
dGVudEJsb2NrZXJDaGVjay5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gY29udGVu
dEJsb2NrZXJDaGVjay5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTkz
RTFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSBBcHBsaWNhdGlv
bkNhY2hlLmRiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM5MCw2ICsyMzkzLDgg
QEAKIAkJCQlCQzU3NUJCRjEyNkY1NzUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRpZXMuY3Bw
ICovLAogCQkJCUJDMTMxODgzMTE3MTE0QTgwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllcy5o
ICovLAogCQkJCUJDOTA5NTFCMTI1NTMzRDcwMDA4Mzc1NiAvKiBQbGF0Zm9ybVdlYlZpZXcuaCAq
LywKKwkJCQk1QzlCNTQ4QzIyM0M0QkY1MDBCMTUwQzQgLyogVENQU2VydmVyLmNwcCAqLywKKwkJ
CQk1QzlCNTQ4RDIyM0M0QkY1MDBCMTUwQzQgLyogVENQU2VydmVyLmggKi8sCiAJCQkJQkNCOUU3
RkExMTIzNTlBMzAwQTEzN0UwIC8qIFRlc3QuaCAqLywKIAkJCQlCQzEzMUFBODExNzEzMUZDMDBC
Njk3MjcgLyogVGVzdHNDb250cm9sbGVyLmNwcCAqLywKIAkJCQlCQ0I5RTdDNzExMjM0RTNBMDBB
MTM3RTAgLyogVGVzdHNDb250cm9sbGVyLmggKi8sCkBAIC00MjgwLDYgKzQyODUsNyBAQAogCQkJ
CTdDQ0U3RUE4MUE0MTFBMTkwMDQ0N0M0QyAvKiBTeW50aGV0aWNCYWNraW5nU2NhbGVGYWN0b3JX
aW5kb3cubSBpbiBTb3VyY2VzICovLAogCQkJCTFDNzM0QjUzMjA3ODhDNDgwMEY0MzBFQSAvKiBT
eXN0ZW1Db2xvcnMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDcwMDU5NjIxRURBMEM2MDAzNDYz
Q0IgLyogVGFiT3V0T2ZXZWJWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUM5QjU0OEUyMjND
NENCRTAwQjE1MEM0IC8qIFRDUFNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0Yx
NjFBNDExQUU2MDA0NDdDNEMgLyogVGVybWluYXRlVHdpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0NDRTdFQTkxQTQxMUExRDAwNDQ3QzRDIC8qIFRlc3RCcm93c2luZ0NvbnRleHRMb2FkRGVs
ZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNDYxMjhDQjIxMUQ0NzUxMDBEOUZBREIgLyog
VGVzdERyYWdnaW5nSW5mby5tbSBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCShyZXZpc2lvbiAyNDI4
NDIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxOCArMjksMjEgQEAKICNpZiBQTEFURk9STShNQUMpIHx8
IFBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQg
IlRDUFNlcnZlci5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0IDxXZWJLaXQvX1dLRG93bmxvYWQu
aD4KLSNpbXBvcnQgPFdlYktpdC9fV0tEb3dubG9hZERlbGVnYXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
Q29uZmlndXJhdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L19XS0Rvd25sb2FkLmg+CisjaW1wb3J0
IDxXZWJLaXQvX1dLRG93bmxvYWREZWxlZ2F0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbXBv
cnQgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW1wb3J0IDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CiAjaW1w
b3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTc3Niw0ICs3NzksMTM5IEBAIFRFU1QoX1dL
RG93bmxvYWQsIENyYXNoQWZ0ZXJEb3dubG9hZERpZEYKICAgICBFWFBFQ1RfTlVMTChwcm9jZXNz
UG9vbC5nZXQoKSk7CiB9CiAKLSNlbmRpZgorc3RhdGljIGJvb2wgcmVjZWl2ZWREYXRhOworc3Rh
dGljIGJvb2wgZGlkQ2FuY2VsOworc3RhdGljIFJldGFpblB0cjxOU1N0cmluZz4gZGVzdGluYXRp
b247CisKK0BpbnRlcmZhY2UgRG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlIDogTlNPYmplY3Qg
PF9XS0Rvd25sb2FkRGVsZWdhdGU+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBEb3dubG9hZE1v
bml0b3JUZXN0RGVsZWdhdGUKKworLSAodm9pZClfZG93bmxvYWREaWRTdGFydDooX1dLRG93bmxv
YWQgKilkb3dubG9hZAoreworICAgIGRpZERvd25sb2FkU3RhcnQgPSB0cnVlOworfQorCistICh2
b2lkKV9kb3dubG9hZERpZENhbmNlbDooX1dLRG93bmxvYWQgKilkb3dubG9hZAoreworICAgIGRp
ZENhbmNlbCA9IHRydWU7Cit9CisKKy0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRv
d25sb2FkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihOU1N0cmluZyAq
KWZpbGVuYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIGFsbG93T3ZlcndyaXRl
LCBOU1N0cmluZyAqZGVzdGluYXRpb24pKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgRVhQRUNU
X1RSVUUoW2ZpbGVuYW1lIGlzRXF1YWxUb1N0cmluZzpAImZpbGVuYW1lLmRhdCJdKTsKKyAgICBk
ZXN0aW5hdGlvbiA9IFtOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpmaWxlbmFtZV07CisgICAgY29tcGxldGlvbkhhbmRsZXIoWUVTLCBkZXN0aW5h
dGlvbi5nZXQoKSk7Cit9CisKKy0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25s
b2FkIGRpZFJlY2VpdmVEYXRhOih1aW50NjRfdClsZW5ndGgKK3sKKyAgICByZWNlaXZlZERhdGEg
PSB0cnVlOworfQorCitAZW5kCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordm9pZCBy
ZXNwb25kU2xvd2x5KGludCBzb2NrZXQsIGRvdWJsZSBrYnBzLCBib29sJiB0ZXJtaW5hdGVTZXJ2
ZXIpCit7CisgICAgRVhQRUNUX0ZBTFNFKGlzTWFpblRocmVhZCgpKTsKKyAgICBjaGFyIHJlYWRC
dWZmZXJbMTAwMF07CisgICAgYXV0byBieXRlc1JlYWQgPSA6OnJlYWQoc29ja2V0LCByZWFkQnVm
ZmVyLCBzaXplb2YocmVhZEJ1ZmZlcikpOworICAgIEVYUEVDVF9HVChieXRlc1JlYWQsIDApOwor
ICAgIEVYUEVDVF9UUlVFKHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNSZWFkKSA8IHNpemVvZihy
ZWFkQnVmZmVyKSk7CisgICAgCisgICAgY29uc3QgY2hhciogcmVzcG9uc2VIZWFkZXIgPQorICAg
ICJIVFRQLzEuMSAyMDAgT0tcclxuIgorICAgICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2ht
ZW50OyBmaWxlbmFtZT1cImZpbGVuYW1lLmRhdFwiXHJcbiIKKyAgICAiQ29udGVudC1MZW5ndGg6
IDEwMDAwMDAwMFxyXG5cclxuIjsKKyAgICBhdXRvIGJ5dGVzV3JpdHRlbiA9IDo6d3JpdGUoc29j
a2V0LCByZXNwb25zZUhlYWRlciwgc3RybGVuKHJlc3BvbnNlSGVhZGVyKSk7CisgICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNXcml0dGVuKSwgc3RybGVuKHJlc3BvbnNlSGVh
ZGVyKSk7CisgICAgCisgICAgY29uc3QgZG91YmxlIHdyaXRlc1BlclNlY29uZCA9IDEwMDsKKyAg
ICBWZWN0b3I8Y2hhcj4gd3JpdGVCdWZmZXIoc3RhdGljX2Nhc3Q8c2l6ZV90PigxMDI0ICoga2Jw
cyAvIHdyaXRlc1BlclNlY29uZCkpOworICAgIHdoaWxlICghdGVybWluYXRlU2VydmVyKSB7Cisg
ICAgICAgIGF1dG8gYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIDo6d3Jp
dGUoc29ja2V0LCB3cml0ZUJ1ZmZlci5kYXRhKCksIHdyaXRlQnVmZmVyLnNpemUoKSk7CisgICAg
ICAgIGRvdWJsZSB3cml0ZUR1cmF0aW9uID0gKE1vbm90b25pY1RpbWU6Om5vdygpIC0gYmVmb3Jl
KS5zZWNvbmRzKCk7CisgICAgICAgIGRvdWJsZSBkZXNpcmVkU2xlZXAgPSAxLjAgLyB3cml0ZXNQ
ZXJTZWNvbmQ7CisgICAgICAgIGlmICh3cml0ZUR1cmF0aW9uIDwgZGVzaXJlZFNsZWVwKQorICAg
ICAgICAgICAgdXNsZWVwKFVTRUNfUEVSX1NFQyAqIChkZXNpcmVkU2xlZXAgLSB3cml0ZUR1cmF0
aW9uKSk7CisgICAgfQorfQorCitSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3V2l0aERvd25s
b2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcihzaXplX3QgbXVsdGlwbGllcikKK3sKKyAgICBzdGF0
aWMgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtEb3dubG9hZE5hdmlnYXRpb25E
ZWxlZ2F0ZSBuZXddKTsKKyAgICBzdGF0aWMgYXV0byBkb3dubG9hZERlbGVnYXRlID0gYWRvcHRO
UyhbRG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlIG5ld10pOworICAgIGF1dG8gcHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uID0gYWRvcHROUyhbX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIG5l
d10pOworICAgIFtwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gc2V0RG93bmxvYWRNb25pdG9yU3Bl
ZWRNdWx0aXBsaWVyOm11bHRpcGxpZXJdOworICAgIGF1dG8gcHJvY2Vzc1Bvb2wgPSBhZG9wdE5T
KFtbV0tQcm9jZXNzUG9vbCBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpwcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIHdlYlZpZXdDb25maWd1cmF0aW9uID0g
YWRvcHROUyhbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddKTsKKyAgICBbd2ViVmlld0NvbmZp
Z3VyYXRpb24gc2V0UHJvY2Vzc1Bvb2w6cHJvY2Vzc1Bvb2wuZ2V0KCldOworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQo
KV0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpuYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sLl9kb3du
bG9hZERlbGVnYXRlID0gZG93bmxvYWREZWxlZ2F0ZS5nZXQoKTsKKyAgICByZXR1cm4gd2ViVmll
dzsKK30KKworZW51bSBjbGFzcyBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kIHsgTm8sIFllcyB9Owor
ICAgIAordm9pZCBkb3dubG9hZEF0UmF0ZShkb3VibGUgZGVzaXJlZEticHMsIHVuc2lnbmVkIHNw
ZWVkTXVsdGlwbGllciwgQXBwUmV0dXJuc1RvRm9yZWdyb3VuZCByZXR1cm5Ub0ZvcmVncm91bmQg
PSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpObykKK3sKKyAgICBib29sIHRlcm1pbmF0ZVNlcnZl
ciA9IGZhbHNlOworICAgIFRDUFNlcnZlciBzZXJ2ZXIoWyZdKGF1dG8gc29ja2V0KSB7CisgICAg
ICAgIHJlc3BvbmRTbG93bHkoc29ja2V0LCBkZXNpcmVkS2JwcywgdGVybWluYXRlU2VydmVyKTsK
KyAgICB9KTsKKyAgICAKKyAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3V2l0aERvd25sb2FkTW9u
aXRvclNwZWVkTXVsdGlwbGllcihzcGVlZE11bHRpcGxpZXIpOworICAgIFt3ZWJWaWV3IGxvYWRS
ZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJodHRwOi8vMTI3LjAuMC4xOiVkLyIsIHNlcnZl
ci5wb3J0KCldXV1dOworICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigm
cmVjZWl2ZWREYXRhKTsKKyAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25pdG9yJ3MgdGltZXIu
CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kOllFU107CisgICAgaWYgKHJldHVyblRvRm9yZWdyb3VuZCA9PSBBcHBSZXR1
cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCisgICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5w
cm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107CisgICAgZGlkQ2FuY2Vs
ID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOworICAgIHRlcm1pbmF0ZVNlcnZl
ciA9IHRydWU7CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVt
QXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpkZXN0aW5hdGlvbi5nZXQoKSBpc0RpcmVjdG9y
eTpOT10gZXJyb3I6bmlsXTsKK30KKworVEVTVChfV0tEb3dubG9hZCwgRG93bmxvYWRNb25pdG9y
Q2FuY2VsKQoreworICAgIGRvd25sb2FkQXRSYXRlKDAuNSwgMTIwKTsgLy8gU2hvdWxkIGNhbmNl
bCBpbiB+MC41IHNlY29uZHMKKyAgICBkb3dubG9hZEF0UmF0ZSgxLjUsIDEyMCk7IC8vIFNob3Vs
ZCBjYW5jZWwgaW4gfjIuNSBzZWNvbmRzCit9CisKK1RFU1QoX1dLRG93bmxvYWQsIERvd25sb2Fk
TW9uaXRvclN1cnZpdmUpCit7CisgICAgX19ibG9jayBCT09MIHRpbWVvdXRSZWFjaGVkID0gTk87
CisgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMi41
ICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKGRpZENhbmNlbCk7CisgICAgICAgIGRpZENhbmNlbCA9IHRydWU7CisgICAg
ICAgIHRpbWVvdXRSZWFjaGVkID0gWUVTOworICAgIH0pOworCisgICAgLy8gU2ltdWxhdGVzIGFu
IGhvdXIgb2YgZG93bmxvYWRpbmcgMTUwa2IvcyBpbiAxIHNlY29uZC4KKyAgICAvLyBUaW1lb3V0
IHNob3VsZCBiZSByZWFjaGVkIGJlZm9yZSB0aGlzIGlzIGNhbmNlbGxlZCBiZWNhdXNlIHRoZSBk
b3dubG9hZCByYXRlIGlzIGhpZ2ggZW5vdWdoLgorICAgIGRvd25sb2FkQXRSYXRlKDE1MC4wLCAz
NjAwKTsKKyAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0UmVhY2hlZCk7Cit9CisKK1RFU1QoX1dLRG93
bmxvYWQsIERvd25sb2FkTW9uaXRvclJldHVyblRvRm9yZWdyb3VuZCkKK3sKKyAgICBfX2Jsb2Nr
IEJPT0wgdGltZW91dFJlYWNoZWQgPSBOTzsKKyAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90
aW1lKERJU1BBVENIX1RJTUVfTk9XLCAyLjUgKiBOU0VDX1BFUl9TRUMpLCBkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBFWFBFQ1RfRkFMU0UoZGlkQ2FuY2VsKTsKKyAgICAg
ICAgZGlkQ2FuY2VsID0gdHJ1ZTsKKyAgICAgICAgdGltZW91dFJlYWNoZWQgPSBZRVM7CisgICAg
fSk7CisgICAgZG93bmxvYWRBdFJhdGUoMC41LCAxMjAsIEFwcFJldHVybnNUb0ZvcmVncm91bmQ6
Olllcyk7CisgICAgRVhQRUNUX1RSVUUodGltZW91dFJlYWNoZWQpOworfQorCit9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KElPUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365025</attachid>
            <date>2019-03-18 10:25:49 -0700</date>
            <delta_ts>2019-03-18 14:59:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195785-20190318102548.patch</filename>
            <type>text/plain</type>
            <size>85688</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxOS0wMy0xOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBE
b3dubG9hZE1vbml0b3IgdG8gcHJldmVudCBsb25nLXJ1bm5pbmcgc2xvdyBkb3dubG9hZHMgZnJv
bSBiYWNrZ3JvdW5kIGFwcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NTc4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IHdhcyB1cGRhdGVkIGluIDxyZGFyOi8v
cHJvYmxlbS80MjY3NzY4NT4gYnV0IGZvciBXZWJLaXQgRG93bmxvYWRzLgorICAgICAgICBUbyB0
ZXN0IGl0IEkgaW1wbGVtZW50ZWQgYSB0aHJvdHRsZWQgVENQIHNlcnZlciwgU1BJIHRvIHNwZWVk
IHVwIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLAorICAgICAgICBhbmQgU1BJIHRvIHN5bnRoZXNp
emUgdGhlIGFwcGxpY2F0aW9uIGdvaW5nIGludG8gdGhlIGJhY2tncm91bmQgYW5kIGZvcmVncm91
bmQsIHdoaWNoCisgICAgICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyIGRvZXMgb24gaU9TLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWQ6OmRpZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZENhbmNlbCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmg6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
OjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OmFwcGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZDo6bWFuYWdlciBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6
ZG93bmxvYWRGaW5pc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6YXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1h
bmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTWFwOjp2YWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hcC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1v
bml0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IgX2ticHMpOgorICAg
ICAgICAoV2ViS2l0Ojp0aW1lVW50aWxOZXh0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1vbml0b3I6OkRvd25sb2FkTW9uaXRvcik6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTW9uaXRvcjo6bWVhc3VyZWRUaHJvdWdocHV0UmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkTW9uaXRvcjo6ZG93bmxvYWRSZWNlaXZlZEJ5dGVzKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKToKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjpzcGVlZE11bHRpcGxpZXIg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaDogQWRk
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uV2lsbEVu
dGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb246OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXS0NvbnRleHREb3dubG9hZFVSTFJlcXVlc3QpOgorICAgICAgICAoV0tDb250ZXh0
UmVzdW1lRG93bmxvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDpdKToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfZG93bmxvYWRVUkxSZXF1ZXN0Om9y
aWdpbmF0aW5nV2ViVmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbToKKyAgICAgICAgKC1bX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uIGRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcl0pOgorICAgICAgICAo
LVtfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gc2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29j
b2EubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bUNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVz
dHJveSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmluaXNoKToKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHk6OmRpZENhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6On5E
b3dubG9hZFByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6cGxh
dGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bURlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlv
bkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
cm94eTo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxl
RG93bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
TWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDMtMTgg
IEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
V1BFXSBCdW1wIHB1YmxpYyBBUEkgdG8gd3BlLTEuMApJbmRleDogU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CShyZXZpc2lv
biAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC01Myw2ICs1Myw3IEBAIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci4K
IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKIE5ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRNYXAuY3BwCitOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNw
cAogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHAKIAogTmV0d29y
a1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcApJbmRleDogU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsNiArMzI1LDcgQEAgVUlQcm9jZXNzL0NvY29h
L0F1dG9tYXRpb25DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9BdXRvbWF0aW9uU2Vzc2lvbkNs
aWVudC5tbQogVUlQcm9jZXNzL0NvY29hL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lm1tCiBVSVBy
b2Nlc3MvQ29jb2EvRG93bmxvYWRDbGllbnQubW0KK1VJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFBy
b3h5TWFwQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2NvYS9GaW5kQ2xpZW50Lm1tCiBVSVByb2Nlc3Mv
Q29jb2EvRnVsbHNjcmVlbkNsaWVudC5tbQogVUlQcm9jZXNzL0NvY29hL0dsb2JhbEZpbmRJblBh
Z2VTdGF0ZS5tbQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYx
LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcgogCiAgICAgZm9y
IChhdXRvJiBzY2hlbWUgOiBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNDYW5EaXNw
bGF5T25seUlmQ2FuUmVxdWVzdCkKICAgICAgICAgcmVnaXN0ZXJVUkxTY2hlbWVBc0NhbkRpc3Bs
YXlPbmx5SWZDYW5SZXF1ZXN0KHNjaGVtZSk7CisgICAgCisgICAgbV9kb3dubG9hZE1vbml0b3JT
cGVlZE11bHRpcGxpZXIgPSBwYXJhbWV0ZXJzLmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGll
cjsKIAogICAgIFJFTEVBU0VfTE9HKFByb2Nlc3MsICIlcCAtIE5ldHdvcmtQcm9jZXNzOjppbml0
aWFsaXplTmV0d29ya1Byb2Nlc3M6IFByZXNlbnRpbmcgcHJvY2VzcyA9ICVkIiwgdGhpcywgV2Vi
Q29yZTo6cHJlc2VudGluZ0FwcGxpY2F0aW9uUElEKCkpOwogfQpAQCAtMTk1NSw2ICsxOTU3LDE2
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNhbmNlbFByZXBhcmVUb1N1c3AKICAgICAgICAgY29u
bmVjdGlvbi0+ZW5kU3VzcGVuc2lvbigpOwogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNzOjphcHBs
aWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCit7CisgICAgbV9kb3dubG9hZE1hbmFnZXIuYXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6
YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKK3sKKyAgICBtX2Rvd25sb2FkTWFuYWdl
ci5hcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKTsKK30KKwogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cHJvY2Vzc0RpZFJlc3VtZSgpCiB7CiAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3Bl
bnNpb24sICIlcCAtIE5ldHdvcmtQcm9jZXNzOjpwcm9jZXNzRGlkUmVzdW1lKCkiLCB0aGlzKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJ
KHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDYgKzM2Niw3IEBAIHByaXZhdGU6CiAg
ICAgSVBDOjpDb25uZWN0aW9uKiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbkZvckRvd25sb2Fkcygp
IG92ZXJyaWRlIHsgcmV0dXJuIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCk7IH0KICAgICBBdXRo
ZW50aWNhdGlvbk1hbmFnZXImIGRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpIG92ZXJy
aWRlOwogICAgIHZvaWQgcGVuZGluZ0Rvd25sb2FkQ2FuY2VsZWQoRG93bmxvYWRJRCkgb3ZlcnJp
ZGU7CisgICAgdWludDMyX3QgZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9kb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXI7IH0KIAog
ICAgIC8vIE1lc3NhZ2UgSGFuZGxlcnMKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTmV0d29ya1By
b2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+Jik7CkBAIC0zOTEsNiArMzkyLDggQEAgcHJpdmF0ZToKICNlbmRp
ZgogICAgIHZvaWQgY29udGludWVXaWxsU2VuZFJlcXVlc3QoRG93bmxvYWRJRCwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYpOwogICAgIHZvaWQgY29udGludWVEZWNpZGVQZW5kaW5nRG93bmxv
YWREZXN0aW5hdGlvbihEb3dubG9hZElELCBTdHJpbmcgZGVzdGluYXRpb24sIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYmLCBib29sIGFsbG93T3ZlcndyaXRlKTsKKyAgICB2b2lkIGFwcGxpY2F0
aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckZv
cmVncm91bmQoKTsKIAogICAgIHZvaWQgc2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsKTsKICAgICB2
b2lkIGFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8mLCBjb25zdCBTdHJpbmcmIGhvc3QpOwpAQCAtNTMyLDYgKzUzNSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1hbmFnZXJzUGVyT3JpZ2lu
OwogICAgIH07CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdl
cnM+IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnM7CisgICAgdWludDMyX3QgbV9kb3dubG9hZE1vbml0
b3JTcGVlZE11bHRpcGxpZXIgeyAxIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
NTIsNiArNTIsOCBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUHVibGlzaERvd25sb2FkUHJvZ3Jlc3MoV2ViS2l0OjpE
b3dubG9hZElEIGRvd25sb2FkSUQsIFVSTCB1cmwsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCiAjZW5kaWYKKyAgICBBcHBsaWNhdGlvbkRp
ZEVudGVyQmFja2dyb3VuZCgpCisgICAgQXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkK
IAogICAgIENvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9h
ZElELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCkKICAgICBDb250aW51ZURlY2lk
ZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9hZElE
LCBTdHJpbmcgZGVzdGluYXRpb24sIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNh
bmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxsb3dPdmVyd3JpdGUpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlIDw8IHVybFNjaGVtZXNTZXJ2aWNlV29ya2Vyc0NhbkhhbmRsZSA8PCBzaG91bGREaXNh
YmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5OwogI2VuZGlmCiAgICAgZW5j
b2RlciA8PCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZTsKKyAgICBlbmNvZGVyIDw8IGRvd25sb2Fk
TW9uaXRvclNwZWVkTXVsdGlwbGllcjsKIH0KIAogYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMmIHJlc3VsdCkKQEAgLTIyMSw2ICsyMjIsMTIgQEAgYm9vbCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LnNob3VsZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjsK
KyAgICBkZWNvZGVyID4+IGRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjsKKyAgICBpZiAo
IWRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJlc3VsdC5kb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgPSAqZG93bmxvYWRNb25p
dG9yU3BlZWRNdWx0aXBsaWVyOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMgCiAgICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclBy
b2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKICNlbmRpZgogICAgIGJvb2wgc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAgIHVpbnQzMl90IGRvd25sb2FkTW9uaXRv
clNwZWVkTXVsdGlwbGllciB7IDEgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkLmNwcAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bmNsdWRlICJEb3dubG9hZE1hbmFnZXIuaCIKKyNpbmNsdWRlICJEb3dubG9hZE1vbml0b3IuaCIK
ICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCkBAIC0xMTQsNiArMTE1LDggQEAgdm9pZCBE
b3dubG9hZDo6ZGlkUmVjZWl2ZURhdGEodWludDY0X3QgbAogICAgICAgICBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKCJkaWRSZWNlaXZlRGF0YTogU3RhcnRlZCByZWNlaXZpbmcgZGF0YSAoaWQgPSAl
IiBQUkl1NjQgIikiLCBkb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKICAgICAgICAgbV9oYXNS
ZWNlaXZlZERhdGEgPSB0cnVlOwogICAgIH0KKyAgICAKKyAgICBtX21vbml0b3IuZG93bmxvYWRS
ZWNlaXZlZEJ5dGVzKGxlbmd0aCk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5
OjpEaWRSZWNlaXZlRGF0YShsZW5ndGgpKTsKIH0KQEAgLTEyOSw3ICsxMzIsNyBAQCB2b2lkIERv
d25sb2FkOjpkaWRGaW5pc2goKQogICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSBudWxscHRy
OwogICAgIH0KIAotICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQodGhpcyk7
CisgICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKIHZv
aWQgRG93bmxvYWQ6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IsIGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKQEAgLTE0Myw3ICsxNDYsNyBAQCB2b2lkIERv
d25sb2FkOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyCiAgICAgICAgIG1fc2FuZGJveEV4dGVu
c2lvbi0+cmV2b2tlKCk7CiAgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbiA9IG51bGxwdHI7CiAg
ICAgfQotICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQodGhpcyk7CisgICAg
bV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKIHZvaWQgRG93
bmxvYWQ6OmRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCkBA
IC0xNTYsNyArMTU5LDcgQEAgdm9pZCBEb3dubG9hZDo6ZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0
YQogICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwogICAgICAgICBtX3NhbmRi
b3hFeHRlbnNpb24gPSBudWxscHRyOwogICAgIH0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3du
bG9hZEZpbmlzaGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNo
ZWQoKnRoaXMpOwogfQogCiBJUEM6OkNvbm5lY3Rpb24qIERvd25sb2FkOjptZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKICNpbmNsdWRlICJE
b3dubG9hZE1hbmFnZXIuaCIKKyNpbmNsdWRlICJEb3dubG9hZE1vbml0b3IuaCIKICNpbmNsdWRl
ICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCiAjaW5jbHVk
ZSAiU2FuZGJveEV4dGVuc2lvbi5oIgpAQCAtNTgsNiArNTksNyBAQCBjbGFzcyBSZXNvdXJjZVJl
c3BvbnNlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgRG93bmxvYWRNb25pdG9yOwog
Y2xhc3MgTmV0d29ya0RhdGFUYXNrOwogY2xhc3MgTmV0d29ya1Nlc3Npb247CiBjbGFzcyBXZWJQ
YWdlOwpAQCAtODksNiArOTEsMTIgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmFpbChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVE
YXRhKTsKICAgICB2b2lkIGRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3Vt
ZURhdGEpOwogCisgICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKKwor
ICAgIHZvaWQgYXBwbGljYXRpb25FbnRlcmVkQmFja2dyb3VuZCgpIHsgbV9tb25pdG9yLmFwcGxp
Y2F0aW9uRW50ZXJlZEJhY2tncm91bmQoKTsgfQorICAgIHZvaWQgYXBwbGljYXRpb25FbnRlcmVk
Rm9yZWdyb3VuZCgpIHsgbV9tb25pdG9yLmFwcGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQoKTsg
fQorICAgIERvd25sb2FkTWFuYWdlciYgbWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fZG93bmxv
YWRNYW5hZ2VyOyB9CisKIHByaXZhdGU6CiAgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyCiAgICAg
SVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRl
OwpAQCAtOTcsOCArMTA1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtQ2FuY2VsTmV0
d29ya0xvYWQoKTsKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveURvd25sb2FkKCk7CiAKLSAgICBi
b29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwotCiAgICAgRG93bmxvYWRNYW5h
Z2VyJiBtX2Rvd25sb2FkTWFuYWdlcjsKICAgICBEb3dubG9hZElEIG1fZG93bmxvYWRJRDsKICAg
ICBSZWY8RG93bmxvYWRNYW5hZ2VyOjpDbGllbnQ+IG1fY2xpZW50OwpAQCAtMTE0LDYgKzEyMCw3
IEBAIHByaXZhdGU6CiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAgICAgU3RyaW5n
IG1fc3VnZ2VzdGVkTmFtZTsKICAgICBib29sIG1faGFzUmVjZWl2ZWREYXRhIHsgZmFsc2UgfTsK
KyAgICBEb3dubG9hZE1vbml0b3IgbV9tb25pdG9yIHsgKnRoaXMgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNDMwNzgp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTEgKzE2OSwxMCBAQCB2b2lkIERvd25sb2Fk
TWFuYWdlcjo6cHVibGlzaERvd25sb2FkUHJvCiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0Ep
CiAKLXZvaWQgRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkKiBkb3du
bG9hZCkKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkJiBk
b3dubG9hZCkKIHsKLSAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWQtPmRv
d25sb2FkSUQoKSkpOwotICAgIG1fZG93bmxvYWRzLnJlbW92ZShkb3dubG9hZC0+ZG93bmxvYWRJ
RCgpKTsKLSAgICAKKyAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWQuZG93
bmxvYWRJRCgpKSk7CisgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2FkLmRvd25sb2FkSUQo
KSk7CiB9CiAKIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjpkaWRDcmVhdGVEb3dubG9hZCgpCkBAIC0x
OTYsNCArMTk1LDE2IEBAIEF1dGhlbnRpY2F0aW9uTWFuYWdlciYgRG93bmxvYWRNYW5hZ2VyOjoK
ICAgICByZXR1cm4gbV9jbGllbnQuZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCk7CiB9
CiAKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgp
Cit7CisgICAgZm9yIChhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVlcygpKQorICAg
ICAgICBkb3dubG9hZC0+YXBwbGljYXRpb25FbnRlcmVkQmFja2dyb3VuZCgpOworfQorCit2b2lk
IERvd25sb2FkTWFuYWdlcjo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKK3sKKyAg
ICBmb3IgKGF1dG8mIGRvd25sb2FkIDogbV9kb3dubG9hZHMudmFsdWVzKCkpCisgICAgICAgIGRv
d25sb2FkLT5hcHBsaWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBO
ZXR3b3JrQmxvYlJlZ2lzdHJ5JiBuZXR3b3JrQmxvYlJlZ2lzdHJ5KCkgPSAwOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVmKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYo
KSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdWludDMyX3QgZG93bmxvYWRNb25pdG9yU3Bl
ZWRNdWx0aXBsaWVyKCkgY29uc3QgPSAwOwogICAgIH07CiAKICAgICBleHBsaWNpdCBEb3dubG9h
ZE1hbmFnZXIoQ2xpZW50Jik7CkBAIC05OCwxMCArOTksMTMgQEAgcHVibGljOgogICAgIAogICAg
IERvd25sb2FkKiBkb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQpIHsgcmV0dXJuIG1fZG93
bmxvYWRzLmdldChkb3dubG9hZElEKTsgfQogCi0gICAgdm9pZCBkb3dubG9hZEZpbmlzaGVkKERv
d25sb2FkKik7CisgICAgdm9pZCBkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkJik7CiAgICAgYm9v
bCBpc0Rvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gIW1fZG93bmxvYWRzLmlzRW1wdHkoKTsg
fQogICAgIHVpbnQ2NF90IGFjdGl2ZURvd25sb2FkQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Rv
d25sb2Fkcy5zaXplKCk7IH0KIAorICAgIHZvaWQgYXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91
bmQoKTsKKyAgICB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpOworCiAgICAg
dm9pZCBkaWRDcmVhdGVEb3dubG9hZCgpOwogICAgIHZvaWQgZGlkRGVzdHJveURvd25sb2FkKCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hcC5jcHAJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzUsNiArNzUsMTEgQEAgYm9vbCBEb3dubG9hZE1hcDo6cmVtb3ZlKERvd25sb2FkSUQgZG93
bgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2F1dG8gRG93bmxvYWRNYXA6OnZhbHVlcygpIC0+
IERvd25sb2FkTWFwVHlwZTo6VmFsdWVzSXRlcmF0b3JSYW5nZQoreworICAgIHJldHVybiBtX2Rv
d25sb2Fkcy52YWx1ZXMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAv
LyBFTkFCTEUoVEFLRV9VTkJPVU5ERURfTkVUV09SS0lOR19BU1NFUlRJT04pCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFw
LmgJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAgcHVi
bGljOgogICAgIERvd25sb2FkTWFwVHlwZTo6QWRkUmVzdWx0IGFkZChEb3dubG9hZElELCBzdGQ6
OnVuaXF1ZV9wdHI8RG93bmxvYWQ+JiYpOwogICAgIGJvb2wgcmVtb3ZlKERvd25sb2FkSUQpOwog
CisgICAgRG93bmxvYWRNYXBUeXBlOjpWYWx1ZXNJdGVyYXRvclJhbmdlIHZhbHVlcygpOworCiBw
cml2YXRlOgogICAgIERvd25sb2FkTWFwVHlwZSBtX2Rvd25sb2FkczsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UHJvY2Vzc0Fzc2VydGlvbj4gbV9kb3dubG9hZEFzc2VydGlvbjsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTW9uaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNb25pdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRv
d25sb2FkTW9uaXRvci5oIgorCisjaW5jbHVkZSAiRG93bmxvYWQuaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisKKyN1bmRlZiBSRUxFQVNFX0xPR19JRl9BTExPV0VECisjZGVmaW5lIFJFTEVBU0Vf
TE9HX0lGX0FMTE9XRUQoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKG1fZG93bmxvYWQuaXNBbHdh
eXNPbkxvZ2dpbmdBbGxvd2VkKCksIE5ldHdvcmssICIlcCAtIERvd25sb2FkTW9uaXRvcjo6IiBm
bXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdGV4
cHIgdWludDY0X3Qgb3BlcmF0b3IiIiBfa2Jwcyh1bnNpZ25lZCBsb25nIGxvbmcga2lsb2J5dGVz
UGVyU2Vjb25kKQoreworICAgIHJldHVybiBraWxvYnl0ZXNQZXJTZWNvbmQgKiAxMDI0OworfQor
CitzdHJ1Y3QgVGhyb3VnaHB1dEludGVydmFsIHsKKyAgICBTZWNvbmRzIHRpbWU7CisgICAgdWlu
dDY0X3QgYnl0ZXNQZXJTZWNvbmQ7Cit9OworCitzdGF0aWMgY29uc3QgVGhyb3VnaHB1dEludGVy
dmFsIHRocm91Z2hwdXRJbnRlcnZhbHNbXSA9IHsKKyAgICB7IDFfbWluLCAxX2ticHMgfSwKKyAg
ICB7IDVfbWluLCAyX2ticHMgfSwKKyAgICB7IDEwX21pbiwgNF9rYnBzIH0sCisgICAgeyAxNV9t
aW4sIDhfa2JwcyB9LAorICAgIHsgMjBfbWluLCAxNl9rYnBzIH0sCisgICAgeyAyNV9taW4sIDMy
X2ticHMgfSwKKyAgICB7IDMwX21pbiwgNjRfa2JwcyB9LAorICAgIHsgNDVfbWluLCA5Nl9rYnBz
IH0sCisgICAgeyA2MF9taW4sIDEyOF9rYnBzIH0KK307CisKK3N0YXRpYyBTZWNvbmRzIHRpbWVV
bnRpbE5leHRJbnRlcnZhbChzaXplX3QgY3VycmVudEludGVydmFsKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGN1cnJlbnRJbnRlcnZhbCArIDEgPCBXVEZfQVJSQVlfTEVOR1RIKHRocm91Z2hwdXRJ
bnRlcnZhbHMpKTsKKyAgICByZXR1cm4gdGhyb3VnaHB1dEludGVydmFsc1tjdXJyZW50SW50ZXJ2
YWwgKyAxXS50aW1lIC0gdGhyb3VnaHB1dEludGVydmFsc1tjdXJyZW50SW50ZXJ2YWxdLnRpbWU7
Cit9CisKK0Rvd25sb2FkTW9uaXRvcjo6RG93bmxvYWRNb25pdG9yKERvd25sb2FkJiBkb3dubG9h
ZCkKKyAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCit7Cit9CisKK2RvdWJsZSBEb3dubG9hZE1v
bml0b3I6Om1lYXN1cmVkVGhyb3VnaHB1dFJhdGUoKSBjb25zdAoreworICAgIHVpbnQ2NF90IGJ5
dGVzIHsgMCB9OworICAgIGZvciAoY29uc3QgYXV0byYgdGltZXN0YW1wIDogbV90aW1lc3RhbXBz
KQorICAgICAgICBieXRlcyArPSB0aW1lc3RhbXAuYnl0ZXNSZWNlaXZlZDsKKyAgICBpZiAoIWJ5
dGVzKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoIW1fdGltZXN0YW1wcy5pc0VtcHR5
KCkpOworICAgIFNlY29uZHMgdGltZURpZmZlcmVuY2UgPSBtX3RpbWVzdGFtcHMubGFzdCgpLnRp
bWUuc2Vjb25kc1NpbmNlRXBvY2goKSAtIG1fdGltZXN0YW1wcy5maXJzdCgpLnRpbWUuc2Vjb25k
c1NpbmNlRXBvY2goKTsKKyAgICBkb3VibGUgc2Vjb25kcyA9IHRpbWVEaWZmZXJlbmNlLnNlY29u
ZHMoKTsKKyAgICBpZiAoIXNlY29uZHMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46Om1heCgpOworICAgIHJldHVybiBieXRlcyAvIHNlY29uZHM7Cit9CisKK3Zv
aWQgRG93bmxvYWRNb25pdG9yOjpkb3dubG9hZFJlY2VpdmVkQnl0ZXModWludDY0X3QgYnl0ZXNS
ZWNlaXZlZCkKK3sKKyAgICBpZiAobV90aW1lc3RhbXBzLnNpemUoKSA+IHRpbWVzdGFtcENhcGFj
aXR5IC0gMSkgeworICAgICAgICBBU1NFUlQobV90aW1lc3RhbXBzLnNpemUoKSA9PSB0aW1lc3Rh
bXBDYXBhY2l0eSk7CisgICAgICAgIG1fdGltZXN0YW1wcy5yZW1vdmVGaXJzdCgpOworICAgIH0K
KyAgICBtX3RpbWVzdGFtcHMuYXBwZW5kKHsgTW9ub3RvbmljVGltZTo6bm93KCksIGJ5dGVzUmVj
ZWl2ZWQgfSk7Cit9CisKK3ZvaWQgRG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRG
b3JlZ3JvdW5kKCkKK3sKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJhcHBsaWNhdGlvbkVu
dGVyZWRGb3JlZ3JvdW5kIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93bmxvYWRJ
RCgpLmRvd25sb2FkSUQoKSk7CisgICAgbV90aW1lci5zdG9wKCk7CisgICAgbV9pbnRlcnZhbCA9
IDA7Cit9CisKK3ZvaWQgRG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3Jv
dW5kKCkKK3sKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJhcHBsaWNhdGlvbkVudGVyZWRC
YWNrZ3JvdW5kIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93bmxvYWRJRCgpLmRv
d25sb2FkSUQoKSk7CisgICAgQVNTRVJUKCFtX3RpbWVyLmlzQWN0aXZlKCkpOworICAgIEFTU0VS
VCghbV9pbnRlcnZhbCk7CisgICAgbV90aW1lci5zdGFydE9uZVNob3QodGhyb3VnaHB1dEludGVy
dmFsc1swXS50aW1lIC8gc3BlZWRNdWx0aXBsaWVyKCkpOworfQorCit1aW50MzJfdCBEb3dubG9h
ZE1vbml0b3I6OnNwZWVkTXVsdGlwbGllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZG93bmxv
YWQubWFuYWdlcigpLmNsaWVudCgpLmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcigpOwor
fQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6dGltZXJGaXJlZCgpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQobV9pbnRlcnZhbCA8IFdURl9BUlJBWV9MRU5HVEgodGhyb3VnaHB1dEludGVydmFscykp
OworICAgIGlmIChtZWFzdXJlZFRocm91Z2hwdXRSYXRlKCkgPCB0aHJvdWdocHV0SW50ZXJ2YWxz
W21faW50ZXJ2YWxdLmJ5dGVzUGVyU2Vjb25kKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FM
TE9XRUQoInRpbWVyRmlyZWQ6IGNhbmNlbGxpbmcgZG93bmxvYWQgKGlkID0gJSIgUFJJdTY0ICIp
IiwgbV9kb3dubG9hZC5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9kb3du
bG9hZC5jYW5jZWwoKTsKKyAgICB9IGVsc2UgaWYgKG1faW50ZXJ2YWwgKyAxIDwgV1RGX0FSUkFZ
X0xFTkdUSCh0aHJvdWdocHV0SW50ZXJ2YWxzKSkgeworICAgICAgICBSRUxFQVNFX0xPR19JRl9B
TExPV0VEKCJ0aW1lckZpcmVkOiBzdWZmaWNpZW50IHRocm91Z2hwdXQgcmF0ZSAoaWQgPSAlIiBQ
Ukl1NjQgIikiLCBtX2Rvd25sb2FkLmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAg
ICBtX3RpbWVyLnN0YXJ0T25lU2hvdCh0aW1lVW50aWxOZXh0SW50ZXJ2YWwobV9pbnRlcnZhbCsr
KSAvIHNwZWVkTXVsdGlwbGllcigpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9MT0df
SUZfQUxMT1dFRCgidGltZXJGaXJlZDogRG93bmxvYWQgcmVhY2hlZCB0aHJlc2hvbGQgdG8gbm90
IGJlIHRlcm1pbmF0ZWQgKGlkID0gJSIgUFJJdTY0ICIpIiwgbV9kb3dubG9hZC5kb3dubG9hZElE
KCkuZG93bmxvYWRJRCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1vbml0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVy
Lmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBEb3dubG9hZDsKKworY2xhc3MgRG93bmxvYWRNb25pdG9yIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEb3dubG9hZE1vbml0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBEb3dubG9hZE1vbml0b3IoRG93bmxvYWQmKTsKKyAgICAKKyAgICB2b2lkIGFwcGxp
Y2F0aW9uRW50ZXJlZEJhY2tncm91bmQoKTsKKyAgICB2b2lkIGFwcGxpY2F0aW9uRW50ZXJlZEZv
cmVncm91bmQoKTsKKyAgICB2b2lkIGRvd25sb2FkUmVjZWl2ZWRCeXRlcyh1aW50NjRfdCk7Cisg
ICAgdm9pZCB0aW1lckZpcmVkKCk7CisKK3ByaXZhdGU6CisgICAgRG93bmxvYWQmIG1fZG93bmxv
YWQ7CisKKyAgICBkb3VibGUgbWVhc3VyZWRUaHJvdWdocHV0UmF0ZSgpIGNvbnN0OworICAgIHVp
bnQzMl90IHNwZWVkTXVsdGlwbGllcigpIGNvbnN0OworICAgIAorICAgIHN0cnVjdCBUaW1lc3Rh
bXAgeworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWU7CisgICAgICAgIHVpbnQ2NF90IGJ5dGVz
UmVjZWl2ZWQ7CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCB0aW1lc3RhbXBD
YXBhY2l0eSA9IDEwOworICAgIERlcXVlPFRpbWVzdGFtcCwgdGltZXN0YW1wQ2FwYWNpdHk+IG1f
dGltZXN0YW1wczsKKyAgICBXZWJDb3JlOjpUaW1lciBtX3RpbWVyIHsgKnRoaXMsICZEb3dubG9h
ZE1vbml0b3I6OnRpbWVyRmlyZWQgfTsKKyAgICBzaXplX3QgbV9pbnRlcnZhbCB7IDAgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmNwcAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGNhY2hlc09yaWdpbkZpbGVuYW0KICAgICBy
ZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlc1Jvb3RQYXRo
LCAib3JpZ2luIl9zKTsKIH0KIAotQ2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgsIFN0b3JhZ2VRdW90
YU1hbmFnZXImIHF1b3RhTWFuYWdlcikKK0NhY2hlczo6Q2FjaGVzKEVuZ2luZSYgZW5naW5lLCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFnZXIpCiAgICAgOiBtX2VuZ2luZSgmZW5n
aW5lKQogICAgICwgbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICwgbV9yb290UGF0aChX
VEZNb3ZlKHJvb3RQYXRoKSkKQEAgLTUwMCwxMCArNTAwLDEwIEBAIHZvaWQgQ2FjaGVzOjpyZXF1
ZXN0U3BhY2UodWludDY0X3Qgc3BhY2UKIAogICAgIG1fcXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3Bh
Y2Uoc3BhY2VSZXF1aXJlZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZGVj
aXNpb24pIHsKICAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgewotICAgICAgICBjYXNlIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OgorICAgICAgICBjYXNlIFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OgogICAgICAgICAgICAgY2FsbGJhY2so
RXJyb3I6OlF1b3RhRXhjZWVkZWQpOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNl
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6CiAgICAgICAgICAgICBj
YWxsYmFjayh7IH0pOwogICAgICAgICB9OwogICAgIH0pOwpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOwogdXNpbmcgbmFtZXNwYWNlIENhY2hl
U3RvcmFnZTsKIAorI3VuZGVmIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQKICNkZWZpbmUgUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRChmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3
YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBDYWNoZVN0b3JhZ2UsICIlcCAtIENhY2hlU3RvcmFnZUVu
Z2luZUNvbm5lY3Rpb246OiIgZm10LCAmbV9jb25uZWN0aW9uLmNvbm5lY3Rpb24oKSwgIyNfX1ZB
X0FSR1NfXykKICNkZWZpbmUgUkVMRUFTRV9MT0dfRlVOQ1RJT05fSUZfQUxMT1dFRF9JTl9DQUxM
QkFDSyhmdW5jdGlvbk5hbWUsIGZtdCwgcmVzdWx0R2V0dGVyKSBcCiAgICAgaWYgKCFyZXN1bHQu
aGFzX3ZhbHVlKCkpXApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2
aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkgeyB9OwogICAgIHZpcnR1YWwg
dm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JikgPSAwOwogCiAgICAgdmlydHVh
bCBib29sIGhhbmRsZVJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5Kiwg
QVBJOjpPcGVuUGFuZWxQYXJhbWV0ZXJzKiwgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94
eSopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIHNob3dTaGFyZVNoZWV0KGNv
bnN0IFdlYkNvcmU6OlNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmLCBXVEY6OkNvbXBsZXRpb25IYW5k
bGVyPHZvaWQgKGJvb2wpPiYmKSB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODM3
LDEzICsyODM3LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZFBvbGljeURlY2lzaW8K
ICAgICBEb3dubG9hZElEIGRvd25sb2FkSUQgPSB7IH07CiAgICAgaWYgKGFjdGlvbiA9PSBQb2xp
Y3lBY3Rpb246OkRvd25sb2FkKSB7CiAgICAgICAgIC8vIENyZWF0ZSBhIGRvd25sb2FkIHByb3h5
LgotICAgICAgICBhdXRvKiBkb3dubG9hZCA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5jcmVh
dGVEb3dubG9hZFByb3h5KG1fZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VSZXF1ZXN0LCB0aGlzKTsK
KyAgICAgICAgYXV0byYgZG93bmxvYWQgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuY3JlYXRl
RG93bmxvYWRQcm94eShtX2RlY2lkZVBvbGljeUZvclJlc3BvbnNlUmVxdWVzdCwgdGhpcyk7CiAg
ICAgICAgIGlmIChuYXZpZ2F0aW9uKSB7Ci0gICAgICAgICAgICBkb3dubG9hZC0+c2V0V2FzVXNl
ckluaXRpYXRlZChuYXZpZ2F0aW9uLT53YXNVc2VySW5pdGlhdGVkKCkpOwotICAgICAgICAgICAg
ZG93bmxvYWQtPnNldFJlZGlyZWN0Q2hhaW4obmF2aWdhdGlvbi0+dGFrZVJlZGlyZWN0Q2hhaW4o
KSk7CisgICAgICAgICAgICBkb3dubG9hZC5zZXRXYXNVc2VySW5pdGlhdGVkKG5hdmlnYXRpb24t
Pndhc1VzZXJJbml0aWF0ZWQoKSk7CisgICAgICAgICAgICBkb3dubG9hZC5zZXRSZWRpcmVjdENo
YWluKG5hdmlnYXRpb24tPnRha2VSZWRpcmVjdENoYWluKCkpOwogICAgICAgICB9CiAKLSAgICAg
ICAgZG93bmxvYWRJRCA9IGRvd25sb2FkLT5kb3dubG9hZElEKCk7CisgICAgICAgIGRvd25sb2Fk
SUQgPSBkb3dubG9hZC5kb3dubG9hZElEKCk7CiAgICAgICAgIGhhbmRsZURvd25sb2FkUmVxdWVz
dChkb3dubG9hZCk7CiAgICAgICAgIG1fZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VSZXF1ZXN0ID0g
eyB9OwogICAgIH0KQEAgLTU0MzAsNyArNTQzMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRN
YXlTdGFydE1lZGlhV2hlbkkKICAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2V0TWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdyhtYXlTdGFydE1lZGlhKSwgbV9wYWdlSUQpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJv
eHkqIGRvd25sb2FkKQordm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdChE
b3dubG9hZFByb3h5JiBkb3dubG9hZCkKIHsKICAgICBwYWdlQ2xpZW50KCkuaGFuZGxlRG93bmxv
YWRSZXF1ZXN0KGRvd25sb2FkKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwMSw3ICsxMTAxLDcgQEAgcHVibGlj
OgogCiAgICAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvblBhcmFtZXRlcnMoV2Vi
UHJvY2Vzc1Byb3h5JiwgRHJhd2luZ0FyZWFQcm94eSYpOwogCi0gICAgdm9pZCBoYW5kbGVEb3du
bG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOworICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1
ZXN0KERvd25sb2FkUHJveHkmKTsKIAogICAgIHZvaWQgYWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5n
KGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pOwogICAgIHZvaWQgY2hhbmdlU3BlbGxpbmdUb1dv
cmQoY29uc3QgU3RyaW5nJiB3b3JkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxNiw5ICsxMzE2
LDkgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzUGFnZXNVc2luZ1dlYnNpdAogICAgIHJldHVy
biBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuY29udGFpbnMoZGF0YVN0b3JlLnNlc3Npb25JRCgpKTsK
IH0KIAotRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYlBhZ2VQcm94
eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK0Rvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29s
Ojpkb3dubG9hZChXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7Ci0gICAg
YXV0byogZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkocmVxdWVzdCwgaW5pdGlh
dGluZ1BhZ2UpOworICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5
KHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlKTsKICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQg
PSBpbml0aWF0aW5nUGFnZSA/IGluaXRpYXRpbmdQYWdlLT5zZXNzaW9uSUQoKSA6IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CiAKICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpCkBA
IC0xMzQxLDE2ICsxMzQxLDE2IEBAIERvd25sb2FkUHJveHkqIFdlYlByb2Nlc3NQb29sOjpkb3du
bG9hZCgKICAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdl
YlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgICAgIH0KICAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9u
SUQsIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIHN1Z2dlc3Rl
ZEZpbGVuYW1lKSwgMCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5
LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAg
ICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogICAgIH0KIAogICAgIHJldHVybiBkb3dubG9h
ZFByb3h5OwogfQogCi1Eb3dubG9hZFByb3h5KiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93bmxv
YWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhKiByZXN1bWVE
YXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCitEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6
cmVzdW1lRG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpE
YXRhKiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgYXV0byogZG93bmxv
YWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoUmVzb3VyY2VSZXF1ZXN0KCksIGluaXRpYXRp
bmdQYWdlKTsKKyAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShS
ZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2UpOwogICAgIFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCA9IGluaXRpYXRpbmdQYWdlID8gaW5pdGlhdGluZ1BhZ2UtPnNlc3Npb25JRCgpIDog
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwpAQCAtMTM1OCw3ICsxMzU4LDcgQEAg
RG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvdwogICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAogICAgIGlmIChuZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHktPmRvd25sb2Fk
SUQoKSwgcmVzdW1lRGF0YS0+ZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKSwgMCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93
bmxvYWRJRCgpLCByZXN1bWVEYXRhLT5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRl
bnNpb25IYW5kbGUpLCAwKTsKICAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiAgICAgfQog
CkBAIC0xNjA5LDEzICsxNjA5LDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRS
ZXF1ZXN0VGkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNl
dERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKHRpbWVvdXRJbnRlcnZhbCkpOwogfQogCi1E
b3dubG9hZFByb3h5KiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQor
RG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkK
IHsKLSAgICBhdXRvIGRvd25sb2FkUHJveHkgPSBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNyZWF0
ZURvd25sb2FkUHJveHkocmVxdWVzdCk7Ci0gICAgZG93bmxvYWRQcm94eS0+c2V0T3JpZ2luYXRp
bmdQYWdlKG9yaWdpbmF0aW5nUGFnZSk7CisgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0KTsKKyAgICBkb3du
bG9hZFByb3h5LnNldE9yaWdpbmF0aW5nUGFnZShvcmlnaW5hdGluZ1BhZ2UpOwogICAgIHJldHVy
biBkb3dubG9hZFByb3h5OwogfQogCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKK3sKKyAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNz
YWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQog
ewogICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihtZXNzYWdlUmVj
ZWl2ZXJOYW1lLCBtZXNzYWdlUmVjZWl2ZXIpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5oCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsOCArMTk0LDgg
QEAgcHVibGljOgogCiAgICAgY29uc3QgU3RyaW5nJiBpbmplY3RlZEJ1bmRsZVBhdGgoKSBjb25z
dCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmluamVjdGVkQnVuZGxlUGF0aCgpOyB9CiAKLSAg
ICBEb3dubG9hZFByb3h5KiBkb3dubG9hZChXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVuYW1lID0geyB9KTsKLSAgICBEb3dubG9hZFByb3h5KiByZXN1bWVEb3dubG9hZChXZWJQYWdl
UHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBBUEk6OkRhdGEqIHJlc3VtZURhdGEsIGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgRG93bmxvYWRQcm94eSYgZG93bmxvYWQoV2ViUGFnZVByb3h5
KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7CisgICAgRG93bmxvYWRQcm94eSYgcmVz
dW1lRG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRh
KiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAgICAgdm9pZCBzZXRJbmplY3Rl
ZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEoUmVmUHRyPEFQSTo6T2JqZWN0PiYmIHVzZXJE
YXRhKSB7IG1faW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhID0gV1RGTW92ZSh1
c2VyRGF0YSk7IH0KIApAQCAtMjY3LDcgKzI2Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVu
aGFuY2VkQWNjZXNzaWJpbGl0eShib29sKTsKICAgICAKICAgICAvLyBEb3dubG9hZHMuCi0gICAg
RG93bmxvYWRQcm94eSogY3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxvYWRQ
cm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CiAgICAgQVBJOjpEb3dubG9hZENsaWVu
dCYgZG93bmxvYWRDbGllbnQoKSB7IHJldHVybiAqbV9kb3dubG9hZENsaWVudDsgfQogCiAgICAg
QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJu
ICptX2hpc3RvcnlDbGllbnQ7IH0KQEAgLTQzMCw2ICs0MzAsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5
c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQogICAgIGJvb2wgc2hvdWxkVGFrZVVJQmFja2dy
b3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFz
c2VydGlvbjsgfQogCisgICAgdm9pZCBzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFj
a2dyb3VuZCk7CisgICAgCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgdm9pZCBnYW1lcGFkQ29u
bmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwogICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZChj
b25zdCBVSUdhbWVwYWQmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCShyZXZpc2lvbiAy
NDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw3IEBAIFJlZjxQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24+IFByb2Nlc3NQb28KICAgICBjb3B5LT5tX3Nob3VsZENhcHR1
cmVBdWRpb0luVUlQcm9jZXNzID0gdGhpcy0+bV9zaG91bGRDYXB0dXJlQXVkaW9JblVJUHJvY2Vz
czsKICAgICBjb3B5LT5tX3Nob3VsZENhcHR1cmVEaXNwbGF5SW5VSVByb2Nlc3MgPSB0aGlzLT5t
X3Nob3VsZENhcHR1cmVEaXNwbGF5SW5VSVByb2Nlc3M7CiAgICAgY29weS0+bV9pc0pJVEVuYWJs
ZWQgPSB0aGlzLT5tX2lzSklURW5hYmxlZDsKKyAgICBjb3B5LT5tX2Rvd25sb2FkTW9uaXRvclNw
ZWVkTXVsdGlwbGllciA9IHRoaXMtPm1fZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyOwog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgY29weS0+bV9jdERhdGFDb25uZWN0aW9uU2Vy
dmljZVR5cGUgPSB0aGlzLT5tX2N0RGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZTsKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw2ICs1OSw5IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNTaW5nbGVXZWJQcm9j
ZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzU2luZ2xlV2ViUHJvY2VzczsgfQogICAgIHZvaWQg
c2V0VXNlc1NpbmdsZVdlYlByb2Nlc3MoYm9vbCBlbmFibGVkKSB7IG1fdXNlc1NpbmdsZVdlYlBy
b2Nlc3MgPSBlbmFibGVkOyB9CiAKKyAgICB1aW50MzJfdCBkb3dubG9hZE1vbml0b3JTcGVlZE11
bHRpcGxpZXIoKSBjb25zdCB7IHJldHVybiBtX2Rvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGll
cjsgfQorICAgIHZvaWQgc2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKHVpbnQzMl90
IG11bHRpcGxpZXIpIHsgbV9kb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgPSBtdWx0aXBs
aWVyOyB9CisgICAgCiAgICAgYm9vbCBpc0F1dG9tYXRpY1Byb2Nlc3NXYXJtaW5nRW5hYmxlZCgp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9pc0F1dG9tYXRpY1Byb2Nlc3NXYXJtaW5n
RW5hYmxlZEJ5Q2xpZW50LnZhbHVlT3IobV9jbGllbnRXb3VsZEJlbmVmaXRGcm9tQXV0b21hdGlj
UHJvY2Vzc1ByZXdhcm1pbmcpOwpAQCAtMjI4LDYgKzIzMSw3IEBAIHByaXZhdGU6CiAgICAgV1RG
OjpTdHJpbmcgbV9jdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXI7CiAgICAg
Ym9vbCBtX2lzSklURW5hYmxlZCB7IHRydWUgfTsKICAgICBib29sIG1fdXNlc1NpbmdsZVdlYlBy
b2Nlc3MgeyBmYWxzZSB9OworICAgIHVpbnQzMl90IG1fZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyIHsgMSB9OwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXVEY6OlN0cmlu
ZyBtX2N0RGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc1LDEyICsyNzUsMTIgQEAgdm9pZCBXS0NvbnRleHRTZXRDb25uZWN0aW9uQ2xpZW50KFdLQ29u
dAogCiBXS0Rvd25sb2FkUmVmIFdLQ29udGV4dERvd25sb2FkVVJMUmVxdWVzdChXS0NvbnRleHRS
ZWYgY29udGV4dFJlZiwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3RSZWYpCiB7Ci0gICAgcmV0dXJu
IFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmRvd25sb2FkKDAsIFdl
YktpdDo6dG9JbXBsKHJlcXVlc3RSZWYpLT5yZXNvdXJjZVJlcXVlc3QoKSkpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+ZG93bmxvYWQoMCwg
V2ViS2l0Ojp0b0ltcGwocmVxdWVzdFJlZiktPnJlc291cmNlUmVxdWVzdCgpKSk7CiB9CiAKIFdL
RG93bmxvYWRSZWYgV0tDb250ZXh0UmVzdW1lRG93bmxvYWQoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIFdLRGF0YVJlZiByZXN1bWVEYXRhLCBXS1N0cmluZ1JlZiBwYXRoKQogewotICAgIHJldHVy
biBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5yZXN1bWVEb3dubG9h
ZChudWxscHRyLCBXZWJLaXQ6OnRvSW1wbChyZXN1bWVEYXRhKSwgV2ViS2l0Ojp0b1dURlN0cmlu
ZyhwYXRoKSkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjb250
ZXh0UmVmKS0+cmVzdW1lRG93bmxvYWQobnVsbHB0ciwgV2ViS2l0Ojp0b0ltcGwocmVzdW1lRGF0
YSksIFdlYktpdDo6dG9XVEZTdHJpbmcocGF0aCkpKTsKIH0KIAogdm9pZCBXS0NvbnRleHRTZXRJ
bml0aWFsaXphdGlvblVzZXJEYXRhRm9ySW5qZWN0ZWRCdW5kbGUoV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYsICBXS1R5cGVSZWYgdXNlckRhdGFSZWYpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQkocmV2aXNpb24gMjQzMDc4
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0J
KHdvcmtpbmcgY29weSkKQEAgLTU1OCw2ICs1NTgsMTEgQEAgLSAodm9pZClfc2V0U3RvcmFnZUFj
Y2Vzc0FQSUVuYWJsZWQ6KEJPTwogICAgIF9wcm9jZXNzUG9vbC0+c2V0U3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91
bmQ6KEJPT0wpYmFja2dyb3VuZAoreworICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElz
QmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKSBhbGxvd3MKIHsKICNpZiBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCkBAIC01ODIsNyArNTg3LDcgQEAgLSAodm9pZClfc2V0Q29yZUxvY2F0aW9u
UHJvdmlkZXI6KGlkPF9XSwogCiAtIChfV0tEb3dubG9hZCAqKV9kb3dubG9hZFVSTFJlcXVlc3Q6
KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Qgb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3CiB7Ci0gICAgcmV0dXJuIChfV0tEb3dubG9hZCAqKV9wcm9jZXNzUG9vbC0+ZG93bmxv
YWQoW3dlYlZpZXcgX3BhZ2VdLCByZXF1ZXN0KS0+d3JhcHBlcigpOworICAgIHJldHVybiAoX1dL
RG93bmxvYWQgKilfcHJvY2Vzc1Bvb2wtPmRvd25sb2FkKFt3ZWJWaWV3IF9wYWdlXSwgcmVxdWVz
dCkud3JhcHBlcigpOwogfQogCiAtIChfV0tEb3dubG9hZCAqKV9yZXN1bWVEb3dubG9hZEZyb21E
YXRhOihOU0RhdGEgKilyZXN1bWVEYXRhIHBhdGg6KE5TU3RyaW5nICopcGF0aCBvcmlnaW5hdGlu
Z1dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCShyZXZp
c2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDUgKzExOSw2IEBACiAKIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0Vu
YWJsZWQsIHNldHRlcj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09M
IF9jb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFy
dGl0aW9uZWQgY29va2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zeCgxMC4xMi4z
LCBXS19NQUNfVEJBKSwgaW9zKDEwLjMsIFdLX0lPU19UQkEpKTsKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBnZXR0ZXI9X2lzU3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQsIHNldHRlcj1fc2V0U3RvcmFn
ZUFjY2Vzc0FQSUVuYWJsZWQ6KSBCT09MIF9zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCBXS19BUElf
QVZBSUxBQkxFKG1hY29zeCgxMC4xMy40KSwgaW9zKDExLjMpKTsKKy0gKHZvaWQpX3N5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29z
eChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogQGVuZApJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTAp
LCBpb3MoOC4KIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHBhZ2VDYWNoZUVuYWJsZWQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTQpLCBpb3MoMTIuMCkpOwogQHByb3BlcnR5IChub25h
dG9taWMpIEJPT0wgc3VwcHJlc3Nlc0Nvbm5lY3Rpb25UZXJtaW5hdGlvbk9uU3lzdGVtQ2hhbmdl
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjE0KSwgaW9zKDEyLjApKTsKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBnZXR0ZXI9aXNKSVRFbmFibGVkKSBCT09MIEpJVEVuYWJsZWQgV0tfQVBJX0FW
QUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CitAcHJvcGVydHkg
KG5vbmF0b21pYykgTlNVSW50ZWdlciBkb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBl
bmQKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLm1tCShyZXZpc2lvbiAyNDMw
NzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNiArMzI0LDE2IEBAIC0gKHZv
aWQpc2V0SklURW5hYmxlZDooQk9PTCllbmFibGVkCiAgICAgX3Byb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi0+c2V0SklURW5hYmxlZChlbmFibGVkKTsKIH0KIAorLSAoTlNVSW50ZWdlcilkb3dubG9h
ZE1vbml0b3JTcGVlZE11bHRpcGxpZXIKK3sKKyAgICByZXR1cm4gX3Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi0+ZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKCk7Cit9CisKKy0gKHZvaWQp
c2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyOihOU1VJbnRlZ2VyKW11bHRpcGxpZXIK
K3sKKyAgICBfcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLT5zZXREb3dubG9hZE1vbml0b3JTcGVl
ZE11bHRpcGxpZXIobXVsdGlwbGllcik7Cit9CisKIC0gKHZvaWQpc2V0U3VwcHJlc3Nlc0Nvbm5l
Y3Rpb25UZXJtaW5hdGlvbk9uU3lzdGVtQ2hhbmdlOihCT09MKXN1cHByZXNzZXNDb25uZWN0aW9u
VGVybWluYXRpb25PblN5c3RlbUNoYW5nZQogewogICAgIF9wcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24tPnNldFN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5nZShzdXBw
cmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2UpOwpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5j
cHAJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdFdlYkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjM5LDcgKzE2MzksNyBA
QCBXZWJLaXREb3dubG9hZCogd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlCiBXZWJLaXREb3dubG9h
ZCogd2Via2l0V2ViQ29udGV4dFN0YXJ0RG93bmxvYWQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogdXJpLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlKQogewogICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFN0cmluZzo6ZnJvbVVURjgodXJpKSk7
Ci0gICAgcmV0dXJuIHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKGNvbnRleHQt
PnByaXYtPnByb2Nlc3NQb29sLT5kb3dubG9hZChpbml0aWF0aW5nUGFnZSwgcmVxdWVzdCkpOwor
ICAgIHJldHVybiB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCgmY29udGV4dC0+
cHJpdi0+cHJvY2Vzc1Bvb2wtPmRvd25sb2FkKGluaXRpYXRpbmdQYWdlLCByZXF1ZXN0KSk7CiB9
CiAKIHZvaWQgd2Via2l0V2ViQ29udGV4dFJlbW92ZURvd25sb2FkKERvd25sb2FkUHJveHkqIGRv
d25sb2FkUHJveHkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VD
bGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z3RrL1BhZ2VDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5OSwxMCArMjk5LDEwIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnN0YXJ0RHJhZyhSZWY8U2Vs
ZWMKIH0KICNlbmRpZgogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9hZFJlcXVl
c3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVE
b3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7CiAgICAgaWYgKFdFQktJ
VF9JU19XRUJfVklFVyhtX3ZpZXdXaWRnZXQpKQotICAgICAgICB3ZWJraXRXZWJWaWV3SGFuZGxl
RG93bmxvYWRSZXF1ZXN0KFdFQktJVF9XRUJfVklFVyhtX3ZpZXdXaWRnZXQpLCBkb3dubG9hZCk7
CisgICAgICAgIHdlYmtpdFdlYlZpZXdIYW5kbGVEb3dubG9hZFJlcXVlc3QoV0VCS0lUX1dFQl9W
SUVXKG1fdmlld1dpZGdldCksICZkb3dubG9hZCk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6
OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoY29uc3QgU3RyaW5nJiAvKiBtaW1lVHlwZSAqLywg
Ym9vbCAvKiB1c2VDdXN0b21Db250ZW50UHJvdmlkZXIgKi8gKQpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gMjQz
MDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJy
aWRlOwogCi0gICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopIG92
ZXJyaWRlOworICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSBv
dmVycmlkZTsKICAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCB1c2VDdXN0b21Db250ZW50UHJvdmlkZXIpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlkRmFpbExvYWRGb3JNYWluRnJhbWUoKSBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwu
Y3BwCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1BhZ2VDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDEwICsxMjQsOSBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpCiB7CiB9CiAKLXZvaWQgUGFn
ZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9h
ZCkKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFBy
b3h5JiBkb3dubG9hZCkKIHsKLSAgICBBU1NFUlQoZG93bmxvYWQpOwotICAgIG1fdmlldy5oYW5k
bGVEb3dubG9hZFJlcXVlc3QoKmRvd25sb2FkKTsKKyAgICBtX3ZpZXcuaGFuZGxlRG93bmxvYWRS
ZXF1ZXN0KGRvd25sb2FkKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlQ29u
dGVudFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAyNDMwNzgp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRvb2xUaXBD
aGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYsIGJvb2wpIG92ZXJyaWRl
OwotICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jikgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvRG93
bmxvYWRQcm94eU1hcENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL0Rvd25sb2FkUHJveHlNYXBDb2NvYS5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29jb2EubW0JKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiRG93bmxvYWRQcm94eU1hcC5oIgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3ZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1DcmVhdGUoKQoreworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgbV9iYWNrZ3JvdW5kT2JzZXJ2ZXIgPSBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyRm9yTmFtZTpVSUFwcGxpY2F0aW9u
RGlkRW50ZXJCYWNrZ3JvdW5kTm90aWZpY2F0aW9uIG9iamVjdDpbVUlBcHBsaWNhdGlvbiBzaGFy
ZWRBcHBsaWNhdGlvbl0gcXVldWU6bmlsIHVzaW5nQmxvY2s6bWFrZUJsb2NrUHRyKFt3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oTlNOb3RpZmljYXRpb24gKikgeworICAgICAgICBpZiAo
IXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3ZWFrVGhpcy0+YXBwbGlj
YXRpb25EaWRFbnRlckJhY2tncm91bmQoKTsKKyAgICB9KS5nZXQoKV07CisgICAgbV9mb3JlZ3Jv
dW5kT2JzZXJ2ZXIgPSBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9i
c2VydmVyRm9yTmFtZTpVSUFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZE5vdGlmaWNhdGlv
biBvYmplY3Q6W1VJQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dIHF1ZXVlOm5pbCB1c2lu
Z0Jsb2NrOm1ha2VCbG9ja1B0cihbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKE5TTm90
aWZpY2F0aW9uICopIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgd2Vha1RoaXMtPmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpOwor
ICAgIH0pLmdldCgpXTsKKyNlbmRpZgorfQorCit2b2lkIERvd25sb2FkUHJveHlNYXA6OnBsYXRm
b3JtRGVzdHJveSgpCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fYmFja2dyb3VuZE9i
c2VydmVyLmdldCgpXTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IHJlbW92ZU9ic2VydmVyOm1fZm9yZWdyb3VuZE9ic2VydmVyLmdldCgpXTsKKyNlbmRpZgorfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMjQzMDc4KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDE0IEBACiAjaW1wb3J0IDxzeXMvcGFyYW0uaD4K
ICNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvRW50
aXRsZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9keWxkU1BJLmg+CiAKICNpZiBQ
TEFURk9STShNQUMpCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NBUmVtb3RlTGF5ZXJTZXJ2ZXIuaD4K
KyNlbHNlCisjaW1wb3J0ICJVSUtpdFNQSS5oIgogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1Mp
CkBAIC0zMDksNiArMzEyLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFs
aXplTgogI2VuZGlmCiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0g
W2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5h
bERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5j
cmVhdGVDRlN0cmluZygpLmdldCgpXV07CisgICAgcGFyYW1ldGVycy5kb3dubG9hZE1vbml0b3JT
cGVlZE11bHRpcGxpZXIgPSBtX2NvbmZpZ3VyYXRpb24tPmRvd25sb2FkTW9uaXRvclNwZWVkTXVs
dGlwbGllcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVD
b250ZXh0KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eS5jcHAJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA5LDcgKzIwOSw3IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkRmluaXNoKCkKICAgICBtX3By
b2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZEZpbmlzaCgqbV9wcm9jZXNzUG9vbCwgKnRo
aXMpOwogCiAgICAgLy8gVGhpcyBjYW4gY2F1c2UgdGhlIERvd25sb2FkUHJveHkgb2JqZWN0IHRv
IGJlIGRlbGV0ZWQuCi0gICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQodGhp
cyk7CisgICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwogfQog
CiBzdGF0aWMgUmVmUHRyPEFQSTo6RGF0YT4gY3JlYXRlRGF0YShjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmIGRhdGEpCkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRG
YWlsKGNvbnN0IFJlc291cgogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlk
RmFpbCgqbV9wcm9jZXNzUG9vbCwgKnRoaXMsIGVycm9yKTsKIAogICAgIC8vIFRoaXMgY2FuIGNh
dXNlIHRoZSBEb3dubG9hZFByb3h5IG9iamVjdCB0byBiZSBkZWxldGVkLgotICAgIG1fZG93bmxv
YWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRQcm94eU1h
cC5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRD
YW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKQpAQCAtMjQwLDcgKzI0
MCw3IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkQ2FuY2VsKGNvbnN0IElQQzoKICAgICBtX3By
b2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZENhbmNlbCgqbV9wcm9jZXNzUG9vbCwgKnRo
aXMpOwogCiAgICAgLy8gVGhpcyBjYW4gY2F1c2UgdGhlIERvd25sb2FkUHJveHkgb2JqZWN0IHRv
IGJlIGRlbGV0ZWQuCi0gICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQodGhp
cyk7CisgICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJKHJldmlzaW9uIDI0MzA3
OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTkgKzQwLDQzIEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogRG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vzc1By
b3h5JiBwcm9jZXNzKQotICAgIDogbV9wcm9jZXNzKCZwcm9jZXNzKQorICAgIDogbV9wcm9jZXNz
KG1ha2VXZWFrUHRyKHByb2Nlc3MpKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9zaG91
bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJjb20uYXBwbGUubXVs
dGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgogeworICAgIHBsYXRmb3Jt
Q3JlYXRlKCk7CiB9CiAKIERvd25sb2FkUHJveHlNYXA6On5Eb3dubG9hZFByb3h5TWFwKCkKIHsK
ICAgICBBU1NFUlQobV9kb3dubG9hZHMuaXNFbXB0eSgpKTsKKyAgICBwbGF0Zm9ybURlc3Ryb3ko
KTsKIH0KIAotRG93bmxvYWRQcm94eSogRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQ
cm94eShXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQorI2lmICFQTEFURk9STShDT0NPQSkKK3ZvaWQgRG93
bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1DcmVhdGUoKQoreworfQorCit2b2lkIERvd25sb2FkUHJv
eHlNYXA6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisjZW5kaWYKKwordm9pZCBEb3dubG9hZFBy
b3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCit7CisgICAgaWYgKG1fcHJv
Y2VzcykKKyAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7Cit9CisKK3ZvaWQgRG93bmxvYWRQ
cm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKK3sKKyAgICBpZiAobV9w
cm9jZXNzKQorICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7Cit9CisKK0Rvd25sb2FkUHJv
eHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2ViUHJvY2Vzc1Bvb2wm
IHByb2Nlc3NQb29sLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVx
dWVzdCkKIHsKICAgICBhdXRvIGRvd25sb2FkUHJveHkgPSBEb3dubG9hZFByb3h5OjpjcmVhdGUo
KnRoaXMsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QpOwogICAgIG1fZG93bmxvYWRzLnNl
dChkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuY29weVJlZigpKTsK
QEAgLTY0LDEyICs4OCwxMiBAQCBEb3dubG9hZFByb3h5KiBEb3dubG9hZFByb3h5TWFwOjpjcmVh
dGVECiAKICAgICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxv
YWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElE
KCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAotICAgIHJldHVybiBkb3du
bG9hZFByb3h5LnB0cigpOworICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQogCi12b2lkIERv
d25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSogZG93bmxvYWRQ
cm94eSkKK3ZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFBy
b3h5JiBkb3dubG9hZFByb3h5KQogewotICAgIGF1dG8gZG93bmxvYWRJRCA9IGRvd25sb2FkUHJv
eHktPmRvd25sb2FkSUQoKTsKKyAgICBhdXRvIGRvd25sb2FkSUQgPSBkb3dubG9hZFByb3h5LmRv
d25sb2FkSUQoKTsKIAogICAgIC8vIFRoZSBEb3dubG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRo
ZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBwb29sLgogICAgIGF1dG8gcHJvdGVjdGVk
UHJvY2Vzc1Bvb2wgPSBtYWtlUmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKSk7CkBAIC03
Nyw3ICsxMDEsNyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoCiAg
ICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAogICAgIG1fcHJv
Y2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKLSAgICBkb3dubG9h
ZFByb3h5LT5pbnZhbGlkYXRlKCk7CisgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAg
ICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCiAgICAgaWYgKG1fZG93bmxvYWRz
LmlzRW1wdHkoKSAmJiBtX3Nob3VsZFRha2VBc3NlcnRpb24pIHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAkocmV2
aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsMTIgQEAKICNpbmNsdWRl
ICJEb3dubG9hZElELmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSA8b2JqYy9v
YmpjLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXF1
ZXN0OwpAQCAtNDAsNyArNDYsNyBAQCBjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3Mg
UHJvY2Vzc0Fzc2VydGlvbjsKIGNsYXNzIFdlYlByb2Nlc3NQb29sOwogCi1jbGFzcyBEb3dubG9h
ZFByb3h5TWFwIHsKK2NsYXNzIERvd25sb2FkUHJveHlNYXAgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8RG93bmxvYWRQcm94eU1hcD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERvd25sb2FkUHJveHlNYXApOwogCkBAIC00OCwxOSArNTQs
MjkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IERvd25sb2FkUHJveHlNYXAoTmV0d29ya1Byb2Nl
c3NQcm94eSYpOwogICAgIH5Eb3dubG9hZFByb3h5TWFwKCk7CiAKLSAgICBEb3dubG9hZFByb3h5
KiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkq
KTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYlByb2Nlc3NQb29s
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCBkb3dubG9hZEZp
bmlzaGVkKERvd25sb2FkUHJveHkmKTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fZG93bmxvYWRzLmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2Uo
KTsKIAorICAgIHZvaWQgYXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKTsKKyAgICB2b2lk
IGFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpOworCiBwcml2YXRlOgotICAgIE5ldHdv
cmtQcm9jZXNzUHJveHkqIG1fcHJvY2VzczsKKyAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlKCk7Cisg
ICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKKworICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQ
cm94eT4gbV9wcm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxvYWRJRCwgUmVmUHRyPERvd25sb2Fk
UHJveHk+PiBtX2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9zaG91bGRUYWtlQXNzZXJ0aW9uIHsg
ZmFsc2UgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0Fzc2VydGlvbj4gbV9kb3dubG9h
ZEFzc2VydGlvbjsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFJldGFpblB0cjxpZD4g
bV9iYWNrZ3JvdW5kT2JzZXJ2ZXI7CisgICAgUmV0YWluUHRyPGlkPiBtX2ZvcmVncm91bmRPYnNl
cnZlcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5jcHAJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcs
MTcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvYwogICAgIGNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNyZWF0ZU5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKGlzU2VydmljZVdvcmtlclByb2Nlc3MsIHJlZ2lzdHJhYmxlRG9t
YWluKSwgMCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdG
b3JTeW5jUmVwbHkpOwogfQogCi1Eb3dubG9hZFByb3h5KiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpj
cmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0
KQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJv
b2wgYmFja2dyb3VuZCkKK3sKKyAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKSB7CisgICAgICAg
IGlmIChiYWNrZ3JvdW5kKQorICAgICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5hcHBsaWNh
dGlvbkRpZEVudGVyQmFja2dyb3VuZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rv
d25sb2FkUHJveHlNYXAtPmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpOworICAgIH0K
K30KKworRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICBpZiAo
IW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwID0gc3RkOjpt
YWtlX3VuaXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2
aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk7CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNz
UHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nl
c3NUaHJvdHRsZXJDbGllbnQgeworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1
YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVu
dCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKIHB1YmxpYzoK
ICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
OwogICAgIHVzaW5nIFRvcEZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47
CkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93bmxv
YWRQcm94eSogY3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6
U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhRmV0Y2hPcHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7
CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0xNTQsNiArMTU0LDcgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgc2VuZFByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCk7
CiAgICAgdm9pZCBzZW5kUHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKTsKKyAgICB2
b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKTsKIAogICAgIHZv
aWQgc2V0SXNIb2xkaW5nTG9ja2VkRmlsZXMoYm9vbCk7CiAgICAgdm9pZCBzZXRJc0lEQkRhdGFi
YXNlSG9sZGluZ0xvY2tlZEZpbGVzKGJvb2wpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvck1haW5GcmFtZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRmFpbFByb3Zpc2lv
bmFsTG9hZEZvck1haW5GcmFtZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZv
ck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQ
cm92aWRlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxv
YWRQcm94eSopIG92ZXJyaWRlOworICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25s
b2FkUHJveHkmKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBX
ZWJDb3JlOjpDdXJzb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGls
TW91c2VNb3Zlcyhib29sKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDI0MzA3OCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENvbW1pdExv
YWRGb3JNYWkKICAgICBbbV9jb250ZW50VmlldyBfZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZV07
CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9h
ZFByb3h5KikKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3du
bG9hZFByb3h5JikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJp
bmcmIG9sZFRvb2xUaXAsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRpcCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEZpbmlz
aExvYWRpbmdEYXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZW5hbWUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpIG92ZXJyaWRlOwotICAgIHZv
aWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBvdmVycmlkZTsKKyAgICB2
b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
TWFjLm1tCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5NSw3ICsyOTUsNyBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkaW5nRGF0CiB7CiB9CiAKLXZvaWQgUGFn
ZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JikKIHsK
IH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudElt
cGwuY3BwCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
UGFnZUNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5LDcgQEAgdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlQ29udGVudFNpegogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3du
bG9hZFByb3h5KiBkb3dubG9hZCkKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2Fk
UmVxdWVzdChEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBs
LmgJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdl
Q2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKICAgICB2
b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRl
eHQmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2Fk
UHJveHkqKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9h
ZFByb3h5Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFp
bkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3Zp
ZGVyKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkgb3ZlcnJp
ZGUgeyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM0NjEsNiArMzQ2MSw5IEBA
CiAJCTVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1QzI2OTU4NDIwMDQyRjEyMDA1QzQzOUIgLyogV0tPcGVuUGFuZWxQ
YXJhbWV0ZXJzUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS09w
ZW5QYW5lbFBhcmFtZXRlcnNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDMjk4RDlFMUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVuZGluZ0Rvd25sb2FkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTVDMkIxQUYzMjIzQUI3MjgwMEI5MUNGNyAvKiBEb3dubG9hZE1vbml0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG93bmxvYWRNb25p
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMyQjFBRjQyMjNBQjcyODAw
QjkxQ0Y3IC8qIERvd25sb2FkTW9uaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEb3dubG9hZE1vbml0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMy
QjFBRjUyMjNDMUZEMjAwQjkxQ0Y3IC8qIERvd25sb2FkUHJveHlNYXBDb2NvYS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERvd25sb2FkUHJveHlNYXBDb2NvYS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMzNTlDMEMyMTU0NzMyMTAwOUU3OTQ4
IC8qIFdLRGVwcmVjYXRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Rl
cHJlY2F0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMzQUVBOEUxRkUxRjFE
RjAwMjMxOEQzIC8qIFdlYnNpdGVQb2xpY2llc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVDNDZDMEFDMjFCNzE5OEIwMEJDNTk5MSAvKiBXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC01MzQyLDYgKzUzNDUsNyBAQAogCQkJCTgzODkxQjZCMUE2OEMzMEIwMDMwRjM4
NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbSAqLywKIAkJCQlBMURGNjMxMTE4RTBCN0M4
MDAzQTNFMkEgLyogRG93bmxvYWRDbGllbnQuaCAqLywKIAkJCQlBMURGNjMxMDE4RTBCN0M4MDAz
QTNFMkEgLyogRG93bmxvYWRDbGllbnQubW0gKi8sCisJCQkJNUMyQjFBRjUyMjNDMUZEMjAwQjkx
Q0Y3IC8qIERvd25sb2FkUHJveHlNYXBDb2NvYS5tbSAqLywKIAkJCQkwMEI5NjYxODE4RTI1QUUx
MDBDRTFGODggLyogRmluZENsaWVudC5oICovLAogCQkJCTAwQjk2NjE3MThFMjVBRTEwMENFMUY4
OCAvKiBGaW5kQ2xpZW50Lm1tICovLAogCQkJCUNENzhFMTEzMURCN0Q3RUQwMDE0QTJERSAvKiBG
dWxsc2NyZWVuQ2xpZW50LmggKi8sCkBAIC02ODY3LDYgKzY4NzEsOCBAQAogCQkJCTVDMTQyNkY5
MUMyM0Y4NDMwMEQ0MTE4MyAvKiBEb3dubG9hZE1hbmFnZXIuaCAqLywKIAkJCQk1MTI0MEVCOTIy
MEEwOENBMDA1Q0ZDNjMgLyogRG93bmxvYWRNYXAuY3BwICovLAogCQkJCTUxMjQwRUI4MjIwQTA4
Q0EwMDVDRkM2MyAvKiBEb3dubG9hZE1hcC5oICovLAorCQkJCTVDMkIxQUYzMjIzQUI3MjgwMEI5
MUNGNyAvKiBEb3dubG9hZE1vbml0b3IuY3BwICovLAorCQkJCTVDMkIxQUY0MjIzQUI3MjgwMEI5
MUNGNyAvKiBEb3dubG9hZE1vbml0b3IuaCAqLywKIAkJCQk1Qzg1Qzc4NjFDM0YyM0M1MDA2MUE0
RkEgLyogUGVuZGluZ0Rvd25sb2FkLmNwcCAqLywKIAkJCQk1QzI5OEQ5RTFDM0RFRjI5MDA0NzBB
RkUgLyogUGVuZGluZ0Rvd25sb2FkLmggKi8sCiAJCQkpOwpAQCAtMTAyNDEsOSArMTAyNDcsNiBA
QAogCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gMTAuMTsKIAkJCQkJCVByb3Zpc2lvbmlu
Z1N0eWxlID0gQXV0b21hdGljOwogCQkJCQl9OwotCQkJCQlBMTc5OEI1OTIyMzQ2NEM0MDAwNzY0
QkQgPSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSAxMC4yOwotCQkJCQl9OwogCQkJ
CQlFMUFDMkUyNzIwRjdCOTRDMDBCMDg5N0QgPSB7CiAJCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNp
b24gPSA5LjM7CiAJCQkJCQlQcm92aXNpb25pbmdTdHlsZSA9IEF1dG9tYXRpYzsKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0
MzA3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDE5LTAzLTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgSW1wbGVtZW50IERvd25sb2FkTW9uaXRvciB0byBwcmV2ZW50IGxvbmctcnVu
bmluZyBzbG93IGRvd25sb2FkcyBmcm9tIGJhY2tncm91bmQgYXBwcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1RDUFNlcnZl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpUQ1BTZXJ2
ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjp+VENQU2VydmVyKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6c29ja2V0QmluZExpc3Rlbik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OndhaXRGb3JBbmRSZXBseVRvUmVxdWVzdHMp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVENQU2VydmVyLmg6IEFkZGVkLgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpwb3J0IGNvbnN0KToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAo
LVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rvd25sb2FkRGlkU3RhcnQ6XSk6CisgICAg
ICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWREaWRDYW5jZWw6XSk6
CisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWQ6ZGVjaWRl
RGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWQ6ZGlkUmVjZWl2
ZURhdGE6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpyZXNwb25kU2xvd2x5KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OndlYlZpZXdXaXRoRG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBs
aWVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRvd25sb2FkQXRSYXRlKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE5LTAzLTE4ICBBZHJpYW4gUGVyZXogZGUgQ2Fz
dHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gVGFyYmFsbHMgZ2VuZXJh
dGVkIHdpdGgg4oCcbWFrZSBkaXN04oCdIGNhbm5vdCBidWlsZCBkb2N1bWVudGF0aW9uCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVENQU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRDUFNlcnZlci5oIgor
CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
KworVENQU2VydmVyOjpUQ1BTZXJ2ZXIoRnVuY3Rpb248dm9pZChTb2NrZXQpPiYmIHNvY2tldEhh
bmRsZXIpCisgICAgOiBtX3NvY2tldEhhbmRsZXIoV1RGTW92ZShzb2NrZXRIYW5kbGVyKSkKK3sK
KyAgICBzb2NrZXRCaW5kTGlzdGVuKCk7CisgICAgbV90aHJlYWQgPSBzdGQ6OnRocmVhZCgmVENQ
U2VydmVyOjp3YWl0Rm9yQW5kUmVwbHlUb1JlcXVlc3RzLCB0aGlzKTsKK30KKworVENQU2VydmVy
Ojp+VENQU2VydmVyKCkKK3sKKyAgICBtX3RocmVhZC5qb2luKCk7CisgICAgaWYgKG1fbGlzdGVu
aW5nU29ja2V0ICE9IEludmFsaWRTb2NrZXQpIHsKKyAgICAgICAgY2xvc2UobV9saXN0ZW5pbmdT
b2NrZXQpOworICAgICAgICBtX2xpc3RlbmluZ1NvY2tldCA9IEludmFsaWRTb2NrZXQ7CisgICAg
fQorICAgIGlmIChtX2Nvbm5lY3Rpb25Tb2NrZXQgIT0gSW52YWxpZFNvY2tldCkgeworICAgICAg
ICBjbG9zZShtX2Nvbm5lY3Rpb25Tb2NrZXQpOworICAgICAgICBtX2Nvbm5lY3Rpb25Tb2NrZXQg
PSBJbnZhbGlkU29ja2V0OworICAgIH0KK30KKwordm9pZCBUQ1BTZXJ2ZXI6OnNvY2tldEJpbmRM
aXN0ZW4oKQoreworICAgIG1fbGlzdGVuaW5nU29ja2V0ID0gc29ja2V0KFBGX0lORVQsIFNPQ0tf
U1RSRUFNLCAwKTsKKyAgICBpZiAobV9saXN0ZW5pbmdTb2NrZXQgPT0gSW52YWxpZFNvY2tldCkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFBvcnRzIDQ5MTUyLTY1NTM1IGFyZSB1bmFs
bG9jYXRlZCBwb3J0cy4gVHJ5IHVudGlsIHdlIGZpbmQgb25lIHRoYXQncyBmcmVlLgorICAgIGZv
ciAoUG9ydCBwb3J0ID0gNDkxNTI7IHBvcnQ7IHBvcnQrKykgeworICAgICAgICBzdHJ1Y3Qgc29j
a2FkZHJfaW4gbmFtZTsKKyAgICAgICAgbWVtc2V0KCZuYW1lLCAwLCBzaXplb2YobmFtZSkpOwor
ICAgICAgICBuYW1lLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBuYW1lLnNpbl9wb3J0
ID0gaHRvbnMocG9ydCk7CisgICAgICAgIG5hbWUuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5B
RERSX0FOWSk7CisgICAgICAgIGlmIChiaW5kKG1fbGlzdGVuaW5nU29ja2V0LCByZWludGVycHJl
dF9jYXN0PHNvY2thZGRyKj4oJm5hbWUpLCBzaXplb2YobmFtZSkpIDwgMCkgeworICAgICAgICAg
ICAgLy8gVGhpcyBwb3J0IGlzIGJ1c3kuIFRyeSB0aGUgbmV4dCBwb3J0LgorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgdW5zaWduZWQgbWF4Q29ubmVjdGlv
bnMgPSAxOworICAgICAgICBpZiAobGlzdGVuKG1fbGlzdGVuaW5nU29ja2V0LCBtYXhDb25uZWN0
aW9ucykgPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIExpc3RlbmluZyBmYWlsZWQuCisgICAgICAg
ICAgICBjbG9zZShtX2xpc3RlbmluZ1NvY2tldCk7CisgICAgICAgICAgICBtX2xpc3RlbmluZ1Nv
Y2tldCA9IEludmFsaWRTb2NrZXQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgbV9wb3J0ID0gcG9ydDsKKyAgICAgICAgcmV0dXJuOyAvLyBTdWNjZXNzZnVsbHkgc2V0
IHVwIGxpc3RlbmluZyBwb3J0LgorICAgIH0KKyAgICAKKyAgICAvLyBDb3VsZG4ndCBmaW5kIGFu
IGF2YWlsYWJsZSBwb3J0LgorICAgIGNsb3NlKG1fbGlzdGVuaW5nU29ja2V0KTsKKyAgICBtX2xp
c3RlbmluZ1NvY2tldCA9IEludmFsaWRTb2NrZXQ7Cit9CisKK3ZvaWQgVENQU2VydmVyOjp3YWl0
Rm9yQW5kUmVwbHlUb1JlcXVlc3RzKCkKK3sKKyAgICBpZiAobV9saXN0ZW5pbmdTb2NrZXQgPT0g
SW52YWxpZFNvY2tldCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29ubmVjdGlvblNv
Y2tldCA9IGFjY2VwdChtX2xpc3RlbmluZ1NvY2tldCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAg
bV9zb2NrZXRIYW5kbGVyKG1fY29ubmVjdGlvblNvY2tldCk7CisgICAgc2h1dGRvd24obV9jb25u
ZWN0aW9uU29ja2V0LCBTSFVUX1JEV1IpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3Mg
VENQU2VydmVyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBTb2NrZXQgPSBpbnQ7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBTb2NrZXQgSW52YWxpZFNvY2tldCA9IC0xOworICAgIHVzaW5nIFBvcnQgPSB1
aW50MTZfdDsKKyAgICBzdGF0aWMgY29uc3RleHByIFBvcnQgSW52YWxpZFBvcnQgPSAwOworICAg
IAorICAgIFRDUFNlcnZlcihGdW5jdGlvbjx2b2lkKFNvY2tldCk+JiYpOworICAgIH5UQ1BTZXJ2
ZXIoKTsKKyAgICAKKyAgICBQb3J0IHBvcnQoKSBjb25zdCB7IHJldHVybiBtX3BvcnQ7IH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgdm9pZCBzb2NrZXRCaW5kTGlzdGVuKCk7CisgICAgdm9pZCB3YWl0
Rm9yQW5kUmVwbHlUb1JlcXVlc3RzKCk7CisKKyAgICBQb3J0IG1fcG9ydCB7IEludmFsaWRQb3J0
IH07CisgICAgU29ja2V0IG1fbGlzdGVuaW5nU29ja2V0IHsgSW52YWxpZFNvY2tldCB9OworICAg
IFNvY2tldCBtX2Nvbm5lY3Rpb25Tb2NrZXQgeyBJbnZhbGlkU29ja2V0IH07CisgICAgc3RkOjp0
aHJlYWQgbV90aHJlYWQ7CisgICAgRnVuY3Rpb248dm9pZChTb2NrZXQpPiBtX3NvY2tldEhhbmRs
ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjQzMDc4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMy
MSw2ICszMjEsNyBAQAogCQk1QzgzOEY3RjFEQjA0RjkwMDA4Mjg1OEYgLyogTG9hZEludmFsaWRV
UkxSZXF1ZXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTc5MDFGQUUxQ0FGMTM3MTAwRUQ2NEY5IC8qIExvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbSAq
LzsgfTsKIAkJNUM4QkM3OTkyMThDRjQ0NzAwODEzODg2IC8qIE5ldHdvcmtQcm9jZXNzLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM4QkM3OTgyMThD
RjNFOTAwODEzODg2IC8qIE5ldHdvcmtQcm9jZXNzLm1tICovOyB9OwogCQk1Qzk3M0Y1QzFGNThF
RjhCMDAzNTlDMjcgLyogV2ViR0xQb2xpY3kubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1Qzk3M0Y1QjFGNThFRjBBMDAzNTlDMjcgLyogV2ViR0xQb2xp
Y3kubW0gKi87IH07CisJCTVDOUI1NDhFMjIzQzRDQkUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5QjU0OEMy
MjNDNEJGNTAwQjE1MEM0IC8qIFRDUFNlcnZlci5jcHAgKi87IH07CiAJCTVDOUU1Njg1MURGOTE0
NTQwMEM5RUUzMyAvKiBXZWJzaXRlUG9saWNpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTY4NDFERjkxNDNEMDBDOUVFMzMgLyogV2Vic2l0
ZVBvbGljaWVzLm1tICovOyB9OwogCQk1QzlFNTY4NzFERjkxNEFFMDBDOUVFMzMgLyogY29udGVu
dEJsb2NrZXJDaGVjay5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDOUU1Njg2MURGOTE0OEUwMEM5RUUzMyAvKiBjb250ZW50QmxvY2tl
ckNoZWNrLmh0bWwgKi87IH07CiAJCTVDOUU1OTQxMUQzRUI1QUMwMEUzQzYyRSAvKiBBcHBsaWNh
dGlvbkNhY2hlLmRiIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDOUU1OTNFMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRi
ICovOyB9OwpAQCAtMTcxOSw2ICsxNzIwLDggQEAKIAkJNUM3Qzc0Q0ExRkI1MjhENDAwMkY5QUJF
IC8qIFdlYlZpZXdTY2hlZHVsZUluUnVuTG9vcC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYlZpZXdTY2hlZHVsZUluUnVuTG9vcC5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUM4QkM3OTgyMThDRjNFOTAwODEzODg2IC8qIE5ldHdvcmtQcm9j
ZXNzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1By
b2Nlc3MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOTczRjVCMUY1OEVGMEEw
MDM1OUMyNyAvKiBXZWJHTFBvbGljeS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYkdMUG9saWN5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
QzlCNTQ4QzIyM0M0QkY1MDBCMTUwQzQgLyogVENQU2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRDUFNlcnZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDOUI1NDhEMjIzQzRCRjUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVENQU2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVDOUU1Njg0MURGOTE0M0QwMEM5RUUzMyAvKiBXZWJzaXRlUG9saWNpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJzaXRlUG9saWNp
ZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1Njg2MURGOTE0OEUwMEM5
RUUzMyAvKiBjb250ZW50QmxvY2tlckNoZWNrLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBh
dGggPSBjb250ZW50QmxvY2tlckNoZWNrLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVDOUU1OTNFMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9
IEFwcGxpY2F0aW9uQ2FjaGUuZGI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDAw
LDYgKzI0MDMsOCBAQAogCQkJCUJDNTc1QkJGMTI2RjU3NTIwMDZGMEYxMiAvKiBQbGF0Zm9ybVV0
aWxpdGllcy5jcHAgKi8sCiAJCQkJQkMxMzE4ODMxMTcxMTRBODAwQjY5NzI3IC8qIFBsYXRmb3Jt
VXRpbGl0aWVzLmggKi8sCiAJCQkJQkM5MDk1MUIxMjU1MzNENzAwMDgzNzU2IC8qIFBsYXRmb3Jt
V2ViVmlldy5oICovLAorCQkJCTVDOUI1NDhDMjIzQzRCRjUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIu
Y3BwICovLAorCQkJCTVDOUI1NDhEMjIzQzRCRjUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIuaCAqLywK
IAkJCQlCQ0I5RTdGQTExMjM1OUEzMDBBMTM3RTAgLyogVGVzdC5oICovLAogCQkJCUJDMTMxQUE4
MTE3MTMxRkMwMEI2OTcyNyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwICovLAogCQkJCUJDQjlFN0M3
MTEyMzRFM0EwMEExMzdFMCAvKiBUZXN0c0NvbnRyb2xsZXIuaCAqLywKQEAgLTQyOTYsNiArNDMw
MSw3IEBACiAJCQkJN0NDRTdFQTgxQTQxMUExOTAwNDQ3QzRDIC8qIFN5bnRoZXRpY0JhY2tpbmdT
Y2FsZUZhY3RvcldpbmRvdy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM3MzRCNTMyMDc4OEM0ODAw
RjQzMEVBIC8qIFN5c3RlbUNvbG9ycy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJENzAwNTk2MjFF
REEwQzYwMDM0NjNDQiAvKiBUYWJPdXRPZldlYlZpZXcubW0gaW4gU291cmNlcyAqLywKKwkJCQk1
QzlCNTQ4RTIyM0M0Q0JFMDBCMTUwQzQgLyogVENQU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDQ0U3RjE2MUE0MTFBRTYwMDQ0N0M0QyAvKiBUZXJtaW5hdGVUd2ljZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3Q0NFN0VBOTFBNDExQTFEMDA0NDdDNEMgLyogVGVzdEJyb3dzaW5nQ29u
dGV4dExvYWREZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0NjEyOENCMjExRDQ3NTEw
MEQ5RkFEQiAvKiBUZXN0RHJhZ2dpbmdJbmZvLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0JKHJl
dmlzaW9uIDI0MzA3OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
RG93bmxvYWQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDE4ICsyOSwyMSBAQAogI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5o
IgorI2ltcG9ydCAiVENQU2VydmVyLmgiCiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLSNpbXBvcnQgPFdlYktpdC9f
V0tEb3dubG9hZC5oPgotI2ltcG9ydCA8V2ViS2l0L19XS0Rvd25sb2FkRGVsZWdhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0
ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLRG93bmxvYWQu
aD4KKyNpbXBvcnQgPFdlYktpdC9fV0tEb3dubG9hZERlbGVnYXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvRmlsZVN5c3Rl
bS5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9Nb25vdG9uaWNU
aW1lLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQ
dHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzc2LDQgKzc3OSwxMzkg
QEAgVEVTVChfV0tEb3dubG9hZCwgQ3Jhc2hBZnRlckRvd25sb2FkRGlkRgogICAgIEVYUEVDVF9O
VUxMKHByb2Nlc3NQb29sLmdldCgpKTsKIH0KIAotI2VuZGlmCitzdGF0aWMgYm9vbCByZWNlaXZl
ZERhdGE7CitzdGF0aWMgYm9vbCBkaWRDYW5jZWw7CitzdGF0aWMgUmV0YWluUHRyPE5TU3RyaW5n
PiBkZXN0aW5hdGlvbjsKKworQGludGVyZmFjZSBEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUg
OiBOU09iamVjdCA8X1dLRG93bmxvYWREZWxlZ2F0ZT4KK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IERvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZQorCistICh2b2lkKV9kb3dubG9hZERpZFN0YXJ0
OihfV0tEb3dubG9hZCAqKWRvd25sb2FkCit7CisgICAgZGlkRG93bmxvYWRTdGFydCA9IHRydWU7
Cit9CisKKy0gKHZvaWQpX2Rvd25sb2FkRGlkQ2FuY2VsOihfV0tEb3dubG9hZCAqKWRvd25sb2Fk
Cit7CisgICAgZGlkQ2FuY2VsID0gdHJ1ZTsKK30KKworLSAodm9pZClfZG93bmxvYWQ6KF9XS0Rv
d25sb2FkICopZG93bmxvYWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6
KE5TU3RyaW5nICopZmlsZW5hbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgYWxs
b3dPdmVyd3JpdGUsIE5TU3RyaW5nICpkZXN0aW5hdGlvbikpY29tcGxldGlvbkhhbmRsZXIKK3sK
KyAgICBFWFBFQ1RfVFJVRShbZmlsZW5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiZmlsZW5hbWUuZGF0
Il0pOworICAgIGRlc3RpbmF0aW9uID0gW05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OmZpbGVuYW1lXTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihZ
RVMsIGRlc3RpbmF0aW9uLmdldCgpKTsKK30KKworLSAodm9pZClfZG93bmxvYWQ6KF9XS0Rvd25s
b2FkICopZG93bmxvYWQgZGlkUmVjZWl2ZURhdGE6KHVpbnQ2NF90KWxlbmd0aAoreworICAgIHJl
Y2VpdmVkRGF0YSA9IHRydWU7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
eworCit2b2lkIHJlc3BvbmRTbG93bHkoaW50IHNvY2tldCwgZG91YmxlIGticHMsIGJvb2wmIHRl
cm1pbmF0ZVNlcnZlcikKK3sKKyAgICBFWFBFQ1RfRkFMU0UoaXNNYWluVGhyZWFkKCkpOworICAg
IGNoYXIgcmVhZEJ1ZmZlclsxMDAwXTsKKyAgICBhdXRvIGJ5dGVzUmVhZCA9IDo6cmVhZChzb2Nr
ZXQsIHJlYWRCdWZmZXIsIHNpemVvZihyZWFkQnVmZmVyKSk7CisgICAgRVhQRUNUX0dUKGJ5dGVz
UmVhZCwgMCk7CisgICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1JlYWQp
IDwgc2l6ZW9mKHJlYWRCdWZmZXIpKTsKKyAgICAKKyAgICBjb25zdCBjaGFyKiByZXNwb25zZUhl
YWRlciA9CisgICAgIkhUVFAvMS4xIDIwMCBPS1xyXG4iCisgICAgIkNvbnRlbnQtRGlzcG9zaXRp
b246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiZmlsZW5hbWUuZGF0XCJcclxuIgorICAgICJDb250
ZW50LUxlbmd0aDogMTAwMDAwMDAwXHJcblxyXG4iOworICAgIGF1dG8gYnl0ZXNXcml0dGVuID0g
Ojp3cml0ZShzb2NrZXQsIHJlc3BvbnNlSGVhZGVyLCBzdHJsZW4ocmVzcG9uc2VIZWFkZXIpKTsK
KyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1dyaXR0ZW4pLCBzdHJsZW4o
cmVzcG9uc2VIZWFkZXIpKTsKKyAgICAKKyAgICBjb25zdCBkb3VibGUgd3JpdGVzUGVyU2Vjb25k
ID0gMTAwOworICAgIFZlY3RvcjxjaGFyPiB3cml0ZUJ1ZmZlcihzdGF0aWNfY2FzdDxzaXplX3Q+
KDEwMjQgKiBrYnBzIC8gd3JpdGVzUGVyU2Vjb25kKSk7CisgICAgd2hpbGUgKCF0ZXJtaW5hdGVT
ZXJ2ZXIpIHsKKyAgICAgICAgYXV0byBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAg
ICAgICAgOjp3cml0ZShzb2NrZXQsIHdyaXRlQnVmZmVyLmRhdGEoKSwgd3JpdGVCdWZmZXIuc2l6
ZSgpKTsKKyAgICAgICAgZG91YmxlIHdyaXRlRHVyYXRpb24gPSAoTW9ub3RvbmljVGltZTo6bm93
KCkgLSBiZWZvcmUpLnNlY29uZHMoKTsKKyAgICAgICAgZG91YmxlIGRlc2lyZWRTbGVlcCA9IDEu
MCAvIHdyaXRlc1BlclNlY29uZDsKKyAgICAgICAgaWYgKHdyaXRlRHVyYXRpb24gPCBkZXNpcmVk
U2xlZXApCisgICAgICAgICAgICB1c2xlZXAoVVNFQ19QRVJfU0VDICogKGRlc2lyZWRTbGVlcCAt
IHdyaXRlRHVyYXRpb24pKTsKKyAgICB9Cit9CisKK1JldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZp
ZXdXaXRoRG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKHNpemVfdCBtdWx0aXBsaWVyKQor
eworICAgIHN0YXRpYyBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW0Rvd25sb2Fk
TmF2aWdhdGlvbkRlbGVnYXRlIG5ld10pOworICAgIHN0YXRpYyBhdXRvIGRvd25sb2FkRGVsZWdh
dGUgPSBhZG9wdE5TKFtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgbmV3XSk7CisgICAgYXV0
byBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24gbmV3XSk7CisgICAgW3Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbiBzZXREb3dubG9h
ZE1vbml0b3JTcGVlZE11bHRpcGxpZXI6bXVsdGlwbGllcl07CisgICAgYXV0byBwcm9jZXNzUG9v
bCA9IGFkb3B0TlMoW1tXS1Byb2Nlc3NQb29sIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9u
OnByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIGF1dG8gd2ViVmlld0NvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10pOworICAgIFt3
ZWJWaWV3Q29uZmlndXJhdGlvbiBzZXRQcm9jZXNzUG9vbDpwcm9jZXNzUG9vbC5nZXQoKV07Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndlYlZpZXdDb25maWd1
cmF0aW9uLmdldCgpXSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOm5hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vz
c1Bvb2wuX2Rvd25sb2FkRGVsZWdhdGUgPSBkb3dubG9hZERlbGVnYXRlLmdldCgpOworICAgIHJl
dHVybiB3ZWJWaWV3OworfQorCitlbnVtIGNsYXNzIEFwcFJldHVybnNUb0ZvcmVncm91bmQgeyBO
bywgWWVzIH07CisgICAgCit2b2lkIGRvd25sb2FkQXRSYXRlKGRvdWJsZSBkZXNpcmVkS2Jwcywg
dW5zaWduZWQgc3BlZWRNdWx0aXBsaWVyLCBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kIHJldHVyblRv
Rm9yZWdyb3VuZCA9IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6Ok5vKQoreworICAgIGJvb2wgdGVy
bWluYXRlU2VydmVyID0gZmFsc2U7CisgICAgVENQU2VydmVyIHNlcnZlcihbJl0oYXV0byBzb2Nr
ZXQpIHsKKyAgICAgICAgcmVzcG9uZFNsb3dseShzb2NrZXQsIGRlc2lyZWRLYnBzLCB0ZXJtaW5h
dGVTZXJ2ZXIpOworICAgIH0pOworICAgIAorICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdXaXRo
RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKHNwZWVkTXVsdGlwbGllcik7CisgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHA6Ly8xMjcuMC4wLjE6
JWQvIiwgc2VydmVyLnBvcnQoKV1dXV07CisgICAgcmVjZWl2ZWREYXRhID0gZmFsc2U7CisgICAg
VXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOworICAgIC8vIFN0YXJ0IHRoZSBEb3dubG9hZE1vbml0
b3IncyB0aW1lci4KKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKKyAgICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5k
ID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykKKyAgICAgICAgW1t3ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKKyAg
ICBkaWRDYW5jZWwgPSBmYWxzZTsKKyAgICBVdGlsOjpydW4oJmRpZENhbmNlbCk7CisgICAgdGVy
bWluYXRlU2VydmVyID0gdHJ1ZTsKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IHJlbW92ZUl0ZW1BdFVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmRlc3RpbmF0aW9uLmdldCgp
IGlzRGlyZWN0b3J5Ok5PXSBlcnJvcjpuaWxdOworfQorCitURVNUKF9XS0Rvd25sb2FkLCBEb3du
bG9hZE1vbml0b3JDYW5jZWwpCit7CisgICAgZG93bmxvYWRBdFJhdGUoMC41LCAxMjApOyAvLyBT
aG91bGQgY2FuY2VsIGluIH4wLjUgc2Vjb25kcworICAgIGRvd25sb2FkQXRSYXRlKDEuNSwgMTIw
KTsgLy8gU2hvdWxkIGNhbmNlbCBpbiB+Mi41IHNlY29uZHMKK30KKworVEVTVChfV0tEb3dubG9h
ZCwgRG93bmxvYWRNb25pdG9yU3Vydml2ZSkKK3sKKyAgICBfX2Jsb2NrIEJPT0wgdGltZW91dFJl
YWNoZWQgPSBOTzsKKyAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJ
TUVfTk9XLCAyLjUgKiBOU0VDX1BFUl9TRUMpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBe
eworICAgICAgICBFWFBFQ1RfRkFMU0UoZGlkQ2FuY2VsKTsKKyAgICAgICAgZGlkQ2FuY2VsID0g
dHJ1ZTsKKyAgICAgICAgdGltZW91dFJlYWNoZWQgPSBZRVM7CisgICAgfSk7CisKKyAgICAvLyBT
aW11bGF0ZXMgYW4gaG91ciBvZiBkb3dubG9hZGluZyAxNTBrYi9zIGluIDEgc2Vjb25kLgorICAg
IC8vIFRpbWVvdXQgc2hvdWxkIGJlIHJlYWNoZWQgYmVmb3JlIHRoaXMgaXMgY2FuY2VsbGVkIGJl
Y2F1c2UgdGhlIGRvd25sb2FkIHJhdGUgaXMgaGlnaCBlbm91Z2guCisgICAgZG93bmxvYWRBdFJh
dGUoMTUwLjAsIDM2MDApOworICAgIEVYUEVDVF9UUlVFKHRpbWVvdXRSZWFjaGVkKTsKK30KKwor
VEVTVChfV0tEb3dubG9hZCwgRG93bmxvYWRNb25pdG9yUmV0dXJuVG9Gb3JlZ3JvdW5kKQorewor
ICAgIF9fYmxvY2sgQk9PTCB0aW1lb3V0UmVhY2hlZCA9IE5POworICAgIGRpc3BhdGNoX2FmdGVy
KGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIDIuNSAqIE5TRUNfUEVSX1NFQyksIGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEVYUEVDVF9GQUxTRShkaWRDYW5j
ZWwpOworICAgICAgICBkaWRDYW5jZWwgPSB0cnVlOworICAgICAgICB0aW1lb3V0UmVhY2hlZCA9
IFlFUzsKKyAgICB9KTsKKyAgICBkb3dubG9hZEF0UmF0ZSgwLjUsIDEyMCwgQXBwUmV0dXJuc1Rv
Rm9yZWdyb3VuZDo6WWVzKTsKKyAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0UmVhY2hlZCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365070</attachid>
            <date>2019-03-18 14:59:56 -0700</date>
            <delta_ts>2019-03-18 15:39:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195785-20190318145956.patch</filename>
            <type>text/plain</type>
            <size>85746</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxOS0wMy0xOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBE
b3dubG9hZE1vbml0b3IgdG8gcHJldmVudCBsb25nLXJ1bm5pbmcgc2xvdyBkb3dubG9hZHMgZnJv
bSBiYWNrZ3JvdW5kIGFwcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NTc4NQorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgor
CisgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IHdhcyB1cGRhdGVkIGluIDxyZGFyOi8v
cHJvYmxlbS80MjY3NzY4NT4gYnV0IGZvciBXZWJLaXQgRG93bmxvYWRzLgorICAgICAgICBUbyB0
ZXN0IGl0IEkgaW1wbGVtZW50ZWQgYSB0aHJvdHRsZWQgVENQIHNlcnZlciwgU1BJIHRvIHNwZWVk
IHVwIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLAorICAgICAgICBhbmQgU1BJIHRvIHN5bnRoZXNp
emUgdGhlIGFwcGxpY2F0aW9uIGdvaW5nIGludG8gdGhlIGJhY2tncm91bmQgYW5kIGZvcmVncm91
bmQsIHdoaWNoCisgICAgICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyIGRvZXMgb24gaU9TLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWQ6OmRpZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZENhbmNlbCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmg6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
OjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OmFwcGxpY2F0aW9uRW50ZXJlZEZvcmVncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZDo6bWFuYWdlciBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6
ZG93bmxvYWRGaW5pc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6YXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1h
bmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTWFwOjp2YWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hcC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1v
bml0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IgX2ticHMpOgorICAg
ICAgICAoV2ViS2l0Ojp0aW1lVW50aWxOZXh0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1vbml0b3I6OkRvd25sb2FkTW9uaXRvcik6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkTW9uaXRvcjo6bWVhc3VyZWRUaHJvdWdocHV0UmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkTW9uaXRvcjo6ZG93bmxvYWRSZWNlaXZlZEJ5dGVzKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRGb3JlZ3JvdW5kKToKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlvbkVudGVyZWRCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNb25pdG9yOjpzcGVlZE11bHRpcGxpZXIg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaDogQWRk
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uV2lsbEVu
dGVyRm9yZWdyb3VuZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb246OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXS0NvbnRleHREb3dubG9hZFVSTFJlcXVlc3QpOgorICAgICAgICAoV0tDb250ZXh0
UmVzdW1lRG93bmxvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDpdKToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfZG93bmxvYWRVUkxSZXF1ZXN0Om9y
aWdpbmF0aW5nV2ViVmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbToKKyAgICAgICAgKC1bX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uIGRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcl0pOgorICAgICAgICAo
LVtfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gc2V0RG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29j
b2EubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bUNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVz
dHJveSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmluaXNoKToKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHk6OmRpZENhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6On5E
b3dubG9hZFByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6cGxh
dGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9y
bURlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlv
bkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
cm94eTo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxl
RG93bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
TWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDMtMTgg
IEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
V1BFXSBCdW1wIHB1YmxpYyBBUEkgdG8gd3BlLTEuMApJbmRleDogU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CShyZXZpc2lv
biAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC01Myw2ICs1Myw3IEBAIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci4K
IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKIE5ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRNYXAuY3BwCitOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNw
cAogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHAKIAogTmV0d29y
a1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcApJbmRleDogU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsNiArMzI1LDcgQEAgVUlQcm9jZXNzL0NvY29h
L0F1dG9tYXRpb25DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9BdXRvbWF0aW9uU2Vzc2lvbkNs
aWVudC5tbQogVUlQcm9jZXNzL0NvY29hL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lm1tCiBVSVBy
b2Nlc3MvQ29jb2EvRG93bmxvYWRDbGllbnQubW0KK1VJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFBy
b3h5TWFwQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2NvYS9GaW5kQ2xpZW50Lm1tCiBVSVByb2Nlc3Mv
Q29jb2EvRnVsbHNjcmVlbkNsaWVudC5tbQogVUlQcm9jZXNzL0NvY29hL0dsb2JhbEZpbmRJblBh
Z2VTdGF0ZS5tbQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYx
LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcgogCiAgICAgZm9y
IChhdXRvJiBzY2hlbWUgOiBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNDYW5EaXNw
bGF5T25seUlmQ2FuUmVxdWVzdCkKICAgICAgICAgcmVnaXN0ZXJVUkxTY2hlbWVBc0NhbkRpc3Bs
YXlPbmx5SWZDYW5SZXF1ZXN0KHNjaGVtZSk7CisgICAgCisgICAgbV9kb3dubG9hZE1vbml0b3JT
cGVlZE11bHRpcGxpZXIgPSBwYXJhbWV0ZXJzLmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGll
cjsKIAogICAgIFJFTEVBU0VfTE9HKFByb2Nlc3MsICIlcCAtIE5ldHdvcmtQcm9jZXNzOjppbml0
aWFsaXplTmV0d29ya1Byb2Nlc3M6IFByZXNlbnRpbmcgcHJvY2VzcyA9ICVkIiwgdGhpcywgV2Vi
Q29yZTo6cHJlc2VudGluZ0FwcGxpY2F0aW9uUElEKCkpOwogfQpAQCAtMTk1NSw2ICsxOTU3LDE2
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNhbmNlbFByZXBhcmVUb1N1c3AKICAgICAgICAgY29u
bmVjdGlvbi0+ZW5kU3VzcGVuc2lvbigpOwogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNzOjphcHBs
aWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCit7CisgICAgbV9kb3dubG9hZE1hbmFnZXIuYXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6
YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKK3sKKyAgICBtX2Rvd25sb2FkTWFuYWdl
ci5hcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKTsKK30KKwogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cHJvY2Vzc0RpZFJlc3VtZSgpCiB7CiAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3Bl
bnNpb24sICIlcCAtIE5ldHdvcmtQcm9jZXNzOjpwcm9jZXNzRGlkUmVzdW1lKCkiLCB0aGlzKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJ
KHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDYgKzM2Niw3IEBAIHByaXZhdGU6CiAg
ICAgSVBDOjpDb25uZWN0aW9uKiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbkZvckRvd25sb2Fkcygp
IG92ZXJyaWRlIHsgcmV0dXJuIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCk7IH0KICAgICBBdXRo
ZW50aWNhdGlvbk1hbmFnZXImIGRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpIG92ZXJy
aWRlOwogICAgIHZvaWQgcGVuZGluZ0Rvd25sb2FkQ2FuY2VsZWQoRG93bmxvYWRJRCkgb3ZlcnJp
ZGU7CisgICAgdWludDMyX3QgZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9kb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXI7IH0KIAog
ICAgIC8vIE1lc3NhZ2UgSGFuZGxlcnMKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTmV0d29ya1By
b2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+Jik7CkBAIC0zOTEsNiArMzkyLDggQEAgcHJpdmF0ZToKICNlbmRp
ZgogICAgIHZvaWQgY29udGludWVXaWxsU2VuZFJlcXVlc3QoRG93bmxvYWRJRCwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYpOwogICAgIHZvaWQgY29udGludWVEZWNpZGVQZW5kaW5nRG93bmxv
YWREZXN0aW5hdGlvbihEb3dubG9hZElELCBTdHJpbmcgZGVzdGluYXRpb24sIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYmLCBib29sIGFsbG93T3ZlcndyaXRlKTsKKyAgICB2b2lkIGFwcGxpY2F0
aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckZv
cmVncm91bmQoKTsKIAogICAgIHZvaWQgc2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsKTsKICAgICB2
b2lkIGFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8mLCBjb25zdCBTdHJpbmcmIGhvc3QpOwpAQCAtNTMyLDYgKzUzNSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1hbmFnZXJzUGVyT3JpZ2lu
OwogICAgIH07CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdl
cnM+IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnM7CisgICAgdWludDMyX3QgbV9kb3dubG9hZE1vbml0
b3JTcGVlZE11bHRpcGxpZXIgeyAxIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
NTIsNiArNTIsOCBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUHVibGlzaERvd25sb2FkUHJvZ3Jlc3MoV2ViS2l0OjpE
b3dubG9hZElEIGRvd25sb2FkSUQsIFVSTCB1cmwsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCiAjZW5kaWYKKyAgICBBcHBsaWNhdGlvbkRp
ZEVudGVyQmFja2dyb3VuZCgpCisgICAgQXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkK
IAogICAgIENvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9h
ZElELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCkKICAgICBDb250aW51ZURlY2lk
ZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9hZElE
LCBTdHJpbmcgZGVzdGluYXRpb24sIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNh
bmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxsb3dPdmVyd3JpdGUpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlIDw8IHVybFNjaGVtZXNTZXJ2aWNlV29ya2Vyc0NhbkhhbmRsZSA8PCBzaG91bGREaXNh
YmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5OwogI2VuZGlmCiAgICAgZW5j
b2RlciA8PCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZTsKKyAgICBlbmNvZGVyIDw8IGRvd25sb2Fk
TW9uaXRvclNwZWVkTXVsdGlwbGllcjsKIH0KIAogYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMmIHJlc3VsdCkKQEAgLTIyMSw2ICsyMjIsMTIgQEAgYm9vbCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LnNob3VsZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjsK
KyAgICBkZWNvZGVyID4+IGRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcjsKKyAgICBpZiAo
IWRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJlc3VsdC5kb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIgPSAqZG93bmxvYWRNb25p
dG9yU3BlZWRNdWx0aXBsaWVyOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMgCiAgICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclBy
b2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKICNlbmRpZgogICAgIGJvb2wgc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAgIHVpbnQzMl90IGRvd25sb2FkTW9uaXRv
clNwZWVkTXVsdGlwbGllciB7IDEgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkLmNwcAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bmNsdWRlICJEb3dubG9hZE1hbmFnZXIuaCIKKyNpbmNsdWRlICJEb3dubG9hZE1vbml0b3IuaCIK
ICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCkBAIC0xMTQsNiArMTE1LDggQEAgdm9pZCBE
b3dubG9hZDo6ZGlkUmVjZWl2ZURhdGEodWludDY0X3QgbAogICAgICAgICBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKCJkaWRSZWNlaXZlRGF0YTogU3RhcnRlZCByZWNlaXZpbmcgZGF0YSAoaWQgPSAl
IiBQUkl1NjQgIikiLCBkb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKICAgICAgICAgbV9oYXNS
ZWNlaXZlZERhdGEgPSB0cnVlOwogICAgIH0KKyAgICAKKyAgICBtX21vbml0b3IuZG93bmxvYWRS
ZWNlaXZlZEJ5dGVzKGxlbmd0aCk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5
OjpEaWRSZWNlaXZlRGF0YShsZW5ndGgpKTsKIH0KQEAgLTEyOSw3ICsxMzIsNyBAQCB2b2lkIERv
d25sb2FkOjpkaWRGaW5pc2goKQogICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSBudWxscHRy
OwogICAgIH0KIAotICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQodGhpcyk7
CisgICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKIHZv
aWQgRG93bmxvYWQ6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IsIGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKQEAgLTE0Myw3ICsxNDYsNyBAQCB2b2lkIERv
d25sb2FkOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyCiAgICAgICAgIG1fc2FuZGJveEV4dGVu
c2lvbi0+cmV2b2tlKCk7CiAgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbiA9IG51bGxwdHI7CiAg
ICAgfQotICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQodGhpcyk7CisgICAg
bV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKIHZvaWQgRG93
bmxvYWQ6OmRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCkBA
IC0xNTYsNyArMTU5LDcgQEAgdm9pZCBEb3dubG9hZDo6ZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0
YQogICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwogICAgICAgICBtX3NhbmRi
b3hFeHRlbnNpb24gPSBudWxscHRyOwogICAgIH0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3du
bG9hZEZpbmlzaGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNo
ZWQoKnRoaXMpOwogfQogCiBJUEM6OkNvbm5lY3Rpb24qIERvd25sb2FkOjptZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKICNpbmNsdWRlICJE
b3dubG9hZE1hbmFnZXIuaCIKKyNpbmNsdWRlICJEb3dubG9hZE1vbml0b3IuaCIKICNpbmNsdWRl
ICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCiAjaW5jbHVk
ZSAiU2FuZGJveEV4dGVuc2lvbi5oIgpAQCAtNTgsNiArNTksNyBAQCBjbGFzcyBSZXNvdXJjZVJl
c3BvbnNlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgRG93bmxvYWRNb25pdG9yOwog
Y2xhc3MgTmV0d29ya0RhdGFUYXNrOwogY2xhc3MgTmV0d29ya1Nlc3Npb247CiBjbGFzcyBXZWJQ
YWdlOwpAQCAtODksNiArOTEsMTIgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmFpbChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVE
YXRhKTsKICAgICB2b2lkIGRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3Vt
ZURhdGEpOwogCisgICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKKwor
ICAgIHZvaWQgYXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSB7IG1fbW9uaXRvci5hcHBs
aWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpOyB9CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxF
bnRlckZvcmVncm91bmQoKSB7IG1fbW9uaXRvci5hcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91
bmQoKTsgfQorICAgIERvd25sb2FkTWFuYWdlciYgbWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZG93bmxvYWRNYW5hZ2VyOyB9CisKIHByaXZhdGU6CiAgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVy
CiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtOTcsOCArMTA1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtQ2Fu
Y2VsTmV0d29ya0xvYWQoKTsKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveURvd25sb2FkKCk7CiAK
LSAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwotCiAgICAgRG93bmxv
YWRNYW5hZ2VyJiBtX2Rvd25sb2FkTWFuYWdlcjsKICAgICBEb3dubG9hZElEIG1fZG93bmxvYWRJ
RDsKICAgICBSZWY8RG93bmxvYWRNYW5hZ2VyOjpDbGllbnQ+IG1fY2xpZW50OwpAQCAtMTE0LDYg
KzEyMCw3IEBAIHByaXZhdGU6CiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAgICAg
U3RyaW5nIG1fc3VnZ2VzdGVkTmFtZTsKICAgICBib29sIG1faGFzUmVjZWl2ZWREYXRhIHsgZmFs
c2UgfTsKKyAgICBEb3dubG9hZE1vbml0b3IgbV9tb25pdG9yIHsgKnRoaXMgfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCShyZXZpc2lvbiAy
NDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTEgKzE2OSwxMCBAQCB2b2lkIERv
d25sb2FkTWFuYWdlcjo6cHVibGlzaERvd25sb2FkUHJvCiB9CiAjZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCiAKLXZvaWQgRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2Fk
KiBkb3dubG9hZCkKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZEZpbmlzaGVkKERvd25s
b2FkJiBkb3dubG9hZCkKIHsKLSAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxv
YWQtPmRvd25sb2FkSUQoKSkpOwotICAgIG1fZG93bmxvYWRzLnJlbW92ZShkb3dubG9hZC0+ZG93
bmxvYWRJRCgpKTsKLSAgICAKKyAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxv
YWQuZG93bmxvYWRJRCgpKSk7CisgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2FkLmRvd25s
b2FkSUQoKSk7CiB9CiAKIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjpkaWRDcmVhdGVEb3dubG9hZCgp
CkBAIC0xOTYsNCArMTk1LDE2IEBAIEF1dGhlbnRpY2F0aW9uTWFuYWdlciYgRG93bmxvYWRNYW5h
Z2VyOjoKICAgICByZXR1cm4gbV9jbGllbnQuZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2Vy
KCk7CiB9CiAKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dy
b3VuZCgpCit7CisgICAgZm9yIChhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVlcygp
KQorICAgICAgICBkb3dubG9hZC0+YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKTsKK30K
Kwordm9pZCBEb3dubG9hZE1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgp
Cit7CisgICAgZm9yIChhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVlcygpKQorICAg
ICAgICBkb3dubG9hZC0+YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgJKHJldmlzaW9uIDI0MzA3
OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFu
YWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICAgICAg
dmlydHVhbCBOZXR3b3JrQmxvYlJlZ2lzdHJ5JiBuZXR3b3JrQmxvYlJlZ2lzdHJ5KCkgPSAwOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGVyZWYoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdWludDMyX3QgZG93bmxvYWRN
b25pdG9yU3BlZWRNdWx0aXBsaWVyKCkgY29uc3QgPSAwOwogICAgIH07CiAKICAgICBleHBsaWNp
dCBEb3dubG9hZE1hbmFnZXIoQ2xpZW50Jik7CkBAIC05OCwxMCArOTksMTMgQEAgcHVibGljOgog
ICAgIAogICAgIERvd25sb2FkKiBkb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQpIHsgcmV0
dXJuIG1fZG93bmxvYWRzLmdldChkb3dubG9hZElEKTsgfQogCi0gICAgdm9pZCBkb3dubG9hZEZp
bmlzaGVkKERvd25sb2FkKik7CisgICAgdm9pZCBkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkJik7
CiAgICAgYm9vbCBpc0Rvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gIW1fZG93bmxvYWRzLmlz
RW1wdHkoKTsgfQogICAgIHVpbnQ2NF90IGFjdGl2ZURvd25sb2FkQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2Rvd25sb2Fkcy5zaXplKCk7IH0KIAorICAgIHZvaWQgYXBwbGljYXRpb25EaWRFbnRl
ckJhY2tncm91bmQoKTsKKyAgICB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgp
OworCiAgICAgdm9pZCBkaWRDcmVhdGVEb3dubG9hZCgpOwogICAgIHZvaWQgZGlkRGVzdHJveURv
d25sb2FkKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5jcHAJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsNiArNzUsMTEgQEAgYm9vbCBEb3dubG9hZE1hcDo6cmVtb3ZlKERvd25s
b2FkSUQgZG93bgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2F1dG8gRG93bmxvYWRNYXA6OnZh
bHVlcygpIC0+IERvd25sb2FkTWFwVHlwZTo6VmFsdWVzSXRlcmF0b3JSYW5nZQoreworICAgIHJl
dHVybiBtX2Rvd25sb2Fkcy52YWx1ZXMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
ICNlbmRpZiAvLyBFTkFCTEUoVEFLRV9VTkJPVU5ERURfTkVUV09SS0lOR19BU1NFUlRJT04pCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkTWFwLmgJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5
LDggQEAgcHVibGljOgogICAgIERvd25sb2FkTWFwVHlwZTo6QWRkUmVzdWx0IGFkZChEb3dubG9h
ZElELCBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWQ+JiYpOwogICAgIGJvb2wgcmVtb3ZlKERvd25s
b2FkSUQpOwogCisgICAgRG93bmxvYWRNYXBUeXBlOjpWYWx1ZXNJdGVyYXRvclJhbmdlIHZhbHVl
cygpOworCiBwcml2YXRlOgogICAgIERvd25sb2FkTWFwVHlwZSBtX2Rvd25sb2FkczsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0Fzc2VydGlvbj4gbV9kb3dubG9hZEFzc2VydGlvbjsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTW9uaXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRNb25pdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRvd25sb2FkTW9uaXRvci5oIgorCisjaW5jbHVkZSAiRG93bmxvYWQuaCIKKyNpbmNs
dWRlICJMb2dnaW5nLmgiCisKKyN1bmRlZiBSRUxFQVNFX0xPR19JRl9BTExPV0VECisjZGVmaW5l
IFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKG1fZG93bmxv
YWQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE5ldHdvcmssICIlcCAtIERvd25sb2FkTW9u
aXRvcjo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisKK25hbWVzcGFjZSBXZWJLaXQgewor
Citjb25zdGV4cHIgdWludDY0X3Qgb3BlcmF0b3IiIiBfa2Jwcyh1bnNpZ25lZCBsb25nIGxvbmcg
a2lsb2J5dGVzUGVyU2Vjb25kKQoreworICAgIHJldHVybiBraWxvYnl0ZXNQZXJTZWNvbmQgKiAx
MDI0OworfQorCitzdHJ1Y3QgVGhyb3VnaHB1dEludGVydmFsIHsKKyAgICBTZWNvbmRzIHRpbWU7
CisgICAgdWludDY0X3QgYnl0ZXNQZXJTZWNvbmQ7Cit9OworCitzdGF0aWMgY29uc3QgVGhyb3Vn
aHB1dEludGVydmFsIHRocm91Z2hwdXRJbnRlcnZhbHNbXSA9IHsKKyAgICB7IDFfbWluLCAxX2ti
cHMgfSwKKyAgICB7IDVfbWluLCAyX2ticHMgfSwKKyAgICB7IDEwX21pbiwgNF9rYnBzIH0sCisg
ICAgeyAxNV9taW4sIDhfa2JwcyB9LAorICAgIHsgMjBfbWluLCAxNl9rYnBzIH0sCisgICAgeyAy
NV9taW4sIDMyX2ticHMgfSwKKyAgICB7IDMwX21pbiwgNjRfa2JwcyB9LAorICAgIHsgNDVfbWlu
LCA5Nl9rYnBzIH0sCisgICAgeyA2MF9taW4sIDEyOF9rYnBzIH0KK307CisKK3N0YXRpYyBTZWNv
bmRzIHRpbWVVbnRpbE5leHRJbnRlcnZhbChzaXplX3QgY3VycmVudEludGVydmFsKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRJbnRlcnZhbCArIDEgPCBXVEZfQVJSQVlfTEVOR1RIKHRo
cm91Z2hwdXRJbnRlcnZhbHMpKTsKKyAgICByZXR1cm4gdGhyb3VnaHB1dEludGVydmFsc1tjdXJy
ZW50SW50ZXJ2YWwgKyAxXS50aW1lIC0gdGhyb3VnaHB1dEludGVydmFsc1tjdXJyZW50SW50ZXJ2
YWxdLnRpbWU7Cit9CisKK0Rvd25sb2FkTW9uaXRvcjo6RG93bmxvYWRNb25pdG9yKERvd25sb2Fk
JiBkb3dubG9hZCkKKyAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCit7Cit9CisKK2RvdWJsZSBE
b3dubG9hZE1vbml0b3I6Om1lYXN1cmVkVGhyb3VnaHB1dFJhdGUoKSBjb25zdAoreworICAgIHVp
bnQ2NF90IGJ5dGVzIHsgMCB9OworICAgIGZvciAoY29uc3QgYXV0byYgdGltZXN0YW1wIDogbV90
aW1lc3RhbXBzKQorICAgICAgICBieXRlcyArPSB0aW1lc3RhbXAuYnl0ZXNSZWNlaXZlZDsKKyAg
ICBpZiAoIWJ5dGVzKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoIW1fdGltZXN0YW1w
cy5pc0VtcHR5KCkpOworICAgIFNlY29uZHMgdGltZURpZmZlcmVuY2UgPSBtX3RpbWVzdGFtcHMu
bGFzdCgpLnRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKSAtIG1fdGltZXN0YW1wcy5maXJzdCgpLnRp
bWUuc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICBkb3VibGUgc2Vjb25kcyA9IHRpbWVEaWZmZXJl
bmNlLnNlY29uZHMoKTsKKyAgICBpZiAoIXNlY29uZHMpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpOworICAgIHJldHVybiBieXRlcyAvIHNlY29uZHM7
Cit9CisKK3ZvaWQgRG93bmxvYWRNb25pdG9yOjpkb3dubG9hZFJlY2VpdmVkQnl0ZXModWludDY0
X3QgYnl0ZXNSZWNlaXZlZCkKK3sKKyAgICBpZiAobV90aW1lc3RhbXBzLnNpemUoKSA+IHRpbWVz
dGFtcENhcGFjaXR5IC0gMSkgeworICAgICAgICBBU1NFUlQobV90aW1lc3RhbXBzLnNpemUoKSA9
PSB0aW1lc3RhbXBDYXBhY2l0eSk7CisgICAgICAgIG1fdGltZXN0YW1wcy5yZW1vdmVGaXJzdCgp
OworICAgIH0KKyAgICBtX3RpbWVzdGFtcHMuYXBwZW5kKHsgTW9ub3RvbmljVGltZTo6bm93KCks
IGJ5dGVzUmVjZWl2ZWQgfSk7Cit9CisKK3ZvaWQgRG93bmxvYWRNb25pdG9yOjphcHBsaWNhdGlv
bldpbGxFbnRlckZvcmVncm91bmQoKQoreworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImFw
cGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rvd25s
b2FkLmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgIG1fdGltZXIuc3RvcCgpOworICAg
IG1faW50ZXJ2YWwgPSAwOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6YXBwbGljYXRpb25E
aWRFbnRlckJhY2tncm91bmQoKQoreworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImFwcGxp
Y2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQu
ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CisgICAgQVNTRVJUKCFtX3RpbWVyLmlzQWN0aXZl
KCkpOworICAgIEFTU0VSVCghbV9pbnRlcnZhbCk7CisgICAgbV90aW1lci5zdGFydE9uZVNob3Qo
dGhyb3VnaHB1dEludGVydmFsc1swXS50aW1lIC8gc3BlZWRNdWx0aXBsaWVyKCkpOworfQorCit1
aW50MzJfdCBEb3dubG9hZE1vbml0b3I6OnNwZWVkTXVsdGlwbGllcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZG93bmxvYWQubWFuYWdlcigpLmNsaWVudCgpLmRvd25sb2FkTW9uaXRvclNwZWVk
TXVsdGlwbGllcigpOworfQorCit2b2lkIERvd25sb2FkTW9uaXRvcjo6dGltZXJGaXJlZCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9pbnRlcnZhbCA8IFdURl9BUlJBWV9MRU5HVEgodGhyb3Vn
aHB1dEludGVydmFscykpOworICAgIGlmIChtZWFzdXJlZFRocm91Z2hwdXRSYXRlKCkgPCB0aHJv
dWdocHV0SW50ZXJ2YWxzW21faW50ZXJ2YWxdLmJ5dGVzUGVyU2Vjb25kKSB7CisgICAgICAgIFJF
TEVBU0VfTE9HX0lGX0FMTE9XRUQoInRpbWVyRmlyZWQ6IGNhbmNlbGxpbmcgZG93bmxvYWQgKGlk
ID0gJSIgUFJJdTY0ICIpIiwgbV9kb3dubG9hZC5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsK
KyAgICAgICAgbV9kb3dubG9hZC5jYW5jZWwoKTsKKyAgICB9IGVsc2UgaWYgKG1faW50ZXJ2YWwg
KyAxIDwgV1RGX0FSUkFZX0xFTkdUSCh0aHJvdWdocHV0SW50ZXJ2YWxzKSkgeworICAgICAgICBS
RUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVkOiBzdWZmaWNpZW50IHRocm91Z2hwdXQg
cmF0ZSAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rvd25sb2FkLmRvd25sb2FkSUQoKS5kb3dubG9h
ZElEKCkpOworICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCh0aW1lVW50aWxOZXh0SW50ZXJ2
YWwobV9pbnRlcnZhbCsrKSAvIHNwZWVkTXVsdGlwbGllcigpKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidGltZXJGaXJlZDogRG93bmxvYWQgcmVhY2hlZCB0
aHJlc2hvbGQgdG8gbm90IGJlIHRlcm1pbmF0ZWQgKGlkID0gJSIgUFJJdTY0ICIpIiwgbV9kb3du
bG9hZC5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1vbml0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxXZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBEb3dubG9hZDsKKworY2xhc3MgRG93bmxvYWRNb25pdG9yIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb3dubG9hZE1vbml0b3IpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBEb3dubG9hZE1vbml0b3IoRG93bmxvYWQmKTsKKyAgICAK
KyAgICB2b2lkIGFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBs
aWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKTsKKyAgICB2b2lkIGRvd25sb2FkUmVjZWl2ZWRC
eXRlcyh1aW50NjRfdCk7CisgICAgdm9pZCB0aW1lckZpcmVkKCk7CisKK3ByaXZhdGU6CisgICAg
RG93bmxvYWQmIG1fZG93bmxvYWQ7CisKKyAgICBkb3VibGUgbWVhc3VyZWRUaHJvdWdocHV0UmF0
ZSgpIGNvbnN0OworICAgIHVpbnQzMl90IHNwZWVkTXVsdGlwbGllcigpIGNvbnN0OworICAgIAor
ICAgIHN0cnVjdCBUaW1lc3RhbXAgeworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWU7CisgICAg
ICAgIHVpbnQ2NF90IGJ5dGVzUmVjZWl2ZWQ7CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCB0aW1lc3RhbXBDYXBhY2l0eSA9IDEwOworICAgIERlcXVlPFRpbWVzdGFtcCwgdGlt
ZXN0YW1wQ2FwYWNpdHk+IG1fdGltZXN0YW1wczsKKyAgICBXZWJDb3JlOjpUaW1lciBtX3RpbWVy
IHsgKnRoaXMsICZEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQgfTsKKyAgICBzaXplX3QgbV9p
bnRlcnZhbCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGNhY2hlc09y
aWdpbkZpbGVuYW0KICAgICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KGNhY2hlc1Jvb3RQYXRoLCAib3JpZ2luIl9zKTsKIH0KIAotQ2FjaGVzOjpDYWNoZXMoRW5n
aW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9v
dFBhdGgsIFN0b3JhZ2VRdW90YU1hbmFnZXImIHF1b3RhTWFuYWdlcikKK0NhY2hlczo6Q2FjaGVz
KEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYm
IHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFnZXIpCiAg
ICAgOiBtX2VuZ2luZSgmZW5naW5lKQogICAgICwgbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQog
ICAgICwgbV9yb290UGF0aChXVEZNb3ZlKHJvb3RQYXRoKSkKQEAgLTUwMCwxMCArNTAwLDEwIEBA
IHZvaWQgQ2FjaGVzOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2UKIAogICAgIG1fcXVvdGFN
YW5hZ2VyLT5yZXF1ZXN0U3BhY2Uoc3BhY2VSZXF1aXJlZCwgW2NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8gZGVjaXNpb24pIHsKICAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgewot
ICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OgogICAg
ICAgICAgICAgY2FsbGJhY2soRXJyb3I6OlF1b3RhRXhjZWVkZWQpOwogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3Jh
bnQ6CiAgICAgICAgICAgICBjYWxsYmFjayh7IH0pOwogICAgICAgICB9OwogICAgIH0pOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
b25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAyNDMwNzgp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOwogdXNp
bmcgbmFtZXNwYWNlIENhY2hlU3RvcmFnZTsKIAorI3VuZGVmIFJFTEVBU0VfTE9HX0lGX0FMTE9X
RUQKICNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChmbXQsIC4uLikgUkVMRUFTRV9MT0df
SUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBDYWNoZVN0b3JhZ2UsICIl
cCAtIENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb246OiIgZm10LCAmbV9jb25uZWN0aW9uLmNv
bm5lY3Rpb24oKSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgUkVMRUFTRV9MT0dfRlVOQ1RJT05f
SUZfQUxMT1dFRF9JTl9DQUxMQkFDSyhmdW5jdGlvbk5hbWUsIGZtdCwgcmVzdWx0R2V0dGVyKSBc
CiAgICAgaWYgKCFyZXN1bHQuaGFzX3ZhbHVlKCkpXApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkg
eyB9OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSA9IDA7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jikg
PSAwOwogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkq
LCBXZWJGcmFtZVByb3h5KiwgQVBJOjpPcGVuUGFuZWxQYXJhbWV0ZXJzKiwgV2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXJQcm94eSopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IHNob3dTaGFyZVNoZWV0KGNvbnN0IFdlYkNvcmU6OlNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmLCBX
VEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQgKGJvb2wpPiYmKSB7IHJldHVybiBmYWxzZTsgfQpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAy
NDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODM3LDEzICsyODM3LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNl
aXZlZFBvbGljeURlY2lzaW8KICAgICBEb3dubG9hZElEIGRvd25sb2FkSUQgPSB7IH07CiAgICAg
aWYgKGFjdGlvbiA9PSBQb2xpY3lBY3Rpb246OkRvd25sb2FkKSB7CiAgICAgICAgIC8vIENyZWF0
ZSBhIGRvd25sb2FkIHByb3h5LgotICAgICAgICBhdXRvKiBkb3dubG9hZCA9IG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5jcmVhdGVEb3dubG9hZFByb3h5KG1fZGVjaWRlUG9saWN5Rm9yUmVzcG9u
c2VSZXF1ZXN0LCB0aGlzKTsKKyAgICAgICAgYXV0byYgZG93bmxvYWQgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkuY3JlYXRlRG93bmxvYWRQcm94eShtX2RlY2lkZVBvbGljeUZvclJlc3BvbnNl
UmVxdWVzdCwgdGhpcyk7CiAgICAgICAgIGlmIChuYXZpZ2F0aW9uKSB7Ci0gICAgICAgICAgICBk
b3dubG9hZC0+c2V0V2FzVXNlckluaXRpYXRlZChuYXZpZ2F0aW9uLT53YXNVc2VySW5pdGlhdGVk
KCkpOwotICAgICAgICAgICAgZG93bmxvYWQtPnNldFJlZGlyZWN0Q2hhaW4obmF2aWdhdGlvbi0+
dGFrZVJlZGlyZWN0Q2hhaW4oKSk7CisgICAgICAgICAgICBkb3dubG9hZC5zZXRXYXNVc2VySW5p
dGlhdGVkKG5hdmlnYXRpb24tPndhc1VzZXJJbml0aWF0ZWQoKSk7CisgICAgICAgICAgICBkb3du
bG9hZC5zZXRSZWRpcmVjdENoYWluKG5hdmlnYXRpb24tPnRha2VSZWRpcmVjdENoYWluKCkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgZG93bmxvYWRJRCA9IGRvd25sb2FkLT5kb3dubG9hZElEKCk7
CisgICAgICAgIGRvd25sb2FkSUQgPSBkb3dubG9hZC5kb3dubG9hZElEKCk7CiAgICAgICAgIGhh
bmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiAgICAgICAgIG1fZGVjaWRlUG9saWN5Rm9y
UmVzcG9uc2VSZXF1ZXN0ID0geyB9OwogICAgIH0KQEAgLTU0MzAsNyArNTQzMCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRNYXlTdGFydE1lZGlhV2hlbkkKICAgICBwcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2V0TWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdyhtYXlTdGFydE1l
ZGlhKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlRG93bmxvYWRS
ZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQordm9pZCBXZWJQYWdlUHJveHk6OmhhbmRs
ZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKIHsKICAgICBwYWdlQ2xp
ZW50KCkuaGFuZGxlRG93bmxvYWRSZXF1ZXN0KGRvd25sb2FkKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwMSw3
ICsxMTAxLDcgQEAgcHVibGljOgogCiAgICAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBjcmVh
dGlvblBhcmFtZXRlcnMoV2ViUHJvY2Vzc1Byb3h5JiwgRHJhd2luZ0FyZWFQcm94eSYpOwogCi0g
ICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOworICAgIHZvaWQg
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKTsKIAogICAgIHZvaWQgYWR2YW5j
ZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pOwogICAgIHZvaWQg
Y2hhbmdlU3BlbGxpbmdUb1dvcmQoY29uc3QgU3RyaW5nJiB3b3JkKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHJldmlzaW9uIDI0MzA3OCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMxNiw5ICsxMzE2LDkgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzUGFnZXNVc2lu
Z1dlYnNpdAogICAgIHJldHVybiBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuY29udGFpbnMoZGF0YVN0
b3JlLnNlc3Npb25JRCgpKTsKIH0KIAotRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bvb2w6OmRv
d25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK0Rvd25sb2FkUHJv
eHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdl
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZW5hbWUpCiB7Ci0gICAgYXV0byogZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJv
eHkocmVxdWVzdCwgaW5pdGlhdGluZ1BhZ2UpOworICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBj
cmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlKTsKICAgICBQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQgPSBpbml0aWF0aW5nUGFnZSA/IGluaXRpYXRpbmdQYWdlLT5zZXNz
aW9uSUQoKSA6IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CiAKICAgICBpZiAo
aW5pdGlhdGluZ1BhZ2UpCkBAIC0xMzQxLDE2ICsxMzQxLDE2IEBAIERvd25sb2FkUHJveHkqIFdl
YlByb2Nlc3NQb29sOjpkb3dubG9hZCgKICAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25s
b2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKSwgdXBkYXRl
ZFJlcXVlc3QsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lv
bklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIHN1Z2dlc3Rl
ZEZpbGVuYW1lKSwgMCk7CiAgICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogICAgIH0KIAog
ICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQogCi1Eb3dubG9hZFByb3h5KiBXZWJQcm9jZXNz
UG9vbDo6cmVzdW1lRG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3Qg
QVBJOjpEYXRhKiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCitEb3dubG9hZFByb3h5
JiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5n
UGFnZSwgY29uc3QgQVBJOjpEYXRhKiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7
Ci0gICAgYXV0byogZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoUmVzb3VyY2VS
ZXF1ZXN0KCksIGluaXRpYXRpbmdQYWdlKTsKKyAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3Jl
YXRlRG93bmxvYWRQcm94eShSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2UpOwogICAg
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGluaXRpYXRpbmdQYWdlID8gaW5pdGlhdGluZ1Bh
Z2UtPnNlc3Npb25JRCgpIDogUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKIAog
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwpAQCAt
MTM1OCw3ICsxMzU4LDcgQEAgRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURv
dwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAogICAg
IGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25s
b2FkUHJveHktPmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS0+ZGF0YVJlZmVyZW5jZSgpLCBwYXRo
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQs
IGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLT5kYXRhUmVmZXJlbmNlKCks
IHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAgICAgICAgcmV0dXJuIGRvd25s
b2FkUHJveHk7CiAgICAgfQogCkBAIC0xNjA5LDEzICsxNjA5LDE4IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKHRpbWVvdXRJ
bnRlcnZhbCkpOwogfQogCi1Eb3dubG9hZFByb3h5KiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93
bmxvYWRQcm94eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSog
b3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURv
d25sb2FkUHJveHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkq
IG9yaWdpbmF0aW5nUGFnZSkKIHsKLSAgICBhdXRvIGRvd25sb2FkUHJveHkgPSBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkocmVxdWVzdCk7Ci0gICAgZG93bmxvYWRQ
cm94eS0+c2V0T3JpZ2luYXRpbmdQYWdlKG9yaWdpbmF0aW5nUGFnZSk7CisgICAgYXV0byYgZG93
bmxvYWRQcm94eSA9IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShy
ZXF1ZXN0KTsKKyAgICBkb3dubG9hZFByb3h5LnNldE9yaWdpbmF0aW5nUGFnZShvcmlnaW5hdGlu
Z1BhZ2UpOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQogCit2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKK3sKKyAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3Vu
ZCk7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0
cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYg
bWVzc2FnZVJlY2VpdmVyKQogewogICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VS
ZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lLCBtZXNzYWdlUmVjZWl2ZXIpOwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCShyZXZpc2lvbiAyNDMwNzgpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTQsOCArMTk0LDggQEAgcHVibGljOgogCiAgICAgY29uc3QgU3RyaW5nJiBpbmplY3Rl
ZEJ1bmRsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmluamVjdGVkQnVu
ZGxlUGF0aCgpOyB9CiAKLSAgICBEb3dubG9hZFByb3h5KiBkb3dubG9hZChXZWJQYWdlUHJveHkq
IGluaXRpYXRpbmdQYWdlLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lID0geyB9KTsKLSAgICBEb3dubG9hZFByb3h5KiByZXN1
bWVEb3dubG9hZChXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBBUEk6OkRhdGEq
IHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgRG93bmxvYWRQcm94eSYgZG93
bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7CisgICAg
RG93bmxvYWRQcm94eSYgcmVzdW1lRG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFn
ZSwgY29uc3QgQVBJOjpEYXRhKiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAg
ICAgdm9pZCBzZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEoUmVmUHRyPEFQ
STo6T2JqZWN0PiYmIHVzZXJEYXRhKSB7IG1faW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVz
ZXJEYXRhID0gV1RGTW92ZSh1c2VyRGF0YSk7IH0KIApAQCAtMjY3LDcgKzI2Nyw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEVuaGFuY2VkQWNjZXNzaWJpbGl0eShib29sKTsKICAgICAKICAgICAv
LyBEb3dubG9hZHMuCi0gICAgRG93bmxvYWRQcm94eSogY3JlYXRlRG93bmxvYWRQcm94eShjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFn
ZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CiAgICAg
QVBJOjpEb3dubG9hZENsaWVudCYgZG93bmxvYWRDbGllbnQoKSB7IHJldHVybiAqbV9kb3dubG9h
ZENsaWVudDsgfQogCiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9y
eUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KQEAgLTQzMCw2ICs0MzAsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQogICAgIGJvb2wg
c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxk
VGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbjsgfQogCisgICAgdm9pZCBzeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCk7CisgICAgCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAg
ICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwogICAgIHZvaWQgZ2Ft
ZXBhZERpc2Nvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uY3BwCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYg
KzExNSw3IEBAIFJlZjxQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24+IFByb2Nlc3NQb28KICAgICBj
b3B5LT5tX3Nob3VsZENhcHR1cmVBdWRpb0luVUlQcm9jZXNzID0gdGhpcy0+bV9zaG91bGRDYXB0
dXJlQXVkaW9JblVJUHJvY2VzczsKICAgICBjb3B5LT5tX3Nob3VsZENhcHR1cmVEaXNwbGF5SW5V
SVByb2Nlc3MgPSB0aGlzLT5tX3Nob3VsZENhcHR1cmVEaXNwbGF5SW5VSVByb2Nlc3M7CiAgICAg
Y29weS0+bV9pc0pJVEVuYWJsZWQgPSB0aGlzLT5tX2lzSklURW5hYmxlZDsKKyAgICBjb3B5LT5t
X2Rvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllciA9IHRoaXMtPm1fZG93bmxvYWRNb25pdG9y
U3BlZWRNdWx0aXBsaWVyOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgY29weS0+bV9j
dERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUgPSB0aGlzLT5tX2N0RGF0YUNvbm5lY3Rpb25TZXJ2
aWNlVHlwZTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaAkocmV2aXNpb24gMjQzMDc4
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw5IEBAIHB1YmxpYzoKICAgICBib29s
IHVzZXNTaW5nbGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzU2luZ2xlV2ViUHJv
Y2VzczsgfQogICAgIHZvaWQgc2V0VXNlc1NpbmdsZVdlYlByb2Nlc3MoYm9vbCBlbmFibGVkKSB7
IG1fdXNlc1NpbmdsZVdlYlByb2Nlc3MgPSBlbmFibGVkOyB9CiAKKyAgICB1aW50MzJfdCBkb3du
bG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIoKSBjb25zdCB7IHJldHVybiBtX2Rvd25sb2FkTW9u
aXRvclNwZWVkTXVsdGlwbGllcjsgfQorICAgIHZvaWQgc2V0RG93bmxvYWRNb25pdG9yU3BlZWRN
dWx0aXBsaWVyKHVpbnQzMl90IG11bHRpcGxpZXIpIHsgbV9kb3dubG9hZE1vbml0b3JTcGVlZE11
bHRpcGxpZXIgPSBtdWx0aXBsaWVyOyB9CisgICAgCiAgICAgYm9vbCBpc0F1dG9tYXRpY1Byb2Nl
c3NXYXJtaW5nRW5hYmxlZCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9pc0F1dG9t
YXRpY1Byb2Nlc3NXYXJtaW5nRW5hYmxlZEJ5Q2xpZW50LnZhbHVlT3IobV9jbGllbnRXb3VsZEJl
bmVmaXRGcm9tQXV0b21hdGljUHJvY2Vzc1ByZXdhcm1pbmcpOwpAQCAtMjI4LDYgKzIzMSw3IEBA
IHByaXZhdGU6CiAgICAgV1RGOjpTdHJpbmcgbV9jdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXI7CiAgICAgYm9vbCBtX2lzSklURW5hYmxlZCB7IHRydWUgfTsKICAgICBib29s
IG1fdXNlc1NpbmdsZVdlYlByb2Nlc3MgeyBmYWxzZSB9OworICAgIHVpbnQzMl90IG1fZG93bmxv
YWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyIHsgMSB9OwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBXVEY6OlN0cmluZyBtX2N0RGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkocmV2aXNpb24g
MjQzMDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc1LDEyICsyNzUsMTIgQEAgdm9pZCBXS0NvbnRleHRTZXRDb25u
ZWN0aW9uQ2xpZW50KFdLQ29udAogCiBXS0Rvd25sb2FkUmVmIFdLQ29udGV4dERvd25sb2FkVVJM
UmVxdWVzdChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3RS
ZWYpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJl
ZiktPmRvd25sb2FkKDAsIFdlYktpdDo6dG9JbXBsKHJlcXVlc3RSZWYpLT5yZXNvdXJjZVJlcXVl
c3QoKSkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjb250ZXh0
UmVmKS0+ZG93bmxvYWQoMCwgV2ViS2l0Ojp0b0ltcGwocmVxdWVzdFJlZiktPnJlc291cmNlUmVx
dWVzdCgpKSk7CiB9CiAKIFdLRG93bmxvYWRSZWYgV0tDb250ZXh0UmVzdW1lRG93bmxvYWQoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIFdLRGF0YVJlZiByZXN1bWVEYXRhLCBXS1N0cmluZ1JlZiBw
YXRoKQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5yZXN1bWVEb3dubG9hZChudWxscHRyLCBXZWJLaXQ6OnRvSW1wbChyZXN1bWVEYXRhKSwg
V2ViS2l0Ojp0b1dURlN0cmluZyhwYXRoKSkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZX
ZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cmVzdW1lRG93bmxvYWQobnVsbHB0ciwgV2ViS2l0
Ojp0b0ltcGwocmVzdW1lRGF0YSksIFdlYktpdDo6dG9XVEZTdHJpbmcocGF0aCkpKTsKIH0KIAog
dm9pZCBXS0NvbnRleHRTZXRJbml0aWFsaXphdGlvblVzZXJEYXRhRm9ySW5qZWN0ZWRCdW5kbGUo
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsICBXS1R5cGVSZWYgdXNlckRhdGFSZWYpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5t
bQkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2wubW0JKHdvcmtpbmcgY29weSkKQEAgLTU1OCw2ICs1NTgsMTEgQEAgLSAo
dm9pZClfc2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ6KEJPTwogICAgIF9wcm9jZXNzUG9vbC0+
c2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKKy0gKHZvaWQpX3N5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAoreworICAgIF9wcm9jZXNzUG9v
bC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogLSAodm9pZClf
c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKSBhbGxvd3MK
IHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC01ODIsNyArNTg3LDcgQEAgLSAodm9p
ZClfc2V0Q29yZUxvY2F0aW9uUHJvdmlkZXI6KGlkPF9XSwogCiAtIChfV0tEb3dubG9hZCAqKV9k
b3dubG9hZFVSTFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Qgb3JpZ2luYXRpbmdXZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3CiB7Ci0gICAgcmV0dXJuIChfV0tEb3dubG9hZCAqKV9w
cm9jZXNzUG9vbC0+ZG93bmxvYWQoW3dlYlZpZXcgX3BhZ2VdLCByZXF1ZXN0KS0+d3JhcHBlcigp
OworICAgIHJldHVybiAoX1dLRG93bmxvYWQgKilfcHJvY2Vzc1Bvb2wtPmRvd25sb2FkKFt3ZWJW
aWV3IF9wYWdlXSwgcmVxdWVzdCkud3JhcHBlcigpOwogfQogCiAtIChfV0tEb3dubG9hZCAqKV9y
ZXN1bWVEb3dubG9hZEZyb21EYXRhOihOU0RhdGEgKilyZXN1bWVEYXRhIHBhdGg6KE5TU3RyaW5n
ICopcGF0aCBvcmlnaW5hdGluZ1dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5
LDUgKzExOSw2IEBACiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3Rv
cmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRlcj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlv
bmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19B
UElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29va2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRl
ZCIsIG1hY29zeCgxMC4xMi4zLCBXS19NQUNfVEJBKSwgaW9zKDEwLjMsIFdLX0lPU19UQkEpKTsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzU3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQs
IHNldHRlcj1fc2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ6KSBCT09MIF9zdG9yYWdlQWNjZXNz
QVBJRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMy40KSwgaW9zKDExLjMpKTsK
Ky0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19B
UElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogQGVu
ZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29s
Q29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaAkocmV2aXNpb24gMjQzMDc4KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIFdLX0NMQVNTX0FWQUlM
QUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4KIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHBh
Z2VDYWNoZUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTQpLCBpb3MoMTIuMCkp
OwogQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgc3VwcHJlc3Nlc0Nvbm5lY3Rpb25UZXJtaW5h
dGlvbk9uU3lzdGVtQ2hhbmdlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjE0KSwgaW9zKDEy
LjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNKSVRFbmFibGVkKSBCT09MIEpJ
VEVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CitAcHJvcGVydHkgKG5vbmF0b21pYykgTlNVSW50ZWdlciBkb3dubG9hZE1vbml0b3JT
cGVlZE11bHRpcGxpZXJGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24ubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5tbQkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzI0LDYgKzMyNCwxNiBAQCAtICh2b2lkKXNldEpJVEVuYWJsZWQ6KEJPT0wpZW5hYmxl
ZAogICAgIF9wcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24tPnNldEpJVEVuYWJsZWQoZW5hYmxlZCk7
CiB9CiAKKy0gKE5TVUludGVnZXIpZG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyRm9yVGVz
dGluZworeworICAgIHJldHVybiBfcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLT5kb3dubG9hZE1v
bml0b3JTcGVlZE11bHRpcGxpZXIoKTsKK30KKworLSAodm9pZClzZXREb3dubG9hZE1vbml0b3JT
cGVlZE11bHRpcGxpZXJGb3JUZXN0aW5nOihOU1VJbnRlZ2VyKW11bHRpcGxpZXIKK3sKKyAgICBf
cHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLT5zZXREb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxp
ZXIobXVsdGlwbGllcik7Cit9CisKIC0gKHZvaWQpc2V0U3VwcHJlc3Nlc0Nvbm5lY3Rpb25UZXJt
aW5hdGlvbk9uU3lzdGVtQ2hhbmdlOihCT09MKXN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRp
b25PblN5c3RlbUNoYW5nZQogewogICAgIF9wcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24tPnNldFN1
cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5nZShzdXBwcmVzc2VzQ29u
bmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2UpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHJldmlz
aW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjM5LDcgKzE2MzksNyBAQCBXZWJLaXRE
b3dubG9hZCogd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlCiBXZWJLaXREb3dubG9hZCogd2Via2l0
V2ViQ29udGV4dFN0YXJ0RG93bmxvYWQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3Qg
Y2hhciogdXJpLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlKQogewogICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFN0cmluZzo6ZnJvbVVURjgodXJpKSk7Ci0gICAgcmV0
dXJuIHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKGNvbnRleHQtPnByaXYtPnBy
b2Nlc3NQb29sLT5kb3dubG9hZChpbml0aWF0aW5nUGFnZSwgcmVxdWVzdCkpOworICAgIHJldHVy
biB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCgmY29udGV4dC0+cHJpdi0+cHJv
Y2Vzc1Bvb2wtPmRvd25sb2FkKGluaXRpYXRpbmdQYWdlLCByZXF1ZXN0KSk7CiB9CiAKIHZvaWQg
d2Via2l0V2ViQ29udGV4dFJlbW92ZURvd25sb2FkKERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJv
eHkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VD
bGllbnRJbXBsLmNwcAkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSwxMCAr
Mjk5LDEwIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnN0YXJ0RHJhZyhSZWY8U2VsZWMKIH0KICNl
bmRpZgogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxv
YWRQcm94eSogZG93bmxvYWQpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9hZFJl
cXVlc3QoRG93bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7CiAgICAgaWYgKFdFQktJVF9JU19XRUJf
VklFVyhtX3ZpZXdXaWRnZXQpKQotICAgICAgICB3ZWJraXRXZWJWaWV3SGFuZGxlRG93bmxvYWRS
ZXF1ZXN0KFdFQktJVF9XRUJfVklFVyhtX3ZpZXdXaWRnZXQpLCBkb3dubG9hZCk7CisgICAgICAg
IHdlYmtpdFdlYlZpZXdIYW5kbGVEb3dubG9hZFJlcXVlc3QoV0VCS0lUX1dFQl9WSUVXKG1fdmll
d1dpZGdldCksICZkb3dubG9hZCk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENvbW1p
dExvYWRGb3JNYWluRnJhbWUoY29uc3QgU3RyaW5nJiAvKiBtaW1lVHlwZSAqLywgYm9vbCAvKiB1
c2VDdXN0b21Db250ZW50UHJvdmlkZXIgKi8gKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gMjQzMDc4KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopIG92ZXJyaWRlOwor
ICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBv
dmVycmlkZTsKICAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgYm9vbCB1c2VDdXN0b21Db250ZW50UHJvdmlkZXIpIG92ZXJyaWRlOwogICAg
IHZvaWQgZGlkRmFpbExvYWRGb3JNYWluRnJhbWUoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCShyZXZp
c2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGll
bnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDEwICsxMjQsOSBAQCB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpCiB7CiB9CiAKLXZvaWQgUGFnZUNsaWVudElt
cGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JiBkb3du
bG9hZCkKIHsKLSAgICBBU1NFUlQoZG93bmxvYWQpOwotICAgIG1fdmlldy5oYW5kbGVEb3dubG9h
ZFJlcXVlc3QoKmRvd25sb2FkKTsKKyAgICBtX3ZpZXcuaGFuZGxlRG93bmxvYWRSZXF1ZXN0KGRv
d25sb2FkKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlQ29udGVudFNpemUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAyNDMwNzgpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkaWRDb21t
aXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYsIGJvb2wpIG92ZXJyaWRlOwotICAgIHZv
aWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBvdmVycmlkZTsKKyAgICB2
b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jikgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVy
cmlkZTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvRG93bmxvYWRQcm94
eU1hcENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L0Rvd25sb2FkUHJveHlNYXBDb2NvYS5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29jb2EubW0JKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiRG93bmxvYWRQcm94eU1hcC5oIgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbXBv
cnQgPFVJS2l0L1VJS2l0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQg
RG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1DcmVhdGUoKQoreworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCisgICAgbV9iYWNrZ3JvdW5kT2JzZXJ2ZXIgPSBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyRm9yTmFtZTpVSUFwcGxpY2F0aW9uRGlkRW50ZXJC
YWNrZ3JvdW5kTm90aWZpY2F0aW9uIG9iamVjdDpbVUlBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNh
dGlvbl0gcXVldWU6bmlsIHVzaW5nQmxvY2s6bWFrZUJsb2NrUHRyKFt3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKV0oTlNOb3RpZmljYXRpb24gKikgeworICAgICAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3ZWFrVGhpcy0+YXBwbGljYXRpb25EaWRF
bnRlckJhY2tncm91bmQoKTsKKyAgICB9KS5nZXQoKV07CisgICAgbV9mb3JlZ3JvdW5kT2JzZXJ2
ZXIgPSBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyRm9y
TmFtZTpVSUFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZE5vdGlmaWNhdGlvbiBvYmplY3Q6
W1VJQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dIHF1ZXVlOm5pbCB1c2luZ0Jsb2NrOm1h
a2VCbG9ja1B0cihbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKE5TTm90aWZpY2F0aW9u
ICopIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgd2Vha1RoaXMtPmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpOworICAgIH0pLmdl
dCgpXTsKKyNlbmRpZgorfQorCit2b2lkIERvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVzdHJv
eSgpCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fYmFja2dyb3VuZE9ic2VydmVyLmdl
dCgpXTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9i
c2VydmVyOm1fZm9yZWdyb3VuZE9ic2VydmVyLmdldCgpXTsKKyNlbmRpZgorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMjQzMDc4KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTQsMTEgKzU0LDE0IEBACiAjaW1wb3J0IDxzeXMvcGFyYW0uaD4KICNpbXBvcnQg
PHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgorI2lt
cG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRz
Lmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9keWxkU1BJLmg+CiAKICNpZiBQTEFURk9STShN
QUMpCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NBUmVtb3RlTGF5ZXJTZXJ2ZXIuaD4KKyNlbHNlCisj
aW1wb3J0ICJVSUtpdFNQSS5oIgogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCkBAIC0zMDks
NiArMzEyLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTgogI2Vu
ZGlmCiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gW2RlZmF1bHRz
IGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAi
LCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0
cmluZygpLmdldCgpXV07CisgICAgcGFyYW1ldGVycy5kb3dubG9hZE1vbml0b3JTcGVlZE11bHRp
cGxpZXIgPSBtX2NvbmZpZ3VyYXRpb24tPmRvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcigp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRQcm94eS5jcHAJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIw
OSw3IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkRmluaXNoKCkKICAgICBtX3Byb2Nlc3NQb29s
LT5kb3dubG9hZENsaWVudCgpLmRpZEZpbmlzaCgqbV9wcm9jZXNzUG9vbCwgKnRoaXMpOwogCiAg
ICAgLy8gVGhpcyBjYW4gY2F1c2UgdGhlIERvd25sb2FkUHJveHkgb2JqZWN0IHRvIGJlIGRlbGV0
ZWQuCi0gICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQodGhpcyk7CisgICAg
bV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwogfQogCiBzdGF0aWMg
UmVmUHRyPEFQSTo6RGF0YT4gY3JlYXRlRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRh
dGEpCkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGYWlsKGNvbnN0
IFJlc291cgogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlkRmFpbCgqbV9w
cm9jZXNzUG9vbCwgKnRoaXMsIGVycm9yKTsKIAogICAgIC8vIFRoaXMgY2FuIGNhdXNlIHRoZSBE
b3dubG9hZFByb3h5IG9iamVjdCB0byBiZSBkZWxldGVkLgotICAgIG1fZG93bmxvYWRQcm94eU1h
cC5kb3dubG9hZEZpbmlzaGVkKHRoaXMpOworICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9h
ZEZpbmlzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRDYW5jZWwoY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKQpAQCAtMjQwLDcgKzI0MCw3IEBAIHZv
aWQgRG93bmxvYWRQcm94eTo6ZGlkQ2FuY2VsKGNvbnN0IElQQzoKICAgICBtX3Byb2Nlc3NQb29s
LT5kb3dubG9hZENsaWVudCgpLmRpZENhbmNlbCgqbV9wcm9jZXNzUG9vbCwgKnRoaXMpOwogCiAg
ICAgLy8gVGhpcyBjYW4gY2F1c2UgdGhlIERvd25sb2FkUHJveHkgb2JqZWN0IHRvIGJlIGRlbGV0
ZWQuCi0gICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQodGhpcyk7CisgICAg
bV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMTkgKzQwLDQzIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRG93
bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm9j
ZXNzKQotICAgIDogbV9wcm9jZXNzKCZwcm9jZXNzKQorICAgIDogbV9wcm9jZXNzKG1ha2VXZWFr
UHRyKHByb2Nlc3MpKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNz
ZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5n
LnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgogeworICAgIHBsYXRmb3JtQ3JlYXRlKCk7
CiB9CiAKIERvd25sb2FkUHJveHlNYXA6On5Eb3dubG9hZFByb3h5TWFwKCkKIHsKICAgICBBU1NF
UlQobV9kb3dubG9hZHMuaXNFbXB0eSgpKTsKKyAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIH0KIAot
RG93bmxvYWRQcm94eSogRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVzb3VyY2VSZXF1ZXN0KQorI2lmICFQTEFURk9STShDT0NPQSkKK3ZvaWQgRG93bmxvYWRQcm94
eU1hcDo6cGxhdGZvcm1DcmVhdGUoKQoreworfQorCit2b2lkIERvd25sb2FkUHJveHlNYXA6OnBs
YXRmb3JtRGVzdHJveSgpCit7Cit9CisjZW5kaWYKKwordm9pZCBEb3dubG9hZFByb3h5TWFwOjph
cHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCit7CisgICAgaWYgKG1fcHJvY2VzcykKKyAg
ICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRp
b25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7Cit9CisKK3ZvaWQgRG93bmxvYWRQcm94eU1hcDo6
YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKK3sKKyAgICBpZiAobV9wcm9jZXNzKQor
ICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNh
dGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7Cit9CisKK0Rvd25sb2FkUHJveHkmIERvd25s
b2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQ
b29sLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsK
ICAgICBhdXRvIGRvd25sb2FkUHJveHkgPSBEb3dubG9hZFByb3h5OjpjcmVhdGUoKnRoaXMsIHBy
b2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QpOwogICAgIG1fZG93bmxvYWRzLnNldChkb3dubG9h
ZFByb3h5LT5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuY29weVJlZigpKTsKQEAgLTY0LDEy
ICs4OCwxMiBAQCBEb3dubG9hZFByb3h5KiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVECiAKICAg
ICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAotICAgIHJldHVybiBkb3dubG9hZFByb3h5
LnB0cigpOworICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQogCi12b2lkIERvd25sb2FkUHJv
eHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eSkKK3Zv
aWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5JiBkb3du
bG9hZFByb3h5KQogewotICAgIGF1dG8gZG93bmxvYWRJRCA9IGRvd25sb2FkUHJveHktPmRvd25s
b2FkSUQoKTsKKyAgICBhdXRvIGRvd25sb2FkSUQgPSBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQo
KTsKIAogICAgIC8vIFRoZSBEb3dubG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJl
ZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBwb29sLgogICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bv
b2wgPSBtYWtlUmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKSk7CkBAIC03Nyw3ICsxMDEs
NyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoCiAgICAgQVNTRVJU
KG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAogICAgIG1fcHJvY2Vzcy0+cmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKLSAgICBkb3dubG9hZFByb3h5LT5p
bnZhbGlkYXRlKCk7CisgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3du
bG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCiAgICAgaWYgKG1fZG93bmxvYWRzLmlzRW1wdHko
KSAmJiBtX3Nob3VsZFRha2VBc3NlcnRpb24pIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAkocmV2aXNpb24gMjQz
MDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsMTIgQEAKICNpbmNsdWRlICJEb3dubG9h
ZElELmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIu
aD4KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSA8b2JqYy9vYmpjLmg+Cisj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwpAQCAt
NDAsNyArNDYsNyBAQCBjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgUHJvY2Vzc0Fz
c2VydGlvbjsKIGNsYXNzIFdlYlByb2Nlc3NQb29sOwogCi1jbGFzcyBEb3dubG9hZFByb3h5TWFw
IHsKK2NsYXNzIERvd25sb2FkUHJveHlNYXAgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8RG93bmxv
YWRQcm94eU1hcD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKERvd25sb2FkUHJveHlNYXApOwogCkBAIC00OCwxOSArNTQsMjkgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IERvd25sb2FkUHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYp
OwogICAgIH5Eb3dubG9hZFByb3h5TWFwKCk7CiAKLSAgICBEb3dubG9hZFByb3h5KiBjcmVhdGVE
b3dubG9hZFByb3h5KFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Jik7Ci0gICAgdm9pZCBkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkqKTsKKyAgICBE
b3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYlByb2Nlc3NQb29sJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCBkb3dubG9hZEZpbmlzaGVkKERv
d25sb2FkUHJveHkmKTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZG93
bmxvYWRzLmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoKTsKIAorICAg
IHZvaWQgYXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKTsKKyAgICB2b2lkIGFwcGxpY2F0
aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpOworCiBwcml2YXRlOgotICAgIE5ldHdvcmtQcm9jZXNz
UHJveHkqIG1fcHJvY2VzczsKKyAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlKCk7CisgICAgdm9pZCBw
bGF0Zm9ybURlc3Ryb3koKTsKKworICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9w
cm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxvYWRJRCwgUmVmUHRyPERvd25sb2FkUHJveHk+PiBt
X2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9zaG91bGRUYWtlQXNzZXJ0aW9uIHsgZmFsc2UgfTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0Fzc2VydGlvbj4gbV9kb3dubG9hZEFzc2VydGlv
bjsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFJldGFpblB0cjxpZD4gbV9iYWNrZ3Jv
dW5kT2JzZXJ2ZXI7CisgICAgUmV0YWluUHRyPGlkPiBtX2ZvcmVncm91bmRPYnNlcnZlcjsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHJl
dmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsMTcgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvYwogICAgIGNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNyZWF0ZU5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKGlzU2VydmljZVdvcmtlclByb2Nlc3MsIHJlZ2lzdHJhYmxlRG9tYWluKSwgMCwg
SVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVw
bHkpOwogfQogCi1Eb3dubG9hZFByb3h5KiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3du
bG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQordm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dy
b3VuZCkKK3sKKyAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKSB7CisgICAgICAgIGlmIChiYWNr
Z3JvdW5kKQorICAgICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5hcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rvd25sb2FkUHJv
eHlNYXAtPmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpOworICAgIH0KK30KKworRG93
bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICBpZiAoIW1fZG93bmxv
YWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwID0gc3RkOjptYWtlX3VuaXF1
ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjQz
MDc4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgc3RydWN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk7CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmlu
YWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRs
ZXJDbGllbnQgeworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhp
bGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwgcHVibGlj
IENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKIHB1YmxpYzoKICAgICB1c2lu
ZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVz
aW5nIFRvcEZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CkBAIC04OCw3
ICs4OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93bmxvYWRQcm94eSog
Y3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAg
ICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklE
LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hP
cHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9p
ZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0xNTQsNiArMTU0LDcgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgc2VuZFByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCk7CiAgICAgdm9p
ZCBzZW5kUHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKTsKKyAgICB2b2lkIHN5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKTsKIAogICAgIHZvaWQgc2V0SXNI
b2xkaW5nTG9ja2VkRmlsZXMoYm9vbCk7CiAgICAgdm9pZCBzZXRJc0lEQkRhdGFiYXNlSG9sZGlu
Z0xvY2tlZEZpbGVzKGJvb2wpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZv
ck1haW5GcmFtZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZv
ck1haW5GcmFtZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFt
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSop
IG92ZXJyaWRlOworICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkm
KSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpD
dXJzb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyhib29sKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjI0LDcgKzIyNCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENvbW1pdExvYWRGb3JNYWkK
ICAgICBbbV9jb250ZW50VmlldyBfZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZV07CiB9CiAKLXZv
aWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5
JikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmIG9sZFRv
b2xUaXAsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRpcCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRD
b21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3Vz
dG9tQ29udGVudFByb3ZpZGVyKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdE
YXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5h
bWUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgaGFuZGxl
RG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRs
ZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRD
aGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCShy
ZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5NSw3ICsyOTUsNyBAQCB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkaW5nRGF0CiB7CiB9CiAKLXZvaWQgUGFnZUNsaWVudElt
cGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JikKIHsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCShy
ZXZpc2lvbiAyNDMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6ZGlkQ2hhbmdlQ29udGVudFNpegogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5
KiBkb3dubG9hZCkKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChE
b3dubG9hZFByb3h5JiBkb3dubG9hZCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlz
aW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVy
cmlkZTsKIAotICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBv
dmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkgb3ZlcnJpZGUgeyB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDI0MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM0NjEsNiArMzQ2MSw5IEBACiAJCTVDMjBD
QjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOZXR3b3JrU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1QzI2OTU4NDIwMDQyRjEyMDA1QzQzOUIgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJz
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS09wZW5QYW5lbFBh
cmFtZXRlcnNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMjk4RDlF
MUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGVuZGluZ0Rvd25sb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDMkIxQUYzMjIzQUI3MjgwMEI5MUNGNyAvKiBEb3dubG9hZE1vbml0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG93bmxvYWRNb25pdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMyQjFBRjQyMjNBQjcyODAwQjkxQ0Y3IC8q
IERvd25sb2FkTW9uaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb3du
bG9hZE1vbml0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMyQjFBRjUyMjND
MUZEMjAwQjkxQ0Y3IC8qIERvd25sb2FkUHJveHlNYXBDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERvd25sb2FkUHJveHlNYXBDb2NvYS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMzNTlDMEMyMTU0NzMyMTAwOUU3OTQ4IC8qIFdLRGVw
cmVjYXRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0RlcHJlY2F0ZWQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMzQUVBOEUxRkUxRjFERjAwMjMxOEQz
IC8qIFdlYnNpdGVQb2xpY2llc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDNDZDMEFDMjFCNzE5OEIwMEJDNTk5MSAvKiBXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01MzQyLDYgKzUzNDUsNyBAQAogCQkJCTgzODkxQjZCMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5tbSAqLywKIAkJCQlBMURGNjMxMTE4RTBCN0M4MDAzQTNFMkEg
LyogRG93bmxvYWRDbGllbnQuaCAqLywKIAkJCQlBMURGNjMxMDE4RTBCN0M4MDAzQTNFMkEgLyog
RG93bmxvYWRDbGllbnQubW0gKi8sCisJCQkJNUMyQjFBRjUyMjNDMUZEMjAwQjkxQ0Y3IC8qIERv
d25sb2FkUHJveHlNYXBDb2NvYS5tbSAqLywKIAkJCQkwMEI5NjYxODE4RTI1QUUxMDBDRTFGODgg
LyogRmluZENsaWVudC5oICovLAogCQkJCTAwQjk2NjE3MThFMjVBRTEwMENFMUY4OCAvKiBGaW5k
Q2xpZW50Lm1tICovLAogCQkJCUNENzhFMTEzMURCN0Q3RUQwMDE0QTJERSAvKiBGdWxsc2NyZWVu
Q2xpZW50LmggKi8sCkBAIC02ODY3LDYgKzY4NzEsOCBAQAogCQkJCTVDMTQyNkY5MUMyM0Y4NDMw
MEQ0MTE4MyAvKiBEb3dubG9hZE1hbmFnZXIuaCAqLywKIAkJCQk1MTI0MEVCOTIyMEEwOENBMDA1
Q0ZDNjMgLyogRG93bmxvYWRNYXAuY3BwICovLAogCQkJCTUxMjQwRUI4MjIwQTA4Q0EwMDVDRkM2
MyAvKiBEb3dubG9hZE1hcC5oICovLAorCQkJCTVDMkIxQUYzMjIzQUI3MjgwMEI5MUNGNyAvKiBE
b3dubG9hZE1vbml0b3IuY3BwICovLAorCQkJCTVDMkIxQUY0MjIzQUI3MjgwMEI5MUNGNyAvKiBE
b3dubG9hZE1vbml0b3IuaCAqLywKIAkJCQk1Qzg1Qzc4NjFDM0YyM0M1MDA2MUE0RkEgLyogUGVu
ZGluZ0Rvd25sb2FkLmNwcCAqLywKIAkJCQk1QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVu
ZGluZ0Rvd25sb2FkLmggKi8sCiAJCQkpOwpAQCAtMTAyNDEsOSArMTAyNDcsNiBAQAogCQkJCQkJ
Q3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gMTAuMTsKIAkJCQkJCVByb3Zpc2lvbmluZ1N0eWxlID0g
QXV0b21hdGljOwogCQkJCQl9OwotCQkJCQlBMTc5OEI1OTIyMzQ2NEM0MDAwNzY0QkQgPSB7Ci0J
CQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSAxMC4yOwotCQkJCQl9OwogCQkJCQlFMUFDMkUy
NzIwRjdCOTRDMDBCMDg5N0QgPSB7CiAJCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA5LjM7
CiAJCQkJCQlQcm92aXNpb25pbmdTdHlsZSA9IEF1dG9tYXRpYzsKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MzA3OCkKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE5LTAz
LTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgSW1wbGVtZW50IERvd25sb2FkTW9uaXRvciB0byBwcmV2ZW50IGxvbmctcnVubmluZyBzbG93
IGRvd25sb2FkcyBmcm9tIGJhY2tncm91bmQgYXBwcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2Vv
ZmZyZXkgR2FyZW4uCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpUQ1BTZXJ2ZXIpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjp+VENQU2VydmVyKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6c29ja2V0QmluZExpc3Rlbik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OndhaXRGb3JBbmRSZXBseVRvUmVxdWVzdHMpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVENQU2VydmVyLmg6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VENQU2VydmVyOjpwb3J0IGNvbnN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoLVtEb3dubG9h
ZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rvd25sb2FkRGlkU3RhcnQ6XSk6CisgICAgICAgICgtW0Rv
d25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWREaWRDYW5jZWw6XSk6CisgICAgICAg
ICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWQ6ZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgt
W0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWQ6ZGlkUmVjZWl2ZURhdGE6XSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpyZXNwb25kU2xvd2x5KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OndlYlZpZXdXaXRoRG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmRvd25sb2FkQXRSYXRlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorCiAyMDE5LTAzLTE4ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBl
cmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gVGFyYmFsbHMgZ2VuZXJhdGVkIHdpdGgg
4oCcbWFrZSBkaXN04oCdIGNhbm5vdCBidWlsZCBkb2N1bWVudGF0aW9uCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UQ1BTZXJ2ZXIuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VENQU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRDUFNlcnZlci5oIgorCisjaW5jbHVk
ZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4K
KyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVENQU2Vy
dmVyOjpUQ1BTZXJ2ZXIoRnVuY3Rpb248dm9pZChTb2NrZXQpPiYmIHNvY2tldEhhbmRsZXIpCisg
ICAgOiBtX3NvY2tldEhhbmRsZXIoV1RGTW92ZShzb2NrZXRIYW5kbGVyKSkKK3sKKyAgICBzb2Nr
ZXRCaW5kTGlzdGVuKCk7CisgICAgbV90aHJlYWQgPSBzdGQ6OnRocmVhZCgmVENQU2VydmVyOjp3
YWl0Rm9yQW5kUmVwbHlUb1JlcXVlc3RzLCB0aGlzKTsKK30KKworVENQU2VydmVyOjp+VENQU2Vy
dmVyKCkKK3sKKyAgICBtX3RocmVhZC5qb2luKCk7CisgICAgaWYgKG1fbGlzdGVuaW5nU29ja2V0
ICE9IEludmFsaWRTb2NrZXQpIHsKKyAgICAgICAgY2xvc2UobV9saXN0ZW5pbmdTb2NrZXQpOwor
ICAgICAgICBtX2xpc3RlbmluZ1NvY2tldCA9IEludmFsaWRTb2NrZXQ7CisgICAgfQorICAgIGlm
IChtX2Nvbm5lY3Rpb25Tb2NrZXQgIT0gSW52YWxpZFNvY2tldCkgeworICAgICAgICBjbG9zZSht
X2Nvbm5lY3Rpb25Tb2NrZXQpOworICAgICAgICBtX2Nvbm5lY3Rpb25Tb2NrZXQgPSBJbnZhbGlk
U29ja2V0OworICAgIH0KK30KKwordm9pZCBUQ1BTZXJ2ZXI6OnNvY2tldEJpbmRMaXN0ZW4oKQor
eworICAgIG1fbGlzdGVuaW5nU29ja2V0ID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAw
KTsKKyAgICBpZiAobV9saXN0ZW5pbmdTb2NrZXQgPT0gSW52YWxpZFNvY2tldCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIC8vIFBvcnRzIDQ5MTUyLTY1NTM1IGFyZSB1bmFsbG9jYXRlZCBw
b3J0cy4gVHJ5IHVudGlsIHdlIGZpbmQgb25lIHRoYXQncyBmcmVlLgorICAgIGZvciAoUG9ydCBw
b3J0ID0gNDkxNTI7IHBvcnQ7IHBvcnQrKykgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4g
bmFtZTsKKyAgICAgICAgbWVtc2V0KCZuYW1lLCAwLCBzaXplb2YobmFtZSkpOworICAgICAgICBu
YW1lLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBuYW1lLnNpbl9wb3J0ID0gaHRvbnMo
cG9ydCk7CisgICAgICAgIG5hbWUuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7
CisgICAgICAgIGlmIChiaW5kKG1fbGlzdGVuaW5nU29ja2V0LCByZWludGVycHJldF9jYXN0PHNv
Y2thZGRyKj4oJm5hbWUpLCBzaXplb2YobmFtZSkpIDwgMCkgeworICAgICAgICAgICAgLy8gVGhp
cyBwb3J0IGlzIGJ1c3kuIFRyeSB0aGUgbmV4dCBwb3J0LgorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgdW5zaWduZWQgbWF4Q29ubmVjdGlvbnMgPSAxOwor
ICAgICAgICBpZiAobGlzdGVuKG1fbGlzdGVuaW5nU29ja2V0LCBtYXhDb25uZWN0aW9ucykgPT0g
LTEpIHsKKyAgICAgICAgICAgIC8vIExpc3RlbmluZyBmYWlsZWQuCisgICAgICAgICAgICBjbG9z
ZShtX2xpc3RlbmluZ1NvY2tldCk7CisgICAgICAgICAgICBtX2xpc3RlbmluZ1NvY2tldCA9IElu
dmFsaWRTb2NrZXQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9w
b3J0ID0gcG9ydDsKKyAgICAgICAgcmV0dXJuOyAvLyBTdWNjZXNzZnVsbHkgc2V0IHVwIGxpc3Rl
bmluZyBwb3J0LgorICAgIH0KKyAgICAKKyAgICAvLyBDb3VsZG4ndCBmaW5kIGFuIGF2YWlsYWJs
ZSBwb3J0LgorICAgIGNsb3NlKG1fbGlzdGVuaW5nU29ja2V0KTsKKyAgICBtX2xpc3RlbmluZ1Nv
Y2tldCA9IEludmFsaWRTb2NrZXQ7Cit9CisKK3ZvaWQgVENQU2VydmVyOjp3YWl0Rm9yQW5kUmVw
bHlUb1JlcXVlc3RzKCkKK3sKKyAgICBpZiAobV9saXN0ZW5pbmdTb2NrZXQgPT0gSW52YWxpZFNv
Y2tldCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29ubmVjdGlvblNvY2tldCA9IGFj
Y2VwdChtX2xpc3RlbmluZ1NvY2tldCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgbV9zb2NrZXRI
YW5kbGVyKG1fY29ubmVjdGlvblNvY2tldCk7CisgICAgc2h1dGRvd24obV9jb25uZWN0aW9uU29j
a2V0LCBTSFVUX1JEV1IpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVENQU2VydmVyLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UQ1BTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgVENQU2VydmVy
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBTb2NrZXQgPSBpbnQ7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBTb2NrZXQgSW52YWxpZFNvY2tldCA9IC0xOworICAgIHVzaW5nIFBvcnQgPSB1aW50MTZfdDsK
KyAgICBzdGF0aWMgY29uc3RleHByIFBvcnQgSW52YWxpZFBvcnQgPSAwOworICAgIAorICAgIFRD
UFNlcnZlcihGdW5jdGlvbjx2b2lkKFNvY2tldCk+JiYpOworICAgIH5UQ1BTZXJ2ZXIoKTsKKyAg
ICAKKyAgICBQb3J0IHBvcnQoKSBjb25zdCB7IHJldHVybiBtX3BvcnQ7IH0KKyAgICAKK3ByaXZh
dGU6CisgICAgdm9pZCBzb2NrZXRCaW5kTGlzdGVuKCk7CisgICAgdm9pZCB3YWl0Rm9yQW5kUmVw
bHlUb1JlcXVlc3RzKCk7CisKKyAgICBQb3J0IG1fcG9ydCB7IEludmFsaWRQb3J0IH07CisgICAg
U29ja2V0IG1fbGlzdGVuaW5nU29ja2V0IHsgSW52YWxpZFNvY2tldCB9OworICAgIFNvY2tldCBt
X2Nvbm5lY3Rpb25Tb2NrZXQgeyBJbnZhbGlkU29ja2V0IH07CisgICAgc3RkOjp0aHJlYWQgbV90
aHJlYWQ7CisgICAgRnVuY3Rpb248dm9pZChTb2NrZXQpPiBtX3NvY2tldEhhbmRsZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjQzMDc4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEs
NyBAQAogCQk1QzgzOEY3RjFEQjA0RjkwMDA4Mjg1OEYgLyogTG9hZEludmFsaWRVUkxSZXF1ZXN0
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MDFG
QUUxQ0FGMTM3MTAwRUQ2NEY5IC8qIExvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbSAqLzsgfTsKIAkJ
NUM4QkM3OTkyMThDRjQ0NzAwODEzODg2IC8qIE5ldHdvcmtQcm9jZXNzLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM4QkM3OTgyMThDRjNFOTAwODEz
ODg2IC8qIE5ldHdvcmtQcm9jZXNzLm1tICovOyB9OwogCQk1Qzk3M0Y1QzFGNThFRjhCMDAzNTlD
MjcgLyogV2ViR0xQb2xpY3kubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Qzk3M0Y1QjFGNThFRjBBMDAzNTlDMjcgLyogV2ViR0xQb2xpY3kubW0gKi87
IH07CisJCTVDOUI1NDhFMjIzQzRDQkUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5QjU0OEMyMjNDNEJGNTAw
QjE1MEM0IC8qIFRDUFNlcnZlci5jcHAgKi87IH07CiAJCTVDOUU1Njg1MURGOTE0NTQwMEM5RUUz
MyAvKiBXZWJzaXRlUG9saWNpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzlFNTY4NDFERjkxNDNEMDBDOUVFMzMgLyogV2Vic2l0ZVBvbGljaWVz
Lm1tICovOyB9OwogCQk1QzlFNTY4NzFERjkxNEFFMDBDOUVFMzMgLyogY29udGVudEJsb2NrZXJD
aGVjay5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDOUU1Njg2MURGOTE0OEUwMEM5RUUzMyAvKiBjb250ZW50QmxvY2tlckNoZWNrLmh0
bWwgKi87IH07CiAJCTVDOUU1OTQxMUQzRUI1QUMwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hl
LmRiIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDOUU1OTNFMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiICovOyB9OwpA
QCAtMTcxOSw2ICsxNzIwLDggQEAKIAkJNUM3Qzc0Q0ExRkI1MjhENDAwMkY5QUJFIC8qIFdlYlZp
ZXdTY2hlZHVsZUluUnVuTG9vcC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYlZpZXdTY2hlZHVsZUluUnVuTG9vcC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUM4QkM3OTgyMThDRjNFOTAwODEzODg2IC8qIE5ldHdvcmtQcm9jZXNzLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOTczRjVCMUY1OEVGMEEwMDM1OUMyNyAv
KiBXZWJHTFBvbGljeS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYkdMUG9saWN5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzlCNTQ4QzIy
M0M0QkY1MDBCMTUwQzQgLyogVENQU2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRDUFNlcnZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDOUI1NDhEMjIzQzRCRjUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVENQU2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVDOUU1Njg0MURGOTE0M0QwMEM5RUUzMyAvKiBXZWJzaXRlUG9saWNpZXMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJzaXRlUG9saWNpZXMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1Njg2MURGOTE0OEUwMEM5RUUzMyAvKiBj
b250ZW50QmxvY2tlckNoZWNrLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBjb250
ZW50QmxvY2tlckNoZWNrLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1
OTNFMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IEFwcGxpY2F0
aW9uQ2FjaGUuZGI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDAwLDYgKzI0MDMs
OCBAQAogCQkJCUJDNTc1QkJGMTI2RjU3NTIwMDZGMEYxMiAvKiBQbGF0Zm9ybVV0aWxpdGllcy5j
cHAgKi8sCiAJCQkJQkMxMzE4ODMxMTcxMTRBODAwQjY5NzI3IC8qIFBsYXRmb3JtVXRpbGl0aWVz
LmggKi8sCiAJCQkJQkM5MDk1MUIxMjU1MzNENzAwMDgzNzU2IC8qIFBsYXRmb3JtV2ViVmlldy5o
ICovLAorCQkJCTVDOUI1NDhDMjIzQzRCRjUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIuY3BwICovLAor
CQkJCTVDOUI1NDhEMjIzQzRCRjUwMEIxNTBDNCAvKiBUQ1BTZXJ2ZXIuaCAqLywKIAkJCQlCQ0I5
RTdGQTExMjM1OUEzMDBBMTM3RTAgLyogVGVzdC5oICovLAogCQkJCUJDMTMxQUE4MTE3MTMxRkMw
MEI2OTcyNyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwICovLAogCQkJCUJDQjlFN0M3MTEyMzRFM0Ew
MEExMzdFMCAvKiBUZXN0c0NvbnRyb2xsZXIuaCAqLywKQEAgLTQyOTYsNiArNDMwMSw3IEBACiAJ
CQkJN0NDRTdFQTgxQTQxMUExOTAwNDQ3QzRDIC8qIFN5bnRoZXRpY0JhY2tpbmdTY2FsZUZhY3Rv
cldpbmRvdy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM3MzRCNTMyMDc4OEM0ODAwRjQzMEVBIC8q
IFN5c3RlbUNvbG9ycy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJENzAwNTk2MjFFREEwQzYwMDM0
NjNDQiAvKiBUYWJPdXRPZldlYlZpZXcubW0gaW4gU291cmNlcyAqLywKKwkJCQk1QzlCNTQ4RTIy
M0M0Q0JFMDBCMTUwQzQgLyogVENQU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3
RjE2MUE0MTFBRTYwMDQ0N0M0QyAvKiBUZXJtaW5hdGVUd2ljZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0VBOTFBNDExQTFEMDA0NDdDNEMgLyogVGVzdEJyb3dzaW5nQ29udGV4dExvYWRE
ZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0NjEyOENCMjExRDQ3NTEwMEQ5RkFEQiAv
KiBUZXN0RHJhZ2dpbmdJbmZvLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0JKHJldmlzaW9uIDI0
MzA3OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDE4ICsyOSwyMSBAQAogI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9y
dCAiVENQU2VydmVyLmgiCiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLSNpbXBvcnQgPFdlYktpdC9fV0tEb3dubG9h
ZC5oPgotI2ltcG9ydCA8V2ViS2l0L19XS0Rvd25sb2FkRGVsZWdhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1By
b2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdDb25maWd1cmF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLRG93bmxvYWQuaD4KKyNpbXBv
cnQgPFdlYktpdC9fV0tEb3dubG9hZERlbGVnYXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLUHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgogI2lt
cG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KICNp
bXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzc2LDQgKzc3OSwxMzkgQEAgVEVTVChf
V0tEb3dubG9hZCwgQ3Jhc2hBZnRlckRvd25sb2FkRGlkRgogICAgIEVYUEVDVF9OVUxMKHByb2Nl
c3NQb29sLmdldCgpKTsKIH0KIAotI2VuZGlmCitzdGF0aWMgYm9vbCByZWNlaXZlZERhdGE7Citz
dGF0aWMgYm9vbCBkaWRDYW5jZWw7CitzdGF0aWMgUmV0YWluUHRyPE5TU3RyaW5nPiBkZXN0aW5h
dGlvbjsKKworQGludGVyZmFjZSBEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgOiBOU09iamVj
dCA8X1dLRG93bmxvYWREZWxlZ2F0ZT4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIERvd25sb2Fk
TW9uaXRvclRlc3REZWxlZ2F0ZQorCistICh2b2lkKV9kb3dubG9hZERpZFN0YXJ0OihfV0tEb3du
bG9hZCAqKWRvd25sb2FkCit7CisgICAgZGlkRG93bmxvYWRTdGFydCA9IHRydWU7Cit9CisKKy0g
KHZvaWQpX2Rvd25sb2FkRGlkQ2FuY2VsOihfV0tEb3dubG9hZCAqKWRvd25sb2FkCit7CisgICAg
ZGlkQ2FuY2VsID0gdHJ1ZTsKK30KKworLSAodm9pZClfZG93bmxvYWQ6KF9XS0Rvd25sb2FkICop
ZG93bmxvYWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KE5TU3RyaW5n
ICopZmlsZW5hbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgYWxsb3dPdmVyd3Jp
dGUsIE5TU3RyaW5nICpkZXN0aW5hdGlvbikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBFWFBF
Q1RfVFJVRShbZmlsZW5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiZmlsZW5hbWUuZGF0Il0pOworICAg
IGRlc3RpbmF0aW9uID0gW05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OmZpbGVuYW1lXTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihZRVMsIGRlc3Rp
bmF0aW9uLmdldCgpKTsKK30KKworLSAodm9pZClfZG93bmxvYWQ6KF9XS0Rvd25sb2FkICopZG93
bmxvYWQgZGlkUmVjZWl2ZURhdGE6KHVpbnQ2NF90KWxlbmd0aAoreworICAgIHJlY2VpdmVkRGF0
YSA9IHRydWU7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit2b2lk
IHJlc3BvbmRTbG93bHkoaW50IHNvY2tldCwgZG91YmxlIGticHMsIGJvb2wmIHRlcm1pbmF0ZVNl
cnZlcikKK3sKKyAgICBFWFBFQ1RfRkFMU0UoaXNNYWluVGhyZWFkKCkpOworICAgIGNoYXIgcmVh
ZEJ1ZmZlclsxMDAwXTsKKyAgICBhdXRvIGJ5dGVzUmVhZCA9IDo6cmVhZChzb2NrZXQsIHJlYWRC
dWZmZXIsIHNpemVvZihyZWFkQnVmZmVyKSk7CisgICAgRVhQRUNUX0dUKGJ5dGVzUmVhZCwgMCk7
CisgICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1JlYWQpIDwgc2l6ZW9m
KHJlYWRCdWZmZXIpKTsKKyAgICAKKyAgICBjb25zdCBjaGFyKiByZXNwb25zZUhlYWRlciA9Cisg
ICAgIkhUVFAvMS4xIDIwMCBPS1xyXG4iCisgICAgIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFj
aG1lbnQ7IGZpbGVuYW1lPVwiZmlsZW5hbWUuZGF0XCJcclxuIgorICAgICJDb250ZW50LUxlbmd0
aDogMTAwMDAwMDAwXHJcblxyXG4iOworICAgIGF1dG8gYnl0ZXNXcml0dGVuID0gOjp3cml0ZShz
b2NrZXQsIHJlc3BvbnNlSGVhZGVyLCBzdHJsZW4ocmVzcG9uc2VIZWFkZXIpKTsKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1dyaXR0ZW4pLCBzdHJsZW4ocmVzcG9uc2VI
ZWFkZXIpKTsKKyAgICAKKyAgICBjb25zdCBkb3VibGUgd3JpdGVzUGVyU2Vjb25kID0gMTAwOwor
ICAgIFZlY3RvcjxjaGFyPiB3cml0ZUJ1ZmZlcihzdGF0aWNfY2FzdDxzaXplX3Q+KDEwMjQgKiBr
YnBzIC8gd3JpdGVzUGVyU2Vjb25kKSk7CisgICAgd2hpbGUgKCF0ZXJtaW5hdGVTZXJ2ZXIpIHsK
KyAgICAgICAgYXV0byBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgOjp3
cml0ZShzb2NrZXQsIHdyaXRlQnVmZmVyLmRhdGEoKSwgd3JpdGVCdWZmZXIuc2l6ZSgpKTsKKyAg
ICAgICAgZG91YmxlIHdyaXRlRHVyYXRpb24gPSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBiZWZv
cmUpLnNlY29uZHMoKTsKKyAgICAgICAgZG91YmxlIGRlc2lyZWRTbGVlcCA9IDEuMCAvIHdyaXRl
c1BlclNlY29uZDsKKyAgICAgICAgaWYgKHdyaXRlRHVyYXRpb24gPCBkZXNpcmVkU2xlZXApCisg
ICAgICAgICAgICB1c2xlZXAoVVNFQ19QRVJfU0VDICogKGRlc2lyZWRTbGVlcCAtIHdyaXRlRHVy
YXRpb24pKTsKKyAgICB9Cit9CisKK1JldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXdXaXRoRG93
bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKHNpemVfdCBtdWx0aXBsaWVyKQoreworICAgIHN0
YXRpYyBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW0Rvd25sb2FkTmF2aWdhdGlv
bkRlbGVnYXRlIG5ld10pOworICAgIHN0YXRpYyBhdXRvIGRvd25sb2FkRGVsZWdhdGUgPSBhZG9w
dE5TKFtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgbmV3XSk7CisgICAgYXV0byBwcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24g
bmV3XSk7CisgICAgW3Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbiBzZXREb3dubG9hZE1vbml0b3JT
cGVlZE11bHRpcGxpZXJGb3JUZXN0aW5nOm11bHRpcGxpZXJdOworICAgIGF1dG8gcHJvY2Vzc1Bv
b2wgPSBhZG9wdE5TKFtbV0tQcm9jZXNzUG9vbCBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlv
bjpwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIHdlYlZpZXdDb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddKTsKKyAgICBb
d2ViVmlld0NvbmZpZ3VyYXRpb24gc2V0UHJvY2Vzc1Bvb2w6cHJvY2Vzc1Bvb2wuZ2V0KCldOwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmln
dXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpuYXZp
Z2F0aW9uRGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nl
c3NQb29sLl9kb3dubG9hZERlbGVnYXRlID0gZG93bmxvYWREZWxlZ2F0ZS5nZXQoKTsKKyAgICBy
ZXR1cm4gd2ViVmlldzsKK30KKworZW51bSBjbGFzcyBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kIHsg
Tm8sIFllcyB9OworICAgIAordm9pZCBkb3dubG9hZEF0UmF0ZShkb3VibGUgZGVzaXJlZEticHMs
IHVuc2lnbmVkIHNwZWVkTXVsdGlwbGllciwgQXBwUmV0dXJuc1RvRm9yZWdyb3VuZCByZXR1cm5U
b0ZvcmVncm91bmQgPSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpObykKK3sKKyAgICBib29sIHRl
cm1pbmF0ZVNlcnZlciA9IGZhbHNlOworICAgIFRDUFNlcnZlciBzZXJ2ZXIoWyZdKGF1dG8gc29j
a2V0KSB7CisgICAgICAgIHJlc3BvbmRTbG93bHkoc29ja2V0LCBkZXNpcmVkS2JwcywgdGVybWlu
YXRlU2VydmVyKTsKKyAgICB9KTsKKyAgICAKKyAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3V2l0
aERvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcihzcGVlZE11bHRpcGxpZXIpOworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJodHRwOi8vMTI3LjAuMC4x
OiVkLyIsIHNlcnZlci5wb3J0KCldXV1dOworICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOworICAg
IFV0aWw6OnJ1bigmcmVjZWl2ZWREYXRhKTsKKyAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25p
dG9yJ3MgdGltZXIuCisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CisgICAgaWYgKHJldHVyblRvRm9yZWdyb3Vu
ZCA9PSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCisgICAgICAgIFtbd2ViVmlldyBjb25m
aWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107Cisg
ICAgZGlkQ2FuY2VsID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOworICAgIHRl
cm1pbmF0ZVNlcnZlciA9IHRydWU7CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSByZW1vdmVJdGVtQXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpkZXN0aW5hdGlvbi5nZXQo
KSBpc0RpcmVjdG9yeTpOT10gZXJyb3I6bmlsXTsKK30KKworVEVTVChfV0tEb3dubG9hZCwgRG93
bmxvYWRNb25pdG9yQ2FuY2VsKQoreworICAgIGRvd25sb2FkQXRSYXRlKDAuNSwgMTIwKTsgLy8g
U2hvdWxkIGNhbmNlbCBpbiB+MC41IHNlY29uZHMKKyAgICBkb3dubG9hZEF0UmF0ZSgxLjUsIDEy
MCk7IC8vIFNob3VsZCBjYW5jZWwgaW4gfjIuNSBzZWNvbmRzCit9CisKK1RFU1QoX1dLRG93bmxv
YWQsIERvd25sb2FkTW9uaXRvclN1cnZpdmUpCit7CisgICAgX19ibG9jayBCT09MIHRpbWVvdXRS
ZWFjaGVkID0gTk87CisgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9U
SU1FX05PVywgMi41ICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
XnsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGRpZENhbmNlbCk7CisgICAgICAgIGRpZENhbmNlbCA9
IHRydWU7CisgICAgICAgIHRpbWVvdXRSZWFjaGVkID0gWUVTOworICAgIH0pOworCisgICAgLy8g
U2ltdWxhdGVzIGFuIGhvdXIgb2YgZG93bmxvYWRpbmcgMTUwa2IvcyBpbiAxIHNlY29uZC4KKyAg
ICAvLyBUaW1lb3V0IHNob3VsZCBiZSByZWFjaGVkIGJlZm9yZSB0aGlzIGlzIGNhbmNlbGxlZCBi
ZWNhdXNlIHRoZSBkb3dubG9hZCByYXRlIGlzIGhpZ2ggZW5vdWdoLgorICAgIGRvd25sb2FkQXRS
YXRlKDE1MC4wLCAzNjAwKTsKKyAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0UmVhY2hlZCk7Cit9CisK
K1RFU1QoX1dLRG93bmxvYWQsIERvd25sb2FkTW9uaXRvclJldHVyblRvRm9yZWdyb3VuZCkKK3sK
KyAgICBfX2Jsb2NrIEJPT0wgdGltZW91dFJlYWNoZWQgPSBOTzsKKyAgICBkaXNwYXRjaF9hZnRl
cihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAyLjUgKiBOU0VDX1BFUl9TRUMpLCBk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBFWFBFQ1RfRkFMU0UoZGlkQ2Fu
Y2VsKTsKKyAgICAgICAgZGlkQ2FuY2VsID0gdHJ1ZTsKKyAgICAgICAgdGltZW91dFJlYWNoZWQg
PSBZRVM7CisgICAgfSk7CisgICAgZG93bmxvYWRBdFJhdGUoMC41LCAxMjAsIEFwcFJldHVybnNU
b0ZvcmVncm91bmQ6Olllcyk7CisgICAgRVhQRUNUX1RSVUUodGltZW91dFJlYWNoZWQpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKElPUykK
</data>

          </attachment>
      

    </bug>

</bugzilla>