<?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>150355</bug_id>
          
          <creation_ts>2015-10-19 22:07:11 -0700</creation_ts>
          <short_desc>Initial NSURLSession WebResourceLoader implementation</short_desc>
          <delta_ts>2015-11-02 21:59:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150834</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>aestes</cc>
    
    <cc>ap</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1134805</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-19 22:07:11 -0700</bug_when>
    <thetext>Initial NSURLSession WebResourceLoader implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134807</commentid>
    <comment_count>1</comment_count>
      <attachid>263551</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-19 22:09:46 -0700</bug_when>
    <thetext>Created attachment 263551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134810</commentid>
    <comment_count>2</comment_count>
      <attachid>263553</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-19 22:32:43 -0700</bug_when>
    <thetext>Created attachment 263553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134922</commentid>
    <comment_count>3</comment_count>
      <attachid>263588</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-20 10:38:27 -0700</bug_when>
    <thetext>Created attachment 263588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134923</commentid>
    <comment_count>4</comment_count>
      <attachid>263589</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-20 10:38:58 -0700</bug_when>
    <thetext>Created attachment 263589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134998</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-20 13:50:35 -0700</bug_when>
    <thetext>1560 tests ran as expected, 347 didn&apos;t:
Unexpected flakiness: text-only failures (212)
Unexpected flakiness: image-only failures (8)
Unexpected flakiness: timeouts (79)
Regressions: Unexpected text-only failures (2)
Regressions: Unexpected crashes (46)

So, a pretty good start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135126</commentid>
    <comment_count>6</comment_count>
      <attachid>263589</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-10-20 22:20:01 -0700</bug_when>
    <thetext>Comment on attachment 263589
Patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:290
&gt; +    

Blank line here.

&gt; Source/WebKit2/NetworkProcess/NetworkingSession.h:74
&gt; +    virtual ~NetworkingDataTaskClient() { };

The semicolon is not needed here.

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkingSessionCocoa.mm:135
&gt; +            WebCore::ResourceResponse resourceResponse(response);

Please add ASSERT(isMainThread()) in all functions that touch ResourceRequest or ResourceResponse. These classes are not safe to use from secondary threads.

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkingSessionCocoa.mm:150
&gt; +        // FIXME: Look into why this being on the main thread causes fewer crashes, but more crashes with the other callbacks.

:-/

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkingSessionCocoa.mm:190
&gt; +    m_session = [NSURLSession sessionWithConfiguration:configuration delegate:static_cast&lt;id&gt;(m_sessionDelegate.get()) delegateQueue:m_sessionQueue.get()];

Hmm, don&apos;t we want to have delegates called on main thread? Why is there a queue at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135205</commentid>
    <comment_count>7</comment_count>
      <attachid>263589</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-10-21 06:37:32 -0700</bug_when>
    <thetext>Comment on attachment 263589
Patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:123
&gt; +#if !USE(NSURLSESSION)
&gt;      const WebCore::ResourceResponse&amp; response() const { return m_response; }
&gt; +#endif

Why #if out m_response? It is going to be needed eventually and should be readily available already.

&gt; Source/WebKit2/NetworkProcess/NetworkingSession.h:64
&gt; +class NetworkingSession;

Why &quot;Networking&quot; instead of &quot;Network&quot; like other network process classes?

&gt; Source/WebKit2/NetworkProcess/NetworkingSession.h:77
&gt; +class NetworkingDataTask : public RefCounted&lt;NetworkingDataTask&gt; {

Maybe use &quot;NetworkSession&quot; as namespace for these related types, NetworkSessionDataTask or just NetworkSessionTask? (what kind of other tasks are there going to be?)

similarly NetworkingDataTaskClient -&gt; NetworkSessionTaskClient?

&gt; Source/WebKit2/NetworkProcess/NetworkingSession.h:111
&gt; +    ~NetworkingSession() { LockHolder locker(m_dataTaskMapLock); ASSERT(m_dataTaskMap.isEmpty()); }

This locker doesn&apos;t do anything useful in non-debug builds and shouldn&apos;t be necessary in debug builds either.

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkingSessionCocoa.mm:93
&gt; +    if (auto networkingTask = _session-&gt;dataTaskForIdentifier(task.taskIdentifier)) {

Please use auto* for pointer types: auto* networkingTask

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkingSessionCocoa.mm:94
&gt; +        if (auto client = networkingTask-&gt;client()) {

Please use auto* for pointer types: auto* client

etc everywhere in this patch.

&gt;&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkingSessionCocoa.mm:150
&gt;&gt; +        // FIXME: Look into why this being on the main thread causes fewer crashes, but more crashes with the other callbacks.
&gt; 
&gt; :-/

The threading story seems bit shaky. Can we just make callbacks in the main thread for the first iteration?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135267</commentid>
    <comment_count>8</comment_count>
      <attachid>263589</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-21 10:24:52 -0700</bug_when>
    <thetext>Comment on attachment 263589
Patch

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

&gt;&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:123
&gt;&gt; +#endif
&gt; 
&gt; Why #if out m_response? It is going to be needed eventually and should be readily available already.

Aha!  I was copying it on a non-main thread, and I was seeing AtomicString assertion failures.  I need to copy on the main thread, then I won&apos;t need to get rid of m_response.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135360</commentid>
    <comment_count>9</comment_count>
      <attachid>263589</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-10-21 13:29:32 -0700</bug_when>
    <thetext>Comment on attachment 263589
Patch

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

&gt; Source/WebKit2/config.h:76
&gt; +#ifndef USE_NSURLSESSION

This should probably be something like USE_NETWORK_SESSION. The layer covered by this is not platform specific (though the implementation is).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135391</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-21 14:21:57 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Source/WebKit2/NetworkProcess/cocoa/NetworkingSessionCocoa.mm:190
&gt; &gt; +    m_session = [NSURLSession sessionWithConfiguration:configuration delegate:static_cast&lt;id&gt;(m_sessionDelegate.get()) delegateQueue:m_sessionQueue.get()];
&gt; 
&gt; Hmm, don&apos;t we want to have delegates called on main thread? Why is there a
&gt; queue at all?
My next patch will use [NSOperationQueue mainQueue] to put all the callbacks on the main thread.  And I replace the lock with ASSERT(isMainThread());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135400</commentid>
    <comment_count>11</comment_count>
      <attachid>263741</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-21 14:41:32 -0700</bug_when>
    <thetext>Created attachment 263741
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135709</commentid>
    <comment_count>12</comment_count>
      <attachid>263741</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-10-22 09:28:51 -0700</bug_when>
    <thetext>Comment on attachment 263741
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135737</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-22 11:01:24 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/191457</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263551</attachid>
            <date>2015-10-19 22:09:46 -0700</date>
            <delta_ts>2015-10-19 22:32:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150355-20151019220904.patch</filename>
            <type>text/plain</type>
            <size>38940</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTEwLTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW5pdGlhbCBO
U1VSTFNlc3Npb24gV2ViUmVzb3VyY2VMb2FkZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6OmNmVVJMQXV0aENoYWxsZW5nZVJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6c2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpuc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKwog
MjAxNS0xMC0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE51
bGwgZGVyZWZlcmVuY2UgbG9hZGluZyBCbGluayBsYXlvdXQgdGVzdCBmYXN0L2Zvcm1zL2NvbG9y
L2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50Lmh0bWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmgJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsNyBAQCBwdWJsaWM6CiAKICAgICBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2ZVUkxBdXRoQ2hh
bGxlbmdlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9jZkNoYWxsZW5nZS5nZXQoKTsgfQogI2Vsc2UK
LSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
ICopOworICAgIFdFQkNPUkVfRVhQT1JUIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKik7CiAKICAgICBpZCBzZW5kZXIoKSBjb25zdCB7IHJldHVy
biBtX3NlbmRlci5nZXQoKTsgfQogICAgIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKm5z
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKSBjb25zdCB7IHJldHVybiBtX25zQ2hhbGxlbmdl
LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTEzMzEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBAQAorMjAxNS0xMC0x
OSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IEluaXRpYWwgTlNVUkxTZXNzaW9uIFdlYlJlc291cmNlTG9hZGVyIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2Fk
VG9Eb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnN0YXJ0TmV0d29ya0xvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmNsZWFudXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENvbXBsZXRlV2l0aEVy
cm9yKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
UmVzcG9uc2VBc3luYyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0QXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydEJ1ZmZlcmluZ1RpbWVySWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmJ1ZmZlcmlu
Z1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnZh
bGlkYXRlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlQ2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6c3VwcG9ydHNEYXRhQXJyYXkpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6Y3VycmVudFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmhhbmRsZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya2luZ1Nlc3Np
b24uaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFza0NsaWVudDo6
fk5ldHdvcmtpbmdEYXRhVGFza0NsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdE
YXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjpj
bGVhckNsaWVudCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya2luZ1Nl
c3Npb25Db2NvYS5tbTogQWRkZWQuCisgICAgICAgICh0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlz
cG9zaXRpb24pOgorICAgICAgICAodG9OU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRp
b24pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoTmV0d29y
a2luZ1Nlc3Npb246XSk6CisgICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJM
U2Vzc2lvbjp0YXNrOndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJM
U2Vzc2lvbjp0YXNrOmRpZFJlY2VpdmVDaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0YXNrOmRpZENv
bXBsZXRlV2l0aEVycm9yOl0pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRl
IFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkUmVjZWl2ZVJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVy
Ol0pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0
YVRhc2s6ZGlkUmVjZWl2ZURhdGE6XSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdTZXNz
aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6Y29uZmlndXJhdGlvbkZvclR5cGUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6TmV0d29ya2luZ1Nlc3Npb24pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5nRGF0YVRhc2s6Ok5ldHdvcmtpbmdEYXRhVGFz
ayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6fk5ldHdvcmtpbmdEYXRh
VGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6c3VzcGVuZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6cmVzdW1lKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjp0YXNrSWRlbnRpZmllcik6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKToKKyAg
ICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29u
ZmlnLmg6CisKIDIwMTUtMTAtMTkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBzdXBwb3J0IGZvciBsb25nIHByZXNzZXMgZnJv
bSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL2NvbmZpZy5oCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsOSBAQAogI2lmbmRlZiBIQVZF
X1dJTkRPV19TRVJWRVJfT0NDTFVTSU9OX05PVElGSUNBVElPTlMKICNkZWZpbmUgSEFWRV9XSU5E
T1dfU0VSVkVSX09DQ0xVU0lPTl9OT1RJRklDQVRJT05TIDEKICNlbmRpZgorI2lmbmRlZiBVU0Vf
TlNVUkxTRVNTSU9OCisjZGVmaW5lIFVTRV9OU1VSTFNFU1NJT04gMAorI2VuZGlmCiAjZW5kaWYK
IAogI2lmbmRlZiBIQVZFX1NFQ19BQ0NFU1NfQ09OVFJPTApJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTkxMjk0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNl
c3Npb25UcmFja2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGluZ0hhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1D
b29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5oPgpA
QCAtMTkyLDEyICsxOTMsMTcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Y29udgogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAg
ICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNl
bHNlCiAgICAgbmV0d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRv
RG93bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVyLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2Up
OwogCiAgICAgLy8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1ZXVlLgog
ICAgIGxvYWRlci0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAg
CiAgICAgbG9hZGVyLT5kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOworI2VuZGlmCiB9CiAK
IHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00oU2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgU3Ry
aW5nJiByZXN1bHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDEyICs0NywxNSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTmFtZXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKKyNpZiAhVVNFKE5TVVJMU0VT
U0lPTikKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjZW5kaWYKKwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTE2LDcgKzEx
OSwxMSBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvCiBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIoKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAgICBBU1NFUlQoIW1f
dGFzayk7CisjZWxzZQogICAgIEFTU0VSVCghbV9oYW5kbGUpOworI2VuZGlmCiAgICAgQVNTRVJU
KCFpc1N5bmNocm9ub3VzKCkgfHwgIW1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZGVsYXllZFJlcGx5
KTsKIH0KIApAQCAtMTgwLDcgKzE4NywxMyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
c3RhcnROZXR3b3JrCiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkU25pZmYgPSBtX3BhcmFtZXRl
cnMuY29udGVudFNuaWZmaW5nUG9saWN5ID09IFNuaWZmQ29udGVudDsKKyNpZiBVU0UoTlNVUkxT
RVNTSU9OKQorICAgIFVOVVNFRF9QQVJBTShzaG91bGRTbmlmZik7IC8vIEZJWE1FOiBVc2UgdGhp
cy4KKyAgICBtX3Rhc2sgPSBOZXR3b3JraW5nU2Vzc2lvbjo6c2luZ2xldG9uKCktPmNyZWF0ZURh
dGFUYXNrV2l0aFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCwgKnRoaXMpOworICAgIG1fdGFzay0+
cmVzdW1lKCk7CisjZWxzZQogICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSht
X25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBtX2N1cnJlbnRSZXF1ZXN0LCB0aGlzLCBtX2RlZmVy
c0xvYWRpbmcsIHNob3VsZFNuaWZmKTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKQEAgLTE4OCwxMCArMjAxLDE1
IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2EKICAgICBpZiAobV9k
ZWZlcnNMb2FkaW5nID09IGRlZmVycykKICAgICAgICAgcmV0dXJuOwogICAgIG1fZGVmZXJzTG9h
ZGluZyA9IGRlZmVyczsKKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAobV9o
YW5kbGUpIHsKICAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgogICAgIGlmICghbV9kZWZlcnNMb2FkaW5nKQog
ICAgICAgICBzdGFydCgpOwogfQpAQCAtMjA0LDI1ICsyMjIsNDAgQEAgdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmNsZWFudXAoKQogCiAgICAgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25z
KCk7CiAKKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIGlmIChtX3Rhc2spIHsKKyAgICAgICAg
bV90YXNrLT5jbGVhckNsaWVudCgpOworICAgICAgICBtX3Rhc2sgPSBudWxscHRyOworICAgIH0K
KyNlbHNlCiAgICAgaWYgKG1faGFuZGxlKSB7CiAgICAgICAgIG1faGFuZGxlLT5jbGVhckNsaWVu
dCgpOwogICAgICAgICBtX2hhbmRsZSA9IG51bGxwdHI7CiAgICAgfQorI2VuZGlmCiAKICAgICAv
LyBUaGlzIHdpbGwgY2F1c2UgTmV0d29ya1Jlc291cmNlTG9hZGVyIHRvIGJlIGRlc3Ryb3llZCBh
bmQgdGhlcmVmb3JlIHdlIGRvIGl0IGxhc3QuCiAgICAgbV9jb25uZWN0aW9uLT5kaWRDbGVhbnVw
UmVzb3VyY2VMb2FkZXIoKnRoaXMpOwogfQogCisjaWYgIVVTRShOU1VSTFNFU1NJT04pCiB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQoKQogewog
ICAgIEFTU0VSVChtX2hhbmRsZSk7CiAgICAgbV9kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCA9
IHRydWU7CiB9CisjZW5kaWYKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCisjaWYgVVNFKE5TVVJMU0VTU0lP
TikKKyAgICBpZiAobV90YXNrKQorICAgICAgICBtX3Rhc2stPnN1c3BlbmQoKTsKKyAgICAvLyBG
SVhNRTogRG8gc29tZXRoaW5nIHdpdGggdGhlIG5ldHdvcmsgY2FjaGUgaGVyZS4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAobV9oYW5kbGUgJiYgIW1fZGlkQ29udmVydEhh
bmRsZVRvRG93bmxvYWQpIHsKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogCkBAIC0yMzQs
MTAgKzI2Nyw0OSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQoKQogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9Ci0KKyNlbmRpZgogICAgIGNsZWFudXAoKTsKIH0KIAorI2lmIFVT
RShOU1VSTFNFU1NJT04pCisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsUGVyZm9y
bUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIocmVxdWVzdCk7Cit9CisK
K3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIHN0ZDo6ZnVuY3Rpb248
dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpD
cmVkZW50aWFsJik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
bjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgV2ViQ29yZTo6Q3JlZGVudGlhbCgpKTsKK30KKwor
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3Bv
bnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3Jlc3BvbnNlID0g
cmVzcG9uc2U7CisgICAgbV9yZXNwb25zZS5zZXRTb3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291
cmNlOjpOZXR3b3JrKTsKKyAgICBpZiAobV9wYXJhbWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJbmZv
KQorICAgICAgICBtX3Jlc3BvbnNlLmluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8oKTsKKyAgICAKKyAg
ICBib29sIHNob3VsZFdhaXRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSA9IG9yaWdpbmFsUmVx
dWVzdCgpLnJlcXVlc3RlcigpID09IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpNYWluOwor
ICAgIGlmICghc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRl
cjo6RGlkUmVjZWl2ZVJlc3BvbnNlKG1fcmVzcG9uc2UsIHNob3VsZFdhaXRDb250aW51ZURpZFJl
Y2VpdmVSZXNwb25zZSkpKQorICAgICAgICByZXR1cm47CisgICAgY29tcGxldGlvbkhhbmRsZXIo
UmVzcG9uc2VEaXNwb3NpdGlvbjo6QWxsb3cpOworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVy
KQoreworICAgIHNlbmRCdWZmZXJNYXliZUFib3J0aW5nKCpidWZmZXIsIGJ1ZmZlci0+c2l6ZSgp
KTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENvbXBsZXRlV2l0aEVycm9y
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKQoreworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlJlc291cmNlTG9hZGVyOjpEaWRGaW5pc2hSZXNvdXJjZUxvYWQoV1RGOjptb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKSkpOworfQorCisjZWxzZQorCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVjZWl2ZWRSZXNwb25zZSkKIHsKICAgICBBU1NFUlRfVU5V
U0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKQEAgLTQyOCw2ICs1MDAsOCBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1CiAgICAgc2VuZEFib3J0aW5nT25G
YWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6V2lsbFNlbmRSZXF1ZXN0KG1fY3Vy
cmVudFJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpKTsKIH0KIAorI2VuZGlmIC8vIFVTRShOU1VS
TFNFU1NJT04pCisgICAgCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVXaWxs
U2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KQogewogI2lmIFBM
QVRGT1JNKENPQ09BKQpAQCAtNDM4LDI0ICs1MTIsNDAgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmNvbnRpbnVlV2lsbAogI2VuZGlmCiAKICAgICBpZiAobV9jdXJyZW50UmVxdWVzdC5p
c051bGwoKSkgeworI2lmIFVTRShOU1VSTFNFU1NJT04pCisgICAgICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbHNlCiAgICAgICAg
IG1faGFuZGxlLT5jYW5jZWwoKTsKICAgICAgICAgZGlkRmFpbChtX2hhbmRsZS5nZXQoKSwgY2Fu
Y2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOworI2VuZGlmCiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0KKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21ldGhp
bmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBtX2hhbmRsZS0+Y29u
dGludWVXaWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7CisjZW5kaWYKIH0KIAogdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKIHsK
ICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgY2hlY2sgb25jZSBCbG9iUmVzb3VyY2VIYW5kbGUg
aW1wbGVtZW50cyBkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyBjb3JyZWN0bHkuCiAgICAgLy8gQ3Vy
cmVudGx5LCBpdCBkb2VzIG5vdCB3YWl0IGZvciByZXNwb25zZSwgc28gdGhlIGxvYWQgaXMgbGlr
ZWx5IHRvIGZpbmlzaCBiZWZvcmUgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UuCisjaWYgVVNF
KE5TVVJMU0VTU0lPTikKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyNlbHNlCiAgICAgaWYgKCFtX2hhbmRsZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9oYW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisjZW5kaWYK
IH0KIAorI2lmICFVU0UoTlNVUkxTRVNTSU9OKQorCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6ZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBsb25n
IGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKICAg
ICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKQEAgLTUyMCw2ICs2
MTAsOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cmVjZWl2ZWRDYW5jCiAgICAgZGlk
RmFpbChtX2hhbmRsZS5nZXQoKSwgY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwog
fQogCisjZW5kaWYgLy8gIVVTRShOU1VSTFNFU1NJT04pCisKIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpzdGFydEJ1ZmZlcmluZ1RpbWVySWZOZWVkZWQoKQogewogICAgIGlmIChpc1N5bmNo
cm9ub3VzKCkpCkBAIC01MzIsNyArNjI0LDkgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OnN0YXJ0QnVmZmVyaQogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmJ1ZmZlcmluZ1RpbWVy
RmlyZWQoKQogewogICAgIEFTU0VSVChtX2J1ZmZlcmVkRGF0YSk7CisjaWYgIVVTRShOU1VSTFNF
U1NJT04pCiAgICAgQVNTRVJUKG1faGFuZGxlKTsKKyNlbmRpZgogICAgIGlmICghbV9idWZmZXJl
ZERhdGEtPnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02MDAsNyArNjk0LDkgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJldHJpZXZlQwogCiB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6dmFsaWRhdGVDYWNoZUVudHJ5KHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2Fj
aGU6OkVudHJ5PiBlbnRyeSkKIHsKKyNpZiAhVVNFKE5TVVJMU0VTU0lPTikKICAgICBBU1NFUlQo
IW1faGFuZGxlKTsKKyNlbmRpZgogCiAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMgYWxyZWFkeSBj
b25kaXRpb25hbCB0aGVuIHRoZSByZXZhbGlkYXRpb24gd2FzIG5vdCB0cmlnZ2VyZWQgYnkgdGhl
IGRpc2sgY2FjaGUKICAgICAvLyBhbmQgd2Ugc2hvdWxkIG5vdCBvdmVyd3JpdGUgdGhlIGV4aXN0
aW5nIGNvbmRpdGlvbmFsIGhlYWRlcnMuCkBAIC02NjMsNyArNzU5LDcgQEAgYm9vbCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OnNlbmRBYm9ydGluZwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNp
ZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorI2lmIFVTRShQUk9URUNUSU9O
X1NQQUNFX0FVVEhfQ0FMTEJBQ0spICYmICFVU0UoTlNVUkxTRVNTSU9OKQogdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3lu
YyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rp
b25TcGFjZSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtNjg1LDE0ICs3
ODEsMjEgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbkF1dGhlbnRpYwogICAgIH0K
ICAgICBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZSkpOwog
fQorI2VuZGlmCiAKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZShib29sIHJlc3VsdCkKIHsKKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAg
IC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vs
c2UKICAgICBtX2hhbmRsZS0+Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlKHJlc3VsdCk7CisjZW5kaWYKIH0KICNlbmRpZgogCi0jaWYgVVNFKE5FVFdPUktfQ0ZE
QVRBX0FSUkFZX0NBTExCQUNLKQorI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFD
SykgJiYgIVVTRShOU1VSTFNFU1NJT04pCiBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3Vw
cG9ydHNEYXRhQXJyYXkoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
aAkocmV2aXNpb24gMTkxMjk0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNp
bmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2FjaGVWYWxp
ZGF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUhhbmRsZUNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KQEAgLTQ0LDExICs0MywxOSBA
QAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
IAorI2lmIFVTRShOU1VSTFNFU1NJT04pCisjaW5jbHVkZSAiTmV0d29ya2luZ1Nlc3Npb24uaCIK
KyNlbHNlCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZUNsaWVudC5oPgorI2VuZGlm
CisKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9DRkNhY2hlZFVSTFJlc3BvbnNlKiBDRkNhY2hlZFVS
TFJlc3BvbnNlUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCbG9iRGF0YUZpbGVS
ZWZlcmVuY2U7CisjaWYgIVVTRShOU1VSTFNFU1NJT04pCiBjbGFzcyBSZXNvdXJjZUhhbmRsZTsK
KyNlbmRpZgogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogfQogCkBAIC01OSw3ICs2NiwxNCBAQCBj
bGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczsKIGNsYXNzIFJlbW90ZU5ldHdvcmtp
bmdDb250ZXh0OwogY2xhc3MgU2FuZGJveEV4dGVuc2lvbjsKIAotY2xhc3MgTmV0d29ya1Jlc291
cmNlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Jlc291cmNlTG9hZGVyPiwgcHVi
bGljIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgSVBDOjpNZXNzYWdlU2Vu
ZGVyIHsKK2NsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcgorICAgIDogcHVibGljIFJlZkNvdW50
ZWQ8TmV0d29ya1Jlc291cmNlTG9hZGVyPgorI2lmIFVTRShOU1VSTFNFU1NJT04pCisgICAgLCBw
dWJsaWMgTmV0d29ya2luZ0RhdGFUYXNrQ2xpZW50CisjZWxzZQorICAgICwgcHVibGljIFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlQ2xpZW50CisjZW5kaWYKKyAgICAsIHB1YmxpYyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29ya1Jlc291cmNlTG9hZGVy
PiBjcmVhdGUoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMs
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uKQogICAgIHsKQEAgLTc3
LDggKzkxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBDaGFuZ2VzIHdpdGggcmVkaXJlY3RzLgogICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgY3VycmVudFJlcXVlc3QoKSB7IHJldHVybiBtX2N1
cnJlbnRSZXF1ZXN0OyB9CiAKKyNpZiAhVVNFKE5TVVJMU0VTU0lPTikKICAgICBXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGUuZ2V0KCk7IH0K
ICAgICB2b2lkIGRpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKCk7CisjZW5kaWYKIAogICAgIHZv
aWQgc3RhcnQoKTsKICAgICB2b2lkIGFib3J0KCk7CkBAIC0xMTcsNiArMTMzLDE0IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGFyYW1ldGVycy5pZGVudGlmaWVyOyB9CiAKKyNp
ZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIC8vIE5ldHdvcmtpbmdEYXRhVGFza0NsaWVudC4KKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIHN0ZDo6
ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKT4pIGZpbmFsIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNv
cmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4p
IGZpbmFsIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNwb25z
ZURpc3Bvc2l0aW9uKT4pIGZpbmFsIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPikgZmluYWwgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImKSBmaW5hbCBvdmVycmlkZTsKKyNlbHNlCiAgICAgLy8gUmVzb3VyY2VIYW5kbGVD
bGllbnQKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0QXN5bmMoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25l
ZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVT
ZW50KSBvdmVycmlkZTsKQEAgLTE0OCw2ICsxNzIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgTlND
YWNoZWRVUkxSZXNwb25zZSAqKSBvdmVycmlkZTsKICNlbmRpZgogI2VuZGlmCisjZW5kaWYgLy8g
VVNFKE5TVVJMU0VTU0lPTikKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIHZvaWQg
ZGlkUmV0cmlldmVDYWNoZUVudHJ5KHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5
Pik7CkBAIC0xNzcsNyArMjAyLDExIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247CiAKICAgICBSZWZQdHI8UmVtb3RlTmV0
d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7CisjaWYgVVNFKE5TVVJMU0VTU0lP
TikKKyAgICBSZWZQdHI8TmV0d29ya2luZ0RhdGFUYXNrPiBtX3Rhc2s7CisjZWxzZQogICAgIFJl
ZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7CisjZW5kaWYKIAogICAgIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OwogICAgIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtpbmdTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya2luZ1Nlc3Npb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtpbmdTZXNzaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtpbmdTZXNz
aW9uX2gKKyNkZWZpbmUgTmV0d29ya2luZ1Nlc3Npb25faAorCitPQkpDX0NMQVNTIE5TVVJMU2Vz
c2lvbjsKK09CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uRGF0YVRhc2s7CitPQkpDX0NMQVNTIE5TT3Bl
cmF0aW9uUXVldWU7CisKKyNpZm5kZWYgX19PQkpDX18KK3R5cGVkZWYgc3RydWN0IG9iamNfb2Jq
ZWN0ICppZDsKKyNlbmRpZgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBDcmVkZW50aWFsOworY2xh
c3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFJlc291cmNl
UmVzcG9uc2U7CitjbGFzcyBTaGFyZWRCdWZmZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitlbnVtIGNsYXNzIFJlc3BvbnNlRGlzcG9zaXRpb24geworICAgIENhbmNlbCwKKyAgICBBbGxv
dywKKyAgICBCZWNvbWVEb3dubG9hZAorfTsKKworZW51bSBjbGFzcyBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZURpc3Bvc2l0aW9uIHsKKyAgICBVc2VDcmVkZW50aWFsLAorICAgIFBlcmZvcm1EZWZh
dWx0SGFuZGxpbmcsCisgICAgQ2FuY2VsLAorICAgIFJlamVjdFByb3RlY3Rpb25TcGFjZQorfTsK
KworY2xhc3MgTmV0d29ya2luZ1Nlc3Npb247CisKK2NsYXNzIE5ldHdvcmtpbmdEYXRhVGFza0Ns
aWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0
aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0Jik+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVu
dGlhbCYpPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNwb25zZURp
c3Bvc2l0aW9uKT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxl
dGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpID0gMDsKKworICAgIHZp
cnR1YWwgfk5ldHdvcmtpbmdEYXRhVGFza0NsaWVudCgpIHsgfTsKK307CisKK2NsYXNzIE5ldHdv
cmtpbmdEYXRhVGFzayA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtpbmdEYXRhVGFzaz4gewor
ICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JraW5nU2Vzc2lvbjsKK3B1YmxpYzoKKyAgICB2b2lkIHN1
c3BlbmQoKTsKKyAgICB2b2lkIHJlc3VtZSgpOworCisgICAgdWludDY0X3QgdGFza0lkZW50aWZp
ZXIoKTsKKworICAgIH5OZXR3b3JraW5nRGF0YVRhc2soKTsKKworICAgIE5ldHdvcmtpbmdEYXRh
VGFza0NsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICB2b2lkIGNsZWFy
Q2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNp
dCBOZXR3b3JraW5nRGF0YVRhc2soTmV0d29ya2luZ1Nlc3Npb24mLCBOZXR3b3JraW5nRGF0YVRh
c2tDbGllbnQmLCBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+KTsKKworICAgIE5ldHdv
cmtpbmdTZXNzaW9uJiBtX3Nlc3Npb247CisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFU
YXNrPiBtX3Rhc2s7CisgICAgTmV0d29ya2luZ0RhdGFUYXNrQ2xpZW50KiBtX2NsaWVudDsKK307
CisKK2NsYXNzIE5ldHdvcmtpbmdTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya2lu
Z1Nlc3Npb24+IHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya2luZ0RhdGFUYXNrOworcHVibGlj
OgorICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIE5vcm1hbCwKKyAgICAgICAgRXBoZW1l
cmFsCisgICAgfTsKKworICAgIFJlZlB0cjxOZXR3b3JraW5nRGF0YVRhc2s+IGNyZWF0ZURhdGFU
YXNrV2l0aFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgTmV0d29ya2lu
Z0RhdGFUYXNrQ2xpZW50Jik7CisKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtpbmdTZXNzaW9uPiBz
aW5nbGV0b24oKTsgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGFjdHVhbGx5IGJlIGEgc2luZ2xl
dG9uLgorICAgIE5ldHdvcmtpbmdEYXRhVGFzayogZGF0YVRhc2tGb3JJZGVudGlmaWVyKHVpbnQ2
NF90KTsKK3ByaXZhdGU6CisgICAgc3RhdGljIFJlZjxOZXR3b3JraW5nU2Vzc2lvbj4gY3JlYXRl
KFR5cGUpOworCisgICAgTmV0d29ya2luZ1Nlc3Npb24oVHlwZSk7CisgICAgSGFzaE1hcDx1aW50
NjRfdCwgTmV0d29ya2luZ0RhdGFUYXNrKj4gbV9kYXRhVGFza01hcDsKKyAgICBSZXRhaW5QdHI8
TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgUmV0YWluUHRyPGlkPiBtX3Nlc3Npb25EZWxl
Z2F0ZTsKKyAgICBSZXRhaW5QdHI8TlNPcGVyYXRpb25RdWV1ZT4gbV9zZXNzaW9uUXVldWU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBOZXR3b3JraW5nU2Vzc2lv
bl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JraW5n
U2Vzc2lvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtpbmdTZXNzaW9uQ29jb2EubW0JKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JraW5nU2Vzc2lvbkNvY29hLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJOZXR3b3JraW5nU2Vzc2lvbi5oIgorCisjaWYgVVNFKE5TVVJM
U0VTU0lPTikKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTFNlc3Npb24uaD4KKworI2ltcG9y
dCA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9D
cmVkZW50aWFsLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW1wb3J0IDx3dGYv
TWFpblRocmVhZC5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3N0YXRpYyBO
U1VSTFNlc3Npb25SZXNwb25zZURpc3Bvc2l0aW9uIHRvTlNVUkxTZXNzaW9uUmVzcG9uc2VEaXNw
b3NpdGlvbihXZWJLaXQ6OlJlc3BvbnNlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCit7CisgICAg
c3dpdGNoIChkaXNwb3NpdGlvbikgeworICAgIGNhc2UgV2ViS2l0OjpSZXNwb25zZURpc3Bvc2l0
aW9uOjpDYW5jZWw6CisgICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25SZXNwb25zZUNhbmNlbDsK
KyAgICBjYXNlIFdlYktpdDo6UmVzcG9uc2VEaXNwb3NpdGlvbjo6QWxsb3c6CisgICAgICAgIHJl
dHVybiBOU1VSTFNlc3Npb25SZXNwb25zZUFsbG93OworICAgIGNhc2UgV2ViS2l0OjpSZXNwb25z
ZURpc3Bvc2l0aW9uOjpCZWNvbWVEb3dubG9hZDoKKyAgICAgICAgcmV0dXJuIE5TVVJMU2Vzc2lv
blJlc3BvbnNlQmVjb21lRG93bmxvYWQ7CisgICAgfQorfQorCitzdGF0aWMgTlNVUkxTZXNzaW9u
QXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uIHRvTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bv
c2l0aW9uKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3Np
dGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpc3Bvc2l0aW9uKSB7CisgICAgY2FzZSBXZWJLaXQ6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWw6CisgICAgICAg
IHJldHVybiBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlVXNlQ3JlZGVudGlhbDsKKyAgICBjYXNl
IFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UGVyZm9ybURlZmF1
bHRIYW5kbGluZzoKKyAgICAgICAgcmV0dXJuIE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VQZXJm
b3JtRGVmYXVsdEhhbmRsaW5nOworICAgIGNhc2UgV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZURpc3Bvc2l0aW9uOjpDYW5jZWw6CisgICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25BdXRo
Q2hhbGxlbmdlQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgY2FzZSBXZWJLaXQ6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFj
ZToKKyAgICAgICAgcmV0dXJuIE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VSZWplY3RQcm90ZWN0
aW9uU3BhY2U7CisgICAgfQorfQorCitAaW50ZXJmYWNlIE5ldHdvcmtpbmdTZXNzaW9uRGVsZWdh
dGUgOiBOU09iamVjdCA8TlNVUkxTZXNzaW9uRGF0YURlbGVnYXRlPiB7CisgICAgV2ViS2l0OjpO
ZXR3b3JraW5nU2Vzc2lvbiogX3Nlc3Npb247Cit9CisKKy0gKGlkKWluaXRXaXRoTmV0d29ya2lu
Z1Nlc3Npb246KFdlYktpdDo6TmV0d29ya2luZ1Nlc3Npb24mKXNlc3Npb247CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIE5ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUKKworLSAoaWQpaW5pdFdp
dGhOZXR3b3JraW5nU2Vzc2lvbjooV2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbiYpc2Vzc2lvbgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgX3Nlc3Npb24gPSAmc2Vzc2lvbjsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gdGFzazooTlNV
UkxTZXNzaW9uVGFzayAqKXRhc2sgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb246KE5TSFRUUFVS
TFJlc3BvbnNlICopcmVzcG9uc2UgbmV3UmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNVUkxSZXF1ZXN0ICopKWNvbXBsZXRpb25IYW5k
bGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworCisgICAgYXV0byBuZXR3b3JraW5n
VGFzayA9IF9zZXNzaW9uLT5kYXRhVGFza0ZvcklkZW50aWZpZXIodGFzay50YXNrSWRlbnRpZmll
cik7CisgICAgQVNTRVJUKG5ldHdvcmtpbmdUYXNrKTsKKworICAgIGlmIChhdXRvIGNsaWVudCA9
IG5ldHdvcmtpbmdUYXNrLT5jbGllbnQoKSkgeworICAgICAgICBjbGllbnQtPndpbGxQZXJmb3Jt
SFRUUFJlZGlyZWN0aW9uKHJlc3BvbnNlLCByZXF1ZXN0LCBeKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpVcGRhdGVIVFRQQm9k
eSkpOworICAgICAgICAgICAgfQorICAgICAgICApOworICAgIH0KK30KKworLSAodm9pZClVUkxT
ZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRhc2s6KE5TVVJMU2Vzc2lvblRhc2sgKil0
YXNrIGRpZFJlY2VpdmVDaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKilj
aGFsbGVuZ2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJMU2Vzc2lvbkF1dGhDaGFs
bGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICpjcmVkZW50aWFs
KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKKworICAg
IGF1dG8gbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKHRh
c2sudGFza0lkZW50aWZpZXIpOworICAgIEFTU0VSVChuZXR3b3JraW5nVGFzayk7CisgICAgCisg
ICAgaWYgKGF1dG8gY2xpZW50ID0gbmV0d29ya2luZ1Rhc2stPmNsaWVudCgpKSB7CisgICAgICAg
IGNsaWVudC0+ZGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIF4oV2ViS2l0OjpBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpD
cmVkZW50aWFsJiBjcmVkZW50aWFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHRvTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uKGRp
c3Bvc2l0aW9uKSwgY3JlZGVudGlhbC5uc0NyZWRlbnRpYWwoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICk7CisgICAgfQorfQorCistICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAq
KXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sgZGlkQ29tcGxldGVXaXRoRXJy
b3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKKworICAg
IGF1dG8gbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKHRh
c2sudGFza0lkZW50aWZpZXIpOworICAgIEFTU0VSVChuZXR3b3JraW5nVGFzayk7CisKKyAgICBp
ZiAoYXV0byBjbGllbnQgPSBuZXR3b3JraW5nVGFzay0+Y2xpZW50KCkpCisgICAgICAgIGNsaWVu
dC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworfQorCistICh2b2lkKVVSTFNlc3Npb246
KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gZGF0YVRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICop
ZGF0YVRhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJMU2Vzc2lvblJlc3BvbnNlRGlzcG9zaXRpb24g
ZGlzcG9zaXRpb24pKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlc3Np
b24pOworCisgICAgYXV0byBuZXR3b3JraW5nVGFzayA9IF9zZXNzaW9uLT5kYXRhVGFza0Zvcklk
ZW50aWZpZXIoZGF0YVRhc2sudGFza0lkZW50aWZpZXIpOworICAgIEFTU0VSVChuZXR3b3JraW5n
VGFzayk7CisKKyAgICBpZiAoYXV0byBjbGllbnQgPSBuZXR3b3JraW5nVGFzay0+Y2xpZW50KCkp
IHsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UsIF4oV2ViS2l0
OjpSZXNwb25zZURpc3Bvc2l0aW9uIHJlc3BvbnNlRGlzcG9zaXRpb24pCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodG9OU1VSTFNlc3Npb25SZXNwb25z
ZURpc3Bvc2l0aW9uKHJlc3BvbnNlRGlzcG9zaXRpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vz
c2lvbiBkYXRhVGFzazooTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilkYXRhVGFzayBkaWRSZWNlaXZl
RGF0YTooTlNEYXRhICopZGF0YQoreworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKKworICAg
IGF1dG8gbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKGRh
dGFUYXNrLnRhc2tJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQobmV0d29ya2luZ1Rhc2spOworCisg
ICAgLy8gRklYTUU6IExvb2sgaW50byB3aHkgdGhpcyBiZWluZyBvbiB0aGUgbWFpbiB0aHJlYWQg
Y2F1c2VzIGZld2VyIGNyYXNoZXMsIGJ1dCBtb3JlIGNyYXNoZXMgd2l0aCB0aGUgb3RoZXIgY2Fs
bGJhY2tzLgorICAgIFJldGFpblB0cjxOU0RhdGE+IHJlZihkYXRhKTsKKyAgICBjYWxsT25NYWlu
VGhyZWFkKFtyZWYsIGRhdGEsIG5ldHdvcmtpbmdUYXNrXSB7CisgICAgICAgIGlmIChhdXRvIGNs
aWVudCA9IG5ldHdvcmtpbmdUYXNrLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGNsaWVudC0+ZGlk
UmVjZWl2ZURhdGEoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKGRhdGEpKTsKKyAg
ICB9KTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK1JlZjxOZXR3b3Jr
aW5nU2Vzc2lvbj4gTmV0d29ya2luZ1Nlc3Npb246OmNyZWF0ZShUeXBlIHR5cGUpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya2luZ1Nlc3Npb24odHlwZSkpOworfQorCitSZWY8
TmV0d29ya2luZ1Nlc3Npb24+IE5ldHdvcmtpbmdTZXNzaW9uOjpzaW5nbGV0b24oKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8TmV0d29ya2luZ1Nlc3Npb24+PiBzaGFyZWRJbnN0
YW5jZShOZXR3b3JraW5nU2Vzc2lvbjo6Y3JlYXRlKFR5cGU6Ok5vcm1hbCkpOworICAgIHJldHVy
biBzaGFyZWRJbnN0YW5jZS5nZXQoKS5jb3B5UmVmKCk7Cit9CisgICAgCitzdGF0aWMgTlNVUkxT
ZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbkZvclR5cGUoTmV0d29ya2luZ1Nlc3Np
b246OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5ldHdvcmtp
bmdTZXNzaW9uOjpUeXBlOjpOb3JtYWw6CisgICAgICAgIHJldHVybiBbTlNVUkxTZXNzaW9uQ29u
ZmlndXJhdGlvbiBkZWZhdWx0U2Vzc2lvbkNvbmZpZ3VyYXRpb25dOworICAgIGNhc2UgTmV0d29y
a2luZ1Nlc3Npb246OlR5cGU6OkVwaGVtZXJhbDoKKyAgICAgICAgcmV0dXJuIFtOU1VSTFNlc3Np
b25Db25maWd1cmF0aW9uIGVwaGVtZXJhbFNlc3Npb25Db25maWd1cmF0aW9uXTsKKyAgICB9Cit9
CisKK05ldHdvcmtpbmdTZXNzaW9uOjpOZXR3b3JraW5nU2Vzc2lvbihUeXBlIHR5cGUpCit7Cisg
ICAgbV9zZXNzaW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtbTmV0d29ya2luZ1Nlc3Npb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdFdpdGhOZXR3b3JraW5nU2Vzc2lvbjoqdGhpc10pOworICAgIG1fc2Vzc2lv
blF1ZXVlID0gYWRvcHROUyhbW05TT3BlcmF0aW9uUXVldWUgYWxsb2NdIGluaXRdKTsKKworICAg
IE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9u
Rm9yVHlwZSh0eXBlKTsKKyAgICBtX3Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRo
Q29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOm1fc2Vzc2lvbkRlbGVnYXRlLmdl
dCgpIGRlbGVnYXRlUXVldWU6bV9zZXNzaW9uUXVldWUuZ2V0KCldOworfQorCitSZWZQdHI8TmV0
d29ya2luZ0RhdGFUYXNrPiBOZXR3b3JraW5nU2Vzc2lvbjo6Y3JlYXRlRGF0YVRhc2tXaXRoUmVx
dWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIE5ldHdvcmtpbmdE
YXRhVGFza0NsaWVudCYgY2xpZW50KQoreworICAgIFJlZlB0cjxOZXR3b3JraW5nRGF0YVRhc2s+
IHRhc2sgPSBhZG9wdFJlZihuZXcgTmV0d29ya2luZ0RhdGFUYXNrKCp0aGlzLCBjbGllbnQsIFtt
X3Nlc3Npb24gZGF0YVRhc2tXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3Jl
OjpVcGRhdGVIVFRQQm9keSldKSk7CisgICAgcmV0dXJuIHRhc2s7Cit9CisKK05ldHdvcmtpbmdE
YXRhVGFzayogTmV0d29ya2luZ1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcih1aW50NjRf
dCB0YXNrSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9kYXRhVGFza01hcC5jb250YWlucyh0
YXNrSWRlbnRpZmllcikpOworICAgIHJldHVybiBtX2RhdGFUYXNrTWFwLmdldCh0YXNrSWRlbnRp
Zmllcik7Cit9CisKK05ldHdvcmtpbmdEYXRhVGFzazo6TmV0d29ya2luZ0RhdGFUYXNrKE5ldHdv
cmtpbmdTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JraW5nRGF0YVRhc2tDbGllbnQmIGNsaWVudCwg
UmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiB0YXNrKQorICAgIDogbV9zZXNzaW9uKHNl
c3Npb24pCisgICAgLCBtX3Rhc2sodGFzaykKKyAgICAsIG1fY2xpZW50KCZjbGllbnQpCit7Cisg
ICAgQVNTRVJUKCFtX3Nlc3Npb24ubV9kYXRhVGFza01hcC5jb250YWlucyh0YXNrSWRlbnRpZmll
cigpKSk7CisgICAgbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAuYWRkKHRhc2tJZGVudGlmaWVyKCks
IHRoaXMpOworfQorCitOZXR3b3JraW5nRGF0YVRhc2s6On5OZXR3b3JraW5nRGF0YVRhc2soKQor
eworICAgIEFTU0VSVChtX3Nlc3Npb24ubV9kYXRhVGFza01hcC5jb250YWlucyh0YXNrSWRlbnRp
ZmllcigpKSk7CisgICAgQVNTRVJUKG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwLmdldCh0YXNrSWRl
bnRpZmllcigpKSA9PSB0aGlzKTsKKyAgICBtX3Nlc3Npb24ubV9kYXRhVGFza01hcC5yZW1vdmUo
dGFza0lkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgTmV0d29ya2luZ0RhdGFUYXNrOjpzdXNwZW5k
KCkKK3sKKyAgICBbbV90YXNrIHN1c3BlbmRdOworfQorCit2b2lkIE5ldHdvcmtpbmdEYXRhVGFz
azo6cmVzdW1lKCkKK3sKKyAgICBbbV90YXNrIHJlc3VtZV07Cit9CisKK3VpbnQ2NF90IE5ldHdv
cmtpbmdEYXRhVGFzazo6dGFza0lkZW50aWZpZXIoKQoreworICAgIHJldHVybiBbbV90YXNrIHRh
c2tJZGVudGlmaWVyXTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRl
ck1hYy5tbQkocmV2aXNpb24gMTkxMjk0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQs
NyArOTQsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzCiAgICAg
bV9oYW5kbGUtPmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoY2ZSZXNwb25zZSk7CiB9CiAKLSNl
bHNlCisjZWxpZiAhVVNFKE5TVVJMU0VTU0lPTikKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTlNDYWNo
ZWRVUkxSZXNwb25zZSAqbnNSZXNwb25zZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTI5NCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0NCw2ICsxMDQ0LDggQEAKIAkJNTI3MkIyOEExNDA2OTg1RDAwOTZBNUQw
IC8qIFN0YXRpc3RpY3NEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5j
cHAgKi87IH07CiAJCTUyNzJCMjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkIyODkx
NDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi87IH07CiAJCTUyOEMzN0MxMTk1
Q0JCMUEwMEQ4QjlDQyAvKiBXS0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOUYyODEwMTk1OEY0NzgwMDhDQUM3
MiAvKiBXS0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1QzIwQ0I5RDFCQjBEQ0ZBMDA4OTVCQjEgLyogTmV0
d29ya2luZ1Nlc3Npb25Db2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDMjBDQjlCMUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vzc2lv
bkNvY29hLm1tICovOyB9OworCQk1QzIwQ0JBMDFCQjFFQ0Q4MDA4OTVCQjEgLyogTmV0d29ya2lu
Z1Nlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vzc2lvbi5oICovOyB9Owog
CQk1REE2RUQwQTE0OTA2MDY5MDBCNDFEMTIgLyogRHluYW1pY0xpbmtlckVudmlyb25tZW50RXh0
cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
REE2RUQwODE0OTA2MDY5MDBCNDFEMTIgLyogRHluYW1pY0xpbmtlckVudmlyb25tZW50RXh0cmFj
dG9yLmggKi87IH07CiAJCTVEQTZFRDBCMTQ5MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2Vy
RW52aXJvbm1lbnRFeHRyYWN0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1REE2RUQwOTE0OTA2MDY5MDBCNDFEMTIgLyogRHluYW1pY0xpbmtlckVu
dmlyb25tZW50RXh0cmFjdG9yLm1tICovOyB9OwogCQk2NTAxQkQxQTEyRjEyNDM0MDBFOUYyNDgg
LyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjVCODZGMTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVj
dG9yLmNwcCAqLzsgfTsKQEAgLTMyMzcsNiArMzIzOSw4IEBACiAJCTUxRkQxOEI0MTY1MUZCQUQw
MERCRTFDRSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTmV0d29ya1Jlc291cmNlTG9hZGVyLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTI3MkIyODgxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YXRpc3RpY3NEYXRhLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3Rp
Y3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpc3RpY3NEYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMjBDQjlCMUJCMERDRDIwMDg5NUJC
MSAvKiBOZXR3b3JraW5nU2Vzc2lvbkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtpbmdTZXNzaW9uQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vzc2lv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JraW5nU2Vzc2lvbi5o
OyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya2luZ1Nlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUQ0NDJBNTUxNkQ1ODU2NzAwQUMzMzMxIC8qIFBsdWdpblNlcnZp
Y2UuZW50aXRsZW1lbnRzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50czsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNURBNkVEMDgxNDkwNjA2OTAwQjQxRDEyIC8qIER5
bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEeW5hbWljTGlua2VyRW52aXJvbm1lbnRFeHRyYWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNURBNkVEMDkxNDkwNjA2OTAwQjQxRDEyIC8qIER5bmFtaWNM
aW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IER5bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NTIsNiArNTU1Niw3IEBACiAJCQkJNTFGRDE4QjMx
NjUxRkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgKi8sCiAJCQkJNTFG
RDE4QjQxNjUxRkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5oICovLAogCQkJ
CUUxNTI1NTE3MTcwMTA5RkIwMDNEN0FEQiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIubWVzc2Fn
ZXMuaW4gKi8sCisJCQkJNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtpbmdTZXNz
aW9uLmggKi8sCiAJCQkJRTFCNzg0NzAxNjNGMjQ2OTAwMDdCNjkyIC8qIFJlbW90ZU5ldHdvcmtp
bmdDb250ZXh0LmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IE5ldHdvcmtQcm9jZXNzOwpAQCAtNTg5
Niw2ICs1OTAxLDcgQEAKIAkJN0VDNEYwRjgxOEU0QTkyMjAwODA1NkFGIC8qIGNvY29hICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1QzIwQ0I5QjFCQjBE
Q0QyMDA4OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbSAqLywKIAkJCQk3RUM0RjBG
OTE4RTRBOTQ1MDA4MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSAqLywKIAkJCSk7CiAJ
CQluYW1lID0gY29jb2E7CkBAIC04MjgzLDYgKzgyODksNyBAQAogCQkJCTM3OEUxQTRBMTgyMDhD
RDYwMDMxMDA3QSAvKiBXS05TU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzhFMUE0RTE4
MjA4RDcwMDAzMTAwN0EgLyogV0tOU1VSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdGQzE5NEIx
ODUxMEQ2QTAwOENGQTQ3IC8qIFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtpbmdTZXNz
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzE4M0Q1NzE4MkY0RTcwMDA4MEM4MTEgLyogV0tO
U1VSTEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdCRjJGMDYxOTQ3REVCNDAwNzIzQzQ4
IC8qIFdLTlNVUkxSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQwNzYwMjEyNEZGMDI3
MDA2OEYyMEEgLyogV0tOdW1iZXIuaCBpbiBIZWFkZXJzICovLApAQCAtOTgzMCw2ICs5ODM3LDcg
QEAKIAkJCQlCQ0U0Njk3OTEyMTRGMkI0MDAwQjk4RUIgLyogV2ViRnJhbWVMaXN0ZW5lclByb3h5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTExQTVGMTEyRjRGQkIwMDMzN0JBQiAvKiBXZWJG
cmFtZUxvYWRlckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDI4RjNFNzE4ODVDQ0Mx
MDA0QjlFQUUgLyogV2ViRnJhbWVMb2FkZXJDbGllbnRJT1MubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk1QzIwQ0I5RDFCQjBEQ0ZBMDA4OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzOTFGMkNBMTIxQjY3OUEwMEVCRjdFOCAvKiBXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCOUY2QTExMTIzQTg0QjAw
QTEzN0UwIC8qIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzExMUIwRTExMkY1RTRGMDAzMzdCQUIgLyogV2ViRnJhbWVQcm94eS5jcHAgaW4gU291
cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263553</attachid>
            <date>2015-10-19 22:32:43 -0700</date>
            <delta_ts>2015-10-20 10:38:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150355-20151019223200.patch</filename>
            <type>text/plain</type>
            <size>39663</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTEwLTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW5pdGlhbCBO
U1VSTFNlc3Npb24gV2ViUmVzb3VyY2VMb2FkZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6OmNmVVJMQXV0aENoYWxsZW5nZVJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6c2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpuc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKwog
MjAxNS0xMC0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE51
bGwgZGVyZWZlcmVuY2UgbG9hZGluZyBCbGluayBsYXlvdXQgdGVzdCBmYXN0L2Zvcm1zL2NvbG9y
L2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50Lmh0bWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmgJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsNyBAQCBwdWJsaWM6CiAKICAgICBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2ZVUkxBdXRoQ2hh
bGxlbmdlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9jZkNoYWxsZW5nZS5nZXQoKTsgfQogI2Vsc2UK
LSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
ICopOworICAgIFdFQkNPUkVfRVhQT1JUIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKik7CiAKICAgICBpZCBzZW5kZXIoKSBjb25zdCB7IHJldHVy
biBtX3NlbmRlci5nZXQoKTsgfQogICAgIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKm5z
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKSBjb25zdCB7IHJldHVybiBtX25zQ2hhbGxlbmdl
LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTEzMzEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBAQAorMjAxNS0xMC0x
OSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IEluaXRpYWwgTlNVUkxTZXNzaW9uIFdlYlJlc291cmNlTG9hZGVyIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2Fk
VG9Eb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnN0YXJ0TmV0d29ya0xvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmNsZWFudXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENvbXBsZXRlV2l0aEVy
cm9yKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
UmVzcG9uc2VBc3luYyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0QXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydEJ1ZmZlcmluZ1RpbWVySWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmJ1ZmZlcmlu
Z1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnZh
bGlkYXRlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlQ2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6c3VwcG9ydHNEYXRhQXJyYXkpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6Y3VycmVudFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmhhbmRsZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya2luZ1Nlc3Np
b24uaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFza0NsaWVudDo6
fk5ldHdvcmtpbmdEYXRhVGFza0NsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdE
YXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjpj
bGVhckNsaWVudCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya2luZ1Nl
c3Npb25Db2NvYS5tbTogQWRkZWQuCisgICAgICAgICh0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlz
cG9zaXRpb24pOgorICAgICAgICAodG9OU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRp
b24pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoTmV0d29y
a2luZ1Nlc3Npb246XSk6CisgICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJM
U2Vzc2lvbjp0YXNrOndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJM
U2Vzc2lvbjp0YXNrOmRpZFJlY2VpdmVDaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0YXNrOmRpZENv
bXBsZXRlV2l0aEVycm9yOl0pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRl
IFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkUmVjZWl2ZVJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVy
Ol0pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0
YVRhc2s6ZGlkUmVjZWl2ZURhdGE6XSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdTZXNz
aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6Y29uZmlndXJhdGlvbkZvclR5cGUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6TmV0d29ya2luZ1Nlc3Npb24pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5nRGF0YVRhc2s6Ok5ldHdvcmtpbmdEYXRhVGFz
ayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6fk5ldHdvcmtpbmdEYXRh
VGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6c3VzcGVuZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6cmVzdW1lKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjp0YXNrSWRlbnRpZmllcik6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKToKKyAg
ICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29u
ZmlnLmg6CisKIDIwMTUtMTAtMTkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBzdXBwb3J0IGZvciBsb25nIHByZXNzZXMgZnJv
bSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL2NvbmZpZy5oCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsOSBAQAogI2lmbmRlZiBIQVZF
X1dJTkRPV19TRVJWRVJfT0NDTFVTSU9OX05PVElGSUNBVElPTlMKICNkZWZpbmUgSEFWRV9XSU5E
T1dfU0VSVkVSX09DQ0xVU0lPTl9OT1RJRklDQVRJT05TIDEKICNlbmRpZgorI2lmbmRlZiBVU0Vf
TlNVUkxTRVNTSU9OCisjZGVmaW5lIFVTRV9OU1VSTFNFU1NJT04gMAorI2VuZGlmCiAjZW5kaWYK
IAogI2lmbmRlZiBIQVZFX1NFQ19BQ0NFU1NfQ09OVFJPTApJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTkxMjk0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNl
c3Npb25UcmFja2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGluZ0hhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1D
b29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5oPgpA
QCAtMTkyLDEyICsxOTMsMTcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Y29udgogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAg
ICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNl
bHNlCiAgICAgbmV0d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRv
RG93bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVyLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2Up
OwogCiAgICAgLy8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1ZXVlLgog
ICAgIGxvYWRlci0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAg
CiAgICAgbG9hZGVyLT5kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOworI2VuZGlmCiB9CiAK
IHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00oU2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgU3Ry
aW5nJiByZXN1bHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDEyICs0NywxNSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTmFtZXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKKyNpZiAhVVNFKE5TVVJMU0VT
U0lPTikKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjZW5kaWYKKwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTE2LDcgKzEx
OSwxMSBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvCiBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIoKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAgICBBU1NFUlQoIW1f
dGFzayk7CisjZWxzZQogICAgIEFTU0VSVCghbV9oYW5kbGUpOworI2VuZGlmCiAgICAgQVNTRVJU
KCFpc1N5bmNocm9ub3VzKCkgfHwgIW1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZGVsYXllZFJlcGx5
KTsKIH0KIApAQCAtMTgwLDcgKzE4NywxMyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
c3RhcnROZXR3b3JrCiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkU25pZmYgPSBtX3BhcmFtZXRl
cnMuY29udGVudFNuaWZmaW5nUG9saWN5ID09IFNuaWZmQ29udGVudDsKKyNpZiBVU0UoTlNVUkxT
RVNTSU9OKQorICAgIFVOVVNFRF9QQVJBTShzaG91bGRTbmlmZik7IC8vIEZJWE1FOiBVc2UgdGhp
cy4KKyAgICBtX3Rhc2sgPSBOZXR3b3JraW5nU2Vzc2lvbjo6c2luZ2xldG9uKCktPmNyZWF0ZURh
dGFUYXNrV2l0aFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCwgKnRoaXMpOworICAgIG1fdGFzay0+
cmVzdW1lKCk7CisjZWxzZQogICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSht
X25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBtX2N1cnJlbnRSZXF1ZXN0LCB0aGlzLCBtX2RlZmVy
c0xvYWRpbmcsIHNob3VsZFNuaWZmKTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKQEAgLTE4OCwxMCArMjAxLDE1
IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2EKICAgICBpZiAobV9k
ZWZlcnNMb2FkaW5nID09IGRlZmVycykKICAgICAgICAgcmV0dXJuOwogICAgIG1fZGVmZXJzTG9h
ZGluZyA9IGRlZmVyczsKKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAobV9o
YW5kbGUpIHsKICAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgogICAgIGlmICghbV9kZWZlcnNMb2FkaW5nKQog
ICAgICAgICBzdGFydCgpOwogfQpAQCAtMjA0LDI1ICsyMjIsNDAgQEAgdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmNsZWFudXAoKQogCiAgICAgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25z
KCk7CiAKKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIGlmIChtX3Rhc2spIHsKKyAgICAgICAg
bV90YXNrLT5jbGVhckNsaWVudCgpOworICAgICAgICBtX3Rhc2sgPSBudWxscHRyOworICAgIH0K
KyNlbHNlCiAgICAgaWYgKG1faGFuZGxlKSB7CiAgICAgICAgIG1faGFuZGxlLT5jbGVhckNsaWVu
dCgpOwogICAgICAgICBtX2hhbmRsZSA9IG51bGxwdHI7CiAgICAgfQorI2VuZGlmCiAKICAgICAv
LyBUaGlzIHdpbGwgY2F1c2UgTmV0d29ya1Jlc291cmNlTG9hZGVyIHRvIGJlIGRlc3Ryb3llZCBh
bmQgdGhlcmVmb3JlIHdlIGRvIGl0IGxhc3QuCiAgICAgbV9jb25uZWN0aW9uLT5kaWRDbGVhbnVw
UmVzb3VyY2VMb2FkZXIoKnRoaXMpOwogfQogCisjaWYgIVVTRShOU1VSTFNFU1NJT04pCiB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQoKQogewog
ICAgIEFTU0VSVChtX2hhbmRsZSk7CiAgICAgbV9kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCA9
IHRydWU7CiB9CisjZW5kaWYKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCisjaWYgVVNFKE5TVVJMU0VTU0lP
TikKKyAgICBpZiAobV90YXNrKQorICAgICAgICBtX3Rhc2stPnN1c3BlbmQoKTsKKyAgICAvLyBG
SVhNRTogRG8gc29tZXRoaW5nIHdpdGggdGhlIG5ldHdvcmsgY2FjaGUgaGVyZS4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAobV9oYW5kbGUgJiYgIW1fZGlkQ29udmVydEhh
bmRsZVRvRG93bmxvYWQpIHsKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogCkBAIC0yMzQs
MTAgKzI2Nyw0OSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQoKQogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9Ci0KKyNlbmRpZgogICAgIGNsZWFudXAoKTsKIH0KIAorI2lmIFVT
RShOU1VSTFNFU1NJT04pCisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsUGVyZm9y
bUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIocmVxdWVzdCk7Cit9CisK
K3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIHN0ZDo6ZnVuY3Rpb248
dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpD
cmVkZW50aWFsJik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
bjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgV2ViQ29yZTo6Q3JlZGVudGlhbCgpKTsKK30KKwor
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlz
cG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICAKKyAgICByZXNwb25zZS5zZXRT
b3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrKTsKKyAgICBpZiAobV9wYXJh
bWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJbmZvKQorICAgICAgICByZXNwb25zZS5pbmNsdWRlQ2Vy
dGlmaWNhdGVJbmZvKCk7CisgICAgCisgICAgYm9vbCBzaG91bGRXYWl0Q29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UgPSBvcmlnaW5hbFJlcXVlc3QoKS5yZXF1ZXN0ZXIoKSA9PSBSZXNvdXJjZVJl
cXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKKyAgICBpZiAoIXNlbmRBYm9ydGluZ09uRmFpbHVyZShN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSwg
c2hvdWxkV2FpdENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKSkpCisgICAgICAgIHJldHVybjsK
KyAgICBjb21wbGV0aW9uSGFuZGxlcihSZXNwb25zZURpc3Bvc2l0aW9uOjpBbGxvdyk7Cit9CisK
K3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgc2VuZEJ1ZmZlck1heWJlQWJvcnRpbmco
KmJ1ZmZlciwgYnVmZmVyLT5zaXplKCkpOworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpCit7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNl
TG9hZChXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKSk7Cit9CisKKyNlbHNlCisK
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3Bv
bnNlKQogewogICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwpA
QCAtNDI4LDYgKzUwMCw4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXUKICAgICBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVy
OjpXaWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSkpOwog
fQogCisjZW5kaWYgLy8gVVNFKE5TVVJMU0VTU0lPTikKKyAgICAKIHZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IG5ld1JlcXVlc3QpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC00MzgsMjQgKzUxMiw0MCBA
QCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVXaWxsCiAjZW5kaWYKIAogICAg
IGlmIChtX2N1cnJlbnRSZXF1ZXN0LmlzTnVsbCgpKSB7CisjaWYgVVNFKE5TVVJMU0VTU0lPTikK
KyAgICAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworI2Vsc2UKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICBkaWRG
YWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Cisj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorI2lmIFVTRShOU1VSTFNFU1NJT04pCisg
ICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
ZWxzZQogICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1
ZXN0KTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVE
aWRSZWNlaXZlUmVzcG9uc2UoKQogewogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjaGVjayBv
bmNlIEJsb2JSZXNvdXJjZUhhbmRsZSBpbXBsZW1lbnRzIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5j
IGNvcnJlY3RseS4KICAgICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90IHdhaXQgZm9yIHJlc3Bv
bnNlLCBzbyB0aGUgbG9hZCBpcyBsaWtlbHkgdG8gZmluaXNoIGJlZm9yZSBjb250aW51ZURpZFJl
Y2VpdmVSZXNwb25zZS4KKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAoIW1f
aGFuZGxlKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UoKTsKKyNlbmRpZgogfQogCisjaWYgIVVTRShOU1VSTFNFU1NJT04pCisKIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0YShSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KQogewogICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0g
bV9oYW5kbGUpOwpAQCAtNTIwLDYgKzYxMCw4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpyZWNlaXZlZENhbmMKICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJv
cihtX2N1cnJlbnRSZXF1ZXN0KSk7CiB9CiAKKyNlbmRpZiAvLyAhVVNFKE5TVVJMU0VTU0lPTikK
Kwogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRl
ZCgpCiB7CiAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkKQEAgLTUzMiw3ICs2MjQsOSBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnRCdWZmZXJpCiB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCgpCiB7CiAgICAgQVNTRVJUKG1fYnVmZmVyZWRE
YXRhKTsKKyNpZiAhVVNFKE5TVVJMU0VTU0lPTikKICAgICBBU1NFUlQobV9oYW5kbGUpOworI2Vu
ZGlmCiAgICAgaWYgKCFtX2J1ZmZlcmVkRGF0YS0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAK
QEAgLTYwMCw3ICs2OTQsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmV0cmll
dmVDCiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp2YWxpZGF0ZUNhY2hlRW50cnkoc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KQogeworI2lmICFVU0UoTlNV
UkxTRVNTSU9OKQogICAgIEFTU0VSVCghbV9oYW5kbGUpOworI2VuZGlmCiAKICAgICAvLyBJZiB0
aGUgcmVxdWVzdCBpcyBhbHJlYWR5IGNvbmRpdGlvbmFsIHRoZW4gdGhlIHJldmFsaWRhdGlvbiB3
YXMgbm90IHRyaWdnZXJlZCBieSB0aGUgZGlzayBjYWNoZQogICAgIC8vIGFuZCB3ZSBzaG91bGQg
bm90IG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY29uZGl0aW9uYWwgaGVhZGVycy4KQEAgLTY2Myw3
ICs3NTksNyBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5nCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJB
Q0spCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykgJiYgIVVTRShOU1VS
TFNFU1NJT04pCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CkBAIC02ODUsMTQgKzc4MSwyMSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6Y2FuQXV0aGVudGljCiAgICAgfQogICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdl
czo6V2ViUmVzb3VyY2VMb2FkZXI6OkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UocHJvdGVjdGlvblNwYWNlKSk7CiB9CisjZW5kaWYKIAorI2lmIFVTRShQUk9URUNUSU9OX1NQ
QUNFX0FVVEhfQ0FMTEJBQ0spCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQogeworI2lm
IFVTRShOU1VSTFNFU1NJT04pCisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAg
IG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQogICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocmVzdWx0KTsKKyNlbmRpZgogfQogI2VuZGlm
CiAKLSNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisjaWYgVVNFKE5FVFdP
UktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKSAmJiAhVVNFKE5TVVJMU0VTU0lPTikKIGJvb2wgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpzdXBwb3J0c0RhdGFBcnJheSgpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9DYWNoZVZhbGlkYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25z
ZS5oPgpAQCAtNDQsMTEgKzQzLDE5IEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyNpbmNsdWRl
ICJOZXR3b3JraW5nU2Vzc2lvbi5oIgorI2Vsc2UKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
SGFuZGxlQ2xpZW50Lmg+CisjZW5kaWYKKwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVk
VVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEJsb2JEYXRhRmlsZVJlZmVyZW5jZTsKKyNpZiAhVVNFKE5TVVJMU0VTU0lPTikK
IGNsYXNzIFJlc291cmNlSGFuZGxlOworI2VuZGlmCiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiB9
CiAKQEAgLTU5LDcgKzY2LDE0IEBAIGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
OwogY2xhc3MgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ7CiBjbGFzcyBTYW5kYm94RXh0ZW5zaW9u
OwogCi1jbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3
b3JrUmVzb3VyY2VMb2FkZXI+LCBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQs
IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIgeworY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZGVy
CisgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+CisjaWYgVVNF
KE5TVVJMU0VTU0lPTikKKyAgICAsIHB1YmxpYyBOZXR3b3JraW5nRGF0YVRhc2tDbGllbnQKKyNl
bHNlCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQKKyNlbmRpZgor
ICAgICwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycyYgcGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNv
bm5lY3Rpb24pCiAgICAgewpAQCAtNzQsMTEgKzg4LDEzIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0KCkgY29uc3QgeyByZXR1
cm4gbV9wYXJhbWV0ZXJzLnJlcXVlc3Q7IH0KIAorCisjaWYgIVVTRShOU1VSTFNFU1NJT04pCiAg
ICAgLy8gQ2hhbmdlcyB3aXRoIHJlZGlyZWN0cy4KICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIGN1cnJlbnRSZXF1ZXN0KCkgeyByZXR1cm4gbV9jdXJyZW50UmVxdWVzdDsgfQotCiAgICAg
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxl
LmdldCgpOyB9CiAgICAgdm9pZCBkaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOworI2VuZGlm
CiAKICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgdm9pZCBhYm9ydCgpOwpAQCAtMTAyLDcgKzExOCw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCk7CiAKICAgICBXZWJDb3JlOjpTaGFyZWRC
dWZmZXIqIGJ1ZmZlcmVkRGF0YSgpIHsgcmV0dXJuIG1fYnVmZmVyZWREYXRhLmdldCgpOyB9Cisj
aWYgIVVTRShOU1VSTFNFU1NJT04pCiAgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CisjZW5kaWYKIAogICAg
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CiAgICAgV2ViQ29yZTo6U2Vzc2lv
bklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5zZXNzaW9uSUQ7IH0K
QEAgLTExNyw2ICsxMzUsMTQgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIElQQzo6Q29ubmVjdGlv
biogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHVpbnQ2
NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXJh
bWV0ZXJzLmlkZW50aWZpZXI7IH0KIAorI2lmIFVTRShOU1VSTFNFU1NJT04pCisgICAgLy8gTmV0
d29ya2luZ0RhdGFUYXNrQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybUhUVFBS
ZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29u
c3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgc3RkOjpm
dW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikgZmluYWwgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
KSBmaW5hbCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVXaXRoRXJyb3Io
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIGZpbmFsIG92ZXJyaWRlOworI2Vsc2UKICAg
ICAvLyBSZXNvdXJjZUhhbmRsZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVl
c3RBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZSosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIG92ZXJyaWRlOwpAQCAtMTQ4LDYgKzE3NCw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopIG92ZXJyaWRlOwogI2VuZGlm
CiAjZW5kaWYKKyNlbmRpZiAvLyBVU0UoTlNVUkxTRVNTSU9OKQogCiAjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCiAgICAgdm9pZCBkaWRSZXRyaWV2ZUNhY2hlRW50cnkoc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtDYWNoZTo6RW50cnk+KTsKQEAgLTE3NywxMCArMjA0LDEzIEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247CiAK
ICAgICBSZWZQdHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7
CisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAgICBSZWZQdHI8TmV0d29ya2luZ0RhdGFUYXNrPiBt
X3Rhc2s7CisjZWxzZQogICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5k
bGU7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisjZW5kaWYKKyAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKIAogICAgIHNpemVfdCBtX2J5
dGVzUmVjZWl2ZWQ7CiAgICAgc2l6ZV90IG1fYnVmZmVyZWREYXRhRW5jb2RlZERhdGFMZW5ndGg7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JraW5nU2Vzc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtpbmdT
ZXNzaW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JraW5nU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBOZXR3b3JraW5nU2Vzc2lvbl9oCisjZGVmaW5lIE5ldHdvcmtpbmdT
ZXNzaW9uX2gKKworT0JKQ19DTEFTUyBOU1VSTFNlc3Npb247CitPQkpDX0NMQVNTIE5TVVJMU2Vz
c2lvbkRhdGFUYXNrOworT0JKQ19DTEFTUyBOU09wZXJhdGlvblF1ZXVlOworCisjaWZuZGVmIF9f
T0JKQ19fCit0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7CisjZW5kaWYKKworI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOworY2xhc3MgQ3JlZGVudGlhbDsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBS
ZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworY2xhc3MgU2hhcmVkQnVm
ZmVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBSZXNwb25zZURpc3Bv
c2l0aW9uIHsKKyAgICBDYW5jZWwsCisgICAgQWxsb3csCisgICAgQmVjb21lRG93bmxvYWQKK307
CisKK2VudW0gY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiB7CisgICAg
VXNlQ3JlZGVudGlhbCwKKyAgICBQZXJmb3JtRGVmYXVsdEhhbmRsaW5nLAorICAgIENhbmNlbCwK
KyAgICBSZWplY3RQcm90ZWN0aW9uU3BhY2UKK307CisKK2NsYXNzIE5ldHdvcmtpbmdTZXNzaW9u
OworCitjbGFzcyBOZXR3b3JraW5nRGF0YVRhc2tDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlv
bjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpPikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlz
cG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4pID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIH5OZXR3b3JraW5nRGF0YVRhc2tDbGllbnQo
KSB7IH07Cit9OworCitjbGFzcyBOZXR3b3JraW5nRGF0YVRhc2sgOiBwdWJsaWMgUmVmQ291bnRl
ZDxOZXR3b3JraW5nRGF0YVRhc2s+IHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya2luZ1Nlc3Np
b247CitwdWJsaWM6CisgICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKwor
ICAgIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKCk7CisKKyAgICB+TmV0d29ya2luZ0RhdGFUYXNr
KCk7CisKKyAgICBOZXR3b3JraW5nRGF0YVRhc2tDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1f
Y2xpZW50OyB9CisgICAgdm9pZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSBudWxscHRyOyB9
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya2luZ0RhdGFUYXNrKE5ldHdvcmtpbmdT
ZXNzaW9uJiwgTmV0d29ya2luZ0RhdGFUYXNrQ2xpZW50JiwgUmV0YWluUHRyPE5TVVJMU2Vzc2lv
bkRhdGFUYXNrPik7CisKKyAgICBOZXR3b3JraW5nU2Vzc2lvbiYgbV9zZXNzaW9uOworICAgIFJl
dGFpblB0cjxOU1VSTFNlc3Npb25EYXRhVGFzaz4gbV90YXNrOworICAgIE5ldHdvcmtpbmdEYXRh
VGFza0NsaWVudCogbV9jbGllbnQ7Cit9OworCitjbGFzcyBOZXR3b3JraW5nU2Vzc2lvbiA6IHB1
YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtpbmdTZXNzaW9uPiB7CisgICAgZnJpZW5kIGNsYXNzIE5l
dHdvcmtpbmdEYXRhVGFzazsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAg
ICBOb3JtYWwsCisgICAgICAgIEVwaGVtZXJhbAorICAgIH07CisKKyAgICBSZWZQdHI8TmV0d29y
a2luZ0RhdGFUYXNrPiBjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIE5ldHdvcmtpbmdEYXRhVGFza0NsaWVudCYpOworCisgICAgc3RhdGlj
IFJlZjxOZXR3b3JraW5nU2Vzc2lvbj4gc2luZ2xldG9uKCk7IC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZG4ndCBhY3R1YWxseSBiZSBhIHNpbmdsZXRvbi4KKyAgICBOZXR3b3JraW5nRGF0YVRhc2sqIGRh
dGFUYXNrRm9ySWRlbnRpZmllcih1aW50NjRfdCk7Citwcml2YXRlOgorICAgIHN0YXRpYyBSZWY8
TmV0d29ya2luZ1Nlc3Npb24+IGNyZWF0ZShUeXBlKTsKKworICAgIE5ldHdvcmtpbmdTZXNzaW9u
KFR5cGUpOworICAgIEhhc2hNYXA8dWludDY0X3QsIE5ldHdvcmtpbmdEYXRhVGFzayo+IG1fZGF0
YVRhc2tNYXA7CisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9zZXNzaW9uOworICAgIFJl
dGFpblB0cjxpZD4gbV9zZXNzaW9uRGVsZWdhdGU7CisgICAgUmV0YWluUHRyPE5TT3BlcmF0aW9u
UXVldWU+IG1fc2Vzc2lvblF1ZXVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gTmV0d29ya2luZ1Nlc3Npb25faApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JraW5nU2Vzc2lvbkNvY29h
Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTmV0d29ya2luZ1Nl
c3Npb24uaCIKKworI2lmIFVTRShOU1VSTFNFU1NJT04pCisKKyNpbXBvcnQgPEZvdW5kYXRpb24v
TlNVUkxTZXNzaW9uLmg+CisKKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9S
ZXNvdXJjZUVycm9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NoYXJl
ZEJ1ZmZlci5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorCitzdGF0aWMgTlNVUkxTZXNzaW9uUmVzcG9uc2VEaXNwb3NpdGlvbiB0
b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlzcG9zaXRpb24oV2ViS2l0OjpSZXNwb25zZURpc3Bvc2l0
aW9uIGRpc3Bvc2l0aW9uKQoreworICAgIHN3aXRjaCAoZGlzcG9zaXRpb24pIHsKKyAgICBjYXNl
IFdlYktpdDo6UmVzcG9uc2VEaXNwb3NpdGlvbjo6Q2FuY2VsOgorICAgICAgICByZXR1cm4gTlNV
UkxTZXNzaW9uUmVzcG9uc2VDYW5jZWw7CisgICAgY2FzZSBXZWJLaXQ6OlJlc3BvbnNlRGlzcG9z
aXRpb246OkFsbG93OgorICAgICAgICByZXR1cm4gTlNVUkxTZXNzaW9uUmVzcG9uc2VBbGxvdzsK
KyAgICBjYXNlIFdlYktpdDo6UmVzcG9uc2VEaXNwb3NpdGlvbjo6QmVjb21lRG93bmxvYWQ6Cisg
ICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25SZXNwb25zZUJlY29tZURvd25sb2FkOworICAgIH0K
K30KKworc3RhdGljIE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiB0b05TVVJM
U2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCit7CisgICAgc3dpdGNoIChkaXNwb3NpdGlv
bikgeworICAgIGNhc2UgV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9u
OjpVc2VDcmVkZW50aWFsOgorICAgICAgICByZXR1cm4gTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5n
ZVVzZUNyZWRlbnRpYWw7CisgICAgY2FzZSBXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
RGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmc6CisgICAgICAgIHJldHVybiBOU1VS
TFNlc3Npb25BdXRoQ2hhbGxlbmdlUGVyZm9ybURlZmF1bHRIYW5kbGluZzsKKyAgICBjYXNlIFdl
YktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6Q2FuY2VsOgorICAgICAg
ICByZXR1cm4gTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZUNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOworICAgIGNhc2UgV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0
aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2U6CisgICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25B
dXRoQ2hhbGxlbmdlUmVqZWN0UHJvdGVjdGlvblNwYWNlOworICAgIH0KK30KKworQGludGVyZmFj
ZSBOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIDogTlNPYmplY3QgPE5TVVJMU2Vzc2lvbkRhdGFE
ZWxlZ2F0ZT4geworICAgIFdlYktpdDo6TmV0d29ya2luZ1Nlc3Npb24qIF9zZXNzaW9uOworfQor
CistIChpZClpbml0V2l0aE5ldHdvcmtpbmdTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtpbmdTZXNz
aW9uJilzZXNzaW9uOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOZXR3b3JraW5nU2Vzc2lv
bkRlbGVnYXRlCisKKy0gKGlkKWluaXRXaXRoTmV0d29ya2luZ1Nlc3Npb246KFdlYktpdDo6TmV0
d29ya2luZ1Nlc3Npb24mKXNlc3Npb24KK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAg
IGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9zZXNzaW9uID0gJnNlc3Np
b247CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNl
c3Npb24gKilzZXNzaW9uIHRhc2s6KE5TVVJMU2Vzc2lvblRhc2sgKil0YXNrIHdpbGxQZXJmb3Jt
SFRUUFJlZGlyZWN0aW9uOihOU0hUVFBVUkxSZXNwb25zZSAqKXJlc3BvbnNlIG5ld1JlcXVlc3Q6
KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJM
UmVxdWVzdCAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9u
KTsKKworICAgIGF1dG8gbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVu
dGlmaWVyKHRhc2sudGFza0lkZW50aWZpZXIpOworICAgIEFTU0VSVChuZXR3b3JraW5nVGFzayk7
CisKKyAgICBpZiAoYXV0byBjbGllbnQgPSBuZXR3b3JraW5nVGFzay0+Y2xpZW50KCkpIHsKKyAg
ICAgICAgY2xpZW50LT53aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihyZXNwb25zZSwgcmVxdWVz
dCwgXihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVxdWVzdC5uc1VSTFJlcXVl
c3QoV2ViQ29yZTo6VXBkYXRlSFRUUEJvZHkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsK
KyAgICB9Cit9CisKKy0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiB0
YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRSZWNlaXZlQ2hhbGxlbmdlOihOU1VSTEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5T
VVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBVTlVT
RURfUEFSQU0oc2Vzc2lvbik7CisKKyAgICBhdXRvIG5ldHdvcmtpbmdUYXNrID0gX3Nlc3Npb24t
PmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQo
bmV0d29ya2luZ1Rhc2spOworICAgIAorICAgIGlmIChhdXRvIGNsaWVudCA9IG5ldHdvcmtpbmdU
YXNrLT5jbGllbnQoKSkgeworICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVDaGFsbGVuZ2UoY2hh
bGxlbmdlLCBeKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNw
b3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b05TVVJMU2Vzc2lvbkF1
dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihkaXNwb3NpdGlvbiksIGNyZWRlbnRpYWwubnNDcmVkZW50
aWFsKCkpOworICAgICAgICAgICAgfQorICAgICAgICApOworICAgIH0KK30KKworLSAodm9pZClV
UkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRhc2s6KE5TVVJMU2Vzc2lvblRhc2sg
Kil0YXNrIGRpZENvbXBsZXRlV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKK3sKKyAgICBVTlVT
RURfUEFSQU0oc2Vzc2lvbik7CisKKyAgICBhdXRvIG5ldHdvcmtpbmdUYXNrID0gX3Nlc3Npb24t
PmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQo
bmV0d29ya2luZ1Rhc2spOworCisgICAgaWYgKGF1dG8gY2xpZW50ID0gbmV0d29ya2luZ1Rhc2st
PmNsaWVudCgpKQorICAgICAgICBjbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yKTsK
K30KKworLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRhdGFUYXNr
OihOU1VSTFNlc3Npb25EYXRhVGFzayAqKWRhdGFUYXNrIGRpZFJlY2VpdmVSZXNwb25zZTooTlNV
UkxSZXNwb25zZSAqKXJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1VSTFNl
c3Npb25SZXNwb25zZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKSljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKKworICAgIGF1dG8gbmV0d29ya2luZ1Rhc2sg
PSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKGRhdGFUYXNrLnRhc2tJZGVudGlmaWVy
KTsKKyAgICBBU1NFUlQobmV0d29ya2luZ1Rhc2spOworCisgICAgaWYgKGF1dG8gY2xpZW50ID0g
bmV0d29ya2luZ1Rhc2stPmNsaWVudCgpKSB7CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UgcmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSk7CisgICAgICAgIGNsaWVudC0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKHJlc291cmNlUmVzcG9uc2UsIF4oV2ViS2l0OjpSZXNwb25zZURpc3Bvc2l0
aW9uIHJlc3BvbnNlRGlzcG9zaXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIodG9OU1VSTFNlc3Npb25SZXNwb25zZURpc3Bvc2l0aW9uKHJlc3Bv
bnNlRGlzcG9zaXRpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICB9Cit9CisK
Ky0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkYXRhVGFzazooTlNV
UkxTZXNzaW9uRGF0YVRhc2sgKilkYXRhVGFzayBkaWRSZWNlaXZlRGF0YTooTlNEYXRhICopZGF0
YQoreworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKKworICAgIGF1dG8gbmV0d29ya2luZ1Rh
c2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKGRhdGFUYXNrLnRhc2tJZGVudGlm
aWVyKTsKKyAgICBBU1NFUlQobmV0d29ya2luZ1Rhc2spOworCisgICAgLy8gRklYTUU6IExvb2sg
aW50byB3aHkgdGhpcyBiZWluZyBvbiB0aGUgbWFpbiB0aHJlYWQgY2F1c2VzIGZld2VyIGNyYXNo
ZXMsIGJ1dCBtb3JlIGNyYXNoZXMgd2l0aCB0aGUgb3RoZXIgY2FsbGJhY2tzLgorICAgIFJldGFp
blB0cjxOU0RhdGE+IHJlZihkYXRhKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtyZWYsIGRhdGEs
IG5ldHdvcmtpbmdUYXNrXSB7CisgICAgICAgIGlmIChhdXRvIGNsaWVudCA9IG5ldHdvcmtpbmdU
YXNrLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoV2ViQ29y
ZTo6U2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKGRhdGEpKTsKKyAgICB9KTsKK30KKworQGVuZAor
CituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK1JlZjxOZXR3b3JraW5nU2Vzc2lvbj4gTmV0d29y
a2luZ1Nlc3Npb246OmNyZWF0ZShUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTmV0d29ya2luZ1Nlc3Npb24odHlwZSkpOworfQorCitSZWY8TmV0d29ya2luZ1Nlc3Npb24+
IE5ldHdvcmtpbmdTZXNzaW9uOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxSZWY8TmV0d29ya2luZ1Nlc3Npb24+PiBzaGFyZWRJbnN0YW5jZShOZXR3b3JraW5nU2Vz
c2lvbjo6Y3JlYXRlKFR5cGU6Ok5vcm1hbCkpOworICAgIHJldHVybiBzaGFyZWRJbnN0YW5jZS5n
ZXQoKS5jb3B5UmVmKCk7Cit9CisgICAgCitzdGF0aWMgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlv
biAqY29uZmlndXJhdGlvbkZvclR5cGUoTmV0d29ya2luZ1Nlc3Npb246OlR5cGUgdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5ldHdvcmtpbmdTZXNzaW9uOjpUeXBlOjpO
b3JtYWw6CisgICAgICAgIHJldHVybiBbTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiBkZWZhdWx0
U2Vzc2lvbkNvbmZpZ3VyYXRpb25dOworICAgIGNhc2UgTmV0d29ya2luZ1Nlc3Npb246OlR5cGU6
OkVwaGVtZXJhbDoKKyAgICAgICAgcmV0dXJuIFtOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uIGVw
aGVtZXJhbFNlc3Npb25Db25maWd1cmF0aW9uXTsKKyAgICB9Cit9CisKK05ldHdvcmtpbmdTZXNz
aW9uOjpOZXR3b3JraW5nU2Vzc2lvbihUeXBlIHR5cGUpCit7CisgICAgbV9zZXNzaW9uRGVsZWdh
dGUgPSBhZG9wdE5TKFtbTmV0d29ya2luZ1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhO
ZXR3b3JraW5nU2Vzc2lvbjoqdGhpc10pOworICAgIG1fc2Vzc2lvblF1ZXVlID0gYWRvcHROUyhb
W05TT3BlcmF0aW9uUXVldWUgYWxsb2NdIGluaXRdKTsKKworICAgIE5TVVJMU2Vzc2lvbkNvbmZp
Z3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uRm9yVHlwZSh0eXBlKTsKKyAg
ICBtX3Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uIGRlbGVnYXRlOm1fc2Vzc2lvbkRlbGVnYXRlLmdldCgpIGRlbGVnYXRlUXVldWU6
bV9zZXNzaW9uUXVldWUuZ2V0KCldOworfQorCitSZWZQdHI8TmV0d29ya2luZ0RhdGFUYXNrPiBO
ZXR3b3JraW5nU2Vzc2lvbjo6Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIE5ldHdvcmtpbmdEYXRhVGFza0NsaWVudCYgY2xp
ZW50KQoreworICAgIFJlZlB0cjxOZXR3b3JraW5nRGF0YVRhc2s+IHRhc2sgPSBhZG9wdFJlZihu
ZXcgTmV0d29ya2luZ0RhdGFUYXNrKCp0aGlzLCBjbGllbnQsIFttX3Nlc3Npb24gZGF0YVRhc2tX
aXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpVcGRhdGVIVFRQQm9keSld
KSk7CisgICAgcmV0dXJuIHRhc2s7Cit9CisKK05ldHdvcmtpbmdEYXRhVGFzayogTmV0d29ya2lu
Z1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcih1aW50NjRfdCB0YXNrSWRlbnRpZmllcikK
K3sKKyAgICBBU1NFUlQobV9kYXRhVGFza01hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcikpOwor
ICAgIHJldHVybiBtX2RhdGFUYXNrTWFwLmdldCh0YXNrSWRlbnRpZmllcik7Cit9CisKK05ldHdv
cmtpbmdEYXRhVGFzazo6TmV0d29ya2luZ0RhdGFUYXNrKE5ldHdvcmtpbmdTZXNzaW9uJiBzZXNz
aW9uLCBOZXR3b3JraW5nRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgUmV0YWluUHRyPE5TVVJMU2Vz
c2lvbkRhdGFUYXNrPiB0YXNrKQorICAgIDogbV9zZXNzaW9uKHNlc3Npb24pCisgICAgLCBtX3Rh
c2sodGFzaykKKyAgICAsIG1fY2xpZW50KCZjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX3Nlc3Np
b24ubV9kYXRhVGFza01hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcigpKSk7CisgICAgbV9zZXNz
aW9uLm1fZGF0YVRhc2tNYXAuYWRkKHRhc2tJZGVudGlmaWVyKCksIHRoaXMpOworfQorCitOZXR3
b3JraW5nRGF0YVRhc2s6On5OZXR3b3JraW5nRGF0YVRhc2soKQoreworICAgIEFTU0VSVChtX3Nl
c3Npb24ubV9kYXRhVGFza01hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcigpKSk7CisgICAgQVNT
RVJUKG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwLmdldCh0YXNrSWRlbnRpZmllcigpKSA9PSB0aGlz
KTsKKyAgICBtX3Nlc3Npb24ubV9kYXRhVGFza01hcC5yZW1vdmUodGFza0lkZW50aWZpZXIoKSk7
Cit9CisKK3ZvaWQgTmV0d29ya2luZ0RhdGFUYXNrOjpzdXNwZW5kKCkKK3sKKyAgICBbbV90YXNr
IHN1c3BlbmRdOworfQorCit2b2lkIE5ldHdvcmtpbmdEYXRhVGFzazo6cmVzdW1lKCkKK3sKKyAg
ICBbbV90YXNrIHJlc3VtZV07Cit9CisKK3VpbnQ2NF90IE5ldHdvcmtpbmdEYXRhVGFzazo6dGFz
a0lkZW50aWZpZXIoKQoreworICAgIHJldHVybiBbbV90YXNrIHRhc2tJZGVudGlmaWVyXTsKK30K
KworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9O
ZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQkocmV2aXNpb24g
MTkxMjk0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNv
dXJjZUxvYWRlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzCiAgICAgbV9oYW5kbGUtPmNvbnRpbnVl
V2lsbENhY2hlUmVzcG9uc2UoY2ZSZXNwb25zZSk7CiB9CiAKLSNlbHNlCisjZWxpZiAhVVNFKE5T
VVJMU0VTU0lPTikKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3Bv
bnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTlNDYWNoZWRVUkxSZXNwb25zZSAqbnNS
ZXNwb25zZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA0NCw2
ICsxMDQ0LDggQEAKIAkJNTI3MkIyOEExNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJC
Mjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgKi87IH07CiAJCTUyNzJC
MjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8q
IFN0YXRpc3RpY3NEYXRhLmggKi87IH07CiAJCTUyOEMzN0MxMTk1Q0JCMUEwMEQ4QjlDQyAvKiBX
S0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBOUYyODEwMTk1OEY0NzgwMDhDQUM3MiAvKiBXS0JhY2tGb3J3YXJk
TGlzdFByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk1QzIwQ0I5RDFCQjBEQ0ZBMDA4OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb25Db2Nv
YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjBD
QjlCMUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vzc2lvbkNvY29hLm1tICovOyB9Owor
CQk1QzIwQ0JBMDFCQjFFQ0Q4MDA4OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjBDQjlFMUJCMEREMTgw
MDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vzc2lvbi5oICovOyB9OwogCQk1REE2RUQwQTE0OTA2MDY5
MDBCNDFEMTIgLyogRHluYW1pY0xpbmtlckVudmlyb25tZW50RXh0cmFjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REE2RUQwODE0OTA2MDY5MDBC
NDFEMTIgLyogRHluYW1pY0xpbmtlckVudmlyb25tZW50RXh0cmFjdG9yLmggKi87IH07CiAJCTVE
QTZFRDBCMTQ5MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2VyRW52aXJvbm1lbnRFeHRyYWN0
b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REE2
RUQwOTE0OTA2MDY5MDBCNDFEMTIgLyogRHluYW1pY0xpbmtlckVudmlyb25tZW50RXh0cmFjdG9y
Lm1tICovOyB9OwogCQk2NTAxQkQxQTEyRjEyNDM0MDBFOUYyNDggLyogV0tCdW5kbGVJbnNwZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVC
ODZGMTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCAqLzsgfTsKQEAg
LTMyMzcsNiArMzIzOSw4IEBACiAJCTUxRkQxOEI0MTY1MUZCQUQwMERCRTFDRSAvKiBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29y
a1Jlc291cmNlTG9hZGVyLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3MkIyODgxNDA2OTg1RDAw
OTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN0YXRpc3RpY3NEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTI3MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpc3RpY3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTVDMjBDQjlCMUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vz
c2lvbkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0
d29ya2luZ1Nlc3Npb25Db2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtpbmdTZXNzaW9uQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMjBD
QjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vzc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JraW5nU2Vzc2lvbi5oOyBwYXRoID0gTmV0d29ya1By
b2Nlc3MvTmV0d29ya2luZ1Nlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUQ0NDJBNTUxNkQ1ODU2NzAwQUMzMzMxIC8qIFBsdWdpblNlcnZpY2UuZW50aXRsZW1lbnRzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7
IHBhdGggPSBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNURBNkVEMDgxNDkwNjA2OTAwQjQxRDEyIC8qIER5bmFtaWNMaW5rZXJFbnZpcm9u
bWVudEV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEeW5hbWlj
TGlua2VyRW52aXJvbm1lbnRFeHRyYWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNURBNkVEMDkxNDkwNjA2OTAwQjQxRDEyIC8qIER5bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4
dHJhY3Rvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IER5bmFt
aWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU1NTIsNiArNTU1Niw3IEBACiAJCQkJNTFGRDE4QjMxNjUxRkJBRDAwREJFMUNFIC8q
IE5ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgKi8sCiAJCQkJNTFGRDE4QjQxNjUxRkJBRDAwREJF
MUNFIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCUUxNTI1NTE3MTcwMTA5RkIw
MDNEN0FEQiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNUMy
MENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtpbmdTZXNzaW9uLmggKi8sCiAJCQkJRTFC
Nzg0NzAxNjNGMjQ2OTAwMDdCNjkyIC8qIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmggKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IE5ldHdvcmtQcm9jZXNzOwpAQCAtNTg5Niw2ICs1OTAxLDcgQEAKIAkJ
N0VDNEYwRjgxOEU0QTkyMjAwODA1NkFGIC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0
d29ya2luZ1Nlc3Npb25Db2NvYS5tbSAqLywKIAkJCQk3RUM0RjBGOTE4RTRBOTQ1MDA4MDU2QUYg
LyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gY29jb2E7CkBA
IC04MjgzLDYgKzgyODksNyBAQAogCQkJCTM3OEUxQTRBMTgyMDhDRDYwMDMxMDA3QSAvKiBXS05T
U3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzhFMUE0RTE4MjA4RDcwMDAzMTAwN0EgLyog
V0tOU1VSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdGQzE5NEIxODUxMEQ2QTAwOENGQTQ3IC8q
IFdLTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUMy
MENCQTAxQkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtpbmdTZXNzaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzNzE4M0Q1NzE4MkY0RTcwMDA4MEM4MTEgLyogV0tOU1VSTEV4dHJhcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzdCRjJGMDYxOTQ3REVCNDAwNzIzQzQ4IC8qIFdLTlNVUkxSZXF1ZXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQwNzYwMjEyNEZGMDI3MDA2OEYyMEEgLyogV0tOdW1i
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtOTgzMCw2ICs5ODM3LDcgQEAKIAkJCQlCQ0U0Njk3OTEy
MTRGMkI0MDAwQjk4RUIgLyogV2ViRnJhbWVMaXN0ZW5lclByb3h5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDMTExQTVGMTEyRjRGQkIwMDMzN0JBQiAvKiBXZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDI4RjNFNzE4ODVDQ0MxMDA0QjlFQUUgLyogV2ViRnJh
bWVMb2FkZXJDbGllbnRJT1MubW0gaW4gU291cmNlcyAqLywKKwkJCQk1QzIwQ0I5RDFCQjBEQ0ZB
MDA4OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTkzOTFGMkNBMTIxQjY3OUEwMEVCRjdFOCAvKiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCOUY2QTExMTIzQTg0QjAwQTEzN0UwIC8qIFdlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUIwRTExMkY1
RTRGMDAzMzdCQUIgLyogV2ViRnJhbWVQcm94eS5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263588</attachid>
            <date>2015-10-20 10:38:27 -0700</date>
            <delta_ts>2015-10-20 10:38:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150355-20151020103745.patch</filename>
            <type>text/plain</type>
            <size>39934</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTEwLTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW5pdGlhbCBO
U1VSTFNlc3Npb24gV2ViUmVzb3VyY2VMb2FkZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6OmNmVVJMQXV0aENoYWxsZW5nZVJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6c2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpuc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKwog
MjAxNS0xMC0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE51
bGwgZGVyZWZlcmVuY2UgbG9hZGluZyBCbGluayBsYXlvdXQgdGVzdCBmYXN0L2Zvcm1zL2NvbG9y
L2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50Lmh0bWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmgJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsNyBAQCBwdWJsaWM6CiAKICAgICBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2ZVUkxBdXRoQ2hh
bGxlbmdlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9jZkNoYWxsZW5nZS5nZXQoKTsgfQogI2Vsc2UK
LSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
ICopOworICAgIFdFQkNPUkVfRVhQT1JUIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKik7CiAKICAgICBpZCBzZW5kZXIoKSBjb25zdCB7IHJldHVy
biBtX3NlbmRlci5nZXQoKTsgfQogICAgIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKm5z
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKSBjb25zdCB7IHJldHVybiBtX25zQ2hhbGxlbmdl
LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTEzMzEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBAQAorMjAxNS0xMC0x
OSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IEluaXRpYWwgTlNVUkxTZXNzaW9uIFdlYlJlc291cmNlTG9hZGVyIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2Fk
VG9Eb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnN0YXJ0TmV0d29ya0xvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmNsZWFudXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENvbXBsZXRlV2l0aEVy
cm9yKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
UmVzcG9uc2VBc3luYyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0QXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydEJ1ZmZlcmluZ1RpbWVySWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmJ1ZmZlcmlu
Z1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnZh
bGlkYXRlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlQ2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6c3VwcG9ydHNEYXRhQXJyYXkpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6Y3VycmVudFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmhhbmRsZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya2luZ1Nlc3Np
b24uaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFza0NsaWVudDo6
fk5ldHdvcmtpbmdEYXRhVGFza0NsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdE
YXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjpj
bGVhckNsaWVudCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya2luZ1Nl
c3Npb25Db2NvYS5tbTogQWRkZWQuCisgICAgICAgICh0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlz
cG9zaXRpb24pOgorICAgICAgICAodG9OU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRp
b24pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoTmV0d29y
a2luZ1Nlc3Npb246XSk6CisgICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJM
U2Vzc2lvbjp0YXNrOndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJM
U2Vzc2lvbjp0YXNrOmRpZFJlY2VpdmVDaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0YXNrOmRpZENv
bXBsZXRlV2l0aEVycm9yOl0pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRl
IFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkUmVjZWl2ZVJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVy
Ol0pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0
YVRhc2s6ZGlkUmVjZWl2ZURhdGE6XSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdTZXNz
aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6Y29uZmlndXJhdGlvbkZvclR5cGUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6TmV0d29ya2luZ1Nlc3Npb24pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5nRGF0YVRhc2s6Ok5ldHdvcmtpbmdEYXRhVGFz
ayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6fk5ldHdvcmtpbmdEYXRh
VGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6c3VzcGVuZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6cmVzdW1lKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjp0YXNrSWRlbnRpZmllcik6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKToKKyAg
ICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29u
ZmlnLmg6CisKIDIwMTUtMTAtMTkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBzdXBwb3J0IGZvciBsb25nIHByZXNzZXMgZnJv
bSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL2NvbmZpZy5oCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsOSBAQAogI2lmbmRlZiBIQVZF
X1dJTkRPV19TRVJWRVJfT0NDTFVTSU9OX05PVElGSUNBVElPTlMKICNkZWZpbmUgSEFWRV9XSU5E
T1dfU0VSVkVSX09DQ0xVU0lPTl9OT1RJRklDQVRJT05TIDEKICNlbmRpZgorI2lmbmRlZiBVU0Vf
TlNVUkxTRVNTSU9OCisjZGVmaW5lIFVTRV9OU1VSTFNFU1NJT04gMQorI2VuZGlmCiAjZW5kaWYK
IAogI2lmbmRlZiBIQVZFX1NFQ19BQ0NFU1NfQ09OVFJPTApJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTkxMjk0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNl
c3Npb25UcmFja2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGluZ0hhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1D
b29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5oPgpA
QCAtMTkyLDEyICsxOTMsMTcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Y29udgogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAg
ICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNl
bHNlCiAgICAgbmV0d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRv
RG93bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVyLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2Up
OwogCiAgICAgLy8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1ZXVlLgog
ICAgIGxvYWRlci0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAg
CiAgICAgbG9hZGVyLT5kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOworI2VuZGlmCiB9CiAK
IHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00oU2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgU3Ry
aW5nJiByZXN1bHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDEyICs0NywxNSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTmFtZXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKKyNpZiAhVVNFKE5TVVJMU0VT
U0lPTikKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjZW5kaWYKKwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTE2LDcgKzEx
OSwxMSBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvCiBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIoKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAgICBBU1NFUlQoIW1f
dGFzayk7CisjZWxzZQogICAgIEFTU0VSVCghbV9oYW5kbGUpOworI2VuZGlmCiAgICAgQVNTRVJU
KCFpc1N5bmNocm9ub3VzKCkgfHwgIW1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZGVsYXllZFJlcGx5
KTsKIH0KIApAQCAtMTgwLDcgKzE4NywxMyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
c3RhcnROZXR3b3JrCiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkU25pZmYgPSBtX3BhcmFtZXRl
cnMuY29udGVudFNuaWZmaW5nUG9saWN5ID09IFNuaWZmQ29udGVudDsKKyNpZiBVU0UoTlNVUkxT
RVNTSU9OKQorICAgIFVOVVNFRF9QQVJBTShzaG91bGRTbmlmZik7IC8vIEZJWE1FOiBVc2UgdGhp
cy4KKyAgICBtX3Rhc2sgPSBOZXR3b3JraW5nU2Vzc2lvbjo6c2luZ2xldG9uKCktPmNyZWF0ZURh
dGFUYXNrV2l0aFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCwgKnRoaXMpOworICAgIG1fdGFzay0+
cmVzdW1lKCk7CisjZWxzZQogICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSht
X25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBtX2N1cnJlbnRSZXF1ZXN0LCB0aGlzLCBtX2RlZmVy
c0xvYWRpbmcsIHNob3VsZFNuaWZmKTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKQEAgLTE4OCwxMCArMjAxLDE1
IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2EKICAgICBpZiAobV9k
ZWZlcnNMb2FkaW5nID09IGRlZmVycykKICAgICAgICAgcmV0dXJuOwogICAgIG1fZGVmZXJzTG9h
ZGluZyA9IGRlZmVyczsKKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAobV9o
YW5kbGUpIHsKICAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgogICAgIGlmICghbV9kZWZlcnNMb2FkaW5nKQog
ICAgICAgICBzdGFydCgpOwogfQpAQCAtMjA0LDI1ICsyMjIsNDAgQEAgdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmNsZWFudXAoKQogCiAgICAgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25z
KCk7CiAKKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIGlmIChtX3Rhc2spIHsKKyAgICAgICAg
bV90YXNrLT5jbGVhckNsaWVudCgpOworICAgICAgICBtX3Rhc2sgPSBudWxscHRyOworICAgIH0K
KyNlbHNlCiAgICAgaWYgKG1faGFuZGxlKSB7CiAgICAgICAgIG1faGFuZGxlLT5jbGVhckNsaWVu
dCgpOwogICAgICAgICBtX2hhbmRsZSA9IG51bGxwdHI7CiAgICAgfQorI2VuZGlmCiAKICAgICAv
LyBUaGlzIHdpbGwgY2F1c2UgTmV0d29ya1Jlc291cmNlTG9hZGVyIHRvIGJlIGRlc3Ryb3llZCBh
bmQgdGhlcmVmb3JlIHdlIGRvIGl0IGxhc3QuCiAgICAgbV9jb25uZWN0aW9uLT5kaWRDbGVhbnVw
UmVzb3VyY2VMb2FkZXIoKnRoaXMpOwogfQogCisjaWYgIVVTRShOU1VSTFNFU1NJT04pCiB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQoKQogewog
ICAgIEFTU0VSVChtX2hhbmRsZSk7CiAgICAgbV9kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCA9
IHRydWU7CiB9CisjZW5kaWYKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCisjaWYgVVNFKE5TVVJMU0VTU0lP
TikKKyAgICBpZiAobV90YXNrKQorICAgICAgICBtX3Rhc2stPnN1c3BlbmQoKTsKKyAgICAvLyBG
SVhNRTogRG8gc29tZXRoaW5nIHdpdGggdGhlIG5ldHdvcmsgY2FjaGUgaGVyZS4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAobV9oYW5kbGUgJiYgIW1fZGlkQ29udmVydEhh
bmRsZVRvRG93bmxvYWQpIHsKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogCkBAIC0yMzQs
MTAgKzI2Nyw0OSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQoKQogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9Ci0KKyNlbmRpZgogICAgIGNsZWFudXAoKTsKIH0KIAorI2lmIFVT
RShOU1VSTFNFU1NJT04pCisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsUGVyZm9y
bUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIocmVxdWVzdCk7Cit9CisK
K3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIHN0ZDo6ZnVuY3Rpb248
dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpD
cmVkZW50aWFsJik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
bjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgV2ViQ29yZTo6Q3JlZGVudGlhbCgpKTsKK30KKwor
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlz
cG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICAKKyAgICByZXNwb25zZS5zZXRT
b3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrKTsKKyAgICBpZiAobV9wYXJh
bWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJbmZvKQorICAgICAgICByZXNwb25zZS5pbmNsdWRlQ2Vy
dGlmaWNhdGVJbmZvKCk7CisgICAgCisgICAgYm9vbCBzaG91bGRXYWl0Q29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UgPSBvcmlnaW5hbFJlcXVlc3QoKS5yZXF1ZXN0ZXIoKSA9PSBSZXNvdXJjZVJl
cXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKKyAgICBpZiAoIXNlbmRBYm9ydGluZ09uRmFpbHVyZShN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSwg
c2hvdWxkV2FpdENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKSkpCisgICAgICAgIHJldHVybjsK
KyAgICBjb21wbGV0aW9uSGFuZGxlcihSZXNwb25zZURpc3Bvc2l0aW9uOjpBbGxvdyk7Cit9CisK
K3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgc2VuZEJ1ZmZlck1heWJlQWJvcnRpbmco
KmJ1ZmZlciwgYnVmZmVyLT5zaXplKCkpOworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpCit7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNl
TG9hZChXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKSk7Cit9CisKKyNlbHNlCisK
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3Bv
bnNlKQogewogICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwpA
QCAtNDI4LDYgKzUwMCw4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXUKICAgICBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVy
OjpXaWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSkpOwog
fQogCisjZW5kaWYgLy8gVVNFKE5TVVJMU0VTU0lPTikKKyAgICAKIHZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IG5ld1JlcXVlc3QpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC00MzgsMjQgKzUxMiw0MCBA
QCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVXaWxsCiAjZW5kaWYKIAogICAg
IGlmIChtX2N1cnJlbnRSZXF1ZXN0LmlzTnVsbCgpKSB7CisjaWYgVVNFKE5TVVJMU0VTU0lPTikK
KyAgICAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworI2Vsc2UKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICBkaWRG
YWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Cisj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorI2lmIFVTRShOU1VSTFNFU1NJT04pCisg
ICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
ZWxzZQogICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1
ZXN0KTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVE
aWRSZWNlaXZlUmVzcG9uc2UoKQogewogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjaGVjayBv
bmNlIEJsb2JSZXNvdXJjZUhhbmRsZSBpbXBsZW1lbnRzIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5j
IGNvcnJlY3RseS4KICAgICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90IHdhaXQgZm9yIHJlc3Bv
bnNlLCBzbyB0aGUgbG9hZCBpcyBsaWtlbHkgdG8gZmluaXNoIGJlZm9yZSBjb250aW51ZURpZFJl
Y2VpdmVSZXNwb25zZS4KKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAoIW1f
aGFuZGxlKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UoKTsKKyNlbmRpZgogfQogCisjaWYgIVVTRShOU1VSTFNFU1NJT04pCisKIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0YShSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KQogewogICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0g
bV9oYW5kbGUpOwpAQCAtNTIwLDYgKzYxMCw4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpyZWNlaXZlZENhbmMKICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJv
cihtX2N1cnJlbnRSZXF1ZXN0KSk7CiB9CiAKKyNlbmRpZiAvLyAhVVNFKE5TVVJMU0VTU0lPTikK
Kwogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRl
ZCgpCiB7CiAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkKQEAgLTUzMiw3ICs2MjQsOSBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnRCdWZmZXJpCiB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCgpCiB7CiAgICAgQVNTRVJUKG1fYnVmZmVyZWRE
YXRhKTsKKyNpZiAhVVNFKE5TVVJMU0VTU0lPTikKICAgICBBU1NFUlQobV9oYW5kbGUpOworI2Vu
ZGlmCiAgICAgaWYgKCFtX2J1ZmZlcmVkRGF0YS0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAK
QEAgLTYwMCw3ICs2OTQsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmV0cmll
dmVDCiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp2YWxpZGF0ZUNhY2hlRW50cnkoc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KQogeworI2lmICFVU0UoTlNV
UkxTRVNTSU9OKQogICAgIEFTU0VSVCghbV9oYW5kbGUpOworI2VuZGlmCiAKICAgICAvLyBJZiB0
aGUgcmVxdWVzdCBpcyBhbHJlYWR5IGNvbmRpdGlvbmFsIHRoZW4gdGhlIHJldmFsaWRhdGlvbiB3
YXMgbm90IHRyaWdnZXJlZCBieSB0aGUgZGlzayBjYWNoZQogICAgIC8vIGFuZCB3ZSBzaG91bGQg
bm90IG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY29uZGl0aW9uYWwgaGVhZGVycy4KQEAgLTY2Myw3
ICs3NTksNyBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5nCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJB
Q0spCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykgJiYgIVVTRShOU1VS
TFNFU1NJT04pCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CkBAIC02ODUsMTQgKzc4MSwyMSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6Y2FuQXV0aGVudGljCiAgICAgfQogICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdl
czo6V2ViUmVzb3VyY2VMb2FkZXI6OkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UocHJvdGVjdGlvblNwYWNlKSk7CiB9CisjZW5kaWYKIAorI2lmIFVTRShQUk9URUNUSU9OX1NQ
QUNFX0FVVEhfQ0FMTEJBQ0spCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQogeworI2lm
IFVTRShOU1VSTFNFU1NJT04pCisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAg
IG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQogICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocmVzdWx0KTsKKyNlbmRpZgogfQogI2VuZGlm
CiAKLSNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisjaWYgVVNFKE5FVFdP
UktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKSAmJiAhVVNFKE5TVVJMU0VTU0lPTikKIGJvb2wgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpzdXBwb3J0c0RhdGFBcnJheSgpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9DYWNoZVZhbGlkYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25z
ZS5oPgpAQCAtNDQsMTEgKzQzLDE5IEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyNpbmNsdWRl
ICJOZXR3b3JraW5nU2Vzc2lvbi5oIgorI2Vsc2UKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
SGFuZGxlQ2xpZW50Lmg+CisjZW5kaWYKKwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVk
VVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEJsb2JEYXRhRmlsZVJlZmVyZW5jZTsKKyNpZiAhVVNFKE5TVVJMU0VTU0lPTikK
IGNsYXNzIFJlc291cmNlSGFuZGxlOworI2VuZGlmCiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiB9
CiAKQEAgLTU5LDcgKzY2LDE0IEBAIGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
OwogY2xhc3MgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ7CiBjbGFzcyBTYW5kYm94RXh0ZW5zaW9u
OwogCi1jbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3
b3JrUmVzb3VyY2VMb2FkZXI+LCBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQs
IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIgeworY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZGVy
CisgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+CisjaWYgVVNF
KE5TVVJMU0VTU0lPTikKKyAgICAsIHB1YmxpYyBOZXR3b3JraW5nRGF0YVRhc2tDbGllbnQKKyNl
bHNlCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQKKyNlbmRpZgor
ICAgICwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycyYgcGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNv
bm5lY3Rpb24pCiAgICAgewpAQCAtNzQsMTEgKzg4LDEzIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0KCkgY29uc3QgeyByZXR1
cm4gbV9wYXJhbWV0ZXJzLnJlcXVlc3Q7IH0KIAorCisjaWYgIVVTRShOU1VSTFNFU1NJT04pCiAg
ICAgLy8gQ2hhbmdlcyB3aXRoIHJlZGlyZWN0cy4KICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIGN1cnJlbnRSZXF1ZXN0KCkgeyByZXR1cm4gbV9jdXJyZW50UmVxdWVzdDsgfQotCiAgICAg
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxl
LmdldCgpOyB9CiAgICAgdm9pZCBkaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOworI2VuZGlm
CiAKICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgdm9pZCBhYm9ydCgpOwpAQCAtMTAyLDcgKzExOCw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCk7CiAKICAgICBXZWJDb3JlOjpTaGFyZWRC
dWZmZXIqIGJ1ZmZlcmVkRGF0YSgpIHsgcmV0dXJuIG1fYnVmZmVyZWREYXRhLmdldCgpOyB9Cisj
aWYgIVVTRShOU1VSTFNFU1NJT04pCiAgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CisjZW5kaWYKIAogICAg
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CiAgICAgV2ViQ29yZTo6U2Vzc2lv
bklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5zZXNzaW9uSUQ7IH0K
QEAgLTExNyw2ICsxMzUsMTQgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIElQQzo6Q29ubmVjdGlv
biogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHVpbnQ2
NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXJh
bWV0ZXJzLmlkZW50aWZpZXI7IH0KIAorI2lmIFVTRShOU1VSTFNFU1NJT04pCisgICAgLy8gTmV0
d29ya2luZ0RhdGFUYXNrQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybUhUVFBS
ZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29u
c3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgc3RkOjpm
dW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikgZmluYWwgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
KSBmaW5hbCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVXaXRoRXJyb3Io
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIGZpbmFsIG92ZXJyaWRlOworI2Vsc2UKICAg
ICAvLyBSZXNvdXJjZUhhbmRsZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVl
c3RBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZSosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIG92ZXJyaWRlOwpAQCAtMTQ4LDYgKzE3NCw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopIG92ZXJyaWRlOwogI2VuZGlm
CiAjZW5kaWYKKyNlbmRpZiAvLyBVU0UoTlNVUkxTRVNTSU9OKQogCiAjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCiAgICAgdm9pZCBkaWRSZXRyaWV2ZUNhY2hlRW50cnkoc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtDYWNoZTo6RW50cnk+KTsKQEAgLTE3NywxMCArMjA0LDEzIEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247CiAK
ICAgICBSZWZQdHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7
CisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAgICBSZWZQdHI8TmV0d29ya2luZ0RhdGFUYXNrPiBt
X3Rhc2s7CisjZWxzZQogICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5k
bGU7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisjZW5kaWYKKyAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKIAogICAgIHNpemVfdCBtX2J5
dGVzUmVjZWl2ZWQ7CiAgICAgc2l6ZV90IG1fYnVmZmVyZWREYXRhRW5jb2RlZERhdGFMZW5ndGg7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JraW5nU2Vzc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtpbmdT
ZXNzaW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JraW5nU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBOZXR3b3JraW5nU2Vzc2lvbl9oCisjZGVmaW5lIE5ldHdvcmtpbmdT
ZXNzaW9uX2gKKworT0JKQ19DTEFTUyBOU1VSTFNlc3Npb247CitPQkpDX0NMQVNTIE5TVVJMU2Vz
c2lvbkRhdGFUYXNrOworT0JKQ19DTEFTUyBOU09wZXJhdGlvblF1ZXVlOworT0JKQ19DTEFTUyBO
ZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlOworCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBDcmVkZW50
aWFsOworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNz
IFJlc291cmNlUmVzcG9uc2U7CitjbGFzcyBTaGFyZWRCdWZmZXI7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitlbnVtIGNsYXNzIFJlc3BvbnNlRGlzcG9zaXRpb24geworICAgIENhbmNlbCwK
KyAgICBBbGxvdywKKyAgICBCZWNvbWVEb3dubG9hZAorfTsKKworZW51bSBjbGFzcyBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIHsKKyAgICBVc2VDcmVkZW50aWFsLAorICAgIFBl
cmZvcm1EZWZhdWx0SGFuZGxpbmcsCisgICAgQ2FuY2VsLAorICAgIFJlamVjdFByb3RlY3Rpb25T
cGFjZQorfTsKKworY2xhc3MgTmV0d29ya2luZ1Nlc3Npb247CisKK2NsYXNzIE5ldHdvcmtpbmdE
YXRhVGFza0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtSFRU
UFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Jik+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDaGFs
bGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6Q3JlZGVudGlhbCYpPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNwb25z
ZURpc3Bvc2l0aW9uKT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
cGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpID0gMDsKKworICAg
IHZpcnR1YWwgfk5ldHdvcmtpbmdEYXRhVGFza0NsaWVudCgpIHsgfTsKK307CisKK2NsYXNzIE5l
dHdvcmtpbmdEYXRhVGFzayA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtpbmdEYXRhVGFzaz4g
eworICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JraW5nU2Vzc2lvbjsKK3B1YmxpYzoKKyAgICB2b2lk
IHN1c3BlbmQoKTsKKyAgICB2b2lkIHJlc3VtZSgpOworCisgICAgdWludDY0X3QgdGFza0lkZW50
aWZpZXIoKTsKKworICAgIH5OZXR3b3JraW5nRGF0YVRhc2soKTsKKworICAgIE5ldHdvcmtpbmdE
YXRhVGFza0NsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICB2b2lkIGNs
ZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBOZXR3b3JraW5nRGF0YVRhc2soTmV0d29ya2luZ1Nlc3Npb24mLCBOZXR3b3JraW5nRGF0
YVRhc2tDbGllbnQmLCBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+KTsKKworICAgIE5l
dHdvcmtpbmdTZXNzaW9uJiBtX3Nlc3Npb247CisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRh
dGFUYXNrPiBtX3Rhc2s7CisgICAgTmV0d29ya2luZ0RhdGFUYXNrQ2xpZW50KiBtX2NsaWVudDsK
K307CisKK2NsYXNzIE5ldHdvcmtpbmdTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29y
a2luZ1Nlc3Npb24+IHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya2luZ0RhdGFUYXNrOworcHVi
bGljOgorICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIE5vcm1hbCwKKyAgICAgICAgRXBo
ZW1lcmFsCisgICAgfTsKKworICAgIFJlZlB0cjxOZXR3b3JraW5nRGF0YVRhc2s+IGNyZWF0ZURh
dGFUYXNrV2l0aFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgTmV0d29y
a2luZ0RhdGFUYXNrQ2xpZW50Jik7CisKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtpbmdTZXNzaW9u
PiBzaW5nbGV0b24oKTsgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGFjdHVhbGx5IGJlIGEgc2lu
Z2xldG9uLgorICAgIE5ldHdvcmtpbmdEYXRhVGFzayogZGF0YVRhc2tGb3JJZGVudGlmaWVyKHVp
bnQ2NF90KTsKKworICAgIH5OZXR3b3JraW5nU2Vzc2lvbigpIHsgTG9ja0hvbGRlciBsb2NrZXIo
bV9kYXRhVGFza01hcExvY2spOyBBU1NFUlQobV9kYXRhVGFza01hcC5pc0VtcHR5KCkpOyB9Citw
cml2YXRlOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya2luZ1Nlc3Npb24+IGNyZWF0ZShUeXBlKTsK
KworICAgIE5ldHdvcmtpbmdTZXNzaW9uKFR5cGUpOworICAgIEhhc2hNYXA8dWludDY0X3QsIE5l
dHdvcmtpbmdEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXA7CisgICAgTG9jayBtX2RhdGFUYXNrTWFw
TG9jazsKKyAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgUmV0YWlu
UHRyPE5ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbkRlbGVnYXRlOworICAgIFJl
dGFpblB0cjxOU09wZXJhdGlvblF1ZXVlPiBtX3Nlc3Npb25RdWV1ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gTmV0d29ya2luZ1Nlc3Npb25faApJbmRleDogU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JraW5nU2Vzc2lvbkNvY29hLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiTmV0d29ya2luZ1Nlc3Npb24uaCIKKworI2lmIFVTRShOU1VSTFNFU1NJT04pCisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vTlNVUkxTZXNzaW9uLmg+CisKKyNpbXBvcnQgPFdlYkNvcmUvQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4K
KyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCitzdGF0aWMgTlNVUkxTZXNzaW9uUmVz
cG9uc2VEaXNwb3NpdGlvbiB0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlzcG9zaXRpb24oV2ViS2l0
OjpSZXNwb25zZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKQoreworICAgIHN3aXRjaCAoZGlzcG9z
aXRpb24pIHsKKyAgICBjYXNlIFdlYktpdDo6UmVzcG9uc2VEaXNwb3NpdGlvbjo6Q2FuY2VsOgor
ICAgICAgICByZXR1cm4gTlNVUkxTZXNzaW9uUmVzcG9uc2VDYW5jZWw7CisgICAgY2FzZSBXZWJL
aXQ6OlJlc3BvbnNlRGlzcG9zaXRpb246OkFsbG93OgorICAgICAgICByZXR1cm4gTlNVUkxTZXNz
aW9uUmVzcG9uc2VBbGxvdzsKKyAgICBjYXNlIFdlYktpdDo6UmVzcG9uc2VEaXNwb3NpdGlvbjo6
QmVjb21lRG93bmxvYWQ6CisgICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25SZXNwb25zZUJlY29t
ZURvd25sb2FkOworICAgIH0KK30KKworc3RhdGljIE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VE
aXNwb3NpdGlvbiB0b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihXZWJLaXQ6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCit7CisgICAg
c3dpdGNoIChkaXNwb3NpdGlvbikgeworICAgIGNhc2UgV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsOgorICAgICAgICByZXR1cm4gTlNVUkxT
ZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWw7CisgICAgY2FzZSBXZWJLaXQ6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmc6Cisg
ICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlUGVyZm9ybURlZmF1bHRIYW5k
bGluZzsKKyAgICBjYXNlIFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
bjo6Q2FuY2VsOgorICAgICAgICByZXR1cm4gTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZUNhbmNl
bEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGNhc2UgV2ViS2l0OjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2U6CisgICAgICAgIHJl
dHVybiBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlUmVqZWN0UHJvdGVjdGlvblNwYWNlOworICAg
IH0KK30KKworQGludGVyZmFjZSBOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIDogTlNPYmplY3Qg
PE5TVVJMU2Vzc2lvbkRhdGFEZWxlZ2F0ZT4geworICAgIFdlYktpdDo6TmV0d29ya2luZ1Nlc3Np
b24qIF9zZXNzaW9uOworfQorCistIChpZClpbml0V2l0aE5ldHdvcmtpbmdTZXNzaW9uOihXZWJL
aXQ6Ok5ldHdvcmtpbmdTZXNzaW9uJilzZXNzaW9uOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlCisKKy0gKGlkKWluaXRXaXRoTmV0d29ya2luZ1Nl
c3Npb246KFdlYktpdDo6TmV0d29ya2luZ1Nlc3Npb24mKXNlc3Npb24KK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IF9zZXNzaW9uID0gJnNlc3Npb247CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClV
UkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRhc2s6KE5TVVJMU2Vzc2lvblRhc2sg
Kil0YXNrIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOihOU0hUVFBVUkxSZXNwb25zZSAqKXJl
c3BvbnNlIG5ld1JlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKE5TVVJMUmVxdWVzdCAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFVO
VVNFRF9QQVJBTShzZXNzaW9uKTsKKworICAgIGlmIChhdXRvIG5ldHdvcmtpbmdUYXNrID0gX3Nl
c3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyKSkgeworICAg
ICAgICBpZiAoYXV0byBjbGllbnQgPSBuZXR3b3JraW5nVGFzay0+Y2xpZW50KCkpIHsKKyAgICAg
ICAgICAgIGNsaWVudC0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24ocmVzcG9uc2UsIHJlcXVl
c3QsIF4oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVxdWVzdC5u
c1VSTFJlcXVlc3QoV2ViQ29yZTo6VXBkYXRlSFRUUEJvZHkpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorfQorCistICh2b2lkKVVSTFNlc3Np
b246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sg
ZGlkUmVjZWl2ZUNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxs
ZW5nZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5n
ZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBOU1VSTENyZWRlbnRpYWwgKmNyZWRlbnRpYWwpKWNv
bXBsZXRpb25IYW5kbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworCisgICAgaWYg
KGF1dG8gbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKHRh
c2sudGFza0lkZW50aWZpZXIpKSB7CisgICAgICAgIGlmIChhdXRvIGNsaWVudCA9IG5ldHdvcmtp
bmdUYXNrLT5jbGllbnQoKSkgeworICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlQ2hhbGxl
bmdlKGNoYWxsZW5nZSwgXihXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRp
b24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0
b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihkaXNwb3NpdGlvbiksIGNyZWRl
bnRpYWwubnNDcmVkZW50aWFsKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9u
ICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRDb21wbGV0ZVdpdGhF
cnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworCisg
ICAgaWYgKGF1dG8gbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlm
aWVyKHRhc2sudGFza0lkZW50aWZpZXIpKSB7CisgICAgICAgIGlmIChhdXRvIGNsaWVudCA9IG5l
dHdvcmtpbmdUYXNrLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkQ29tcGxldGVX
aXRoRXJyb3IoZXJyb3IpOworICAgIH0KK30KKworLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNl
c3Npb24gKilzZXNzaW9uIGRhdGFUYXNrOihOU1VSTFNlc3Npb25EYXRhVGFzayAqKWRhdGFUYXNr
IGRpZFJlY2VpdmVSZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU1VSTFNlc3Npb25SZXNwb25zZURpc3Bvc2l0aW9uIGRpc3Bvc2l0
aW9uKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKKwor
ICAgIGlmIChhdXRvIG5ldHdvcmtpbmdUYXNrID0gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRp
ZmllcihkYXRhVGFzay50YXNrSWRlbnRpZmllcikpIHsKKyAgICAgICAgaWYgKGF1dG8gY2xpZW50
ID0gbmV0d29ya2luZ1Rhc2stPmNsaWVudCgpKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlIHJlc291cmNlUmVzcG9uc2UocmVzcG9uc2UpOworICAgICAgICAgICAgY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzb3VyY2VSZXNwb25zZSwgXihXZWJLaXQ6OlJlc3Bv
bnNlRGlzcG9zaXRpb24gcmVzcG9uc2VEaXNwb3NpdGlvbikKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRvTlNVUkxTZXNzaW9uUmVzcG9u
c2VEaXNwb3NpdGlvbihyZXNwb25zZURpc3Bvc2l0aW9uKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLSAodm9pZClVUkxTZXNzaW9u
OihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRhdGFUYXNrOihOU1VSTFNlc3Npb25EYXRhVGFzayAq
KWRhdGFUYXNrIGRpZFJlY2VpdmVEYXRhOihOU0RhdGEgKilkYXRhCit7CisgICAgVU5VU0VEX1BB
UkFNKHNlc3Npb24pOworCisgICAgaWYgKGF1dG8gbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+
ZGF0YVRhc2tGb3JJZGVudGlmaWVyKGRhdGFUYXNrLnRhc2tJZGVudGlmaWVyKSkgeworICAgICAg
ICAvLyBGSVhNRTogTG9vayBpbnRvIHdoeSB0aGlzIGJlaW5nIG9uIHRoZSBtYWluIHRocmVhZCBj
YXVzZXMgZmV3ZXIgY3Jhc2hlcywgYnV0IG1vcmUgY3Jhc2hlcyB3aXRoIHRoZSBvdGhlciBjYWxs
YmFja3MuCisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IHJlZihkYXRhKTsKKyAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbcmVmLCBkYXRhLCBuZXR3b3JraW5nVGFza10geworICAgICAgICAgICAg
aWYgKGF1dG8gY2xpZW50ID0gbmV0d29ya2luZ1Rhc2stPmNsaWVudCgpKQorICAgICAgICAgICAg
ICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp3cmFwTlNE
YXRhKGRhdGEpKTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCitAZW5kCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworICAgIAorUmVmPE5ldHdvcmtpbmdTZXNzaW9uPiBOZXR3b3JraW5nU2Vzc2lvbjo6
Y3JlYXRlKFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JraW5n
U2Vzc2lvbih0eXBlKSk7Cit9CisKK1JlZjxOZXR3b3JraW5nU2Vzc2lvbj4gTmV0d29ya2luZ1Nl
c3Npb246OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxOZXR3
b3JraW5nU2Vzc2lvbj4+IHNoYXJlZEluc3RhbmNlKE5ldHdvcmtpbmdTZXNzaW9uOjpjcmVhdGUo
VHlwZTo6Tm9ybWFsKSk7CisgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlLmdldCgpLmNvcHlSZWYo
KTsKK30KKyAgICAKK3N0YXRpYyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uRm9yVHlwZShOZXR3b3JraW5nU2Vzc2lvbjo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgTmV0d29ya2luZ1Nlc3Npb246OlR5cGU6Ok5vcm1hbDoKKyAgICAg
ICAgcmV0dXJuIFtOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uIGRlZmF1bHRTZXNzaW9uQ29uZmln
dXJhdGlvbl07CisgICAgY2FzZSBOZXR3b3JraW5nU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsOgor
ICAgICAgICByZXR1cm4gW05TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gZXBoZW1lcmFsU2Vzc2lv
bkNvbmZpZ3VyYXRpb25dOworICAgIH0KK30KKworTmV0d29ya2luZ1Nlc3Npb246Ok5ldHdvcmtp
bmdTZXNzaW9uKFR5cGUgdHlwZSkKK3sKKyAgICBtX3Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtpbmdTZXNz
aW9uOip0aGlzXSk7CisgICAgbV9zZXNzaW9uUXVldWUgPSBhZG9wdE5TKFtbTlNPcGVyYXRpb25R
dWV1ZSBhbGxvY10gaW5pdF0pOworCisgICAgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29u
ZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25Gb3JUeXBlKHR5cGUpOworICAgIG1fc2Vzc2lvbiA9
IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVs
ZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fc2Vzc2lvbkRlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1
ZXVlOm1fc2Vzc2lvblF1ZXVlLmdldCgpXTsKK30KKworUmVmUHRyPE5ldHdvcmtpbmdEYXRhVGFz
az4gTmV0d29ya2luZ1Nlc3Npb246OmNyZWF0ZURhdGFUYXNrV2l0aFJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBOZXR3b3JraW5nRGF0YVRhc2tDbGllbnQm
IGNsaWVudCkKK3sKKyAgICBSZWZQdHI8TmV0d29ya2luZ0RhdGFUYXNrPiB0YXNrID0gYWRvcHRS
ZWYobmV3IE5ldHdvcmtpbmdEYXRhVGFzaygqdGhpcywgY2xpZW50LCBbbV9zZXNzaW9uIGRhdGFU
YXNrV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6VXBkYXRlSFRUUEJv
ZHkpXSkpOworICAgIHJldHVybiB0YXNrOworfQorCitOZXR3b3JraW5nRGF0YVRhc2sqIE5ldHdv
cmtpbmdTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIodWludDY0X3QgdGFza0lkZW50aWZp
ZXIpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kYXRhVGFza01hcExvY2spOworICAgIHJl
dHVybiBtX2RhdGFUYXNrTWFwLmdldCh0YXNrSWRlbnRpZmllcik7Cit9CisKK05ldHdvcmtpbmdE
YXRhVGFzazo6TmV0d29ya2luZ0RhdGFUYXNrKE5ldHdvcmtpbmdTZXNzaW9uJiBzZXNzaW9uLCBO
ZXR3b3JraW5nRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRh
dGFUYXNrPiB0YXNrKQorICAgIDogbV9zZXNzaW9uKHNlc3Npb24pCisgICAgLCBtX3Rhc2sodGFz
aykKKyAgICAsIG1fY2xpZW50KCZjbGllbnQpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9z
ZXNzaW9uLm1fZGF0YVRhc2tNYXBMb2NrKTsKKyAgICBBU1NFUlQoIW1fc2Vzc2lvbi5tX2RhdGFU
YXNrTWFwLmNvbnRhaW5zKHRhc2tJZGVudGlmaWVyKCkpKTsKKyAgICBtX3Nlc3Npb24ubV9kYXRh
VGFza01hcC5hZGQodGFza0lkZW50aWZpZXIoKSwgdGhpcyk7Cit9CisKK05ldHdvcmtpbmdEYXRh
VGFzazo6fk5ldHdvcmtpbmdEYXRhVGFzaygpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9z
ZXNzaW9uLm1fZGF0YVRhc2tNYXBMb2NrKTsKKyAgICBBU1NFUlQobV9zZXNzaW9uLm1fZGF0YVRh
c2tNYXAuY29udGFpbnModGFza0lkZW50aWZpZXIoKSkpOworICAgIEFTU0VSVChtX3Nlc3Npb24u
bV9kYXRhVGFza01hcC5nZXQodGFza0lkZW50aWZpZXIoKSkgPT0gdGhpcyk7CisgICAgbV9zZXNz
aW9uLm1fZGF0YVRhc2tNYXAucmVtb3ZlKHRhc2tJZGVudGlmaWVyKCkpOworfQorCit2b2lkIE5l
dHdvcmtpbmdEYXRhVGFzazo6c3VzcGVuZCgpCit7CisgICAgW21fdGFzayBzdXNwZW5kXTsKK30K
Kwordm9pZCBOZXR3b3JraW5nRGF0YVRhc2s6OnJlc3VtZSgpCit7CisgICAgW21fdGFzayByZXN1
bWVdOworfQorCit1aW50NjRfdCBOZXR3b3JraW5nRGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKCkK
K3sKKyAgICByZXR1cm4gW21fdGFzayB0YXNrSWRlbnRpZmllcl07Cit9CisKK30KKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNl
TG9hZGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0JKHJldmlzaW9uIDE5MTI5NCkKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OndpbGxDYWNoZVJlcwogICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxDYWNoZVJlc3Bv
bnNlKGNmUmVzcG9uc2UpOwogfQogCi0jZWxzZQorI2VsaWYgIVVTRShOU1VSTFNFU1NJT04pCiAK
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKm5zUmVzcG9uc2UpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwNDQsNiArMTA0NCw4IEBACiAJ
CTUyNzJCMjhBMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjcyQjI4ODE0MDY5ODVEMDA5
NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuY3BwICovOyB9OwogCQk1MjcyQjI4QjE0MDY5ODVEMDA5
NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyNzJCMjg5MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0
YS5oICovOyB9OwogCQk1MjhDMzdDMTE5NUNCQjFBMDBEOEI5Q0MgLyogV0tCYWNrRm9yd2FyZExp
c3RQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTlGMjgxMDE5NThGNDc4MDA4Q0FDNzIgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNUMyMENC
OUQxQkIwRENGQTAwODk1QkIxIC8qIE5ldHdvcmtpbmdTZXNzaW9uQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5QjFCQjBEQ0QyMDA4
OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbSAqLzsgfTsKKwkJNUMyMENCQTAxQkIx
RUNEODAwODk1QkIxIC8qIE5ldHdvcmtpbmdTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0
d29ya2luZ1Nlc3Npb24uaCAqLzsgfTsKIAkJNURBNkVEMEExNDkwNjA2OTAwQjQxRDEyIC8qIER5
bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURBNkVEMDgxNDkwNjA2OTAwQjQxRDEyIC8qIER5bmFt
aWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5oICovOyB9OwogCQk1REE2RUQwQjE0OTA2MDY5
MDBCNDFEMTIgLyogRHluYW1pY0xpbmtlckVudmlyb25tZW50RXh0cmFjdG9yLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURBNkVEMDkxNDkwNjA2OTAw
QjQxRDEyIC8qIER5bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5tbSAqLzsgfTsKIAkJ
NjUwMUJEMUExMkYxMjQzNDAwRTlGMjQ4IC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0Iw
MEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi87IH07CkBAIC0zMjM3LDYgKzMyMzks
OCBAQAogCQk1MUZEMThCNDE2NTFGQkFEMDBEQkUxQ0UgLyogTmV0d29ya1Jlc291cmNlTG9hZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtSZXNvdXJjZUxvYWRl
ci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0
aXN0aWNzRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0
aXN0aWNzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNzJCMjg5MTQw
Njk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdGF0aXN0aWNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtpbmdTZXNzaW9u
Q29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JraW5nU2Vzc2lvbkNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzIwQ0I5RTFCQjBERDE4MDA4
OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTmV0d29ya2luZ1Nlc3Npb24uaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtp
bmdTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENDQyQTU1MTZENTg1
NjcwMEFDMzMzMSAvKiBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gUGx1Z2lu
U2VydmljZS5lbnRpdGxlbWVudHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQTZF
RDA4MTQ5MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2VyRW52aXJvbm1lbnRFeHRyYWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHluYW1pY0xpbmtlckVudmlyb25t
ZW50RXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQTZFRDA5MTQ5
MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2VyRW52aXJvbm1lbnRFeHRyYWN0b3IubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEeW5hbWljTGlua2VyRW52aXJv
bm1lbnRFeHRyYWN0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTUyLDYg
KzU1NTYsNyBAQAogCQkJCTUxRkQxOEIzMTY1MUZCQUQwMERCRTFDRSAvKiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwICovLAogCQkJCTUxRkQxOEI0MTY1MUZCQUQwMERCRTFDRSAvKiBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQlFMTUyNTUxNzE3MDEwOUZCMDAzRDdBREIgLyogTmV0
d29ya1Jlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmluICovLAorCQkJCTVDMjBDQjlFMUJCMEREMTgw
MDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vzc2lvbi5oICovLAogCQkJCUUxQjc4NDcwMTYzRjI0Njkw
MDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBOZXR3b3JrUHJvY2VzczsKQEAgLTU4OTYsNiArNTkwMSw3IEBACiAJCTdFQzRGMEY4MThFNEE5
MjIwMDgwNTZBRiAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNUMyMENCOUIxQkIwRENEMjAwODk1QkIxIC8qIE5ldHdvcmtpbmdTZXNzaW9u
Q29jb2EubW0gKi8sCiAJCQkJN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9j
ZXNzQ29jb2EubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IGNvY29hOwpAQCAtODI4Myw2ICs4Mjg5
LDcgQEAKIAkJCQkzNzhFMUE0QTE4MjA4Q0Q2MDAzMTAwN0EgLyogV0tOU1N0cmluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzc4RTFBNEUxODIwOEQ3MDAwMzEwMDdBIC8qIFdLTlNVUkwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTM3RkMxOTRCMTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDMjBDQkEwMUJCMUVDRDgw
MDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcxODNE
NTcxODJGNEU3MDAwODBDODExIC8qIFdLTlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTM3QkYyRjA2MTk0N0RFQjQwMDcyM0M0OCAvKiBXS05TVVJMUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM0MDc2MDIxMjRGRjAyNzAwNjhGMjBBIC8qIFdLTnVtYmVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTk4MzAsNiArOTgzNyw3IEBACiAJCQkJQkNFNDY5NzkxMjE0RjJCNDAwMEI5OEVC
IC8qIFdlYkZyYW1lTGlzdGVuZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUE1
RjExMkY0RkJCMDAzMzdCQUIgLyogV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkQyOEYzRTcxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkZyYW1lTG9hZGVyQ2xpZW50
SU9TLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUMyMENCOUQxQkIwRENGQTAwODk1QkIxIC8qIE5l
dHdvcmtpbmdTZXNzaW9uQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzkxRjJDQTEyMUI2
NzlBMDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUJDQjlGNkExMTEyM0E4NEIwMEExMzdFMCAvKiBXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxMTFCMEUxMTJGNUU0RjAwMzM3QkFCIC8q
IFdlYkZyYW1lUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263589</attachid>
            <date>2015-10-20 10:38:58 -0700</date>
            <delta_ts>2015-10-21 14:41:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150355-20151020103816.patch</filename>
            <type>text/plain</type>
            <size>39934</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTEwLTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW5pdGlhbCBO
U1VSTFNlc3Npb24gV2ViUmVzb3VyY2VMb2FkZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6OmNmVVJMQXV0aENoYWxsZW5nZVJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6c2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpuc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKwog
MjAxNS0xMC0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE51
bGwgZGVyZWZlcmVuY2UgbG9hZGluZyBCbGluayBsYXlvdXQgdGVzdCBmYXN0L2Zvcm1zL2NvbG9y
L2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50Lmh0bWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmgJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsNyBAQCBwdWJsaWM6CiAKICAgICBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2ZVUkxBdXRoQ2hh
bGxlbmdlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9jZkNoYWxsZW5nZS5nZXQoKTsgfQogI2Vsc2UK
LSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
ICopOworICAgIFdFQkNPUkVfRVhQT1JUIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKik7CiAKICAgICBpZCBzZW5kZXIoKSBjb25zdCB7IHJldHVy
biBtX3NlbmRlci5nZXQoKTsgfQogICAgIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKm5z
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKSBjb25zdCB7IHJldHVybiBtX25zQ2hhbGxlbmdl
LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTEzMzEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBAQAorMjAxNS0xMC0x
OSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IEluaXRpYWwgTlNVUkxTZXNzaW9uIFdlYlJlc291cmNlTG9hZGVyIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2Fk
VG9Eb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnN0YXJ0TmV0d29ya0xvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmNsZWFudXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENvbXBsZXRlV2l0aEVy
cm9yKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
UmVzcG9uc2VBc3luYyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0QXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydEJ1ZmZlcmluZ1RpbWVySWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmJ1ZmZlcmlu
Z1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnZh
bGlkYXRlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlQ2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6c3VwcG9ydHNEYXRhQXJyYXkpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6Y3VycmVudFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmhhbmRsZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya2luZ1Nlc3Np
b24uaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFza0NsaWVudDo6
fk5ldHdvcmtpbmdEYXRhVGFza0NsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdE
YXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjpj
bGVhckNsaWVudCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya2luZ1Nl
c3Npb25Db2NvYS5tbTogQWRkZWQuCisgICAgICAgICh0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlz
cG9zaXRpb24pOgorICAgICAgICAodG9OU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRp
b24pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoTmV0d29y
a2luZ1Nlc3Npb246XSk6CisgICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJM
U2Vzc2lvbjp0YXNrOndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJM
U2Vzc2lvbjp0YXNrOmRpZFJlY2VpdmVDaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW05ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0YXNrOmRpZENv
bXBsZXRlV2l0aEVycm9yOl0pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRl
IFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkUmVjZWl2ZVJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVy
Ol0pOgorICAgICAgICAoLVtOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0
YVRhc2s6ZGlkUmVjZWl2ZURhdGE6XSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdTZXNz
aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6Y29uZmlndXJhdGlvbkZvclR5cGUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6TmV0d29ya2luZ1Nlc3Npb24pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JraW5nU2Vzc2lvbjo6Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5nRGF0YVRhc2s6Ok5ldHdvcmtpbmdEYXRhVGFz
ayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6fk5ldHdvcmtpbmdEYXRh
VGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6c3VzcGVuZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6cmVzdW1lKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjp0YXNrSWRlbnRpZmllcik6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKToKKyAg
ICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29u
ZmlnLmg6CisKIDIwMTUtMTAtMTkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBzdXBwb3J0IGZvciBsb25nIHByZXNzZXMgZnJv
bSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL2NvbmZpZy5oCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsOSBAQAogI2lmbmRlZiBIQVZF
X1dJTkRPV19TRVJWRVJfT0NDTFVTSU9OX05PVElGSUNBVElPTlMKICNkZWZpbmUgSEFWRV9XSU5E
T1dfU0VSVkVSX09DQ0xVU0lPTl9OT1RJRklDQVRJT05TIDEKICNlbmRpZgorI2lmbmRlZiBVU0Vf
TlNVUkxTRVNTSU9OCisjZGVmaW5lIFVTRV9OU1VSTFNFU1NJT04gMAorI2VuZGlmCiAjZW5kaWYK
IAogI2lmbmRlZiBIQVZFX1NFQ19BQ0NFU1NfQ09OVFJPTApJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTkxMjk0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNl
c3Npb25UcmFja2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGluZ0hhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1D
b29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5oPgpA
QCAtMTkyLDEyICsxOTMsMTcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Y29udgogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAg
ICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNl
bHNlCiAgICAgbmV0d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRv
RG93bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVyLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2Up
OwogCiAgICAgLy8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1ZXVlLgog
ICAgIGxvYWRlci0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAg
CiAgICAgbG9hZGVyLT5kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOworI2VuZGlmCiB9CiAK
IHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00oU2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgU3Ry
aW5nJiByZXN1bHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDEyICs0NywxNSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTmFtZXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKKyNpZiAhVVNFKE5TVVJMU0VT
U0lPTikKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjZW5kaWYKKwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTE2LDcgKzEx
OSwxMSBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvCiBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIoKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAgICBBU1NFUlQoIW1f
dGFzayk7CisjZWxzZQogICAgIEFTU0VSVCghbV9oYW5kbGUpOworI2VuZGlmCiAgICAgQVNTRVJU
KCFpc1N5bmNocm9ub3VzKCkgfHwgIW1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZGVsYXllZFJlcGx5
KTsKIH0KIApAQCAtMTgwLDcgKzE4NywxMyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
c3RhcnROZXR3b3JrCiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkU25pZmYgPSBtX3BhcmFtZXRl
cnMuY29udGVudFNuaWZmaW5nUG9saWN5ID09IFNuaWZmQ29udGVudDsKKyNpZiBVU0UoTlNVUkxT
RVNTSU9OKQorICAgIFVOVVNFRF9QQVJBTShzaG91bGRTbmlmZik7IC8vIEZJWE1FOiBVc2UgdGhp
cy4KKyAgICBtX3Rhc2sgPSBOZXR3b3JraW5nU2Vzc2lvbjo6c2luZ2xldG9uKCktPmNyZWF0ZURh
dGFUYXNrV2l0aFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCwgKnRoaXMpOworICAgIG1fdGFzay0+
cmVzdW1lKCk7CisjZWxzZQogICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSht
X25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBtX2N1cnJlbnRSZXF1ZXN0LCB0aGlzLCBtX2RlZmVy
c0xvYWRpbmcsIHNob3VsZFNuaWZmKTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKQEAgLTE4OCwxMCArMjAxLDE1
IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2EKICAgICBpZiAobV9k
ZWZlcnNMb2FkaW5nID09IGRlZmVycykKICAgICAgICAgcmV0dXJuOwogICAgIG1fZGVmZXJzTG9h
ZGluZyA9IGRlZmVyczsKKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAobV9o
YW5kbGUpIHsKICAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgogICAgIGlmICghbV9kZWZlcnNMb2FkaW5nKQog
ICAgICAgICBzdGFydCgpOwogfQpAQCAtMjA0LDI1ICsyMjIsNDAgQEAgdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmNsZWFudXAoKQogCiAgICAgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25z
KCk7CiAKKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIGlmIChtX3Rhc2spIHsKKyAgICAgICAg
bV90YXNrLT5jbGVhckNsaWVudCgpOworICAgICAgICBtX3Rhc2sgPSBudWxscHRyOworICAgIH0K
KyNlbHNlCiAgICAgaWYgKG1faGFuZGxlKSB7CiAgICAgICAgIG1faGFuZGxlLT5jbGVhckNsaWVu
dCgpOwogICAgICAgICBtX2hhbmRsZSA9IG51bGxwdHI7CiAgICAgfQorI2VuZGlmCiAKICAgICAv
LyBUaGlzIHdpbGwgY2F1c2UgTmV0d29ya1Jlc291cmNlTG9hZGVyIHRvIGJlIGRlc3Ryb3llZCBh
bmQgdGhlcmVmb3JlIHdlIGRvIGl0IGxhc3QuCiAgICAgbV9jb25uZWN0aW9uLT5kaWRDbGVhbnVw
UmVzb3VyY2VMb2FkZXIoKnRoaXMpOwogfQogCisjaWYgIVVTRShOU1VSTFNFU1NJT04pCiB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQoKQogewog
ICAgIEFTU0VSVChtX2hhbmRsZSk7CiAgICAgbV9kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCA9
IHRydWU7CiB9CisjZW5kaWYKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCisjaWYgVVNFKE5TVVJMU0VTU0lP
TikKKyAgICBpZiAobV90YXNrKQorICAgICAgICBtX3Rhc2stPnN1c3BlbmQoKTsKKyAgICAvLyBG
SVhNRTogRG8gc29tZXRoaW5nIHdpdGggdGhlIG5ldHdvcmsgY2FjaGUgaGVyZS4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAobV9oYW5kbGUgJiYgIW1fZGlkQ29udmVydEhh
bmRsZVRvRG93bmxvYWQpIHsKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogCkBAIC0yMzQs
MTAgKzI2Nyw0OSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQoKQogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9Ci0KKyNlbmRpZgogICAgIGNsZWFudXAoKTsKIH0KIAorI2lmIFVT
RShOU1VSTFNFU1NJT04pCisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsUGVyZm9y
bUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIocmVxdWVzdCk7Cit9CisK
K3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIHN0ZDo6ZnVuY3Rpb248
dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpD
cmVkZW50aWFsJik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
bjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgV2ViQ29yZTo6Q3JlZGVudGlhbCgpKTsKK30KKwor
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlz
cG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICAKKyAgICByZXNwb25zZS5zZXRT
b3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrKTsKKyAgICBpZiAobV9wYXJh
bWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJbmZvKQorICAgICAgICByZXNwb25zZS5pbmNsdWRlQ2Vy
dGlmaWNhdGVJbmZvKCk7CisgICAgCisgICAgYm9vbCBzaG91bGRXYWl0Q29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UgPSBvcmlnaW5hbFJlcXVlc3QoKS5yZXF1ZXN0ZXIoKSA9PSBSZXNvdXJjZVJl
cXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKKyAgICBpZiAoIXNlbmRBYm9ydGluZ09uRmFpbHVyZShN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSwg
c2hvdWxkV2FpdENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKSkpCisgICAgICAgIHJldHVybjsK
KyAgICBjb21wbGV0aW9uSGFuZGxlcihSZXNwb25zZURpc3Bvc2l0aW9uOjpBbGxvdyk7Cit9CisK
K3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgc2VuZEJ1ZmZlck1heWJlQWJvcnRpbmco
KmJ1ZmZlciwgYnVmZmVyLT5zaXplKCkpOworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpCit7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNl
TG9hZChXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKSk7Cit9CisKKyNlbHNlCisK
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3Bv
bnNlKQogewogICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwpA
QCAtNDI4LDYgKzUwMCw4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXUKICAgICBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVy
OjpXaWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSkpOwog
fQogCisjZW5kaWYgLy8gVVNFKE5TVVJMU0VTU0lPTikKKyAgICAKIHZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IG5ld1JlcXVlc3QpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC00MzgsMjQgKzUxMiw0MCBA
QCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVXaWxsCiAjZW5kaWYKIAogICAg
IGlmIChtX2N1cnJlbnRSZXF1ZXN0LmlzTnVsbCgpKSB7CisjaWYgVVNFKE5TVVJMU0VTU0lPTikK
KyAgICAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworI2Vsc2UKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICBkaWRG
YWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Cisj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorI2lmIFVTRShOU1VSTFNFU1NJT04pCisg
ICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
ZWxzZQogICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1
ZXN0KTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVE
aWRSZWNlaXZlUmVzcG9uc2UoKQogewogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjaGVjayBv
bmNlIEJsb2JSZXNvdXJjZUhhbmRsZSBpbXBsZW1lbnRzIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5j
IGNvcnJlY3RseS4KICAgICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90IHdhaXQgZm9yIHJlc3Bv
bnNlLCBzbyB0aGUgbG9hZCBpcyBsaWtlbHkgdG8gZmluaXNoIGJlZm9yZSBjb250aW51ZURpZFJl
Y2VpdmVSZXNwb25zZS4KKyNpZiBVU0UoTlNVUkxTRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAoIW1f
aGFuZGxlKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UoKTsKKyNlbmRpZgogfQogCisjaWYgIVVTRShOU1VSTFNFU1NJT04pCisKIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0YShSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KQogewogICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0g
bV9oYW5kbGUpOwpAQCAtNTIwLDYgKzYxMCw4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpyZWNlaXZlZENhbmMKICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJv
cihtX2N1cnJlbnRSZXF1ZXN0KSk7CiB9CiAKKyNlbmRpZiAvLyAhVVNFKE5TVVJMU0VTU0lPTikK
Kwogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRl
ZCgpCiB7CiAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkKQEAgLTUzMiw3ICs2MjQsOSBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnRCdWZmZXJpCiB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCgpCiB7CiAgICAgQVNTRVJUKG1fYnVmZmVyZWRE
YXRhKTsKKyNpZiAhVVNFKE5TVVJMU0VTU0lPTikKICAgICBBU1NFUlQobV9oYW5kbGUpOworI2Vu
ZGlmCiAgICAgaWYgKCFtX2J1ZmZlcmVkRGF0YS0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAK
QEAgLTYwMCw3ICs2OTQsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmV0cmll
dmVDCiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp2YWxpZGF0ZUNhY2hlRW50cnkoc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KQogeworI2lmICFVU0UoTlNV
UkxTRVNTSU9OKQogICAgIEFTU0VSVCghbV9oYW5kbGUpOworI2VuZGlmCiAKICAgICAvLyBJZiB0
aGUgcmVxdWVzdCBpcyBhbHJlYWR5IGNvbmRpdGlvbmFsIHRoZW4gdGhlIHJldmFsaWRhdGlvbiB3
YXMgbm90IHRyaWdnZXJlZCBieSB0aGUgZGlzayBjYWNoZQogICAgIC8vIGFuZCB3ZSBzaG91bGQg
bm90IG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY29uZGl0aW9uYWwgaGVhZGVycy4KQEAgLTY2Myw3
ICs3NTksNyBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5nCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJB
Q0spCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykgJiYgIVVTRShOU1VS
TFNFU1NJT04pCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CkBAIC02ODUsMTQgKzc4MSwyMSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6Y2FuQXV0aGVudGljCiAgICAgfQogICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdl
czo6V2ViUmVzb3VyY2VMb2FkZXI6OkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UocHJvdGVjdGlvblNwYWNlKSk7CiB9CisjZW5kaWYKIAorI2lmIFVTRShQUk9URUNUSU9OX1NQ
QUNFX0FVVEhfQ0FMTEJBQ0spCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQogeworI2lm
IFVTRShOU1VSTFNFU1NJT04pCisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAg
IG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQogICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocmVzdWx0KTsKKyNlbmRpZgogfQogI2VuZGlm
CiAKLSNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisjaWYgVVNFKE5FVFdP
UktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKSAmJiAhVVNFKE5TVVJMU0VTU0lPTikKIGJvb2wgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpzdXBwb3J0c0RhdGFBcnJheSgpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9DYWNoZVZhbGlkYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25z
ZS5oPgpAQCAtNDQsMTEgKzQzLDE5IEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyNpbmNsdWRl
ICJOZXR3b3JraW5nU2Vzc2lvbi5oIgorI2Vsc2UKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
SGFuZGxlQ2xpZW50Lmg+CisjZW5kaWYKKwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVk
VVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEJsb2JEYXRhRmlsZVJlZmVyZW5jZTsKKyNpZiAhVVNFKE5TVVJMU0VTU0lPTikK
IGNsYXNzIFJlc291cmNlSGFuZGxlOworI2VuZGlmCiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiB9
CiAKQEAgLTU5LDcgKzY2LDE0IEBAIGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
OwogY2xhc3MgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ7CiBjbGFzcyBTYW5kYm94RXh0ZW5zaW9u
OwogCi1jbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3
b3JrUmVzb3VyY2VMb2FkZXI+LCBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQs
IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIgeworY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZGVy
CisgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+CisjaWYgVVNF
KE5TVVJMU0VTU0lPTikKKyAgICAsIHB1YmxpYyBOZXR3b3JraW5nRGF0YVRhc2tDbGllbnQKKyNl
bHNlCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQKKyNlbmRpZgor
ICAgICwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycyYgcGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNv
bm5lY3Rpb24pCiAgICAgewpAQCAtNzQsMTEgKzg4LDEzIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0KCkgY29uc3QgeyByZXR1
cm4gbV9wYXJhbWV0ZXJzLnJlcXVlc3Q7IH0KIAorCisjaWYgIVVTRShOU1VSTFNFU1NJT04pCiAg
ICAgLy8gQ2hhbmdlcyB3aXRoIHJlZGlyZWN0cy4KICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIGN1cnJlbnRSZXF1ZXN0KCkgeyByZXR1cm4gbV9jdXJyZW50UmVxdWVzdDsgfQotCiAgICAg
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxl
LmdldCgpOyB9CiAgICAgdm9pZCBkaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOworI2VuZGlm
CiAKICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgdm9pZCBhYm9ydCgpOwpAQCAtMTAyLDcgKzExOCw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCk7CiAKICAgICBXZWJDb3JlOjpTaGFyZWRC
dWZmZXIqIGJ1ZmZlcmVkRGF0YSgpIHsgcmV0dXJuIG1fYnVmZmVyZWREYXRhLmdldCgpOyB9Cisj
aWYgIVVTRShOU1VSTFNFU1NJT04pCiAgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CisjZW5kaWYKIAogICAg
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CiAgICAgV2ViQ29yZTo6U2Vzc2lv
bklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5zZXNzaW9uSUQ7IH0K
QEAgLTExNyw2ICsxMzUsMTQgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIElQQzo6Q29ubmVjdGlv
biogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHVpbnQ2
NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXJh
bWV0ZXJzLmlkZW50aWZpZXI7IH0KIAorI2lmIFVTRShOU1VSTFNFU1NJT04pCisgICAgLy8gTmV0
d29ya2luZ0RhdGFUYXNrQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybUhUVFBS
ZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29u
c3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgc3RkOjpm
dW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikgZmluYWwgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
KSBmaW5hbCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVXaXRoRXJyb3Io
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIGZpbmFsIG92ZXJyaWRlOworI2Vsc2UKICAg
ICAvLyBSZXNvdXJjZUhhbmRsZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVl
c3RBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZSosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIG92ZXJyaWRlOwpAQCAtMTQ4LDYgKzE3NCw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopIG92ZXJyaWRlOwogI2VuZGlm
CiAjZW5kaWYKKyNlbmRpZiAvLyBVU0UoTlNVUkxTRVNTSU9OKQogCiAjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCiAgICAgdm9pZCBkaWRSZXRyaWV2ZUNhY2hlRW50cnkoc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtDYWNoZTo6RW50cnk+KTsKQEAgLTE3NywxMCArMjA0LDEzIEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247CiAK
ICAgICBSZWZQdHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7
CisjaWYgVVNFKE5TVVJMU0VTU0lPTikKKyAgICBSZWZQdHI8TmV0d29ya2luZ0RhdGFUYXNrPiBt
X3Rhc2s7CisjZWxzZQogICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5k
bGU7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisjZW5kaWYKKyAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKIAogICAgIHNpemVfdCBtX2J5
dGVzUmVjZWl2ZWQ7CiAgICAgc2l6ZV90IG1fYnVmZmVyZWREYXRhRW5jb2RlZERhdGFMZW5ndGg7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JraW5nU2Vzc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtpbmdT
ZXNzaW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JraW5nU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBOZXR3b3JraW5nU2Vzc2lvbl9oCisjZGVmaW5lIE5ldHdvcmtpbmdT
ZXNzaW9uX2gKKworT0JKQ19DTEFTUyBOU1VSTFNlc3Npb247CitPQkpDX0NMQVNTIE5TVVJMU2Vz
c2lvbkRhdGFUYXNrOworT0JKQ19DTEFTUyBOU09wZXJhdGlvblF1ZXVlOworT0JKQ19DTEFTUyBO
ZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlOworCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBDcmVkZW50
aWFsOworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNz
IFJlc291cmNlUmVzcG9uc2U7CitjbGFzcyBTaGFyZWRCdWZmZXI7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitlbnVtIGNsYXNzIFJlc3BvbnNlRGlzcG9zaXRpb24geworICAgIENhbmNlbCwK
KyAgICBBbGxvdywKKyAgICBCZWNvbWVEb3dubG9hZAorfTsKKworZW51bSBjbGFzcyBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIHsKKyAgICBVc2VDcmVkZW50aWFsLAorICAgIFBl
cmZvcm1EZWZhdWx0SGFuZGxpbmcsCisgICAgQ2FuY2VsLAorICAgIFJlamVjdFByb3RlY3Rpb25T
cGFjZQorfTsKKworY2xhc3MgTmV0d29ya2luZ1Nlc3Npb247CisKK2NsYXNzIE5ldHdvcmtpbmdE
YXRhVGFza0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtSFRU
UFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Jik+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDaGFs
bGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6Q3JlZGVudGlhbCYpPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNwb25z
ZURpc3Bvc2l0aW9uKT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
cGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpID0gMDsKKworICAg
IHZpcnR1YWwgfk5ldHdvcmtpbmdEYXRhVGFza0NsaWVudCgpIHsgfTsKK307CisKK2NsYXNzIE5l
dHdvcmtpbmdEYXRhVGFzayA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtpbmdEYXRhVGFzaz4g
eworICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JraW5nU2Vzc2lvbjsKK3B1YmxpYzoKKyAgICB2b2lk
IHN1c3BlbmQoKTsKKyAgICB2b2lkIHJlc3VtZSgpOworCisgICAgdWludDY0X3QgdGFza0lkZW50
aWZpZXIoKTsKKworICAgIH5OZXR3b3JraW5nRGF0YVRhc2soKTsKKworICAgIE5ldHdvcmtpbmdE
YXRhVGFza0NsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICB2b2lkIGNs
ZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBOZXR3b3JraW5nRGF0YVRhc2soTmV0d29ya2luZ1Nlc3Npb24mLCBOZXR3b3JraW5nRGF0
YVRhc2tDbGllbnQmLCBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+KTsKKworICAgIE5l
dHdvcmtpbmdTZXNzaW9uJiBtX3Nlc3Npb247CisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRh
dGFUYXNrPiBtX3Rhc2s7CisgICAgTmV0d29ya2luZ0RhdGFUYXNrQ2xpZW50KiBtX2NsaWVudDsK
K307CisKK2NsYXNzIE5ldHdvcmtpbmdTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29y
a2luZ1Nlc3Npb24+IHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya2luZ0RhdGFUYXNrOworcHVi
bGljOgorICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIE5vcm1hbCwKKyAgICAgICAgRXBo
ZW1lcmFsCisgICAgfTsKKworICAgIFJlZlB0cjxOZXR3b3JraW5nRGF0YVRhc2s+IGNyZWF0ZURh
dGFUYXNrV2l0aFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgTmV0d29y
a2luZ0RhdGFUYXNrQ2xpZW50Jik7CisKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtpbmdTZXNzaW9u
PiBzaW5nbGV0b24oKTsgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGFjdHVhbGx5IGJlIGEgc2lu
Z2xldG9uLgorICAgIE5ldHdvcmtpbmdEYXRhVGFzayogZGF0YVRhc2tGb3JJZGVudGlmaWVyKHVp
bnQ2NF90KTsKKworICAgIH5OZXR3b3JraW5nU2Vzc2lvbigpIHsgTG9ja0hvbGRlciBsb2NrZXIo
bV9kYXRhVGFza01hcExvY2spOyBBU1NFUlQobV9kYXRhVGFza01hcC5pc0VtcHR5KCkpOyB9Citw
cml2YXRlOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya2luZ1Nlc3Npb24+IGNyZWF0ZShUeXBlKTsK
KworICAgIE5ldHdvcmtpbmdTZXNzaW9uKFR5cGUpOworICAgIEhhc2hNYXA8dWludDY0X3QsIE5l
dHdvcmtpbmdEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXA7CisgICAgTG9jayBtX2RhdGFUYXNrTWFw
TG9jazsKKyAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgUmV0YWlu
UHRyPE5ldHdvcmtpbmdTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbkRlbGVnYXRlOworICAgIFJl
dGFpblB0cjxOU09wZXJhdGlvblF1ZXVlPiBtX3Nlc3Npb25RdWV1ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gTmV0d29ya2luZ1Nlc3Npb25faApJbmRleDogU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JraW5nU2Vzc2lvbkNvY29hLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiTmV0d29ya2luZ1Nlc3Npb24uaCIKKworI2lmIFVTRShOU1VSTFNFU1NJT04pCisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vTlNVUkxTZXNzaW9uLmg+CisKKyNpbXBvcnQgPFdlYkNvcmUvQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4K
KyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCitzdGF0aWMgTlNVUkxTZXNzaW9uUmVz
cG9uc2VEaXNwb3NpdGlvbiB0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlzcG9zaXRpb24oV2ViS2l0
OjpSZXNwb25zZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKQoreworICAgIHN3aXRjaCAoZGlzcG9z
aXRpb24pIHsKKyAgICBjYXNlIFdlYktpdDo6UmVzcG9uc2VEaXNwb3NpdGlvbjo6Q2FuY2VsOgor
ICAgICAgICByZXR1cm4gTlNVUkxTZXNzaW9uUmVzcG9uc2VDYW5jZWw7CisgICAgY2FzZSBXZWJL
aXQ6OlJlc3BvbnNlRGlzcG9zaXRpb246OkFsbG93OgorICAgICAgICByZXR1cm4gTlNVUkxTZXNz
aW9uUmVzcG9uc2VBbGxvdzsKKyAgICBjYXNlIFdlYktpdDo6UmVzcG9uc2VEaXNwb3NpdGlvbjo6
QmVjb21lRG93bmxvYWQ6CisgICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25SZXNwb25zZUJlY29t
ZURvd25sb2FkOworICAgIH0KK30KKworc3RhdGljIE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VE
aXNwb3NpdGlvbiB0b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihXZWJLaXQ6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCit7CisgICAg
c3dpdGNoIChkaXNwb3NpdGlvbikgeworICAgIGNhc2UgV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsOgorICAgICAgICByZXR1cm4gTlNVUkxT
ZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWw7CisgICAgY2FzZSBXZWJLaXQ6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmc6Cisg
ICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlUGVyZm9ybURlZmF1bHRIYW5k
bGluZzsKKyAgICBjYXNlIFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
bjo6Q2FuY2VsOgorICAgICAgICByZXR1cm4gTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZUNhbmNl
bEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGNhc2UgV2ViS2l0OjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2U6CisgICAgICAgIHJl
dHVybiBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlUmVqZWN0UHJvdGVjdGlvblNwYWNlOworICAg
IH0KK30KKworQGludGVyZmFjZSBOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIDogTlNPYmplY3Qg
PE5TVVJMU2Vzc2lvbkRhdGFEZWxlZ2F0ZT4geworICAgIFdlYktpdDo6TmV0d29ya2luZ1Nlc3Np
b24qIF9zZXNzaW9uOworfQorCistIChpZClpbml0V2l0aE5ldHdvcmtpbmdTZXNzaW9uOihXZWJL
aXQ6Ok5ldHdvcmtpbmdTZXNzaW9uJilzZXNzaW9uOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlCisKKy0gKGlkKWluaXRXaXRoTmV0d29ya2luZ1Nl
c3Npb246KFdlYktpdDo6TmV0d29ya2luZ1Nlc3Npb24mKXNlc3Npb24KK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IF9zZXNzaW9uID0gJnNlc3Npb247CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClV
UkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRhc2s6KE5TVVJMU2Vzc2lvblRhc2sg
Kil0YXNrIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOihOU0hUVFBVUkxSZXNwb25zZSAqKXJl
c3BvbnNlIG5ld1JlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKE5TVVJMUmVxdWVzdCAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFVO
VVNFRF9QQVJBTShzZXNzaW9uKTsKKworICAgIGlmIChhdXRvIG5ldHdvcmtpbmdUYXNrID0gX3Nl
c3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyKSkgeworICAg
ICAgICBpZiAoYXV0byBjbGllbnQgPSBuZXR3b3JraW5nVGFzay0+Y2xpZW50KCkpIHsKKyAgICAg
ICAgICAgIGNsaWVudC0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24ocmVzcG9uc2UsIHJlcXVl
c3QsIF4oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVxdWVzdC5u
c1VSTFJlcXVlc3QoV2ViQ29yZTo6VXBkYXRlSFRUUEJvZHkpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorfQorCistICh2b2lkKVVSTFNlc3Np
b246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sg
ZGlkUmVjZWl2ZUNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxs
ZW5nZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5n
ZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBOU1VSTENyZWRlbnRpYWwgKmNyZWRlbnRpYWwpKWNv
bXBsZXRpb25IYW5kbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworCisgICAgaWYg
KGF1dG8gbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKHRh
c2sudGFza0lkZW50aWZpZXIpKSB7CisgICAgICAgIGlmIChhdXRvIGNsaWVudCA9IG5ldHdvcmtp
bmdUYXNrLT5jbGllbnQoKSkgeworICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlQ2hhbGxl
bmdlKGNoYWxsZW5nZSwgXihXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRp
b24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0
b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihkaXNwb3NpdGlvbiksIGNyZWRl
bnRpYWwubnNDcmVkZW50aWFsKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9u
ICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRDb21wbGV0ZVdpdGhF
cnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworCisg
ICAgaWYgKGF1dG8gbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlm
aWVyKHRhc2sudGFza0lkZW50aWZpZXIpKSB7CisgICAgICAgIGlmIChhdXRvIGNsaWVudCA9IG5l
dHdvcmtpbmdUYXNrLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkQ29tcGxldGVX
aXRoRXJyb3IoZXJyb3IpOworICAgIH0KK30KKworLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNl
c3Npb24gKilzZXNzaW9uIGRhdGFUYXNrOihOU1VSTFNlc3Npb25EYXRhVGFzayAqKWRhdGFUYXNr
IGRpZFJlY2VpdmVSZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU1VSTFNlc3Npb25SZXNwb25zZURpc3Bvc2l0aW9uIGRpc3Bvc2l0
aW9uKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKKwor
ICAgIGlmIChhdXRvIG5ldHdvcmtpbmdUYXNrID0gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRp
ZmllcihkYXRhVGFzay50YXNrSWRlbnRpZmllcikpIHsKKyAgICAgICAgaWYgKGF1dG8gY2xpZW50
ID0gbmV0d29ya2luZ1Rhc2stPmNsaWVudCgpKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlIHJlc291cmNlUmVzcG9uc2UocmVzcG9uc2UpOworICAgICAgICAgICAgY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzb3VyY2VSZXNwb25zZSwgXihXZWJLaXQ6OlJlc3Bv
bnNlRGlzcG9zaXRpb24gcmVzcG9uc2VEaXNwb3NpdGlvbikKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRvTlNVUkxTZXNzaW9uUmVzcG9u
c2VEaXNwb3NpdGlvbihyZXNwb25zZURpc3Bvc2l0aW9uKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLSAodm9pZClVUkxTZXNzaW9u
OihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRhdGFUYXNrOihOU1VSTFNlc3Npb25EYXRhVGFzayAq
KWRhdGFUYXNrIGRpZFJlY2VpdmVEYXRhOihOU0RhdGEgKilkYXRhCit7CisgICAgVU5VU0VEX1BB
UkFNKHNlc3Npb24pOworCisgICAgaWYgKGF1dG8gbmV0d29ya2luZ1Rhc2sgPSBfc2Vzc2lvbi0+
ZGF0YVRhc2tGb3JJZGVudGlmaWVyKGRhdGFUYXNrLnRhc2tJZGVudGlmaWVyKSkgeworICAgICAg
ICAvLyBGSVhNRTogTG9vayBpbnRvIHdoeSB0aGlzIGJlaW5nIG9uIHRoZSBtYWluIHRocmVhZCBj
YXVzZXMgZmV3ZXIgY3Jhc2hlcywgYnV0IG1vcmUgY3Jhc2hlcyB3aXRoIHRoZSBvdGhlciBjYWxs
YmFja3MuCisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IHJlZihkYXRhKTsKKyAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbcmVmLCBkYXRhLCBuZXR3b3JraW5nVGFza10geworICAgICAgICAgICAg
aWYgKGF1dG8gY2xpZW50ID0gbmV0d29ya2luZ1Rhc2stPmNsaWVudCgpKQorICAgICAgICAgICAg
ICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp3cmFwTlNE
YXRhKGRhdGEpKTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCitAZW5kCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworICAgIAorUmVmPE5ldHdvcmtpbmdTZXNzaW9uPiBOZXR3b3JraW5nU2Vzc2lvbjo6
Y3JlYXRlKFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JraW5n
U2Vzc2lvbih0eXBlKSk7Cit9CisKK1JlZjxOZXR3b3JraW5nU2Vzc2lvbj4gTmV0d29ya2luZ1Nl
c3Npb246OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxOZXR3
b3JraW5nU2Vzc2lvbj4+IHNoYXJlZEluc3RhbmNlKE5ldHdvcmtpbmdTZXNzaW9uOjpjcmVhdGUo
VHlwZTo6Tm9ybWFsKSk7CisgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlLmdldCgpLmNvcHlSZWYo
KTsKK30KKyAgICAKK3N0YXRpYyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uRm9yVHlwZShOZXR3b3JraW5nU2Vzc2lvbjo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgTmV0d29ya2luZ1Nlc3Npb246OlR5cGU6Ok5vcm1hbDoKKyAgICAg
ICAgcmV0dXJuIFtOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uIGRlZmF1bHRTZXNzaW9uQ29uZmln
dXJhdGlvbl07CisgICAgY2FzZSBOZXR3b3JraW5nU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsOgor
ICAgICAgICByZXR1cm4gW05TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gZXBoZW1lcmFsU2Vzc2lv
bkNvbmZpZ3VyYXRpb25dOworICAgIH0KK30KKworTmV0d29ya2luZ1Nlc3Npb246Ok5ldHdvcmtp
bmdTZXNzaW9uKFR5cGUgdHlwZSkKK3sKKyAgICBtX3Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tOZXR3b3JraW5nU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtpbmdTZXNz
aW9uOip0aGlzXSk7CisgICAgbV9zZXNzaW9uUXVldWUgPSBhZG9wdE5TKFtbTlNPcGVyYXRpb25R
dWV1ZSBhbGxvY10gaW5pdF0pOworCisgICAgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29u
ZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25Gb3JUeXBlKHR5cGUpOworICAgIG1fc2Vzc2lvbiA9
IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVs
ZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fc2Vzc2lvbkRlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1
ZXVlOm1fc2Vzc2lvblF1ZXVlLmdldCgpXTsKK30KKworUmVmUHRyPE5ldHdvcmtpbmdEYXRhVGFz
az4gTmV0d29ya2luZ1Nlc3Npb246OmNyZWF0ZURhdGFUYXNrV2l0aFJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBOZXR3b3JraW5nRGF0YVRhc2tDbGllbnQm
IGNsaWVudCkKK3sKKyAgICBSZWZQdHI8TmV0d29ya2luZ0RhdGFUYXNrPiB0YXNrID0gYWRvcHRS
ZWYobmV3IE5ldHdvcmtpbmdEYXRhVGFzaygqdGhpcywgY2xpZW50LCBbbV9zZXNzaW9uIGRhdGFU
YXNrV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6VXBkYXRlSFRUUEJv
ZHkpXSkpOworICAgIHJldHVybiB0YXNrOworfQorCitOZXR3b3JraW5nRGF0YVRhc2sqIE5ldHdv
cmtpbmdTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIodWludDY0X3QgdGFza0lkZW50aWZp
ZXIpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kYXRhVGFza01hcExvY2spOworICAgIHJl
dHVybiBtX2RhdGFUYXNrTWFwLmdldCh0YXNrSWRlbnRpZmllcik7Cit9CisKK05ldHdvcmtpbmdE
YXRhVGFzazo6TmV0d29ya2luZ0RhdGFUYXNrKE5ldHdvcmtpbmdTZXNzaW9uJiBzZXNzaW9uLCBO
ZXR3b3JraW5nRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRh
dGFUYXNrPiB0YXNrKQorICAgIDogbV9zZXNzaW9uKHNlc3Npb24pCisgICAgLCBtX3Rhc2sodGFz
aykKKyAgICAsIG1fY2xpZW50KCZjbGllbnQpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9z
ZXNzaW9uLm1fZGF0YVRhc2tNYXBMb2NrKTsKKyAgICBBU1NFUlQoIW1fc2Vzc2lvbi5tX2RhdGFU
YXNrTWFwLmNvbnRhaW5zKHRhc2tJZGVudGlmaWVyKCkpKTsKKyAgICBtX3Nlc3Npb24ubV9kYXRh
VGFza01hcC5hZGQodGFza0lkZW50aWZpZXIoKSwgdGhpcyk7Cit9CisKK05ldHdvcmtpbmdEYXRh
VGFzazo6fk5ldHdvcmtpbmdEYXRhVGFzaygpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9z
ZXNzaW9uLm1fZGF0YVRhc2tNYXBMb2NrKTsKKyAgICBBU1NFUlQobV9zZXNzaW9uLm1fZGF0YVRh
c2tNYXAuY29udGFpbnModGFza0lkZW50aWZpZXIoKSkpOworICAgIEFTU0VSVChtX3Nlc3Npb24u
bV9kYXRhVGFza01hcC5nZXQodGFza0lkZW50aWZpZXIoKSkgPT0gdGhpcyk7CisgICAgbV9zZXNz
aW9uLm1fZGF0YVRhc2tNYXAucmVtb3ZlKHRhc2tJZGVudGlmaWVyKCkpOworfQorCit2b2lkIE5l
dHdvcmtpbmdEYXRhVGFzazo6c3VzcGVuZCgpCit7CisgICAgW21fdGFzayBzdXNwZW5kXTsKK30K
Kwordm9pZCBOZXR3b3JraW5nRGF0YVRhc2s6OnJlc3VtZSgpCit7CisgICAgW21fdGFzayByZXN1
bWVdOworfQorCit1aW50NjRfdCBOZXR3b3JraW5nRGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKCkK
K3sKKyAgICByZXR1cm4gW21fdGFzayB0YXNrSWRlbnRpZmllcl07Cit9CisKK30KKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNl
TG9hZGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0JKHJldmlzaW9uIDE5MTI5NCkKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OndpbGxDYWNoZVJlcwogICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxDYWNoZVJlc3Bv
bnNlKGNmUmVzcG9uc2UpOwogfQogCi0jZWxzZQorI2VsaWYgIVVTRShOU1VSTFNFU1NJT04pCiAK
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKm5zUmVzcG9uc2UpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwNDQsNiArMTA0NCw4IEBACiAJ
CTUyNzJCMjhBMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjcyQjI4ODE0MDY5ODVEMDA5
NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuY3BwICovOyB9OwogCQk1MjcyQjI4QjE0MDY5ODVEMDA5
NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyNzJCMjg5MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0
YS5oICovOyB9OwogCQk1MjhDMzdDMTE5NUNCQjFBMDBEOEI5Q0MgLyogV0tCYWNrRm9yd2FyZExp
c3RQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTlGMjgxMDE5NThGNDc4MDA4Q0FDNzIgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNUMyMENC
OUQxQkIwRENGQTAwODk1QkIxIC8qIE5ldHdvcmtpbmdTZXNzaW9uQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5QjFCQjBEQ0QyMDA4
OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbSAqLzsgfTsKKwkJNUMyMENCQTAxQkIx
RUNEODAwODk1QkIxIC8qIE5ldHdvcmtpbmdTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0
d29ya2luZ1Nlc3Npb24uaCAqLzsgfTsKIAkJNURBNkVEMEExNDkwNjA2OTAwQjQxRDEyIC8qIER5
bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURBNkVEMDgxNDkwNjA2OTAwQjQxRDEyIC8qIER5bmFt
aWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5oICovOyB9OwogCQk1REE2RUQwQjE0OTA2MDY5
MDBCNDFEMTIgLyogRHluYW1pY0xpbmtlckVudmlyb25tZW50RXh0cmFjdG9yLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURBNkVEMDkxNDkwNjA2OTAw
QjQxRDEyIC8qIER5bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5tbSAqLzsgfTsKIAkJ
NjUwMUJEMUExMkYxMjQzNDAwRTlGMjQ4IC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0Iw
MEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi87IH07CkBAIC0zMjM3LDYgKzMyMzks
OCBAQAogCQk1MUZEMThCNDE2NTFGQkFEMDBEQkUxQ0UgLyogTmV0d29ya1Jlc291cmNlTG9hZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtSZXNvdXJjZUxvYWRl
ci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0
aXN0aWNzRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0
aXN0aWNzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNzJCMjg5MTQw
Njk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdGF0aXN0aWNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb25Db2NvYS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtpbmdTZXNzaW9u
Q29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JraW5nU2Vzc2lvbkNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzIwQ0I5RTFCQjBERDE4MDA4
OTVCQjEgLyogTmV0d29ya2luZ1Nlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTmV0d29ya2luZ1Nlc3Npb24uaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtp
bmdTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENDQyQTU1MTZENTg1
NjcwMEFDMzMzMSAvKiBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gUGx1Z2lu
U2VydmljZS5lbnRpdGxlbWVudHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQTZF
RDA4MTQ5MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2VyRW52aXJvbm1lbnRFeHRyYWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHluYW1pY0xpbmtlckVudmlyb25t
ZW50RXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQTZFRDA5MTQ5
MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2VyRW52aXJvbm1lbnRFeHRyYWN0b3IubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEeW5hbWljTGlua2VyRW52aXJv
bm1lbnRFeHRyYWN0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTUyLDYg
KzU1NTYsNyBAQAogCQkJCTUxRkQxOEIzMTY1MUZCQUQwMERCRTFDRSAvKiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwICovLAogCQkJCTUxRkQxOEI0MTY1MUZCQUQwMERCRTFDRSAvKiBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQlFMTUyNTUxNzE3MDEwOUZCMDAzRDdBREIgLyogTmV0
d29ya1Jlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmluICovLAorCQkJCTVDMjBDQjlFMUJCMEREMTgw
MDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vzc2lvbi5oICovLAogCQkJCUUxQjc4NDcwMTYzRjI0Njkw
MDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBOZXR3b3JrUHJvY2VzczsKQEAgLTU4OTYsNiArNTkwMSw3IEBACiAJCTdFQzRGMEY4MThFNEE5
MjIwMDgwNTZBRiAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNUMyMENCOUIxQkIwRENEMjAwODk1QkIxIC8qIE5ldHdvcmtpbmdTZXNzaW9u
Q29jb2EubW0gKi8sCiAJCQkJN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9j
ZXNzQ29jb2EubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IGNvY29hOwpAQCAtODI4Myw2ICs4Mjg5
LDcgQEAKIAkJCQkzNzhFMUE0QTE4MjA4Q0Q2MDAzMTAwN0EgLyogV0tOU1N0cmluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzc4RTFBNEUxODIwOEQ3MDAwMzEwMDdBIC8qIFdLTlNVUkwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTM3RkMxOTRCMTg1MTBENkEwMDhDRkE0NyAvKiBXS05TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDMjBDQkEwMUJCMUVDRDgw
MDg5NUJCMSAvKiBOZXR3b3JraW5nU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcxODNE
NTcxODJGNEU3MDAwODBDODExIC8qIFdLTlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTM3QkYyRjA2MTk0N0RFQjQwMDcyM0M0OCAvKiBXS05TVVJMUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM0MDc2MDIxMjRGRjAyNzAwNjhGMjBBIC8qIFdLTnVtYmVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTk4MzAsNiArOTgzNyw3IEBACiAJCQkJQkNFNDY5NzkxMjE0RjJCNDAwMEI5OEVC
IC8qIFdlYkZyYW1lTGlzdGVuZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUE1
RjExMkY0RkJCMDAzMzdCQUIgLyogV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkQyOEYzRTcxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkZyYW1lTG9hZGVyQ2xpZW50
SU9TLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUMyMENCOUQxQkIwRENGQTAwODk1QkIxIC8qIE5l
dHdvcmtpbmdTZXNzaW9uQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzkxRjJDQTEyMUI2
NzlBMDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUJDQjlGNkExMTEyM0E4NEIwMEExMzdFMCAvKiBXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxMTFCMEUxMTJGNUU0RjAwMzM3QkFCIC8q
IFdlYkZyYW1lUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263741</attachid>
            <date>2015-10-21 14:41:32 -0700</date>
            <delta_ts>2015-10-22 09:28:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150355-20151021144048.patch</filename>
            <type>text/plain</type>
            <size>38636</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTQwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTEwLTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW5pdGlhbCBO
U1VSTFNlc3Npb24gV2ViUmVzb3VyY2VMb2FkZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogRXhwb3J0IGNvbnN0cnVj
dG9yIGZvciB1c2UgaW4gV2ViS2l0Mi4KKwogMjAxNS0xMC0yMSAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuIElEQjogQWRkIGJhc2ljIHRyYW5zYWN0
aW9uIGFib3J0aW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAkocmV2aXNpb24gMTkx
Mjk0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9BdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKIAog
ICAgIENGVVJMQXV0aENoYWxsZW5nZVJlZiBjZlVSTEF1dGhDaGFsbGVuZ2VSZWYoKSBjb25zdCB7
IHJldHVybiBtX2NmQ2hhbGxlbmdlLmdldCgpOyB9CiAjZWxzZQotICAgIEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKik7CisgICAgV0VCQ09SRV9F
WFBPUlQgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSAqKTsKIAogICAgIGlkIHNlbmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZGVyLmdldCgpOyB9
CiAgICAgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqbnNVUkxBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fbnNDaGFsbGVuZ2UuZ2V0KCk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE5MTMzMSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE1LTEwLTIxICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW5pdGlhbCBOU1VSTFNlc3Np
b24gV2ViUmVzb3VyY2VMb2FkZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM1NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6fk5ldHdvcmtSZXNvdXJjZUxv
YWRlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3
b3JrTG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2V0RGVm
ZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xl
YW51cCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29udmVy
dEhhbmRsZVRvRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxs
UGVyZm9ybUhUVFBSZWRpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZUNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RBc3lu
Yyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVXaWxs
U2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaWRTZW5kRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6cmVjZWl2ZWRDYW5jZWxsYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6dmFsaWRhdGVDYWNoZUVudHJ5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZW5kQWJvcnRpbmdPbkZh
aWx1cmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdXBw
b3J0c0RhdGFBcnJheSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjdXJyZW50UmVxdWVz
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6aGFuZGxlKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50Ojp+TmV0d29ya1Nlc3Npb25UYXNrQ2xp
ZW50KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjpjbGllbnQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JraW5nRGF0YVRhc2s6OmNsZWFyQ2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbik6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbTogQWRkZWQuCisgICAgICAg
ICh0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlzcG9zaXRpb24pOgorICAgICAgICAodG9OU1VSTFNl
c3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24pOgorICAgICAgICAoLVtOZXR3b3JrU2Vzc2lv
bkRlbGVnYXRlIGluaXRXaXRoTmV0d29ya1Nlc3Npb246XSk6CisgICAgICAgICgtW05ldHdvcmtT
ZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0YXNrOndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9u
Om5ld1JlcXVlc3Q6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW05ldHdvcmtTZXNz
aW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0YXNrOmRpZFJlY2VpdmVDaGFsbGVuZ2U6Y29tcGxldGlv
bkhhbmRsZXI6XSk6CisgICAgICAgICgtW05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lv
bjp0YXNrOmRpZENvbXBsZXRlV2l0aEVycm9yOl0pOgorICAgICAgICAoLVtOZXR3b3JrU2Vzc2lv
bkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkUmVjZWl2ZVJlc3BvbnNlOmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Np
b246ZGF0YVRhc2s6ZGlkUmVjZWl2ZURhdGE6XSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6Y29uZmlndXJhdGlvbkZvclR5cGUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JraW5nRGF0YVRhc2s6Ok5ldHdvcmtpbmdEYXRhVGFzayk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6fk5ldHdvcmtpbmdEYXRhVGFzayk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6c3VzcGVuZCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a2luZ0RhdGFUYXNrOjp0YXNrSWRlbnRpZmllcik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
bWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKToKKyAgICAgICAgKiBXZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29uZmlnLmg6CisKIDIw
MTUtMTAtMTkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHVudXNlZCBzdXBwb3J0IGZvciBsb25nIHByZXNzZXMgZnJvbSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L2NvbmZpZy5oCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9jb25maWcuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsOSBAQAogI2lmbmRlZiBIQVZFX1dJTkRPV19TRVJW
RVJfT0NDTFVTSU9OX05PVElGSUNBVElPTlMKICNkZWZpbmUgSEFWRV9XSU5ET1dfU0VSVkVSX09D
Q0xVU0lPTl9OT1RJRklDQVRJT05TIDEKICNlbmRpZgorI2lmbmRlZiBVU0VfTkVUV09SS19TRVNT
SU9OCisjZGVmaW5lIFVTRV9ORVRXT1JLX1NFU1NJT04gMAorI2VuZGlmCiAjZW5kaWYKIAogI2lm
bmRlZiBIQVZFX1NFQ19BQ0NFU1NfQ09OVFJPTApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmNwcAkocmV2aXNpb24gMTkxMjk0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlc3Npb25U
cmFja2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGluZ0hhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVK
YXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5oPgpAQCAtMTky
LDEyICsxOTMsMTcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29udgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAv
LyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbHNl
CiAgICAgbmV0d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93
bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVyLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UpOwog
CiAgICAgLy8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1ZXVlLgogICAg
IGxvYWRlci0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAgCiAg
ICAgbG9hZGVyLT5kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOworI2VuZGlmCiB9CiAKIHZv
aWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00oU2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgU3RyaW5n
JiByZXN1bHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5MTI5NCkKKysrIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDEyICs0NywxNSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNh
dGVJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTmFtZXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhh
bmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VT
U0lPTikKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjZW5kaWYKKwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTE2LDcgKzEx
OSwxMSBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvCiBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIoKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBBU1NFUlQo
IW1fdGFzayk7CisjZWxzZQogICAgIEFTU0VSVCghbV9oYW5kbGUpOworI2VuZGlmCiAgICAgQVNT
RVJUKCFpc1N5bmNocm9ub3VzKCkgfHwgIW1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZGVsYXllZFJl
cGx5KTsKIH0KIApAQCAtMTgwLDcgKzE4NywxMyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c3RhcnROZXR3b3JrCiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkU25pZmYgPSBtX3BhcmFt
ZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID09IFNuaWZmQ29udGVudDsKKyNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQorICAgIFVOVVNFRF9QQVJBTShzaG91bGRTbmlmZik7IC8vIEZJWE1FOiBV
c2UgdGhpcy4KKyAgICBtX3Rhc2sgPSBOZXR3b3JrU2Vzc2lvbjo6c2luZ2xldG9uKCktPmNyZWF0
ZURhdGFUYXNrV2l0aFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCwgKnRoaXMpOworICAgIG1fdGFz
ay0+cmVzdW1lKCk7CisjZWxzZQogICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZShtX25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBtX2N1cnJlbnRSZXF1ZXN0LCB0aGlzLCBtX2Rl
ZmVyc0xvYWRpbmcsIHNob3VsZFNuaWZmKTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKQEAgLTE4OCwxMCArMjAx
LDE1IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2EKICAgICBpZiAo
bV9kZWZlcnNMb2FkaW5nID09IGRlZmVycykKICAgICAgICAgcmV0dXJuOwogICAgIG1fZGVmZXJz
TG9hZGluZyA9IGRlZmVyczsKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8vIEZJWE1F
OiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBp
ZiAobV9oYW5kbGUpIHsKICAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJz
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgogICAgIGlmICghbV9kZWZlcnNMb2Fk
aW5nKQogICAgICAgICBzdGFydCgpOwogfQpAQCAtMjA0LDI1ICsyMjIsNDAgQEAgdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmNsZWFudXAoKQogCiAgICAgaW52YWxpZGF0ZVNhbmRib3hFeHRl
bnNpb25zKCk7CiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIGlmIChtX3Rhc2spIHsK
KyAgICAgICAgbV90YXNrLT5jbGVhckNsaWVudCgpOworICAgICAgICBtX3Rhc2sgPSBudWxscHRy
OworICAgIH0KKyNlbHNlCiAgICAgaWYgKG1faGFuZGxlKSB7CiAgICAgICAgIG1faGFuZGxlLT5j
bGVhckNsaWVudCgpOwogICAgICAgICBtX2hhbmRsZSA9IG51bGxwdHI7CiAgICAgfQorI2VuZGlm
CiAKICAgICAvLyBUaGlzIHdpbGwgY2F1c2UgTmV0d29ya1Jlc291cmNlTG9hZGVyIHRvIGJlIGRl
c3Ryb3llZCBhbmQgdGhlcmVmb3JlIHdlIGRvIGl0IGxhc3QuCiAgICAgbV9jb25uZWN0aW9uLT5k
aWRDbGVhbnVwUmVzb3VyY2VMb2FkZXIoKnRoaXMpOwogfQogCisjaWYgIVVTRShORVRXT1JLX1NF
U1NJT04pCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29udmVydEhhbmRsZVRvRG93
bmxvYWQoKQogewogICAgIEFTU0VSVChtX2hhbmRsZSk7CiAgICAgbV9kaWRDb252ZXJ0SGFuZGxl
VG9Eb3dubG9hZCA9IHRydWU7CiB9CisjZW5kaWYKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmFib3J0KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCisjaWYgVVNF
KE5FVFdPUktfU0VTU0lPTikKKyAgICBpZiAobV90YXNrKQorICAgICAgICBtX3Rhc2stPnN1c3Bl
bmQoKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIHdpdGggdGhlIG5ldHdvcmsgY2FjaGUg
aGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAobV9oYW5kbGUgJiYg
IW1fZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQpIHsKICAgICAgICAgbV9oYW5kbGUtPmNhbmNl
bCgpOwogCkBAIC0yMzQsMTAgKzI2Nyw1MSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
YWJvcnQoKQogICAgICAgICB9CiAjZW5kaWYKICAgICB9Ci0KKyNlbmRpZgogICAgIGNsZWFudXAo
KTsKIH0KIAorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKK3ZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+IGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIocmVxdWVzdCk7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
Q2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UsIHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9u
LCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VEaXNwb3NpdGlvbjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgV2ViQ29yZTo6Q3Jl
ZGVudGlhbCgpKTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlv
bjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKKyAgICBt
X3Jlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcmspOwor
ICAgIGlmIChtX3BhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0ZUluZm8pCisgICAgICAgIG1fcmVz
cG9uc2UuaW5jbHVkZUNlcnRpZmljYXRlSW5mbygpOworICAgIAorICAgIGJvb2wgc2hvdWxkV2Fp
dENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlID0gb3JpZ2luYWxSZXF1ZXN0KCkucmVxdWVzdGVy
KCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW47CisgICAgaWYgKCFzZW5kQWJv
cnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVz
cG9uc2UobV9yZXNwb25zZSwgc2hvdWxkV2FpdENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKSkp
CisgICAgICAgIHJldHVybjsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihSZXNwb25zZURpc3Bvc2l0
aW9uOjpBbGxvdyk7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
RGF0YShSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgQVNTRVJU
KGJ1ZmZlcik7CisgICAgc2VuZEJ1ZmZlck1heWJlQWJvcnRpbmcoKmJ1ZmZlciwgYnVmZmVyLT5z
aXplKCkpOworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29tcGxldGVXaXRo
RXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpCit7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNlTG9hZChXVEY6Om1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpKSk7Cit9CisKKyNlbHNlCisKIHZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxl
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQogewogICAgIEFTU0VS
VF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwpAQCAtNDI4LDYgKzUwMiw4IEBA
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXUKICAgICBzZW5kQWJvcnRp
bmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpXaWxsU2VuZFJlcXVlc3Qo
bV9jdXJyZW50UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSkpOwogfQogCisjZW5kaWYgLy8gVVNF
KE5FVFdPUktfU0VTU0lPTikKKyAgICAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb250
aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpCiB7
CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC00MzgsMjQgKzUxNCw0MSBAQCB2b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6Y29udGludWVXaWxsCiAjZW5kaWYKIAogICAgIGlmIChtX2N1cnJlbnRS
ZXF1ZXN0LmlzTnVsbCgpKSB7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAgICAgLy8g
RklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vs
c2UKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICBkaWRGYWlsKG1faGFuZGxl
LmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CisjZW5kaWYKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gRklY
TUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQogICAg
IG1faGFuZGxlLT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKKyNl
bmRpZgogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVEaWRSZWNlaXZl
UmVzcG9uc2UoKQogewogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjaGVjayBvbmNlIEJsb2JS
ZXNvdXJjZUhhbmRsZSBpbXBsZW1lbnRzIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jIGNvcnJlY3Rs
eS4KICAgICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90IHdhaXQgZm9yIHJlc3BvbnNlLCBzbyB0
aGUgbG9hZCBpcyBsaWtlbHkgdG8gZmluaXNoIGJlZm9yZSBjb250aW51ZURpZFJlY2VpdmVSZXNw
b25zZS4KKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21ldGhp
bmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICBpZiAoIW1faGFuZGxl
KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNlaXZlUmVz
cG9uc2UoKTsKKyNlbmRpZgogfQogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisKIHZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxl
LCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxC
eXRlc1RvQmVTZW50KQogewogICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9o
YW5kbGUpOwpAQCAtNTIwLDYgKzYxMyw4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpy
ZWNlaXZlZENhbmMKICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvciht
X2N1cnJlbnRSZXF1ZXN0KSk7CiB9CiAKKyNlbmRpZiAvLyAhVVNFKE5FVFdPUktfU0VTU0lPTikK
Kwogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRl
ZCgpCiB7CiAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkKQEAgLTUzMiw3ICs2MjcsOSBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnRCdWZmZXJpCiB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCgpCiB7CiAgICAgQVNTRVJUKG1fYnVmZmVyZWRE
YXRhKTsKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBBU1NFUlQobV9oYW5kbGUpOwor
I2VuZGlmCiAgICAgaWYgKCFtX2J1ZmZlcmVkRGF0YS0+c2l6ZSgpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTYwMCw3ICs2OTcsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmV0
cmlldmVDCiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp2YWxpZGF0ZUNhY2hlRW50cnko
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KQogeworI2lmICFVU0Uo
TkVUV09SS19TRVNTSU9OKQogICAgIEFTU0VSVCghbV9oYW5kbGUpOworI2VuZGlmCiAKICAgICAv
LyBJZiB0aGUgcmVxdWVzdCBpcyBhbHJlYWR5IGNvbmRpdGlvbmFsIHRoZW4gdGhlIHJldmFsaWRh
dGlvbiB3YXMgbm90IHRyaWdnZXJlZCBieSB0aGUgZGlzayBjYWNoZQogICAgIC8vIGFuZCB3ZSBz
aG91bGQgbm90IG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY29uZGl0aW9uYWwgaGVhZGVycy4KQEAg
LTY2Myw3ICs3NjIsNyBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5n
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhf
Q0FMTEJBQ0spCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykgJiYgIVVT
RShORVRXT1JLX1NFU1NJT04pCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CkBAIC02ODUsMTQgKzc4NCwyMSBAQCB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6Y2FuQXV0aGVudGljCiAgICAgfQogICAgIHNlbmRBYm9ydGluZ09uRmFpbHVy
ZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlKSk7CiB9CisjZW5kaWYKIAorI2lmIFVTRShQUk9U
RUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0
KQogeworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gRklYTUU6IERvIHNvbWV0aGlu
ZyBoZXJlLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQogICAgIG1faGFuZGxlLT5jb250
aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocmVzdWx0KTsKKyNlbmRp
ZgogfQogI2VuZGlmCiAKLSNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisj
aWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKSAmJiAhVVNFKE5FVFdPUktfU0VT
U0lPTikKIGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdXBwb3J0c0RhdGFBcnJheSgpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxOTEyOTQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZVJl
c291cmNlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DYWNoZVZhbGlkYXRpb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXNwb25zZS5oPgpAQCAtNDQsMTEgKzQzLDE5IEBACiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCisjaWYgVVNFKE5FVFdPUktf
U0VTU0lPTikKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2Vsc2UKKyNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CisjZW5kaWYKKwogdHlwZWRlZiBjb25zdCBz
dHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJsb2JEYXRhRmlsZVJlZmVyZW5jZTsKKyNpZiAhVVNF
KE5FVFdPUktfU0VTU0lPTikKIGNsYXNzIFJlc291cmNlSGFuZGxlOworI2VuZGlmCiBjbGFzcyBS
ZXNvdXJjZVJlcXVlc3Q7CiB9CiAKQEAgLTU5LDcgKzY2LDE0IEBAIGNsYXNzIE5ldHdvcmtSZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzOwogY2xhc3MgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ7CiBjbGFz
cyBTYW5kYm94RXh0ZW5zaW9uOwogCi1jbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+LCBwdWJsaWMgV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGVDbGllbnQsIHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIgeworY2xhc3MgTmV0
d29ya1Jlc291cmNlTG9hZGVyCisgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI+CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAsIHB1YmxpYyBOZXR3b3Jr
U2Vzc2lvblRhc2tDbGllbnQKKyNlbHNlCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGVDbGllbnQKKyNlbmRpZgorICAgICwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShjb25z
dCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycywgTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24pCiAgICAgewpAQCAtNzcsNyArOTEsOSBAQCBw
dWJsaWM6CiAgICAgLy8gQ2hhbmdlcyB3aXRoIHJlZGlyZWN0cy4KICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIGN1cnJlbnRSZXF1ZXN0KCkgeyByZXR1cm4gbV9jdXJyZW50UmVxdWVzdDsg
fQogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgpOyB9CisjZW5kaWYKICAg
ICB2b2lkIGRpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKCk7CiAKICAgICB2b2lkIHN0YXJ0KCk7
CkBAIC0xMTcsNiArMTMzLDE0IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rp
b24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB1aW50
NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGFy
YW1ldGVycy5pZGVudGlmaWVyOyB9CiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8v
IE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1I
VFRQUmVkaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKT4pIGZpbmFsIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24s
IGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4pIGZpbmFsIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIHN0
ZDo6ZnVuY3Rpb248dm9pZChSZXNwb25zZURpc3Bvc2l0aW9uKT4pIGZpbmFsIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlV2l0aEVy
cm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBmaW5hbCBvdmVycmlkZTsKKyNlbHNl
CiAgICAgLy8gUmVzb3VyY2VIYW5kbGVDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRS
ZXF1ZXN0QXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJl
c3BvbnNlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBvdmVycmlkZTsKQEAgLTE0OCw2ICsxNzIsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSAqKSBvdmVycmlkZTsKICNl
bmRpZgogI2VuZGlmCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKIAogI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFKQogICAgIHZvaWQgZGlkUmV0cmlldmVDYWNoZUVudHJ5KHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5Pik7CkBAIC0xNzcsNyArMjAyLDExIEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rp
b247CiAKICAgICBSZWZQdHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0Nv
bnRleHQ7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBSZWZQdHI8TmV0d29ya2luZ0Rh
dGFUYXNrPiBtX3Rhc2s7CisjZWxzZQogICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZT4gbV9oYW5kbGU7CisjZW5kaWYKIAogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1
cnJlbnRSZXF1ZXN0OwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE5ldHdvcmtTZXNzaW9uX2gKKyNkZWZpbmUgTmV0d29ya1Nlc3Npb25faAorCitPQkpD
X0NMQVNTIE5TVVJMU2Vzc2lvbjsKK09CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uRGF0YVRhc2s7CitP
QkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CitPQkpDX0NMQVNTIE5ldHdvcmtTZXNzaW9uRGVs
ZWdhdGU7CisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKK2NsYXNzIENyZWRlbnRpYWw7CitjbGFzcyBSZXNvdXJj
ZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
K2NsYXNzIFNoYXJlZEJ1ZmZlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gY2xh
c3MgUmVzcG9uc2VEaXNwb3NpdGlvbiB7CisgICAgQ2FuY2VsLAorICAgIEFsbG93LAorICAgIEJl
Y29tZURvd25sb2FkCit9OworCitlbnVtIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlz
cG9zaXRpb24geworICAgIFVzZUNyZWRlbnRpYWwsCisgICAgUGVyZm9ybURlZmF1bHRIYW5kbGlu
ZywKKyAgICBDYW5jZWwsCisgICAgUmVqZWN0UHJvdGVjdGlvblNwYWNlCit9OworCitjbGFzcyBO
ZXR3b3JrU2Vzc2lvbjsKKworY2xhc3MgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKT4pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgPSAwOworCisgICAgdmlydHVhbCB+TmV0d29ya1Nlc3Np
b25UYXNrQ2xpZW50KCkgeyB9Cit9OworCitjbGFzcyBOZXR3b3JraW5nRGF0YVRhc2sgOiBwdWJs
aWMgUmVmQ291bnRlZDxOZXR3b3JraW5nRGF0YVRhc2s+IHsKKyAgICBmcmllbmQgY2xhc3MgTmV0
d29ya1Nlc3Npb247CitwdWJsaWM6CisgICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCByZXN1
bWUoKTsKKworICAgIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKCk7CisKKyAgICB+TmV0d29ya2lu
Z0RhdGFUYXNrKCk7CisKKyAgICBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQqIGNsaWVudCgpIHsg
cmV0dXJuIG1fY2xpZW50OyB9CisgICAgdm9pZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSBu
dWxscHRyOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya2luZ0RhdGFUYXNrKE5l
dHdvcmtTZXNzaW9uJiwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiwgUmV0YWluUHRyPE5TVVJM
U2Vzc2lvbkRhdGFUYXNrPik7CisKKyAgICBOZXR3b3JrU2Vzc2lvbiYgbV9zZXNzaW9uOworICAg
IFJldGFpblB0cjxOU1VSTFNlc3Npb25EYXRhVGFzaz4gbV90YXNrOworICAgIE5ldHdvcmtTZXNz
aW9uVGFza0NsaWVudCogbV9jbGllbnQ7Cit9OworCitjbGFzcyBOZXR3b3JrU2Vzc2lvbiA6IHB1
YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtTZXNzaW9uPiB7CisgICAgZnJpZW5kIGNsYXNzIE5ldHdv
cmtpbmdEYXRhVGFzazsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICBO
b3JtYWwsCisgICAgICAgIEVwaGVtZXJhbAorICAgIH07CisKKyAgICBSZWZQdHI8TmV0d29ya2lu
Z0RhdGFUYXNrPiBjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCYpOworCisgICAgc3RhdGljIFJl
ZjxOZXR3b3JrU2Vzc2lvbj4gc2luZ2xldG9uKCk7IC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBh
Y3R1YWxseSBiZSBhIHNpbmdsZXRvbi4KKyAgICBOZXR3b3JraW5nRGF0YVRhc2sqIGRhdGFUYXNr
Rm9ySWRlbnRpZmllcih1aW50NjRfdCk7CisKKyAgICB+TmV0d29ya1Nlc3Npb24oKSB7IEFTU0VS
VChtX2RhdGFUYXNrTWFwLmlzRW1wdHkoKSk7IH0KK3ByaXZhdGU6CisgICAgc3RhdGljIFJlZjxO
ZXR3b3JrU2Vzc2lvbj4gY3JlYXRlKFR5cGUpOworCisgICAgTmV0d29ya1Nlc3Npb24oVHlwZSk7
CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTmV0d29ya2luZ0RhdGFUYXNrKj4gbV9kYXRhVGFza01h
cDsKKyAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgUmV0YWluUHRy
PE5ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbkRlbGVnYXRlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBOZXR3b3JrU2Vzc2lvbl9oCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtT
ZXNzaW9uQ29jb2EubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJOZXR3
b3JrU2Vzc2lvbi5oIgorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworI2ltcG9ydCA8Rm91
bmRhdGlvbi9OU1VSTFNlc3Npb24uaD4KKworI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9DcmVkZW50aWFsLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CisjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorI2ltcG9ydCA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3N0YXRpYyBOU1VSTFNlc3Npb25SZXNwb25zZURpc3Bv
c2l0aW9uIHRvTlNVUkxTZXNzaW9uUmVzcG9uc2VEaXNwb3NpdGlvbihXZWJLaXQ6OlJlc3BvbnNl
RGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCit7CisgICAgc3dpdGNoIChkaXNwb3NpdGlvbikgewor
ICAgIGNhc2UgV2ViS2l0OjpSZXNwb25zZURpc3Bvc2l0aW9uOjpDYW5jZWw6CisgICAgICAgIHJl
dHVybiBOU1VSTFNlc3Npb25SZXNwb25zZUNhbmNlbDsKKyAgICBjYXNlIFdlYktpdDo6UmVzcG9u
c2VEaXNwb3NpdGlvbjo6QWxsb3c6CisgICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25SZXNwb25z
ZUFsbG93OworICAgIGNhc2UgV2ViS2l0OjpSZXNwb25zZURpc3Bvc2l0aW9uOjpCZWNvbWVEb3du
bG9hZDoKKyAgICAgICAgcmV0dXJuIE5TVVJMU2Vzc2lvblJlc3BvbnNlQmVjb21lRG93bmxvYWQ7
CisgICAgfQorfQorCitzdGF0aWMgTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9u
IHRvTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uKFdlYktpdDo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRp
c3Bvc2l0aW9uKSB7CisgICAgY2FzZSBXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlz
cG9zaXRpb246OlVzZUNyZWRlbnRpYWw6CisgICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25BdXRo
Q2hhbGxlbmdlVXNlQ3JlZGVudGlhbDsKKyAgICBjYXNlIFdlYktpdDo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2VEaXNwb3NpdGlvbjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZzoKKyAgICAgICAgcmV0
dXJuIE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VQZXJmb3JtRGVmYXVsdEhhbmRsaW5nOworICAg
IGNhc2UgV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpDYW5jZWw6
CisgICAgICAgIHJldHVybiBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlQ2FuY2VsQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U7CisgICAgY2FzZSBXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
RGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFjZToKKyAgICAgICAgcmV0dXJuIE5TVVJM
U2Vzc2lvbkF1dGhDaGFsbGVuZ2VSZWplY3RQcm90ZWN0aW9uU3BhY2U7CisgICAgfQorfQorCitA
aW50ZXJmYWNlIE5ldHdvcmtTZXNzaW9uRGVsZWdhdGUgOiBOU09iamVjdCA8TlNVUkxTZXNzaW9u
RGF0YURlbGVnYXRlPiB7CisgICAgV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbiogX3Nlc3Npb247Cit9
CisKKy0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmV0d29ya1Nlc3Npb24m
KXNlc3Npb247CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5ldHdvcmtTZXNzaW9uRGVsZWdh
dGUKKworLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZXR3b3JrU2Vzc2lv
biYpc2Vzc2lvbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3Nlc3Npb24gPSAmc2Vzc2lvbjsKKworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Np
b24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rp
b246KE5TSFRUUFVSTFJlc3BvbnNlICopcmVzcG9uc2UgbmV3UmVxdWVzdDooTlNVUkxSZXF1ZXN0
ICopcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNVUkxSZXF1ZXN0ICopKWNv
bXBsZXRpb25IYW5kbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworCisgICAgaWYg
KGF1dG8qIG5ldHdvcmtpbmdUYXNrID0gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcih0
YXNrLnRhc2tJZGVudGlmaWVyKSkgeworICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbmV0d29y
a2luZ1Rhc2stPmNsaWVudCgpKSB7CisgICAgICAgICAgICBjbGllbnQtPndpbGxQZXJmb3JtSFRU
UFJlZGlyZWN0aW9uKHJlc3BvbnNlLCByZXF1ZXN0LCBeKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OlVwZGF0ZUhU
VFBCb2R5KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRh
c2s6KE5TVVJMU2Vzc2lvblRhc2sgKil0YXNrIGRpZFJlY2VpdmVDaGFsbGVuZ2U6KE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNV
UkxDcmVkZW50aWFsICpjcmVkZW50aWFsKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFVOVVNF
RF9QQVJBTShzZXNzaW9uKTsKKworICAgIGlmIChhdXRvKiBuZXR3b3JraW5nVGFzayA9IF9zZXNz
aW9uLT5kYXRhVGFza0ZvcklkZW50aWZpZXIodGFzay50YXNrSWRlbnRpZmllcikpIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGNsaWVudCA9IG5ldHdvcmtpbmdUYXNrLT5jbGllbnQoKSkgeworICAgICAg
ICAgICAgY2xpZW50LT5kaWRSZWNlaXZlQ2hhbGxlbmdlKGNoYWxsZW5nZSwgXihXZWJLaXQ6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNv
cmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VE
aXNwb3NpdGlvbihkaXNwb3NpdGlvbiksIGNyZWRlbnRpYWwubnNDcmVkZW50aWFsKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0g
KHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Np
b25UYXNrICopdGFzayBkaWRDb21wbGV0ZVdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworCisgICAgaWYgKGF1dG8qIG5ldHdvcmtpbmdUYXNr
ID0gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyKSkg
eworICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbmV0d29ya2luZ1Rhc2stPmNsaWVudCgpKQor
ICAgICAgICAgICAgY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihlcnJvcik7CisgICAgfQor
fQorCistICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gZGF0YVRhc2s6
KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOihOU1VS
TFJlc3BvbnNlICopcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJMU2Vz
c2lvblJlc3BvbnNlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pKWNvbXBsZXRpb25IYW5kbGVyCit7
CisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworCisgICAgaWYgKGF1dG8qIG5ldHdvcmtpbmdU
YXNrID0gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcihkYXRhVGFzay50YXNrSWRlbnRp
ZmllcikpIHsKKyAgICAgICAgaWYgKGF1dG8qIGNsaWVudCA9IG5ldHdvcmtpbmdUYXNrLT5jbGll
bnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgICAg
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSk7Cisg
ICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSwgXihXZWJLaXQ6
OlJlc3BvbnNlRGlzcG9zaXRpb24gcmVzcG9uc2VEaXNwb3NpdGlvbikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRvTlNVUkxTZXNzaW9u
UmVzcG9uc2VEaXNwb3NpdGlvbihyZXNwb25zZURpc3Bvc2l0aW9uKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLSAodm9pZClVUkxT
ZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRhdGFUYXNrOihOU1VSTFNlc3Npb25EYXRh
VGFzayAqKWRhdGFUYXNrIGRpZFJlY2VpdmVEYXRhOihOU0RhdGEgKilkYXRhCit7CisgICAgVU5V
U0VEX1BBUkFNKHNlc3Npb24pOworCisgICAgaWYgKGF1dG8qIG5ldHdvcmtpbmdUYXNrID0gX3Nl
c3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcihkYXRhVGFzay50YXNrSWRlbnRpZmllcikpIHsK
KyAgICAgICAgaWYgKGF1dG8qIGNsaWVudCA9IG5ldHdvcmtpbmdUYXNrLT5jbGllbnQoKSkKKyAg
ICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp3
cmFwTlNEYXRhKGRhdGEpKTsKKyAgICB9Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7
CisgICAgCitSZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoVHlwZSB0
eXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uKHR5cGUpKTsK
K30KKworUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6c2luZ2xldG9uKCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPE5ldHdvcmtTZXNzaW9uPj4gc2hhcmVkSW5z
dGFuY2UoTmV0d29ya1Nlc3Npb246OmNyZWF0ZShUeXBlOjpOb3JtYWwpKTsKKyAgICByZXR1cm4g
c2hhcmVkSW5zdGFuY2UuZ2V0KCkuY29weVJlZigpOworfQorICAgIAorc3RhdGljIE5TVVJMU2Vz
c2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb25Gb3JUeXBlKE5ldHdvcmtTZXNzaW9uOjpU
eXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOZXR3b3JrU2Vzc2lv
bjo6VHlwZTo6Tm9ybWFsOgorICAgICAgICByZXR1cm4gW05TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRp
b24gZGVmYXVsdFNlc3Npb25Db25maWd1cmF0aW9uXTsKKyAgICBjYXNlIE5ldHdvcmtTZXNzaW9u
OjpUeXBlOjpFcGhlbWVyYWw6CisgICAgICAgIHJldHVybiBbTlNVUkxTZXNzaW9uQ29uZmlndXJh
dGlvbiBlcGhlbWVyYWxTZXNzaW9uQ29uZmlndXJhdGlvbl07CisgICAgfQorfQorCitOZXR3b3Jr
U2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlKQoreworICAgIG1fc2Vzc2lvbkRlbGVn
YXRlID0gYWRvcHROUyhbW05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0
d29ya1Nlc3Npb246KnRoaXNdKTsKKworICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNv
bmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uRm9yVHlwZSh0eXBlKTsKKyAgICBtX3Nlc3Npb24g
PSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRl
bGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVR
dWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKK30KKworUmVmUHRyPE5ldHdvcmtp
bmdEYXRhVGFzaz4gTmV0d29ya1Nlc3Npb246OmNyZWF0ZURhdGFUYXNrV2l0aFJlcXVlc3QoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBOZXR3b3JrU2Vzc2lvblRhc2tD
bGllbnQmIGNsaWVudCkKK3sKKyAgICBSZWZQdHI8TmV0d29ya2luZ0RhdGFUYXNrPiB0YXNrID0g
YWRvcHRSZWYobmV3IE5ldHdvcmtpbmdEYXRhVGFzaygqdGhpcywgY2xpZW50LCBbbV9zZXNzaW9u
IGRhdGFUYXNrV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6VXBkYXRl
SFRUUEJvZHkpXSkpOworICAgIHJldHVybiB0YXNrOworfQorCitOZXR3b3JraW5nRGF0YVRhc2sq
IE5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIodWludDY0X3QgdGFza0lkZW50
aWZpZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9kYXRh
VGFza01hcC5nZXQodGFza0lkZW50aWZpZXIpOworfQorCitOZXR3b3JraW5nRGF0YVRhc2s6Ok5l
dHdvcmtpbmdEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya1Nlc3Npb25U
YXNrQ2xpZW50JiBjbGllbnQsIFJldGFpblB0cjxOU1VSTFNlc3Npb25EYXRhVGFzaz4gdGFzaykK
KyAgICA6IG1fc2Vzc2lvbihzZXNzaW9uKQorICAgICwgbV90YXNrKHRhc2spCisgICAgLCBtX2Ns
aWVudCgmY2xpZW50KQoreworICAgIEFTU0VSVCghbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAuY29u
dGFpbnModGFza0lkZW50aWZpZXIoKSkpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAuYWRkKHRhc2tJZGVudGlmaWVyKCksIHRoaXMpOwor
fQorCitOZXR3b3JraW5nRGF0YVRhc2s6On5OZXR3b3JraW5nRGF0YVRhc2soKQoreworICAgIEFT
U0VSVChtX3Nlc3Npb24ubV9kYXRhVGFza01hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcigpKSk7
CisgICAgQVNTRVJUKG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwLmdldCh0YXNrSWRlbnRpZmllcigp
KSA9PSB0aGlzKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fc2Vzc2lvbi5t
X2RhdGFUYXNrTWFwLnJlbW92ZSh0YXNrSWRlbnRpZmllcigpKTsKK30KKwordm9pZCBOZXR3b3Jr
aW5nRGF0YVRhc2s6OnN1c3BlbmQoKQoreworICAgIFttX3Rhc2sgc3VzcGVuZF07Cit9CisKK3Zv
aWQgTmV0d29ya2luZ0RhdGFUYXNrOjpyZXN1bWUoKQoreworICAgIFttX3Rhc2sgcmVzdW1lXTsK
K30KKwordWludDY0X3QgTmV0d29ya2luZ0RhdGFUYXNrOjp0YXNrSWRlbnRpZmllcigpCit7Cisg
ICAgcmV0dXJuIFttX3Rhc2sgdGFza0lkZW50aWZpZXJdOworfQorCit9CisKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMv
TmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tCShyZXZpc2lvbiAxOTEyOTQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
Ojp3aWxsQ2FjaGVSZXMKICAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShj
ZlJlc3BvbnNlKTsKIH0KIAotI2Vsc2UKKyNlbGlmICFVU0UoTkVUV09SS19TRVNTSU9OKQogCiB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJj
ZUhhbmRsZSogaGFuZGxlLCBOU0NhY2hlZFVSTFJlc3BvbnNlICpuc1Jlc3BvbnNlKQogewpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTkxMjk0KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ0LDYgKzEwNDQsOCBAQAogCQk1
MjcyQjI4QTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkIyODgxNDA2OTg1RDAwOTZB
NUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCAqLzsgfTsKIAkJNTI3MkIyOEIxNDA2OTg1RDAwOTZB
NUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEu
aCAqLzsgfTsKIAkJNTI4QzM3QzExOTVDQkIxQTAwRDhCOUNDIC8qIFdLQmFja0ZvcndhcmRMaXN0
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE5RjI4MTAxOTU4RjQ3ODAwOENBQzcyIC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTVDMjBDQjlE
MUJCMERDRkEwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMyMENCOUIxQkIwRENEMjAwODk1QkIx
IC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gKi87IH07CisJCTVDMjBDQkEwMUJCMUVDRDgwMDg5
NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9u
LmggKi87IH07CiAJCTVEQTZFRDBBMTQ5MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2VyRW52
aXJvbm1lbnRFeHRyYWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVEQTZFRDA4MTQ5MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2VyRW52aXJv
bm1lbnRFeHRyYWN0b3IuaCAqLzsgfTsKIAkJNURBNkVEMEIxNDkwNjA2OTAwQjQxRDEyIC8qIER5
bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEQTZFRDA5MTQ5MDYwNjkwMEI0MUQxMiAvKiBEeW5h
bWljTGlua2VyRW52aXJvbm1lbnRFeHRyYWN0b3IubW0gKi87IH07CiAJCTY1MDFCRDFBMTJGMTI0
MzQwMEU5RjI0OCAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tC
dW5kbGVJbnNwZWN0b3IuY3BwICovOyB9OwpAQCAtMzIzNyw2ICszMjM5LDggQEAKIAkJNTFGRDE4
QjQxNjUxRkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDsgcGF0aCA9IE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MjcyQjI4ODE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhdGlzdGljc0RhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAg
LyogU3RhdGlzdGljc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rh
dGlzdGljc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMyMENCOUIxQkIw
RENEMjAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbkNvY29hLm1tOyBwYXRoID0gTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uLmg7IHBh
dGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1RDQ0MkE1NTE2RDU4NTY3MDBBQzMzMzEgLyogUGx1Z2luU2VydmljZS5lbnRp
dGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhtbDsgcGF0aCA9IFBsdWdpblNlcnZpY2UuZW50aXRsZW1lbnRzOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1REE2RUQwODE0OTA2MDY5MDBCNDFEMTIgLyogRHluYW1pY0xp
bmtlckVudmlyb25tZW50RXh0cmFjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IER5bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1REE2RUQwOTE0OTA2MDY5MDBCNDFEMTIgLyogRHluYW1pY0xpbmtlckVu
dmlyb25tZW50RXh0cmFjdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gRHluYW1pY0xpbmtlckVudmlyb25tZW50RXh0cmFjdG9yLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTU1Miw2ICs1NTU2LDcgQEAKIAkJCQk1MUZEMThCMzE2NTFGQkFE
MDBEQkUxQ0UgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCAqLywKIAkJCQk1MUZEMThCNDE2
NTFGQkFEMDBEQkUxQ0UgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJRTE1MjU1
MTcxNzAxMDlGQjAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbiAq
LywKKwkJCQk1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uaCAqLywK
IAkJCQlFMUI3ODQ3MDE2M0YyNDY5MDAwN0I2OTIgLyogUmVtb3RlTmV0d29ya2luZ0NvbnRleHQu
aCAqLywKIAkJCSk7CiAJCQluYW1lID0gTmV0d29ya1Byb2Nlc3M7CkBAIC01ODk2LDYgKzU5MDEs
NyBAQAogCQk3RUM0RjBGODE4RTRBOTIyMDA4MDU2QUYgLyogY29jb2EgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTVDMjBDQjlCMUJCMERDRDIwMDg5NUJC
MSAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLm1tICovLAogCQkJCTdFQzRGMEY5MThFNEE5NDUwMDgw
NTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBjb2Nv
YTsKQEAgLTgyODMsNiArODI4OSw3IEBACiAJCQkJMzc4RTFBNEExODIwOENENjAwMzEwMDdBIC8q
IFdLTlNTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OEUxQTRFMTgyMDhENzAwMDMxMDA3
QSAvKiBXS05TVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0ZDMTk0QjE4NTEwRDZBMDA4Q0ZB
NDcgLyogV0tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1QzIwQ0JBMDFCQjFFQ0Q4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTM3MTgzRDU3MTgyRjRFNzAwMDgwQzgxMSAvKiBXS05TVVJMRXh0cmFzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzN0JGMkYwNjE5NDdERUI0MDA3MjNDNDggLyogV0tOU1VSTFJlcXVl
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDA3NjAyMTI0RkYwMjcwMDY4RjIwQSAvKiBXS051
bWJlci5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODMwLDYgKzk4MzcsNyBAQAogCQkJCUJDRTQ2OTc5
MTIxNEYyQjQwMDBCOThFQiAvKiBXZWJGcmFtZUxpc3RlbmVyUHJveHkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMxMTFBNUYxMTJGNEZCQjAwMzM3QkFCIC8qIFdlYkZyYW1lTG9hZGVyQ2xpZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEMjhGM0U3MTg4NUNDQzEwMDRCOUVBRSAvKiBXZWJG
cmFtZUxvYWRlckNsaWVudElPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTVDMjBDQjlEMUJCMERD
RkEwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTM5MUYyQ0ExMjFCNjc5QTAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0g
aW4gU291cmNlcyAqLywKIAkJCQlCQ0I5RjZBMTExMjNBODRCMDBBMTM3RTAgLyogV2ViRnJhbWVQ
b2xpY3lMaXN0ZW5lclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTExQjBFMTEyRjVF
NEYwMDMzN0JBQiAvKiBXZWJGcmFtZVByb3h5LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="288855"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>