<?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>144326</bug_id>
          
          <creation_ts>2015-04-28 06:10:22 -0700</creation_ts>
          <short_desc>ResourceLoadPriority should be enum class</short_desc>
          <delta_ts>2015-04-29 11:53:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1089480</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-28 06:10:22 -0700</bug_when>
    <thetext>modernize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089916</commentid>
    <comment_count>1</comment_count>
      <attachid>251930</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-29 00:37:56 -0700</bug_when>
    <thetext>Created attachment 251930
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089943</commentid>
    <comment_count>2</comment_count>
      <attachid>251939</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-29 02:48:06 -0700</bug_when>
    <thetext>Created attachment 251939
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089954</commentid>
    <comment_count>3</comment_count>
      <attachid>251943</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-29 03:56:03 -0700</bug_when>
    <thetext>Created attachment 251943
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090012</commentid>
    <comment_count>4</comment_count>
      <attachid>251943</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-29 09:06:39 -0700</bug_when>
    <thetext>Comment on attachment 251943
patch

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

&gt; Source/WebCore/loader/ResourceLoadScheduler.cpp:261
&gt; +    copyValuesToVector(m_hosts, hostsToServe);
&gt; +
&gt; +    for (auto* host : hostsToServe) {

I really wish we had an accessor named copiedValues() that did this so we could write:

    for (auto* host : m_hosts.copiedValues())

&gt; Source/WebCore/loader/ResourceLoadScheduler.cpp:275
&gt; +        HostInformation::RequestQueue&amp; requestsPending = host-&gt;requestsPending(priority);

auto&amp;?

&gt; Source/WebCore/loader/ResourceLoadScheduler.cpp:377
&gt; -    for (int priority = ResourceLoadPriorityHighest; priority &gt;= ResourceLoadPriorityLowest; --priority) {  
&gt; -        RequestQueue::iterator end = m_requestsPending[priority].end();
&gt; -        for (RequestQueue::iterator it = m_requestsPending[priority].begin(); it != end; ++it) {
&gt; +    for (auto&amp; requestQueue : m_requestsPending) {

This now goes from lowest to highest priority. But the old code went from highest to lowest. Is that an intentional change? Is it OK?

The fact that this goes in a particular priority order is now much less clear than in the old code. I think this needs a comment, and maybe even an assertion.

&gt; Source/WebCore/loader/ResourceLoadScheduler.cpp:383
&gt; +        for (auto it = requestQueue.begin(), end = requestQueue.end(); it != end; ++it) {
&gt;              if (*it == resourceLoader) {
&gt; -                m_requestsPending[priority].remove(it);
&gt; +                requestQueue.remove(it);
&gt;                  return;
&gt;              }
&gt;          }

It’s a little strange that we have Vector::find but we don’t have Deque::find, so we have to write out this loop. I suggest a helper function or adding something to Deque. Alternatively, I always wonder when I see a loop like this if maybe we are using the wrong data structure. Perhaps this should be a ListHashSet instead of a Deque?

&gt; Source/WebCore/loader/ResourceLoadScheduler.h:109
&gt; +        std::array&lt;RequestQueue, static_cast&lt;int&gt;(ResourceLoadPriority::Highest) + 1&gt; m_requestsPending;

Might be nice to have a constant for the number of resource load priorities, so the expression &quot;Highest + 1&quot; would be there instead of here.

&gt; Source/WebCore/platform/network/ResourceLoadPriority.h:41
&gt; +inline ResourceLoadPriority operator++(ResourceLoadPriority&amp; priority)

The return value should be a reference too, since this is the prefix form.

&gt; Source/WebCore/platform/network/ResourceLoadPriority.h:47
&gt; +inline ResourceLoadPriority operator--(ResourceLoadPriority&amp; priority)

The return value should be a reference too, since this is the prefix form.

&gt; Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp:154
&gt;  

Extra blank line.

&gt; Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in:31
&gt; +        

Stray whitespace on this line that looks like a blank line. Git would tell you to remove it by painting it red.

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:640
&gt;  void InjectedBundle::dispatchPendingLoadRequests()
&gt;  {
&gt; -    resourceLoadScheduler()-&gt;servePendingRequests();
&gt;  }

Why can’t we remove this entirely? If this is unused it seems we should be removing more. If it is used, then we shouldn’t be removing it.

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:249
&gt; -void WebResourceLoadScheduler::servePendingRequests(ResourceLoadPriority minimumPriority)
&gt; +void WebResourceLoadScheduler::servePendingRequests(ResourceLoadPriority)
&gt;  {
&gt; -    LOG(NetworkScheduling, &quot;(WebProcess) WebResourceLoadScheduler::servePendingRequests&quot;);
&gt; -    
&gt; -    // The NetworkProcess scheduler is good at making sure loads are serviced until there are no more pending requests.
&gt; -    // If this WebProcess isn&apos;t expecting requests to be served then we can ignore messaging the NetworkProcess right now.
&gt; -    if (m_suspendPendingRequestsCount)
&gt; -        return;
&gt; -
&gt; -    WebProcess::singleton().networkConnection()-&gt;connection()-&gt;send(Messages::NetworkConnectionToWebProcess::ServePendingRequests(minimumPriority), 0);
&gt;  }

Same question. Can we remove this entirely?a

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h:55
&gt; -    virtual void servePendingRequests(WebCore::ResourceLoadPriority minimumPriority = WebCore::ResourceLoadPriorityVeryLow) override;
&gt; +    virtual void servePendingRequests(WebCore::ResourceLoadPriority minimumPriority) override;

Same question. Can we remove this entirely?a</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090036</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-29 09:51:03 -0700</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/loader/ResourceLoadScheduler.cpp:377
&gt; &gt; -    for (int priority = ResourceLoadPriorityHighest; priority &gt;= ResourceLoadPriorityLowest; --priority) {  
&gt; &gt; -        RequestQueue::iterator end = m_requestsPending[priority].end();
&gt; &gt; -        for (RequestQueue::iterator it = m_requestsPending[priority].begin(); it != end; ++it) {
&gt; &gt; +    for (auto&amp; requestQueue : m_requestsPending) {
&gt; 
&gt; This now goes from lowest to highest priority. But the old code went from
&gt; highest to lowest. Is that an intentional change? Is it OK?
&gt; 
&gt; The fact that this goes in a particular priority order is now much less
&gt; clear than in the old code. I think this needs a comment, and maybe even an
&gt; assertion.

It is intentional change, the order doesn&apos;t matter (it is a search and there is maximum one hit). 

I don&apos;t know why the old code used reverse order.


&gt; It’s a little strange that we have Vector::find but we don’t have
&gt; Deque::find, so we have to write out this loop. I suggest a helper function
&gt; or adding something to Deque. Alternatively, I always wonder when I see a
&gt; loop like this if maybe we are using the wrong data structure. Perhaps this
&gt; should be a ListHashSet instead of a Deque?

I think that is a decent argument for not having that helper on Deque (or Vector). This should probably be a ListHashSet.

&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:640
&gt; &gt;  void InjectedBundle::dispatchPendingLoadRequests()
&gt; &gt;  {
&gt; &gt; -    resourceLoadScheduler()-&gt;servePendingRequests();
&gt; &gt;  }
&gt; 
&gt; Why can’t we remove this entirely? If this is unused it seems we should be
&gt; removing more. If it is used, then we shouldn’t be removing it.

This is part of the bundle API. Need to get rid of clients (if any before it can be removed).

&gt; Same question. Can we remove this entirely?a

These override virtual functions with implementations. We want these functions to do nothing. 

We should really get rid of the whole thing where we have WebResourceLoadScheduler inheriting WebCore::WebResourceLoadScheduler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090094</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-29 11:53:20 -0700</bug_when>
    <thetext>https://trac.webkit.org/r183563</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251930</attachid>
            <date>2015-04-29 00:37:56 -0700</date>
            <delta_ts>2015-04-29 02:48:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>resourceloadpriority-enum-class-3.patch</filename>
            <type>text/plain</type>
            <size>43794</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE1LTA0LTI4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZUxvYWRQcmlvcml0
eSBzaG91bGQgYmUgZW51bSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ0MzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MpOgorICAgICAgICAqIGxvYWRlci9MaW5rTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtMb2FkZXI6OmxvYWRMaW5rKToKKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5m
b3JtYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0
SW5mb3JtYXRpb246OnByaW9yaXR5VG9JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6c2NoZWR1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6
aGFzUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpI
b3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uOjpyZXF1ZXN0c1BlbmRpbmcpOgorCisgICAgICAgICAgICBNb2Rl
cm5pemUgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIGNvZGUgYSBiaXQgd2hpbGUgc3dpdGNoaW5nIHRv
IGVudW0gY2xhc3MuCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKToKKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAg
ICogbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uTG9h
ZGVyOjpzdGFydExvYWRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVBVkZSZXNvdXJjZUxvYWRlcjo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5Lmg6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yLS0pOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZG9wdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3RCYXNlOjpjYWNoZVBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpwcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpz
ZXRQcmlvcml0eSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmg6CisKKyAgICAgICAgICAgIFJlbW92ZSBiaXRmaWVsZHMuIFJlc291cmNlUmVxdWVzdHMg
YXJlIG5vdCBwcmVzZW50IGluIGxhcmdlIGVub3VnaCBudW1iZXJzIHRvIHJlcXVpcmUgdGhpcyBr
aW5kIG9mIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIFVzZSBtb2Rlcm4gaW5pdGlhbGl6YXRp
b24gc3ludGF4LgorCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXNv
dXJjZVJlcXVlc3RCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzVGhyZWFkUmVzb3VyY2VS
ZXF1ZXN0RGF0YUJhc2U6OkNyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YUJhc2UpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNv
dW50UGVySG9zdCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplSFRUUENvbm5lY3Rpb25T
ZXR0aW5nc09uU3RhcnR1cCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZVJlcXVlc3RDRk5ldC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZXNvdXJjZUxvYWRQcmlvcml0
eSk6CisgICAgICAgIChXZWJDb3JlOjp0b1BsYXRmb3JtUmVxdWVzdFByaW9yaXR5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjp0b1NvdXBNZXNzYWdlUHJpb3JpdHkpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJu
YWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmluZ1RvUmVzb3VyY2VMb2FkUHJpb3JpdHkp
OgorCiAyMDE1LTA0LTI4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2UgYSBub24tc3RhdGljIHZlcnNpb24gb2YgRnJhbWVWaWV3Ojp5UG9zaXRp
b25Gb3JSb290Q29udGVudExheWVyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQg
SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKCkKICAgICAgICAgLy8gTG9hZCBzdHlsZXNoZWV0cyB0
aGF0IGFyZSBub3QgbmVlZGVkIGZvciB0aGUgcmVuZGVyaW5nIGltbWVkaWF0ZWx5IHdpdGggbG93
IHByaW9yaXR5LgogICAgICAgICBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4gcHJpb3Jp
dHk7CiAgICAgICAgIGlmICghaXNBY3RpdmUpCi0gICAgICAgICAgICBwcmlvcml0eSA9IFJlc291
cmNlTG9hZFByaW9yaXR5VmVyeUxvdzsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gUmVzb3VyY2VM
b2FkUHJpb3JpdHk6OlZlcnlMb3c7CiAgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1
ZXN0KFJlc291cmNlUmVxdWVzdChkb2N1bWVudCgpLmNvbXBsZXRlVVJMKHVybCkpLCBjaGFyc2V0
LCBwcmlvcml0eSk7CiAgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKHRoaXMpOwogICAgICAg
ICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnJlcXVl
c3RDU1NTdHlsZVNoZWV0KHJlcXVlc3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xp
bmtMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9h
ZGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgYm9vbCBMaW5rTG9h
ZGVyOjpsb2FkTGluayhjb25zdCBMaW5rUmVsQQogICAgICAgICBpZiAocmVsQXR0cmlidXRlLmlz
TGlua1N1YnJlc291cmNlKSB7CiAgICAgICAgICAgICAvLyBXZSBvbmx5IG1ha2Ugb25lIHJlcXVl
c3QgdG8gdGhlIGNhY2hlZCByZXNvdXJjZSBsb2FkZXIgaWYgbXVsdGlwbGUgcmVsIHR5cGVzIGFy
ZSBzcGVjaWZpZWQ7CiAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBoaWdoZXIgcHJpb3JpdHks
IHdoaWNoIHNob3VsZCBvdmVyd3JpdGUgdGhlIGxvd2VyIHByaW9yaXR5LgotICAgICAgICAgICAg
cHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdzsKKyAgICAgICAgICAgIHByaW9yaXR5
ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsKICAgICAgICAgICAgIHR5cGUgPSBDYWNoZWRS
ZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOwogICAgICAgICB9CiAgICAgICAgIENhY2hlZFJlc291
cmNlUmVxdWVzdCBsaW5rUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QoZG9jdW1lbnQuY29tcGxldGVV
UkwoaHJlZikpLCBwcmlvcml0eSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3MSw3ICsxNzEsNyBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2Fk
CiAgICAgaWYgKFJlc291cmNlUmVxdWVzdDo6cmVzb3VyY2VQcmlvcml0aWVzRW5hYmxlZCgpICYm
ICFpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkgewogICAgICAgICAvLyBTZXJ2ZSBhbGwg
cmVxdWVzdHMgYXQgb25jZSB0byBrZWVwIHRoZSBwaXBlbGluZSBmdWxsIGF0IHRoZSBuZXR3b3Jr
IGxheWVyLgogICAgICAgICAvLyBGSVhNRTogRG9lcyB0aGlzIGNvZGUgZG8gYW55dGhpbmcgdXNl
ZnVsLCBnaXZlbiB0aGF0IHdlIGFsc28gc2V0IG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0IHRv
IGVmZmVjdGl2ZWx5IHVubGltaXRlZCBvbiB0aGVzZSBwbGF0Zm9ybXM/Ci0gICAgICAgIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKGhvc3QsIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdyk7CisgICAg
ICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhvc3QsIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5
TG93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMTgzLDcgKzE4Myw3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbHNlCi0gICAgaWYgKHByaW9yaXR5ID4gUmVzb3VyY2VMb2FkUHJpb3JpdHlM
b3cgfHwgIXJlc291cmNlTG9hZGVyLT51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwg
KHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5TG93ICYmICFoYWRSZXF1ZXN0cykpIHsK
KyAgICBpZiAocHJpb3JpdHkgPiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93IHx8ICFyZXNvdXJj
ZUxvYWRlci0+dXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IChwcmlvcml0eSA9PSBS
ZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93ICYmICFoYWRSZXF1ZXN0cykpIHsKICAgICAgICAgLy8g
VHJ5IHRvIHJlcXVlc3QgaW1wb3J0YW50IHJlc291cmNlcyBpbW1lZGlhdGVseS4KICAgICAgICAg
c2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgcHJpb3JpdHkpOwogICAgICAgICByZXR1cm47CkBA
IC0yNTYsMTQgKzI1Niw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRp
bmcKICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhtX25vbkhUVFBQcm90b2NvbEhvc3QsIG1pbmlt
dW1Qcmlvcml0eSk7CiAKICAgICBWZWN0b3I8SG9zdEluZm9ybWF0aW9uKj4gaG9zdHNUb1NlcnZl
OwotICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEhvc3RNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1faG9zdHMuZW5kKCk7Ci0gICAgZm9yIChIb3N0TWFwOjppdGVyYXRvciBpdGVyID0g
bV9ob3N0cy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBob3N0c1RvU2Vy
dmUuYXBwZW5kKGl0ZXItPnZhbHVlKTsKLQotICAgIGludCBzaXplID0gaG9zdHNUb1NlcnZlLnNp
emUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBIb3N0
SW5mb3JtYXRpb24qIGhvc3QgPSBob3N0c1RvU2VydmVbaV07CisgICAgY29weVZhbHVlc1RvVmVj
dG9yKG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7CisKKyAgICBmb3IgKGF1dG8qIGhvc3QgOiBob3N0
c1RvU2VydmUpIHsKICAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCiAgICAgICAgICAg
ICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkpOwogICAgICAgICBl
bHNlCkBAIC0yNzUsOCArMjcwLDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZl
UGVuZGluZwogewogICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzIEhvc3RJbmZvcm1hdGlvbi5tX25hbWU9JyVzJyIsIGhv
c3QtPm5hbWUoKS5sYXRpbjEoKS5kYXRhKCkpOwogCi0gICAgZm9yIChpbnQgcHJpb3JpdHkgPSBS
ZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hlc3Q7IHByaW9yaXR5ID49IG1pbmltdW1Qcmlvcml0eTsg
LS1wcmlvcml0eSkgewotICAgICAgICBIb3N0SW5mb3JtYXRpb246OlJlcXVlc3RRdWV1ZSYgcmVx
dWVzdHNQZW5kaW5nID0gaG9zdC0+cmVxdWVzdHNQZW5kaW5nKFJlc291cmNlTG9hZFByaW9yaXR5
KHByaW9yaXR5KSk7CisgICAgYXV0byBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5OjpI
aWdoZXN0OworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIEhvc3RJbmZvcm1hdGlvbjo6UmVx
dWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcgPSBob3N0LT5yZXF1ZXN0c1BlbmRpbmcocHJpb3Jp
dHkpOwogCiAgICAgICAgIHdoaWxlICghcmVxdWVzdHNQZW5kaW5nLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiByZXNvdXJjZUxvYWRlciA9IHJlcXVlc3Rz
UGVuZGluZy5maXJzdCgpOwpAQCAtMjg2LDcgKzI4Miw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzZXJ2ZVBlbmRpbmcKICAgICAgICAgICAgIC8vIGFuZCB3ZSBkb24ndCBrbm93IGFs
bCBzdHlsZXNoZWV0cyB5ZXQuCiAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByZXNv
dXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKSA/IHJlc291cmNlTG9hZGVyLT5mcmFtZUxvYWRlcigp
LT5mcmFtZSgpLmRvY3VtZW50KCkgOiAwOwogICAgICAgICAgICAgYm9vbCBzaG91bGRMaW1pdFJl
cXVlc3RzID0gIWhvc3QtPm5hbWUoKS5pc051bGwoKSB8fCAoZG9jdW1lbnQgJiYgKGRvY3VtZW50
LT5wYXJzaW5nKCkgfHwgIWRvY3VtZW50LT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkpOwotICAg
ICAgICAgICAgaWYgKHNob3VsZExpbWl0UmVxdWVzdHMgJiYgaG9zdC0+bGltaXRSZXF1ZXN0cyhS
ZXNvdXJjZUxvYWRQcmlvcml0eShwcmlvcml0eSkpKQorICAgICAgICAgICAgaWYgKHNob3VsZExp
bWl0UmVxdWVzdHMgJiYgaG9zdC0+bGltaXRSZXF1ZXN0cyhwcmlvcml0eSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICByZXF1ZXN0c1BlbmRpbmcucmVtb3ZlRmlyc3Qo
KTsKQEAgLTI5OSw2ICsyOTUsOSBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQ
ZW5kaW5nCiAjZW5kaWYKICAgICAgICAgICAgIHJlc291cmNlTG9hZGVyLT5zdGFydCgpOwogICAg
ICAgICB9CisgICAgICAgIGlmIChwcmlvcml0eSA9PSBtaW5pbXVtUHJpb3JpdHkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIC0tcHJpb3JpdHk7CiAgICAgfQogfQogCkBAIC0zMzgsMTQg
KzMzNywzMCBAQCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6CiAKIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjp+SG9zdEluZm9ybWF0aW9uKCkK
IHsKLSAgICBBU1NFUlQobV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIHAgPSAwOyBwIDw9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcCsrKQotICAg
ICAgICBBU1NFUlQobV9yZXF1ZXN0c1BlbmRpbmdbcF0uaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
IWhhc1JlcXVlc3RzKCkpOwogfQotICAgIAorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Okhvc3RJbmZvcm1hdGlvbjo6cHJpb3JpdHlUb0luZGV4KFJlc291cmNlTG9hZFByaW9yaXR5
IHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKKyAgICBjYXNlIFJlc291cmNl
TG9hZFByaW9yaXR5OjpWZXJ5TG93OgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFJlc291
cmNlTG9hZFByaW9yaXR5OjpMb3c6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6Ok1lZGl1bToKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgY2FzZSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2g6CisgICAgICAgIHJldHVybiA0OworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6c2NoZWR1bGUoUmVzb3VyY2VMb2FkZXIq
IHJlc291cmNlTG9hZGVyLCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKLSAgICBt
X3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eV0uYXBwZW5kKHJlc291cmNlTG9hZGVyKTsKKyAgICBt
X3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eVRvSW5kZXgocHJpb3JpdHkpXS5hcHBlbmQocmVzb3Vy
Y2VMb2FkZXIpOwogfQogICAgIAogdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvbjo6YWRkTG9hZEluUHJvZ3Jlc3MoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVy
KQpAQCAtMzU5LDExICszNzQsMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJ
bmZvcm1hdAogICAgIGlmIChtX3JlcXVlc3RzTG9hZGluZy5yZW1vdmUocmVzb3VyY2VMb2FkZXIp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgZm9yIChpbnQgcHJpb3JpdHkgPSBSZXNvdXJj
ZUxvYWRQcmlvcml0eUhpZ2hlc3Q7IHByaW9yaXR5ID49IFJlc291cmNlTG9hZFByaW9yaXR5TG93
ZXN0OyAtLXByaW9yaXR5KSB7ICAKLSAgICAgICAgUmVxdWVzdFF1ZXVlOjppdGVyYXRvciBlbmQg
PSBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eV0uZW5kKCk7Ci0gICAgICAgIGZvciAoUmVxdWVz
dFF1ZXVlOjppdGVyYXRvciBpdCA9IG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5XS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVx
dWVzdHNQZW5kaW5nKSB7CisgICAgICAgIGZvciAoYXV0byBpdCA9IHJlcXVlc3RRdWV1ZS5iZWdp
bigpLCBlbmQgPSByZXF1ZXN0UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgaWYgKCppdCA9PSByZXNvdXJjZUxvYWRlcikgewotICAgICAgICAgICAgICAgIG1fcmVx
dWVzdHNQZW5kaW5nW3ByaW9yaXR5XS5yZW1vdmUoaXQpOworICAgICAgICAgICAgICAgIHJlcXVl
c3RRdWV1ZS5yZW1vdmUoaXQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMzc0LDggKzM4OCw4IEBAIGJvb2wgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpIb3N0SW5mb3JtYXQKIHsKICAgICBpZiAoIW1fcmVxdWVzdHNMb2FkaW5nLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZm9yICh1bnNpZ25lZCBwID0gMDsgcCA8PSBS
ZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hlc3Q7IHArKykgewotICAgICAgICBpZiAoIW1fcmVxdWVz
dHNQZW5kaW5nW3BdLmlzRW1wdHkoKSkKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1f
cmVxdWVzdHNQZW5kaW5nKSB7CisgICAgICAgIGlmICghcmVxdWVzdFF1ZXVlLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
ODMsNyArMzk3LDcgQEAgYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdAog
CiBib29sIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpsaW1pdFJlcXVl
c3RzKFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KSBjb25zdCAKIHsKLSAgICBpZiAocHJp
b3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93ICYmICFtX3JlcXVlc3RzTG9hZGlu
Zy5pc0VtcHR5KCkpCisgICAgaWYgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5OjpW
ZXJ5TG93ICYmICFtX3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIHJldHVybiBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCkgPj0gKHJlc291cmNlTG9h
ZFNjaGVkdWxlcigpLT5pc1NlcmlhbExvYWRpbmdFbmFibGVkKCkgPyAxIDogbV9tYXhSZXF1ZXN0
c0luRmxpZ2h0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgogI2luY2x1ZGUgIlJlc291cmNl
TG9hZFByaW9yaXR5LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxhcnJheT4KICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CkBAIC01Niw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGVmZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBV
UkwmIHJlZGlyZWN0VVJMKTsKICAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5
ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11
bVByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOwogICAgIApAQCAt
OTMsMTcgKzk0LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIH5Ib3N0SW5mb3JtYXRpb24oKTsKICAg
ICAgICAgCiAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQotICAgICAgICB2b2lkIHNjaGVkdWxlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3cpOworICAgICAgICB2b2lkIHNj
aGVkdWxlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBSZXNvdXJjZUxv
YWRQcmlvcml0eTo6VmVyeUxvdyk7CiAgICAgICAgIHZvaWQgYWRkTG9hZEluUHJvZ3Jlc3MoUmVz
b3VyY2VMb2FkZXIqKTsKICAgICAgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIqKTsKICAg
ICAgICAgYm9vbCBoYXNSZXF1ZXN0cygpIGNvbnN0OwogICAgICAgICBib29sIGxpbWl0UmVxdWVz
dHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkpIGNvbnN0OwogCiAgICAgICAgIHR5cGVkZWYgRGVxdWU8
UmVmUHRyPFJlc291cmNlTG9hZGVyPj4gUmVxdWVzdFF1ZXVlOwotICAgICAgICBSZXF1ZXN0UXVl
dWUmIHJlcXVlc3RzUGVuZGluZyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkgeyByZXR1
cm4gbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHldOyB9CisgICAgICAgIFJlcXVlc3RRdWV1ZSYg
cmVxdWVzdHNQZW5kaW5nKFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KSB7IHJldHVybiBt
X3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eVRvSW5kZXgocHJpb3JpdHkpXTsgfQogCi0gICAgcHJp
dmF0ZTogICAgICAgICAgICAgICAgICAgIAotICAgICAgICBSZXF1ZXN0UXVldWUgbV9yZXF1ZXN0
c1BlbmRpbmdbUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0ICsgMV07CisgICAgcHJpdmF0ZToK
KyAgICAgICAgc3RhdGljIHVuc2lnbmVkIHByaW9yaXR5VG9JbmRleChSZXNvdXJjZUxvYWRQcmlv
cml0eSk7CisgICAgICAgIAorICAgICAgICBzdGQ6OmFycmF5PFJlcXVlc3RRdWV1ZSwgc3RhdGlj
X2Nhc3Q8aW50PihSZXNvdXJjZUxvYWRQcmlvcml0eTo6SGlnaGVzdCkgKyAxPiBtX3JlcXVlc3Rz
UGVuZGluZzsKICAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+
IFJlcXVlc3RNYXA7CiAgICAgICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0c0xvYWRpbmc7CiAgICAg
ICAgIGNvbnN0IFN0cmluZyBtX25hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDM3ICs2OCwzNyBAQCBzdGF0aWMgUmVzb3VyY2VMb2FkUHJpb3JpdHkgZGVmYXVsdFByaW9y
CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJl
c291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaDsKKyAg
ICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDsKICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlIaWdoOworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2g7
CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgogI2lmIEVOQUJMRShTVkdfRk9OVFMp
CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgogI2VuZGlmCiAgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgogICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OlJhd1Jlc291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRp
dW07CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOwogICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJj
ZUxvYWRQcmlvcml0eUxvdzsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpM
b3c7CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVT
aGVldDoKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaDsKKyAgICAgICAg
cmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOwogI2VuZGlmCiAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJlc291cmNl
TG9hZFByaW9yaXR5TG93OworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6Okxv
dzsKICNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpM
aW5rUHJlZmV0Y2g6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3c7
CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdzsKICAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJj
ZUxvYWRQcmlvcml0eVZlcnlMb3c7CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0
eTo6VmVyeUxvdzsKICNlbmRpZgogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJlc291cmNl
TG9hZFByaW9yaXR5TG93OworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6Okxv
dzsKICNlbmRpZgogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
UmVzb3VyY2VMb2FkUHJpb3JpdHlMb3c7CisgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5
OjpMb3c7CiB9CiAKIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlYWREZWNvZGVk
RGF0YURlbGV0aW9uSW50ZXJ2YWxGb3JSZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUg
dHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDk2LDcgKzQ5Niw3IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWMK
IHsKICAgICBVUkwgdXJsID0gcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKICAgICAK
LSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RS
ZXNvdXJjZSAnJXMnLCBjaGFyc2V0ICclcycsIHByaW9yaXR5PSVkLCBmb3JQcmVsb2FkPSV1Iiwg
dXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpLmxhdGluMSgpLmRhdGEoKSwgcmVx
dWVzdC5jaGFyc2V0KCkubGF0aW4xKCkuZGF0YSgpLCByZXF1ZXN0LnByaW9yaXR5KCkgPyByZXF1
ZXN0LnByaW9yaXR5KCkudmFsdWUoKSA6IC0xLCByZXF1ZXN0LmZvclByZWxvYWQoKSk7CisgICAg
TE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3Vy
Y2UgJyVzJywgY2hhcnNldCAnJXMnLCBwcmlvcml0eT0lZCwgZm9yUHJlbG9hZD0ldSIsIHVybC5z
dHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKS5sYXRpbjEoKS5kYXRhKCksIHJlcXVlc3Qu
Y2hhcnNldCgpLmxhdGluMSgpLmRhdGEoKSwgcmVxdWVzdC5wcmlvcml0eSgpID8gc3RhdGljX2Nh
c3Q8aW50PihyZXF1ZXN0LnByaW9yaXR5KCkudmFsdWUoKSkgOiAtMSwgcmVxdWVzdC5mb3JQcmVs
b2FkKCkpOwogICAgIAogICAgIC8vIElmIG9ubHkgdGhlIGZyYWdtZW50IGlkZW50aWZpZXJzIGRp
ZmZlciwgaXQgaXMgdGhlIHNhbWUgcmVzb3VyY2UuCiAgICAgdXJsID0gTWVtb3J5Q2FjaGU6OnJl
bW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHVybCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDcgKzYwLDcgQEAgdm9pZCBJY29uTG9hZGVyOjpzdGFydExvYWRpbmcoKQogCiAgICAgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KG1fZnJhbWUubG9hZGVyKCku
aWNvbigpLnVybCgpKSwgUmVzb3VyY2VMb2FkZXJPcHRpb25zKFNlbmRDYWxsYmFja3MsIFNuaWZm
Q29udGVudCwgQnVmZmVyRGF0YSwgRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBEb05vdEFz
a0NsaWVudEZvckFueUNyZWRlbnRpYWxzLCBEb1NlY3VyaXR5Q2hlY2ssIFVzZURlZmF1bHRPcmln
aW5SZXN0cmljdGlvbnNGb3JUeXBlLCBEb05vdEluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8pKTsKIAot
ICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldFByaW9yaXR5KFJlc291cmNl
TG9hZFByaW9yaXR5TG93KTsKKyAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5z
ZXRQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93KTsKICAgICByZXF1ZXN0LnNldElu
aXRpYXRvcihjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuaWNvbik7CiAKICAgICBt
X3Jlc291cmNlID0gbV9mcmFtZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnJl
cXVlc3RSYXdSZXNvdXJjZShyZXF1ZXN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9XZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0JKHJldmlzaW9uIDE4MzQ2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNv
cmVBVkZSZXNvdXJjZUxvYWRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2
b2lkIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlcjo6c3RhcnRMb2FkCiAKICAgICBDYWNoZWRSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QocmVxdWVzdFVSTCksIFJlc291cmNl
TG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgQnVmZmVyRGF0
YSwgRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBEb05vdEFza0NsaWVudEZvckNyb3NzT3Jp
Z2luQ3JlZGVudGlhbHMsIERvU2VjdXJpdHlDaGVjaywgVXNlRGVmYXVsdE9yaWdpblJlc3RyaWN0
aW9uc0ZvclR5cGUsIERvTm90SW5jbHVkZUNlcnRpZmljYXRlSW5mbykpOwogCi0gICAgcmVxdWVz
dC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkuc2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3Jp
dHlMb3cpOworICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldFByaW9yaXR5
KFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBs
b2FkZXIgPSBtX3BhcmVudC0+cGxheWVyKCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAgICAg
bV9yZXNvdXJjZSA9IGxvYWRlciA/IGxvYWRlci0+cmVxdWVzdFJhd1Jlc291cmNlKHJlcXVlc3Qp
IDogMDsKICAgICBpZiAobV9yZXNvdXJjZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VMb2FkUHJpb3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5LmgJKHJldmlzaW9uIDE4
MzQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJp
b3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTYgKzI4LDI4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotZW51bSBSZXNvdXJjZUxvYWRQcmlvcml0eSB7Ci0gICAgUmVzb3VyY2VMb2Fk
UHJpb3JpdHlWZXJ5TG93LAotICAgIFJlc291cmNlTG9hZFByaW9yaXR5TG93LAotICAgIFJlc291
cmNlTG9hZFByaW9yaXR5TWVkaXVtLAotICAgIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaCwKLSAg
ICBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlIaWdoLAotICAgIFJlc291cmNlTG9hZFByaW9yaXR5
TG93ZXN0ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93LAotICAgIFJlc291cmNlTG9hZFBy
aW9yaXR5SGlnaGVzdCA9IFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2gsCitlbnVtIGNsYXNz
IFJlc291cmNlTG9hZFByaW9yaXR5IHsKKyAgICBWZXJ5TG93LAorICAgIExvdywKKyAgICBNZWRp
dW0sCisgICAgSGlnaCwKKyAgICBWZXJ5SGlnaCwKKyAgICBMb3dlc3QgPSBWZXJ5TG93LAorICAg
IEhpZ2hlc3QgPSBWZXJ5SGlnaCwKIH07CiAKK2lubGluZSBSZXNvdXJjZUxvYWRQcmlvcml0eSBv
cGVyYXRvcisrKFJlc291cmNlTG9hZFByaW9yaXR5JiBwcmlvcml0eSkKK3sKKyAgICBBU1NFUlQo
cHJpb3JpdHkgIT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2hlc3QpOworICAgIHJldHVybiBw
cmlvcml0eSA9IHN0YXRpY19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihzdGF0aWNfY2FzdDxp
bnQ+KHByaW9yaXR5KSArIDEpOworfQorCitpbmxpbmUgUmVzb3VyY2VMb2FkUHJpb3JpdHkgb3Bl
cmF0b3ItLShSZXNvdXJjZUxvYWRQcmlvcml0eSYgcHJpb3JpdHkpCit7CisgICAgQVNTRVJUKHBy
aW9yaXR5ICE9IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3dlc3QpOworICAgIHJldHVybiBwcmlv
cml0eSA9IHN0YXRpY19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihzdGF0aWNfY2FzdDxpbnQ+
KHByaW9yaXR5KSAtIDEpOworfQorCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCShy
ZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwzMiArNTEsMzIgQEAgaW5s
aW5lIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgUmVzb3VyY2VSZQogc3RkOjp1bmlxdWVfcHRyPFJl
c291cmNlUmVxdWVzdD4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRvcHQoc3RkOjp1bmlxdWVfcHRy
PENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gZGF0YSkKIHsKICAgICBhdXRvIHJlcXVl
c3QgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlUmVxdWVzdD4oKTsKLSAgICByZXF1ZXN0LT5z
ZXRVUkwoZGF0YS0+bV91cmwpOwotICAgIHJlcXVlc3QtPnNldENhY2hlUG9saWN5KGRhdGEtPm1f
Y2FjaGVQb2xpY3kpOwotICAgIHJlcXVlc3QtPnNldFRpbWVvdXRJbnRlcnZhbChkYXRhLT5tX3Rp
bWVvdXRJbnRlcnZhbCk7Ci0gICAgcmVxdWVzdC0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZGF0
YS0+bV9maXJzdFBhcnR5Rm9yQ29va2llcyk7Ci0gICAgcmVxdWVzdC0+c2V0SFRUUE1ldGhvZChk
YXRhLT5tX2h0dHBNZXRob2QpOwotICAgIHJlcXVlc3QtPnNldFByaW9yaXR5KGRhdGEtPm1fcHJp
b3JpdHkpOwotICAgIHJlcXVlc3QtPnNldFJlcXVlc3RlcihkYXRhLT5tX3JlcXVlc3Rlcik7Cisg
ICAgcmVxdWVzdC0+c2V0VVJMKGRhdGEtPnVybCk7CisgICAgcmVxdWVzdC0+c2V0Q2FjaGVQb2xp
Y3koZGF0YS0+Y2FjaGVQb2xpY3kpOworICAgIHJlcXVlc3QtPnNldFRpbWVvdXRJbnRlcnZhbChk
YXRhLT50aW1lb3V0SW50ZXJ2YWwpOworICAgIHJlcXVlc3QtPnNldEZpcnN0UGFydHlGb3JDb29r
aWVzKGRhdGEtPmZpcnN0UGFydHlGb3JDb29raWVzKTsKKyAgICByZXF1ZXN0LT5zZXRIVFRQTWV0
aG9kKGRhdGEtPmh0dHBNZXRob2QpOworICAgIHJlcXVlc3QtPnNldFByaW9yaXR5KGRhdGEtPnBy
aW9yaXR5KTsKKyAgICByZXF1ZXN0LT5zZXRSZXF1ZXN0ZXIoZGF0YS0+cmVxdWVzdGVyKTsKIAog
ICAgIHJlcXVlc3QtPnVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwotICAgIHJlcXVlc3QtPm1faHR0
cEhlYWRlckZpZWxkcy5hZG9wdChXVEY6Om1vdmUoZGF0YS0+bV9odHRwSGVhZGVycykpOworICAg
IHJlcXVlc3QtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChXVEY6Om1vdmUoZGF0YS0+aHR0cEhl
YWRlcnMpKTsKIAotICAgIHNpemVfdCBlbmNvZGluZ0NvdW50ID0gZGF0YS0+bV9yZXNwb25zZUNv
bnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7CisgICAgc2l6ZV90
IGVuY29kaW5nQ291bnQgPSBkYXRhLT5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5n
RmFsbGJhY2tBcnJheS5zaXplKCk7CiAgICAgaWYgKGVuY29kaW5nQ291bnQgPiAwKSB7Ci0gICAg
ICAgIFN0cmluZyBlbmNvZGluZzEgPSBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9u
RW5jb2RpbmdGYWxsYmFja0FycmF5WzBdOworICAgICAgICBTdHJpbmcgZW5jb2RpbmcxID0gZGF0
YS0+cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF07CiAg
ICAgICAgIFN0cmluZyBlbmNvZGluZzI7CiAgICAgICAgIFN0cmluZyBlbmNvZGluZzM7CiAgICAg
ICAgIGlmIChlbmNvZGluZ0NvdW50ID4gMSkgewotICAgICAgICAgICAgZW5jb2RpbmcyID0gZGF0
YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsxXTsK
KyAgICAgICAgICAgIGVuY29kaW5nMiA9IGRhdGEtPnJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9u
RW5jb2RpbmdGYWxsYmFja0FycmF5WzFdOwogICAgICAgICAgICAgaWYgKGVuY29kaW5nQ291bnQg
PiAyKQotICAgICAgICAgICAgICAgIGVuY29kaW5nMyA9IGRhdGEtPm1fcmVzcG9uc2VDb250ZW50
RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMl07CisgICAgICAgICAgICAgICAgZW5j
b2RpbmczID0gZGF0YS0+cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXlbMl07CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGVuY29kaW5nQ291bnQgPD0gMyk7
CiAgICAgICAgIHJlcXVlc3QtPnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdG
YWxsYmFja0FycmF5KGVuY29kaW5nMSwgZW5jb2RpbmcyLCBlbmNvZGluZzMpOwogICAgIH0KLSAg
ICByZXF1ZXN0LT5zZXRIVFRQQm9keShkYXRhLT5tX2h0dHBCb2R5KTsKLSAgICByZXF1ZXN0LT5z
ZXRBbGxvd0Nvb2tpZXMoZGF0YS0+bV9hbGxvd0Nvb2tpZXMpOworICAgIHJlcXVlc3QtPnNldEhU
VFBCb2R5KGRhdGEtPmh0dHBCb2R5KTsKKyAgICByZXF1ZXN0LT5zZXRBbGxvd0Nvb2tpZXMoZGF0
YS0+YWxsb3dDb29raWVzKTsKICAgICByZXF1ZXN0LT5kb1BsYXRmb3JtQWRvcHQoV1RGOjptb3Zl
KGRhdGEpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KQEAgLTg0LDIzICs4NCwyMyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8UmVzb3VyY2VSZXF1ZXN0PiBSZXNvdXJjCiBzdGQ6OnVuaXF1ZV9wdHI8Q3Jv
c3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0
YSgpIGNvbnN0CiB7CiAgICAgYXV0byBkYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxDcm9zc1RocmVh
ZFJlc291cmNlUmVxdWVzdERhdGE+KCk7Ci0gICAgZGF0YS0+bV91cmwgPSB1cmwoKS5jb3B5KCk7
Ci0gICAgZGF0YS0+bV9jYWNoZVBvbGljeSA9IGNhY2hlUG9saWN5KCk7Ci0gICAgZGF0YS0+bV90
aW1lb3V0SW50ZXJ2YWwgPSB0aW1lb3V0SW50ZXJ2YWwoKTsKLSAgICBkYXRhLT5tX2ZpcnN0UGFy
dHlGb3JDb29raWVzID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jb3B5KCk7Ci0gICAgZGF0YS0+
bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgpLmlzb2xhdGVkQ29weSgpOwotICAgIGRhdGEtPm1f
aHR0cEhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCkuY29weURhdGEoKTsKLSAgICBkYXRhLT5t
X3ByaW9yaXR5ID0gcHJpb3JpdHkoKTsKLSAgICBkYXRhLT5tX3JlcXVlc3RlciA9IG1fcmVxdWVz
dGVyOworICAgIGRhdGEtPnVybCA9IHVybCgpLmNvcHkoKTsKKyAgICBkYXRhLT5jYWNoZVBvbGlj
eSA9IG1fY2FjaGVQb2xpY3k7CisgICAgZGF0YS0+dGltZW91dEludGVydmFsID0gdGltZW91dElu
dGVydmFsKCk7CisgICAgZGF0YS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMgPSBmaXJzdFBhcnR5Rm9y
Q29va2llcygpLmNvcHkoKTsKKyAgICBkYXRhLT5odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgpLmlz
b2xhdGVkQ29weSgpOworICAgIGRhdGEtPmh0dHBIZWFkZXJzID0gaHR0cEhlYWRlckZpZWxkcygp
LmNvcHlEYXRhKCk7CisgICAgZGF0YS0+cHJpb3JpdHkgPSBtX3ByaW9yaXR5OworICAgIGRhdGEt
PnJlcXVlc3RlciA9IG1fcmVxdWVzdGVyOwogCi0gICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpKTsK
KyAgICBkYXRhLT5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJh
eS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNv
ZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpKTsKICAgICBzaXplX3QgZW5jb2RpbmdBcnJheVNpemUg
PSBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUo
KTsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZW5jb2RpbmdBcnJheVNpemU7
ICsraW5kZXgpIHsKLSAgICAgICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheS5hcHBlbmQobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheVtpbmRleF0uaXNvbGF0ZWRDb3B5KCkpOworICAgICAgICBkYXRh
LT5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5hcHBlbmQo
bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVtpbmRleF0u
aXNvbGF0ZWRDb3B5KCkpOwogICAgIH0KICAgICBpZiAobV9odHRwQm9keSkKLSAgICAgICAgZGF0
YS0+bV9odHRwQm9keSA9IG1faHR0cEJvZHktPmRlZXBDb3B5KCk7Ci0gICAgZGF0YS0+bV9hbGxv
d0Nvb2tpZXMgPSBtX2FsbG93Q29va2llczsKKyAgICAgICAgZGF0YS0+aHR0cEJvZHkgPSBtX2h0
dHBCb2R5LT5kZWVwQ29weSgpOworICAgIGRhdGEtPmFsbG93Q29va2llcyA9IG1fYWxsb3dDb29r
aWVzOwogICAgIHJldHVybiBhc1Jlc291cmNlUmVxdWVzdCgpLmRvUGxhdGZvcm1Db3B5RGF0YShX
VEY6Om1vdmUoZGF0YSkpOwogfQogCkBAIC0xNTEsNyArMTUxLDcgQEAgUmVzb3VyY2VSZXF1ZXN0
Q2FjaGVQb2xpY3kgUmVzb3VyY2VSZXF1ZQogewogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgp
OyAKICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xp
Y3k+KG1fY2FjaGVQb2xpY3kpOworICAgIHJldHVybiBtX2NhY2hlUG9saWN5OwogfQogCiB2b2lk
IFJlc291cmNlUmVxdWVzdEJhc2U6OnNldENhY2hlUG9saWN5KFJlc291cmNlUmVxdWVzdENhY2hl
UG9saWN5IGNhY2hlUG9saWN5KQpAQCAtNDM4LDcgKzQzOCw3IEBAIFJlc291cmNlTG9hZFByaW9y
aXR5IFJlc291cmNlUmVxdWVzdEJhc2UKIHsKICAgICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsK
IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRQcmlvcml0eT4obV9wcmlvcml0
eSk7CisgICAgcmV0dXJuIG1fcHJpb3JpdHk7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6c2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCkBAIC00NDksNyAr
NDQ5LDYgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRQcmlvcml0eShSZQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX3ByaW9yaXR5ID0gcHJpb3JpdHk7Ci0gICAgQVNTRVJUKHN0YXRp
Y19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihtX3ByaW9yaXR5KSA9PSBwcmlvcml0eSk7IC8v
IE1ha2Ugc3VyZSBpdCBmaXRzIGluIHRoZSBiaXRmaWVsZC4KIAogICAgIGlmICh1cmwoKS5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9
IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
cXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzAsMTUgKzE3MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIC8vIFVzZWQgd2hlbiBSZXNvdXJjZVJlcXVlc3QgaXMgaW5pdGlhbGl6ZWQgZnJv
bSBhIHBsYXRmb3JtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXF1ZXN0CiAgICAgICAgIFJlc291
cmNlUmVxdWVzdEJhc2UoKQotICAgICAgICAgICAgOiBtX3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQo
ZmFsc2UpCi0gICAgICAgICAgICAsIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCh0cnVlKQotICAg
ICAgICAgICAgLCBtX3Jlc291cmNlUmVxdWVzdEJvZHlVcGRhdGVkKGZhbHNlKQorICAgICAgICAg
ICAgOiBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQodHJ1ZSkKICAgICAgICAgICAgICwgbV9wbGF0
Zm9ybVJlcXVlc3RCb2R5VXBkYXRlZCh0cnVlKQotICAgICAgICAgICAgLCBtX3JlcG9ydFVwbG9h
ZFByb2dyZXNzKGZhbHNlKQotICAgICAgICAgICAgLCBtX3JlcG9ydExvYWRUaW1pbmcoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1fcmVwb3J0UmF3SGVhZGVycyhmYWxzZSkKLSAgICAgICAgICAgICwg
bV9oaWRkZW5Gcm9tSW5zcGVjdG9yKGZhbHNlKQotICAgICAgICAgICAgLCBtX3ByaW9yaXR5KFJl
c291cmNlTG9hZFByaW9yaXR5TG93KQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTkzLDE0
ICsxODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fYWxsb3dDb29r
aWVzKFJlc291cmNlUmVxdWVzdEJhc2U6OmRlZmF1bHRBbGxvd0Nvb2tpZXMoKSkKICNlbmRpZgog
ICAgICAgICAgICAgLCBtX3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQodHJ1ZSkKLSAgICAgICAgICAg
ICwgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX3Jlc291
cmNlUmVxdWVzdEJvZHlVcGRhdGVkKHRydWUpCi0gICAgICAgICAgICAsIG1fcGxhdGZvcm1SZXF1
ZXN0Qm9keVVwZGF0ZWQoZmFsc2UpCi0gICAgICAgICAgICAsIG1fcmVwb3J0VXBsb2FkUHJvZ3Jl
c3MoZmFsc2UpCi0gICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKLSAgICAg
ICAgICAgICwgbV9yZXBvcnRSYXdIZWFkZXJzKGZhbHNlKQotICAgICAgICAgICAgLCBtX2hpZGRl
bkZyb21JbnNwZWN0b3IoZmFsc2UpCi0gICAgICAgICAgICAsIG1fcHJpb3JpdHkoUmVzb3VyY2VM
b2FkUHJpb3JpdHlMb3cpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0yMTcsMTcgKzIwMywx
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXAgbV9odHRwSGVh
ZGVyRmllbGRzOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3Jlc3BvbnNlQ29udGVudERpc3Bv
c2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5OwogICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IG1f
aHR0cEJvZHk7Ci0gICAgICAgIHVuc2lnbmVkIG1fY2FjaGVQb2xpY3kgOiAzOwotICAgICAgICB1
bnNpZ25lZCBtX2FsbG93Q29va2llcyA6IDE7Ci0gICAgICAgIG11dGFibGUgdW5zaWduZWQgbV9y
ZXNvdXJjZVJlcXVlc3RVcGRhdGVkIDogMTsKLSAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3Bs
YXRmb3JtUmVxdWVzdFVwZGF0ZWQgOiAxOwotICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fcmVz
b3VyY2VSZXF1ZXN0Qm9keVVwZGF0ZWQgOiAxOwotICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1f
cGxhdGZvcm1SZXF1ZXN0Qm9keVVwZGF0ZWQgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX3JlcG9y
dFVwbG9hZFByb2dyZXNzIDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9yZXBvcnRMb2FkVGltaW5n
IDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9yZXBvcnRSYXdIZWFkZXJzIDogMTsKLSAgICAgICAg
dW5zaWduZWQgbV9oaWRkZW5Gcm9tSW5zcGVjdG9yIDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9w
cmlvcml0eSA6IDQ7CisgICAgICAgIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IG1fY2FjaGVQ
b2xpY3kgeyBVc2VQcm90b2NvbENhY2hlUG9saWN5IH07CisgICAgICAgIGJvb2wgbV9hbGxvd0Nv
b2tpZXMgeyBmYWxzZSB9OworICAgICAgICBtdXRhYmxlIGJvb2wgbV9yZXNvdXJjZVJlcXVlc3RV
cGRhdGVkIHsgZmFsc2UgfTsKKyAgICAgICAgbXV0YWJsZSBib29sIG1fcGxhdGZvcm1SZXF1ZXN0
VXBkYXRlZCB7IGZhbHNlIH07CisgICAgICAgIG11dGFibGUgYm9vbCBtX3Jlc291cmNlUmVxdWVz
dEJvZHlVcGRhdGVkIHsgZmFsc2UgfTsKKyAgICAgICAgbXV0YWJsZSBib29sIG1fcGxhdGZvcm1S
ZXF1ZXN0Qm9keVVwZGF0ZWQgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fcmVwb3J0VXBsb2Fk
UHJvZ3Jlc3MgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fcmVwb3J0TG9hZFRpbWluZyB7IGZh
bHNlIH07CisgICAgICAgIGJvb2wgbV9yZXBvcnRSYXdIZWFkZXJzIHsgZmFsc2UgfTsKKyAgICAg
ICAgYm9vbCBtX2hpZGRlbkZyb21JbnNwZWN0b3IgeyBmYWxzZSB9OworICAgICAgICBSZXNvdXJj
ZUxvYWRQcmlvcml0eSBtX3ByaW9yaXR5IHsgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB9Owog
ICAgICAgICBSZXF1ZXN0ZXIgbV9yZXF1ZXN0ZXIgeyBSZXF1ZXN0ZXI6OlVuc3BlY2lmaWVkIH07
CiAKICAgICBwcml2YXRlOgpAQCAtMjQ1LDIyICsyMzEsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oUmVzb3VyY2VSZXF1ZXN0JiBhLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQogCiAgICAgc3RydWN0IENy
b3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YUJhc2UgewotICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGFCYXNlKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBDcm9zc1RocmVhZFJlc291cmNlUmVx
dWVzdERhdGFCYXNlKCkgeyB9Ci0gICAgICAgIFVSTCBtX3VybDsKLQotICAgICAgICBSZXNvdXJj
ZVJlcXVlc3RDYWNoZVBvbGljeSBtX2NhY2hlUG9saWN5OwotICAgICAgICBkb3VibGUgbV90aW1l
b3V0SW50ZXJ2YWw7Ci0gICAgICAgIFVSTCBtX2ZpcnN0UGFydHlGb3JDb29raWVzOwotCi0gICAg
ICAgIFN0cmluZyBtX2h0dHBNZXRob2Q7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1Ro
cmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBtX2h0dHBIZWFkZXJzOwotICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5Owot
ICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IG1faHR0cEJvZHk7Ci0gICAgICAgIGJvb2wgbV9hbGxv
d0Nvb2tpZXM7Ci0gICAgICAgIFJlc291cmNlTG9hZFByaW9yaXR5IG1fcHJpb3JpdHk7Ci0gICAg
ICAgIFJlc291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3RlciBtX3JlcXVlc3RlcjsKKyAgICAgICAg
VVJMIHVybDsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3k7
CisgICAgICAgIGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWw7CisgICAgICAgIFVSTCBmaXJzdFBhcnR5
Rm9yQ29va2llczsKKyAgICAgICAgU3RyaW5nIGh0dHBNZXRob2Q7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBodHRwSGVhZGVyczsKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXk7CisgICAgICAgIFJlZlB0cjxGb3JtRGF0YT4gaHR0cEJvZHk7CisgICAgICAgIGJv
b2wgYWxsb3dDb29raWVzOworICAgICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eTsK
KyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKICAgICB9
OwogICAgIAogICAgIHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3Vu
dFBlckhvc3QoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCShyZXZpc2lvbiAxODM0Njcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENG
TmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDEwICszOTksMTAgQEAgdW5zaWduZWQgaW5p
dGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbgogICAgIGlmICghUmVzb3VyY2VSZXF1ZXN0Ojpy
ZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBtYXhpbXVtSFRUUENv
bm5lY3Rpb25Db3VudFBlckhvc3Q7CiAKLSAgICB3a1NldEhUVFBSZXF1ZXN0TWF4aW11bVByaW9y
aXR5KHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0
KSk7CisgICAgd2tTZXRIVFRQUmVxdWVzdE1heGltdW1Qcmlvcml0eSh0b1BsYXRmb3JtUmVxdWVz
dFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoZXN0KSk7CiAjaWYgIVBMQVRGT1JN
KFdJTikKICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzkzNzU2MDk+IEltcGxlbWVudCBt
aW5pbXVtIGZhc3QgbGFuZSBwcmlvcml0eSBzZXR0aW5nIG9uIFdpbmRvd3MKLSAgICB3a1NldEhU
VFBSZXF1ZXN0TWluaW11bUZhc3RMYW5lUHJpb3JpdHkodG9QbGF0Zm9ybVJlcXVlc3RQcmlvcml0
eShSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bSkpOworICAgIHdrU2V0SFRUUFJlcXVlc3RNaW5p
bXVtRmFzdExhbmVQcmlvcml0eSh0b1BsYXRmb3JtUmVxdWVzdFByaW9yaXR5KFJlc291cmNlTG9h
ZFByaW9yaXR5OjpNZWRpdW0pKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIHVubGltaXRlZFJlcXVl
c3RDb3VudDsKQEAgLTQxOCw4ICs0MTgsOCBAQCB2b2lkIGluaXRpYWxpemVIVFRQQ29ubmVjdGlv
blNldHRpbmdzT25TCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHByZWZlcnJlZENvbm5lY3Rp
b25Db3VudCA9IDY7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZhc3RMYW5lQ29ubmVjdGlv
bkNvdW50ID0gMTsKICAgICB3a0luaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBl
ckhvc3QocHJlZmVycmVkQ29ubmVjdGlvbkNvdW50KTsKLSAgICB3a1NldEhUVFBSZXF1ZXN0TWF4
aW11bVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdCk7Ci0gICAgd2tTZXRIVFRQ
UmVxdWVzdE1pbmltdW1GYXN0TGFuZVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVt
KTsKKyAgICB3a1NldEhUVFBSZXF1ZXN0TWF4aW11bVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9y
aXR5OjpIaWdoZXN0KTsKKyAgICB3a1NldEhUVFBSZXF1ZXN0TWluaW11bUZhc3RMYW5lUHJpb3Jp
dHkoUmVzb3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bSk7CiAgICAgX0NGTmV0d29ya0hUVFBDb25u
ZWN0aW9uQ2FjaGVTZXRMaW1pdChrSFRUUE51bUZhc3RMYW5lcywgZmFzdExhbmVDb25uZWN0aW9u
Q291bnQpOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5oCShyZXZpc2lvbiAxODM0
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVz
dENGTmV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDMzICs0NiwzMyBAQCBpbmxpbmUgUmVzb3Vy
Y2VMb2FkUHJpb3JpdHkgdG9SZXNvdXJjZUxvCiAgICAgc3dpdGNoIChwcmlvcml0eSkgewogICAg
IGNhc2UgLTE6CiAgICAgY2FzZSAwOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlWZXJ5TG93OworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c7
CiAgICAgY2FzZSAxOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3c7Cisg
ICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OwogICAgIGNhc2UgMjoKLSAg
ICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtOworICAgICAgICByZXR1cm4g
UmVzb3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bTsKICAgICBjYXNlIDM6Ci0gICAgICAgIHJldHVy
biBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2g7CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQ
cmlvcml0eTo6SGlnaDsKICAgICBjYXNlIDQ6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQ
cmlvcml0eVZlcnlIaWdoOworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZl
cnlIaWdoOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3dlc3Q7CisgICAgICAgIHJldHVybiBS
ZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93ZXN0OwogICAgIH0KIH0KIAogaW5saW5lIGludCB0b1Bs
YXRmb3JtUmVxdWVzdFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQogewog
ICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5VmVy
eUxvdzoKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93OgogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5TG93OgorICAgIGNhc2UgUmVz
b3VyY2VMb2FkUHJpb3JpdHk6OkxvdzoKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBSZXNv
dXJjZUxvYWRQcmlvcml0eU1lZGl1bToKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpN
ZWRpdW06CiAgICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHlI
aWdoOgorICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2g6CiAgICAgICAgIHJldHVy
biAzOwotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaDoKKyAgICBjYXNlIFJl
c291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDoKICAgICAgICAgcmV0dXJuIDQ7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1
ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMSwxNSArMTMxLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGlubGluZSBTb3VwTWVzc2Fn
ZVByaW9yaXR5IHRvU291cE1lc3NhZ2VQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlv
cml0eSkKIHsKICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7Ci0gICAgY2FzZSBSZXNvdXJjZUxvYWRQ
cmlvcml0eVZlcnlMb3c6CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdzoK
ICAgICAgICAgcmV0dXJuIFNPVVBfTUVTU0FHRV9QUklPUklUWV9WRVJZX0xPVzsKLSAgICBjYXNl
IFJlc291cmNlTG9hZFByaW9yaXR5TG93OgorICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OkxvdzoKICAgICAgICAgcmV0dXJuIFNPVVBfTUVTU0FHRV9QUklPUklUWV9MT1c7Ci0gICAgY2Fz
ZSBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bToKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9y
aXR5OjpNZWRpdW06CiAgICAgICAgIHJldHVybiBTT1VQX01FU1NBR0VfUFJJT1JJVFlfTk9STUFM
OwotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoOgorICAgIGNhc2UgUmVzb3VyY2VM
b2FkUHJpb3JpdHk6OkhpZ2g6CiAgICAgICAgIHJldHVybiBTT1VQX01FU1NBR0VfUFJJT1JJVFlf
SElHSDsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g6CisgICAgY2FzZSBS
ZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2g6CiAgICAgICAgIHJldHVybiBTT1VQX01FU1NB
R0VfUFJJT1JJVFlfVkVSWV9ISUdIOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjEsMTcgKzQ2MSwxNyBAQCB2b2lk
IEludGVybmFsczo6c2V0T3ZlcnJpZGVDYWNoZVBvbGljeShjCiBzdGF0aWMgUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgc3RyaW5nVG9SZXNvdXJjZUxvYWRQcmlvcml0eShjb25zdCBTdHJpbmcmIHBvbGlj
eSkKIHsKICAgICBpZiAocG9saWN5ID09ICJSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3ciKQot
ICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93OworICAgICAgICByZXR1
cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c7CiAgICAgaWYgKHBvbGljeSA9PSAiUmVz
b3VyY2VMb2FkUHJpb3JpdHlMb3ciKQotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlMb3c7CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OwogICAgIGlm
IChwb2xpY3kgPT0gIlJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtIikKLSAgICAgICAgcmV0dXJu
IFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtOworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6Ok1lZGl1bTsKICAgICBpZiAocG9saWN5ID09ICJSZXNvdXJjZUxvYWRQcmlvcml0
eUhpZ2giKQotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoOworICAgICAg
ICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2g7CiAgICAgaWYgKHBvbGljeSA9PSAi
UmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaCIpCi0gICAgICAgIHJldHVybiBSZXNvdXJjZUxv
YWRQcmlvcml0eVZlcnlIaWdoOworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OlZlcnlIaWdoOwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBSZXNvdXJj
ZUxvYWRQcmlvcml0eUxvdzsKKyAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsK
IH0KIAogdm9pZCBJbnRlcm5hbHM6OnNldE92ZXJyaWRlUmVzb3VyY2VMb2FkUHJpb3JpdHkoY29u
c3QgU3RyaW5nJiBwcmlvcml0eSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzUzMSkKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE1LTA0LTI4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXNvdXJjZUxvYWRQcmlvcml0eSBzaG91bGQgYmUgZW51bSBjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzI2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisK
KyAgICAgICAgICAgIFJlbW92ZSB0aGlzIHVudXNlZCBtZXNzYWdlLgorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om1ha2VTdG9yZURlY2lzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6cmV0cmlldmUpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1tOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrU2V0dGluZ3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdv
cmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6CisKIDIwMTUtMDQtMjggIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIE5ldHdvcmsgQ2FjaGU6
IERvIG5vdCBjcmVhdGUgYSBTaGFyZWRCdWZmZXIgZm9yIG1hcHBlZCByZXNvdXJjZXMgdW5sZXNz
IGV4cGxpY2l0bHkgcmVxdWVzdGVkCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
CShyZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw5ICsx
NTEsNiBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRECiAgICAgbG9h
ZGVyLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7CiB9CiAKLXZvaWQgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKHVpbnQzMl90KQotewotfQogCiB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgJKHJldmlz
aW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlbW92ZUxvYWRJZGVudGlmaWVyKFJlc291cmNlTG9hZElkZW50aWZp
ZXIpOwogICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBi
b29sKTsKICAgICB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRJ
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpVUkwmIHJlZGlyZWN0VVJMKTsKLSAgICB2b2lkIHNl
cnZlUGVuZGluZ1JlcXVlc3RzKHVpbnQzMl90IHJlc291cmNlTG9hZFByaW9yaXR5KTsKICAgICB2
b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wpOwogICAgIHZvaWQgc3RhcnREb3dubG9h
ZChXZWJDb3JlOjpTZXNzaW9uSUQsIHVpbnQ2NF90IGRvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYpOwogICAgIHZvaWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rv
d25sb2FkKHVpbnQ2NF90IG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyLCB1aW50NjRfdCBkb3du
bG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTI4LDkgKzI4LDcgQEAgbWVzc2FnZXMgLT4gTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2NlcwogICAgIFBlcmZvcm1TeW5jaHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwg
VmVjdG9yPGNoYXI+IGRhdGEpIERlbGF5ZWQKICAgICBSZW1vdmVMb2FkSWRlbnRpZmllcih1aW50
NjRfdCByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQogICAgIFNldERlZmVyc0xvYWRpbmcodWludDY0
X3QgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgYm9vbCBkZWZlcnMpCi0gICAgCi0gICAgU2VydmVQ
ZW5kaW5nUmVxdWVzdHModWludDMyX3QgcmVzb3VyY2VMb2FkUHJpb3JpdHkpCi0gICAgCisgICAg
ICAgIAogICAgIFNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgLT4gKCkKIAog
ICAgIFN0YXJ0RG93bmxvYWQoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3Qg
ZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5j
cHAJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCw3ICszMDAsNyBAQCBz
dGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNpc2lvbihjCiAgICAgfQogCiAgICAgYm9v
bCBpc01haW5SZXNvdXJjZSA9IG9yaWdpbmFsUmVxdWVzdC5yZXF1ZXN0ZXIoKSA9PSBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKLSAgICBib29sIHN0b3JlVW5jb25k
aXRpb25hbGx5Rm9ySGlzdG9yeU5hdmlnYXRpb24gPSBpc01haW5SZXNvdXJjZSB8fCBvcmlnaW5h
bFJlcXVlc3QucHJpb3JpdHkoKSA9PSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlI
aWdoOworICAgIGJvb2wgc3RvcmVVbmNvbmRpdGlvbmFsbHlGb3JIaXN0b3J5TmF2aWdhdGlvbiA9
IGlzTWFpblJlc291cmNlIHx8IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpID09IFdlYkNvcmU6
OlJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDsKICAgICBpZiAoIXN0b3JlVW5jb25kaXRp
b25hbGx5Rm9ySGlzdG9yeU5hdmlnYXRpb24pIHsKICAgICAgICAgYXV0byBub3cgPSBzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKICAgICAgICAgYm9vbCBoYXNOb25aZXJvTGlmZXRp
bWUgPSAhcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgJiYgV2ViQ29yZTo6
Y29tcHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9ySFRUUEZhbWlseShyZXNwb25zZSwgbm93KSA+IDBf
bXM7CkBAIC0zNDIsNyArMzQyLDcgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29y
ZTo6UmVzbwogICAgIH0KIAogICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN5c3Rl
bV9jbG9jazo6bm93KCk7Ci0gICAgdW5zaWduZWQgcHJpb3JpdHkgPSBvcmlnaW5hbFJlcXVlc3Qu
cHJpb3JpdHkoKTsKKyAgICBpbnQgcHJpb3JpdHkgPSBzdGF0aWNfY2FzdDxpbnQ+KG9yaWdpbmFs
UmVxdWVzdC5wcmlvcml0eSgpKTsKIAogICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtl
eSwgcHJpb3JpdHksIFt0aGlzLCBvcmlnaW5hbFJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyLCBz
dGFydFRpbWUsIHN0b3JhZ2VLZXksIHdlYlBhZ2VJRF0oc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U6
OlJlY29yZD4gcmVjb3JkKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0
d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbQkocmV2aXNpb24gMTgzNDY3KQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpwbGF0ZgogICAgICAgICBSZXNvdXJjZVJlcXVlc3Q6OnNldEhU
VFBQaXBlbGluaW5nRW5hYmxlZChwcmVmVmFsdWUpOwogCiAgICAgaWYgKFJlc291cmNlUmVxdWVz
dDo6cmVzb3VyY2VQcmlvcml0aWVzRW5hYmxlZCgpKSB7Ci0gICAgICAgIFdLU2V0SFRUUFJlcXVl
c3RNYXhpbXVtUHJpb3JpdHkodG9QbGF0Zm9ybVJlcXVlc3RQcmlvcml0eShSZXNvdXJjZUxvYWRQ
cmlvcml0eUhpZ2hlc3QpKTsKLSAgICAgICAgV0tTZXRIVFRQUmVxdWVzdE1pbmltdW1GYXN0TGFu
ZVByaW9yaXR5KHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlN
ZWRpdW0pKTsKKyAgICAgICAgV0tTZXRIVFRQUmVxdWVzdE1heGltdW1Qcmlvcml0eSh0b1BsYXRm
b3JtUmVxdWVzdFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoZXN0KSk7CisgICAg
ICAgIFdLU2V0SFRUUFJlcXVlc3RNaW5pbXVtRmFzdExhbmVQcmlvcml0eSh0b1BsYXRmb3JtUmVx
dWVzdFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5OjpNZWRpdW0pKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjM3LDcgKzYzNyw2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldENT
U0NvbXBvc2l0aW5nRW4KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlzcGF0Y2hQZW5kaW5nTG9h
ZFJlcXVlc3RzKCkKIHsKLSAgICByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2VydmVQZW5kaW5n
UmVxdWVzdHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0NCwxNiArMjQ0LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNy
b3NzT3JpZwogICAgIC8vIFdlIG92ZXJyaWRlIHRoaXMgY2FsbCBpbiB0aGUgV2ViUHJvY2VzcyB0
byBtYWtlIGl0IGEgbm8tb3AuCiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkp
Cit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVz
b3VyY2VMb2FkUHJpb3JpdHkpCiB7Ci0gICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlBy
b2Nlc3MpIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMiKTsK
LSAgICAKLSAgICAvLyBUaGUgTmV0d29ya1Byb2Nlc3Mgc2NoZWR1bGVyIGlzIGdvb2QgYXQgbWFr
aW5nIHN1cmUgbG9hZHMgYXJlIHNlcnZpY2VkIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHBlbmRp
bmcgcmVxdWVzdHMuCi0gICAgLy8gSWYgdGhpcyBXZWJQcm9jZXNzIGlzbid0IGV4cGVjdGluZyBy
ZXF1ZXN0cyB0byBiZSBzZXJ2ZWQgdGhlbiB3ZSBjYW4gaWdub3JlIG1lc3NhZ2luZyB0aGUgTmV0
d29ya1Byb2Nlc3MgcmlnaHQgbm93LgotICAgIGlmIChtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHND
b3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0
d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6U2VydmVQZW5kaW5nUmVxdWVzdHMobWluaW11bVByaW9yaXR5
KSwgMCk7CiB9CiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE4MzQ2
NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqLCBi
b29sKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2Vp
dmVkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6VVJMJiByZWRpcmVj
dFVSTCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNlcnZlUGVuZGluZ1JlcXVl
c3RzKFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IFdlYkNv
cmU6OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5IG1p
bmltdW1Qcmlvcml0eSkgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRp
bmdSZXF1ZXN0cygpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVQZW5kaW5nUmVx
dWVzdHMoKSBvdmVycmlkZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251939</attachid>
            <date>2015-04-29 02:48:06 -0700</date>
            <delta_ts>2015-04-29 03:56:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>resourceloadpriority-enum-class-4.patch</filename>
            <type>text/plain</type>
            <size>44874</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE1LTA0LTI4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZUxvYWRQcmlvcml0
eSBzaG91bGQgYmUgZW51bSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ0MzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MpOgorICAgICAgICAqIGxvYWRlci9MaW5rTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtMb2FkZXI6OmxvYWRMaW5rKToKKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5m
b3JtYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0
SW5mb3JtYXRpb246OnByaW9yaXR5VG9JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6c2NoZWR1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6
aGFzUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpI
b3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uOjpyZXF1ZXN0c1BlbmRpbmcpOgorCisgICAgICAgICAgICBNb2Rl
cm5pemUgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIGNvZGUgYSBiaXQgd2hpbGUgc3dpdGNoaW5nIHRv
IGVudW0gY2xhc3MuCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKToKKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAg
ICogbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uTG9h
ZGVyOjpzdGFydExvYWRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVBVkZSZXNvdXJjZUxvYWRlcjo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5Lmg6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yLS0pOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZG9wdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3RCYXNlOjpjYWNoZVBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpwcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpz
ZXRQcmlvcml0eSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmg6CisKKyAgICAgICAgICAgIFJlbW92ZSBiaXRmaWVsZHMuIFJlc291cmNlUmVxdWVzdHMg
YXJlIG5vdCBwcmVzZW50IGluIGxhcmdlIGVub3VnaCBudW1iZXJzIHRvIHJlcXVpcmUgdGhpcyBr
aW5kIG9mIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIFVzZSBtb2Rlcm4gaW5pdGlhbGl6YXRp
b24gc3ludGF4LgorCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXNv
dXJjZVJlcXVlc3RCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzVGhyZWFkUmVzb3VyY2VS
ZXF1ZXN0RGF0YUJhc2U6OkNyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YUJhc2UpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNv
dW50UGVySG9zdCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplSFRUUENvbm5lY3Rpb25T
ZXR0aW5nc09uU3RhcnR1cCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZVJlcXVlc3RDRk5ldC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZXNvdXJjZUxvYWRQcmlvcml0
eSk6CisgICAgICAgIChXZWJDb3JlOjp0b1BsYXRmb3JtUmVxdWVzdFByaW9yaXR5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjp0b1NvdXBNZXNzYWdlUHJpb3JpdHkpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJu
YWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmluZ1RvUmVzb3VyY2VMb2FkUHJpb3JpdHkp
OgorCiAyMDE1LTA0LTI4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2UgYSBub24tc3RhdGljIHZlcnNpb24gb2YgRnJhbWVWaWV3Ojp5UG9zaXRp
b25Gb3JSb290Q29udGVudExheWVyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQg
SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKCkKICAgICAgICAgLy8gTG9hZCBzdHlsZXNoZWV0cyB0
aGF0IGFyZSBub3QgbmVlZGVkIGZvciB0aGUgcmVuZGVyaW5nIGltbWVkaWF0ZWx5IHdpdGggbG93
IHByaW9yaXR5LgogICAgICAgICBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4gcHJpb3Jp
dHk7CiAgICAgICAgIGlmICghaXNBY3RpdmUpCi0gICAgICAgICAgICBwcmlvcml0eSA9IFJlc291
cmNlTG9hZFByaW9yaXR5VmVyeUxvdzsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gUmVzb3VyY2VM
b2FkUHJpb3JpdHk6OlZlcnlMb3c7CiAgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1
ZXN0KFJlc291cmNlUmVxdWVzdChkb2N1bWVudCgpLmNvbXBsZXRlVVJMKHVybCkpLCBjaGFyc2V0
LCBwcmlvcml0eSk7CiAgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKHRoaXMpOwogICAgICAg
ICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnJlcXVl
c3RDU1NTdHlsZVNoZWV0KHJlcXVlc3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xp
bmtMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9h
ZGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgYm9vbCBMaW5rTG9h
ZGVyOjpsb2FkTGluayhjb25zdCBMaW5rUmVsQQogICAgICAgICBpZiAocmVsQXR0cmlidXRlLmlz
TGlua1N1YnJlc291cmNlKSB7CiAgICAgICAgICAgICAvLyBXZSBvbmx5IG1ha2Ugb25lIHJlcXVl
c3QgdG8gdGhlIGNhY2hlZCByZXNvdXJjZSBsb2FkZXIgaWYgbXVsdGlwbGUgcmVsIHR5cGVzIGFy
ZSBzcGVjaWZpZWQ7CiAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBoaWdoZXIgcHJpb3JpdHks
IHdoaWNoIHNob3VsZCBvdmVyd3JpdGUgdGhlIGxvd2VyIHByaW9yaXR5LgotICAgICAgICAgICAg
cHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdzsKKyAgICAgICAgICAgIHByaW9yaXR5
ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsKICAgICAgICAgICAgIHR5cGUgPSBDYWNoZWRS
ZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOwogICAgICAgICB9CiAgICAgICAgIENhY2hlZFJlc291
cmNlUmVxdWVzdCBsaW5rUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QoZG9jdW1lbnQuY29tcGxldGVV
UkwoaHJlZikpLCBwcmlvcml0eSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3MSw3ICsxNzEsNyBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2Fk
CiAgICAgaWYgKFJlc291cmNlUmVxdWVzdDo6cmVzb3VyY2VQcmlvcml0aWVzRW5hYmxlZCgpICYm
ICFpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkgewogICAgICAgICAvLyBTZXJ2ZSBhbGwg
cmVxdWVzdHMgYXQgb25jZSB0byBrZWVwIHRoZSBwaXBlbGluZSBmdWxsIGF0IHRoZSBuZXR3b3Jr
IGxheWVyLgogICAgICAgICAvLyBGSVhNRTogRG9lcyB0aGlzIGNvZGUgZG8gYW55dGhpbmcgdXNl
ZnVsLCBnaXZlbiB0aGF0IHdlIGFsc28gc2V0IG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0IHRv
IGVmZmVjdGl2ZWx5IHVubGltaXRlZCBvbiB0aGVzZSBwbGF0Zm9ybXM/Ci0gICAgICAgIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKGhvc3QsIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdyk7CisgICAg
ICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhvc3QsIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5
TG93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMTgzLDcgKzE4Myw3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbHNlCi0gICAgaWYgKHByaW9yaXR5ID4gUmVzb3VyY2VMb2FkUHJpb3JpdHlM
b3cgfHwgIXJlc291cmNlTG9hZGVyLT51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwg
KHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5TG93ICYmICFoYWRSZXF1ZXN0cykpIHsK
KyAgICBpZiAocHJpb3JpdHkgPiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93IHx8ICFyZXNvdXJj
ZUxvYWRlci0+dXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IChwcmlvcml0eSA9PSBS
ZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93ICYmICFoYWRSZXF1ZXN0cykpIHsKICAgICAgICAgLy8g
VHJ5IHRvIHJlcXVlc3QgaW1wb3J0YW50IHJlc291cmNlcyBpbW1lZGlhdGVseS4KICAgICAgICAg
c2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgcHJpb3JpdHkpOwogICAgICAgICByZXR1cm47CkBA
IC0yNTYsMTQgKzI1Niw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRp
bmcKICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhtX25vbkhUVFBQcm90b2NvbEhvc3QsIG1pbmlt
dW1Qcmlvcml0eSk7CiAKICAgICBWZWN0b3I8SG9zdEluZm9ybWF0aW9uKj4gaG9zdHNUb1NlcnZl
OwotICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEhvc3RNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1faG9zdHMuZW5kKCk7Ci0gICAgZm9yIChIb3N0TWFwOjppdGVyYXRvciBpdGVyID0g
bV9ob3N0cy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBob3N0c1RvU2Vy
dmUuYXBwZW5kKGl0ZXItPnZhbHVlKTsKLQotICAgIGludCBzaXplID0gaG9zdHNUb1NlcnZlLnNp
emUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBIb3N0
SW5mb3JtYXRpb24qIGhvc3QgPSBob3N0c1RvU2VydmVbaV07CisgICAgY29weVZhbHVlc1RvVmVj
dG9yKG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7CisKKyAgICBmb3IgKGF1dG8qIGhvc3QgOiBob3N0
c1RvU2VydmUpIHsKICAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCiAgICAgICAgICAg
ICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkpOwogICAgICAgICBl
bHNlCkBAIC0yNzUsOCArMjcwLDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZl
UGVuZGluZwogewogICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzIEhvc3RJbmZvcm1hdGlvbi5tX25hbWU9JyVzJyIsIGhv
c3QtPm5hbWUoKS5sYXRpbjEoKS5kYXRhKCkpOwogCi0gICAgZm9yIChpbnQgcHJpb3JpdHkgPSBS
ZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hlc3Q7IHByaW9yaXR5ID49IG1pbmltdW1Qcmlvcml0eTsg
LS1wcmlvcml0eSkgewotICAgICAgICBIb3N0SW5mb3JtYXRpb246OlJlcXVlc3RRdWV1ZSYgcmVx
dWVzdHNQZW5kaW5nID0gaG9zdC0+cmVxdWVzdHNQZW5kaW5nKFJlc291cmNlTG9hZFByaW9yaXR5
KHByaW9yaXR5KSk7CisgICAgYXV0byBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5OjpI
aWdoZXN0OworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIEhvc3RJbmZvcm1hdGlvbjo6UmVx
dWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcgPSBob3N0LT5yZXF1ZXN0c1BlbmRpbmcocHJpb3Jp
dHkpOwogCiAgICAgICAgIHdoaWxlICghcmVxdWVzdHNQZW5kaW5nLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiByZXNvdXJjZUxvYWRlciA9IHJlcXVlc3Rz
UGVuZGluZy5maXJzdCgpOwpAQCAtMjg2LDcgKzI4Miw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzZXJ2ZVBlbmRpbmcKICAgICAgICAgICAgIC8vIGFuZCB3ZSBkb24ndCBrbm93IGFs
bCBzdHlsZXNoZWV0cyB5ZXQuCiAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByZXNv
dXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKSA/IHJlc291cmNlTG9hZGVyLT5mcmFtZUxvYWRlcigp
LT5mcmFtZSgpLmRvY3VtZW50KCkgOiAwOwogICAgICAgICAgICAgYm9vbCBzaG91bGRMaW1pdFJl
cXVlc3RzID0gIWhvc3QtPm5hbWUoKS5pc051bGwoKSB8fCAoZG9jdW1lbnQgJiYgKGRvY3VtZW50
LT5wYXJzaW5nKCkgfHwgIWRvY3VtZW50LT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkpOwotICAg
ICAgICAgICAgaWYgKHNob3VsZExpbWl0UmVxdWVzdHMgJiYgaG9zdC0+bGltaXRSZXF1ZXN0cyhS
ZXNvdXJjZUxvYWRQcmlvcml0eShwcmlvcml0eSkpKQorICAgICAgICAgICAgaWYgKHNob3VsZExp
bWl0UmVxdWVzdHMgJiYgaG9zdC0+bGltaXRSZXF1ZXN0cyhwcmlvcml0eSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICByZXF1ZXN0c1BlbmRpbmcucmVtb3ZlRmlyc3Qo
KTsKQEAgLTI5OSw2ICsyOTUsOSBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQ
ZW5kaW5nCiAjZW5kaWYKICAgICAgICAgICAgIHJlc291cmNlTG9hZGVyLT5zdGFydCgpOwogICAg
ICAgICB9CisgICAgICAgIGlmIChwcmlvcml0eSA9PSBtaW5pbXVtUHJpb3JpdHkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIC0tcHJpb3JpdHk7CiAgICAgfQogfQogCkBAIC0zMzgsMTQg
KzMzNywzMCBAQCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6CiAKIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjp+SG9zdEluZm9ybWF0aW9uKCkK
IHsKLSAgICBBU1NFUlQobV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIHAgPSAwOyBwIDw9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcCsrKQotICAg
ICAgICBBU1NFUlQobV9yZXF1ZXN0c1BlbmRpbmdbcF0uaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
IWhhc1JlcXVlc3RzKCkpOwogfQotICAgIAorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Okhvc3RJbmZvcm1hdGlvbjo6cHJpb3JpdHlUb0luZGV4KFJlc291cmNlTG9hZFByaW9yaXR5
IHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKKyAgICBjYXNlIFJlc291cmNl
TG9hZFByaW9yaXR5OjpWZXJ5TG93OgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFJlc291
cmNlTG9hZFByaW9yaXR5OjpMb3c6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6Ok1lZGl1bToKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgY2FzZSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2g6CisgICAgICAgIHJldHVybiA0OworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6c2NoZWR1bGUoUmVzb3VyY2VMb2FkZXIq
IHJlc291cmNlTG9hZGVyLCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKLSAgICBt
X3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eV0uYXBwZW5kKHJlc291cmNlTG9hZGVyKTsKKyAgICBt
X3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eVRvSW5kZXgocHJpb3JpdHkpXS5hcHBlbmQocmVzb3Vy
Y2VMb2FkZXIpOwogfQogICAgIAogdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvbjo6YWRkTG9hZEluUHJvZ3Jlc3MoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVy
KQpAQCAtMzU5LDExICszNzQsMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJ
bmZvcm1hdAogICAgIGlmIChtX3JlcXVlc3RzTG9hZGluZy5yZW1vdmUocmVzb3VyY2VMb2FkZXIp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgZm9yIChpbnQgcHJpb3JpdHkgPSBSZXNvdXJj
ZUxvYWRQcmlvcml0eUhpZ2hlc3Q7IHByaW9yaXR5ID49IFJlc291cmNlTG9hZFByaW9yaXR5TG93
ZXN0OyAtLXByaW9yaXR5KSB7ICAKLSAgICAgICAgUmVxdWVzdFF1ZXVlOjppdGVyYXRvciBlbmQg
PSBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eV0uZW5kKCk7Ci0gICAgICAgIGZvciAoUmVxdWVz
dFF1ZXVlOjppdGVyYXRvciBpdCA9IG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5XS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVx
dWVzdHNQZW5kaW5nKSB7CisgICAgICAgIGZvciAoYXV0byBpdCA9IHJlcXVlc3RRdWV1ZS5iZWdp
bigpLCBlbmQgPSByZXF1ZXN0UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgaWYgKCppdCA9PSByZXNvdXJjZUxvYWRlcikgewotICAgICAgICAgICAgICAgIG1fcmVx
dWVzdHNQZW5kaW5nW3ByaW9yaXR5XS5yZW1vdmUoaXQpOworICAgICAgICAgICAgICAgIHJlcXVl
c3RRdWV1ZS5yZW1vdmUoaXQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMzc0LDggKzM4OCw4IEBAIGJvb2wgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpIb3N0SW5mb3JtYXQKIHsKICAgICBpZiAoIW1fcmVxdWVzdHNMb2FkaW5nLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZm9yICh1bnNpZ25lZCBwID0gMDsgcCA8PSBS
ZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hlc3Q7IHArKykgewotICAgICAgICBpZiAoIW1fcmVxdWVz
dHNQZW5kaW5nW3BdLmlzRW1wdHkoKSkKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1f
cmVxdWVzdHNQZW5kaW5nKSB7CisgICAgICAgIGlmICghcmVxdWVzdFF1ZXVlLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
ODMsNyArMzk3LDcgQEAgYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdAog
CiBib29sIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpsaW1pdFJlcXVl
c3RzKFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KSBjb25zdCAKIHsKLSAgICBpZiAocHJp
b3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93ICYmICFtX3JlcXVlc3RzTG9hZGlu
Zy5pc0VtcHR5KCkpCisgICAgaWYgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5OjpW
ZXJ5TG93ICYmICFtX3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIHJldHVybiBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCkgPj0gKHJlc291cmNlTG9h
ZFNjaGVkdWxlcigpLT5pc1NlcmlhbExvYWRpbmdFbmFibGVkKCkgPyAxIDogbV9tYXhSZXF1ZXN0
c0luRmxpZ2h0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgogI2luY2x1ZGUgIlJlc291cmNl
TG9hZFByaW9yaXR5LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxhcnJheT4KICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CkBAIC01Niw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGVmZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBV
UkwmIHJlZGlyZWN0VVJMKTsKICAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5
ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11
bVByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOwogICAgIApAQCAt
OTMsMTcgKzk0LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIH5Ib3N0SW5mb3JtYXRpb24oKTsKICAg
ICAgICAgCiAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQotICAgICAgICB2b2lkIHNjaGVkdWxlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3cpOworICAgICAgICB2b2lkIHNj
aGVkdWxlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBSZXNvdXJjZUxv
YWRQcmlvcml0eTo6VmVyeUxvdyk7CiAgICAgICAgIHZvaWQgYWRkTG9hZEluUHJvZ3Jlc3MoUmVz
b3VyY2VMb2FkZXIqKTsKICAgICAgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIqKTsKICAg
ICAgICAgYm9vbCBoYXNSZXF1ZXN0cygpIGNvbnN0OwogICAgICAgICBib29sIGxpbWl0UmVxdWVz
dHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkpIGNvbnN0OwogCiAgICAgICAgIHR5cGVkZWYgRGVxdWU8
UmVmUHRyPFJlc291cmNlTG9hZGVyPj4gUmVxdWVzdFF1ZXVlOwotICAgICAgICBSZXF1ZXN0UXVl
dWUmIHJlcXVlc3RzUGVuZGluZyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkgeyByZXR1
cm4gbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHldOyB9CisgICAgICAgIFJlcXVlc3RRdWV1ZSYg
cmVxdWVzdHNQZW5kaW5nKFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KSB7IHJldHVybiBt
X3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eVRvSW5kZXgocHJpb3JpdHkpXTsgfQogCi0gICAgcHJp
dmF0ZTogICAgICAgICAgICAgICAgICAgIAotICAgICAgICBSZXF1ZXN0UXVldWUgbV9yZXF1ZXN0
c1BlbmRpbmdbUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0ICsgMV07CisgICAgcHJpdmF0ZToK
KyAgICAgICAgc3RhdGljIHVuc2lnbmVkIHByaW9yaXR5VG9JbmRleChSZXNvdXJjZUxvYWRQcmlv
cml0eSk7CisgICAgICAgIAorICAgICAgICBzdGQ6OmFycmF5PFJlcXVlc3RRdWV1ZSwgc3RhdGlj
X2Nhc3Q8aW50PihSZXNvdXJjZUxvYWRQcmlvcml0eTo6SGlnaGVzdCkgKyAxPiBtX3JlcXVlc3Rz
UGVuZGluZzsKICAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+
IFJlcXVlc3RNYXA7CiAgICAgICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0c0xvYWRpbmc7CiAgICAg
ICAgIGNvbnN0IFN0cmluZyBtX25hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDM3ICs2OCwzNyBAQCBzdGF0aWMgUmVzb3VyY2VMb2FkUHJpb3JpdHkgZGVmYXVsdFByaW9y
CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJl
c291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaDsKKyAg
ICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDsKICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlIaWdoOworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2g7
CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgogI2lmIEVOQUJMRShTVkdfRk9OVFMp
CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgogI2VuZGlmCiAgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgogICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OlJhd1Jlc291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRp
dW07CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOwogICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJj
ZUxvYWRQcmlvcml0eUxvdzsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpM
b3c7CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVT
aGVldDoKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaDsKKyAgICAgICAg
cmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOwogI2VuZGlmCiAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJlc291cmNl
TG9hZFByaW9yaXR5TG93OworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6Okxv
dzsKICNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpM
aW5rUHJlZmV0Y2g6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3c7
CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdzsKICAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJj
ZUxvYWRQcmlvcml0eVZlcnlMb3c7CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0
eTo6VmVyeUxvdzsKICNlbmRpZgogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJlc291cmNl
TG9hZFByaW9yaXR5TG93OworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6Okxv
dzsKICNlbmRpZgogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
UmVzb3VyY2VMb2FkUHJpb3JpdHlMb3c7CisgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5
OjpMb3c7CiB9CiAKIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlYWREZWNvZGVk
RGF0YURlbGV0aW9uSW50ZXJ2YWxGb3JSZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUg
dHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDk2LDcgKzQ5Niw3IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWMK
IHsKICAgICBVUkwgdXJsID0gcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKICAgICAK
LSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RS
ZXNvdXJjZSAnJXMnLCBjaGFyc2V0ICclcycsIHByaW9yaXR5PSVkLCBmb3JQcmVsb2FkPSV1Iiwg
dXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpLmxhdGluMSgpLmRhdGEoKSwgcmVx
dWVzdC5jaGFyc2V0KCkubGF0aW4xKCkuZGF0YSgpLCByZXF1ZXN0LnByaW9yaXR5KCkgPyByZXF1
ZXN0LnByaW9yaXR5KCkudmFsdWUoKSA6IC0xLCByZXF1ZXN0LmZvclByZWxvYWQoKSk7CisgICAg
TE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3Vy
Y2UgJyVzJywgY2hhcnNldCAnJXMnLCBwcmlvcml0eT0lZCwgZm9yUHJlbG9hZD0ldSIsIHVybC5z
dHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKS5sYXRpbjEoKS5kYXRhKCksIHJlcXVlc3Qu
Y2hhcnNldCgpLmxhdGluMSgpLmRhdGEoKSwgcmVxdWVzdC5wcmlvcml0eSgpID8gc3RhdGljX2Nh
c3Q8aW50PihyZXF1ZXN0LnByaW9yaXR5KCkudmFsdWUoKSkgOiAtMSwgcmVxdWVzdC5mb3JQcmVs
b2FkKCkpOwogICAgIAogICAgIC8vIElmIG9ubHkgdGhlIGZyYWdtZW50IGlkZW50aWZpZXJzIGRp
ZmZlciwgaXQgaXMgdGhlIHNhbWUgcmVzb3VyY2UuCiAgICAgdXJsID0gTWVtb3J5Q2FjaGU6OnJl
bW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHVybCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDcgKzYwLDcgQEAgdm9pZCBJY29uTG9hZGVyOjpzdGFydExvYWRpbmcoKQogCiAgICAgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KG1fZnJhbWUubG9hZGVyKCku
aWNvbigpLnVybCgpKSwgUmVzb3VyY2VMb2FkZXJPcHRpb25zKFNlbmRDYWxsYmFja3MsIFNuaWZm
Q29udGVudCwgQnVmZmVyRGF0YSwgRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBEb05vdEFz
a0NsaWVudEZvckFueUNyZWRlbnRpYWxzLCBEb1NlY3VyaXR5Q2hlY2ssIFVzZURlZmF1bHRPcmln
aW5SZXN0cmljdGlvbnNGb3JUeXBlLCBEb05vdEluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8pKTsKIAot
ICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldFByaW9yaXR5KFJlc291cmNl
TG9hZFByaW9yaXR5TG93KTsKKyAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5z
ZXRQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93KTsKICAgICByZXF1ZXN0LnNldElu
aXRpYXRvcihjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuaWNvbik7CiAKICAgICBt
X3Jlc291cmNlID0gbV9mcmFtZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnJl
cXVlc3RSYXdSZXNvdXJjZShyZXF1ZXN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9XZWJDb3JlQVZDRlJlc291cmNlTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vY2YvV2ViQ29yZUFWQ0ZSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE4MzQ2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9XZWJDb3Jl
QVZDRlJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2
b2lkIFdlYkNvcmVBVkNGUmVzb3VyY2VMb2FkZXI6OnN0YXJ0TG9hCiAKICAgICBDYWNoZWRSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QocmVxdWVzdFVSTCksIFJlc291cmNl
TG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgQnVmZmVyRGF0
YSwgRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBEb05vdEFza0NsaWVudEZvckNyb3NzT3Jp
Z2luQ3JlZGVudGlhbHMsIERvU2VjdXJpdHlDaGVjaywgVXNlRGVmYXVsdE9yaWdpblJlc3RyaWN0
aW9uc0ZvclR5cGUsIERvTm90SW5jbHVkZUNlcnRpZmljYXRlSW5mbykpOwogCi0gICAgcmVxdWVz
dC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkuc2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3Jp
dHlMb3cpOworICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldFByaW9yaXR5
KFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBs
b2FkZXIgPSBtX3BhcmVudC0+cGxheWVyKCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAgICAg
bV9yZXNvdXJjZSA9IGxvYWRlciA/IGxvYWRlci0+cmVxdWVzdFJhd1Jlc291cmNlKHJlcXVlc3Qp
IDogMDsKICAgICBpZiAobV9yZXNvdXJjZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9XZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0JKHJldmlzaW9uIDE4MzQ2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNv
cmVBVkZSZXNvdXJjZUxvYWRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2
b2lkIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlcjo6c3RhcnRMb2FkCiAKICAgICBDYWNoZWRSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QocmVxdWVzdFVSTCksIFJlc291cmNl
TG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgQnVmZmVyRGF0
YSwgRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBEb05vdEFza0NsaWVudEZvckNyb3NzT3Jp
Z2luQ3JlZGVudGlhbHMsIERvU2VjdXJpdHlDaGVjaywgVXNlRGVmYXVsdE9yaWdpblJlc3RyaWN0
aW9uc0ZvclR5cGUsIERvTm90SW5jbHVkZUNlcnRpZmljYXRlSW5mbykpOwogCi0gICAgcmVxdWVz
dC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkuc2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3Jp
dHlMb3cpOworICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldFByaW9yaXR5
KFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBs
b2FkZXIgPSBtX3BhcmVudC0+cGxheWVyKCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAgICAg
bV9yZXNvdXJjZSA9IGxvYWRlciA/IGxvYWRlci0+cmVxdWVzdFJhd1Jlc291cmNlKHJlcXVlc3Qp
IDogMDsKICAgICBpZiAobV9yZXNvdXJjZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VMb2FkUHJpb3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5LmgJKHJldmlzaW9uIDE4
MzQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJp
b3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTYgKzI4LDI4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotZW51bSBSZXNvdXJjZUxvYWRQcmlvcml0eSB7Ci0gICAgUmVzb3VyY2VMb2Fk
UHJpb3JpdHlWZXJ5TG93LAotICAgIFJlc291cmNlTG9hZFByaW9yaXR5TG93LAotICAgIFJlc291
cmNlTG9hZFByaW9yaXR5TWVkaXVtLAotICAgIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaCwKLSAg
ICBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlIaWdoLAotICAgIFJlc291cmNlTG9hZFByaW9yaXR5
TG93ZXN0ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93LAotICAgIFJlc291cmNlTG9hZFBy
aW9yaXR5SGlnaGVzdCA9IFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2gsCitlbnVtIGNsYXNz
IFJlc291cmNlTG9hZFByaW9yaXR5IHsKKyAgICBWZXJ5TG93LAorICAgIExvdywKKyAgICBNZWRp
dW0sCisgICAgSGlnaCwKKyAgICBWZXJ5SGlnaCwKKyAgICBMb3dlc3QgPSBWZXJ5TG93LAorICAg
IEhpZ2hlc3QgPSBWZXJ5SGlnaCwKIH07CiAKK2lubGluZSBSZXNvdXJjZUxvYWRQcmlvcml0eSBv
cGVyYXRvcisrKFJlc291cmNlTG9hZFByaW9yaXR5JiBwcmlvcml0eSkKK3sKKyAgICBBU1NFUlQo
cHJpb3JpdHkgIT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2hlc3QpOworICAgIHJldHVybiBw
cmlvcml0eSA9IHN0YXRpY19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihzdGF0aWNfY2FzdDxp
bnQ+KHByaW9yaXR5KSArIDEpOworfQorCitpbmxpbmUgUmVzb3VyY2VMb2FkUHJpb3JpdHkgb3Bl
cmF0b3ItLShSZXNvdXJjZUxvYWRQcmlvcml0eSYgcHJpb3JpdHkpCit7CisgICAgQVNTRVJUKHBy
aW9yaXR5ICE9IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3dlc3QpOworICAgIHJldHVybiBwcmlv
cml0eSA9IHN0YXRpY19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihzdGF0aWNfY2FzdDxpbnQ+
KHByaW9yaXR5KSAtIDEpOworfQorCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCShy
ZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwzMiArNTEsMzIgQEAgaW5s
aW5lIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgUmVzb3VyY2VSZQogc3RkOjp1bmlxdWVfcHRyPFJl
c291cmNlUmVxdWVzdD4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRvcHQoc3RkOjp1bmlxdWVfcHRy
PENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gZGF0YSkKIHsKICAgICBhdXRvIHJlcXVl
c3QgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlUmVxdWVzdD4oKTsKLSAgICByZXF1ZXN0LT5z
ZXRVUkwoZGF0YS0+bV91cmwpOwotICAgIHJlcXVlc3QtPnNldENhY2hlUG9saWN5KGRhdGEtPm1f
Y2FjaGVQb2xpY3kpOwotICAgIHJlcXVlc3QtPnNldFRpbWVvdXRJbnRlcnZhbChkYXRhLT5tX3Rp
bWVvdXRJbnRlcnZhbCk7Ci0gICAgcmVxdWVzdC0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZGF0
YS0+bV9maXJzdFBhcnR5Rm9yQ29va2llcyk7Ci0gICAgcmVxdWVzdC0+c2V0SFRUUE1ldGhvZChk
YXRhLT5tX2h0dHBNZXRob2QpOwotICAgIHJlcXVlc3QtPnNldFByaW9yaXR5KGRhdGEtPm1fcHJp
b3JpdHkpOwotICAgIHJlcXVlc3QtPnNldFJlcXVlc3RlcihkYXRhLT5tX3JlcXVlc3Rlcik7Cisg
ICAgcmVxdWVzdC0+c2V0VVJMKGRhdGEtPnVybCk7CisgICAgcmVxdWVzdC0+c2V0Q2FjaGVQb2xp
Y3koZGF0YS0+Y2FjaGVQb2xpY3kpOworICAgIHJlcXVlc3QtPnNldFRpbWVvdXRJbnRlcnZhbChk
YXRhLT50aW1lb3V0SW50ZXJ2YWwpOworICAgIHJlcXVlc3QtPnNldEZpcnN0UGFydHlGb3JDb29r
aWVzKGRhdGEtPmZpcnN0UGFydHlGb3JDb29raWVzKTsKKyAgICByZXF1ZXN0LT5zZXRIVFRQTWV0
aG9kKGRhdGEtPmh0dHBNZXRob2QpOworICAgIHJlcXVlc3QtPnNldFByaW9yaXR5KGRhdGEtPnBy
aW9yaXR5KTsKKyAgICByZXF1ZXN0LT5zZXRSZXF1ZXN0ZXIoZGF0YS0+cmVxdWVzdGVyKTsKIAog
ICAgIHJlcXVlc3QtPnVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwotICAgIHJlcXVlc3QtPm1faHR0
cEhlYWRlckZpZWxkcy5hZG9wdChXVEY6Om1vdmUoZGF0YS0+bV9odHRwSGVhZGVycykpOworICAg
IHJlcXVlc3QtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChXVEY6Om1vdmUoZGF0YS0+aHR0cEhl
YWRlcnMpKTsKIAotICAgIHNpemVfdCBlbmNvZGluZ0NvdW50ID0gZGF0YS0+bV9yZXNwb25zZUNv
bnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7CisgICAgc2l6ZV90
IGVuY29kaW5nQ291bnQgPSBkYXRhLT5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5n
RmFsbGJhY2tBcnJheS5zaXplKCk7CiAgICAgaWYgKGVuY29kaW5nQ291bnQgPiAwKSB7Ci0gICAg
ICAgIFN0cmluZyBlbmNvZGluZzEgPSBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9u
RW5jb2RpbmdGYWxsYmFja0FycmF5WzBdOworICAgICAgICBTdHJpbmcgZW5jb2RpbmcxID0gZGF0
YS0+cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF07CiAg
ICAgICAgIFN0cmluZyBlbmNvZGluZzI7CiAgICAgICAgIFN0cmluZyBlbmNvZGluZzM7CiAgICAg
ICAgIGlmIChlbmNvZGluZ0NvdW50ID4gMSkgewotICAgICAgICAgICAgZW5jb2RpbmcyID0gZGF0
YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsxXTsK
KyAgICAgICAgICAgIGVuY29kaW5nMiA9IGRhdGEtPnJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9u
RW5jb2RpbmdGYWxsYmFja0FycmF5WzFdOwogICAgICAgICAgICAgaWYgKGVuY29kaW5nQ291bnQg
PiAyKQotICAgICAgICAgICAgICAgIGVuY29kaW5nMyA9IGRhdGEtPm1fcmVzcG9uc2VDb250ZW50
RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMl07CisgICAgICAgICAgICAgICAgZW5j
b2RpbmczID0gZGF0YS0+cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXlbMl07CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGVuY29kaW5nQ291bnQgPD0gMyk7
CiAgICAgICAgIHJlcXVlc3QtPnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdG
YWxsYmFja0FycmF5KGVuY29kaW5nMSwgZW5jb2RpbmcyLCBlbmNvZGluZzMpOwogICAgIH0KLSAg
ICByZXF1ZXN0LT5zZXRIVFRQQm9keShkYXRhLT5tX2h0dHBCb2R5KTsKLSAgICByZXF1ZXN0LT5z
ZXRBbGxvd0Nvb2tpZXMoZGF0YS0+bV9hbGxvd0Nvb2tpZXMpOworICAgIHJlcXVlc3QtPnNldEhU
VFBCb2R5KGRhdGEtPmh0dHBCb2R5KTsKKyAgICByZXF1ZXN0LT5zZXRBbGxvd0Nvb2tpZXMoZGF0
YS0+YWxsb3dDb29raWVzKTsKICAgICByZXF1ZXN0LT5kb1BsYXRmb3JtQWRvcHQoV1RGOjptb3Zl
KGRhdGEpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KQEAgLTg0LDIzICs4NCwyMyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8UmVzb3VyY2VSZXF1ZXN0PiBSZXNvdXJjCiBzdGQ6OnVuaXF1ZV9wdHI8Q3Jv
c3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0
YSgpIGNvbnN0CiB7CiAgICAgYXV0byBkYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxDcm9zc1RocmVh
ZFJlc291cmNlUmVxdWVzdERhdGE+KCk7Ci0gICAgZGF0YS0+bV91cmwgPSB1cmwoKS5jb3B5KCk7
Ci0gICAgZGF0YS0+bV9jYWNoZVBvbGljeSA9IGNhY2hlUG9saWN5KCk7Ci0gICAgZGF0YS0+bV90
aW1lb3V0SW50ZXJ2YWwgPSB0aW1lb3V0SW50ZXJ2YWwoKTsKLSAgICBkYXRhLT5tX2ZpcnN0UGFy
dHlGb3JDb29raWVzID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jb3B5KCk7Ci0gICAgZGF0YS0+
bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgpLmlzb2xhdGVkQ29weSgpOwotICAgIGRhdGEtPm1f
aHR0cEhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCkuY29weURhdGEoKTsKLSAgICBkYXRhLT5t
X3ByaW9yaXR5ID0gcHJpb3JpdHkoKTsKLSAgICBkYXRhLT5tX3JlcXVlc3RlciA9IG1fcmVxdWVz
dGVyOworICAgIGRhdGEtPnVybCA9IHVybCgpLmNvcHkoKTsKKyAgICBkYXRhLT5jYWNoZVBvbGlj
eSA9IG1fY2FjaGVQb2xpY3k7CisgICAgZGF0YS0+dGltZW91dEludGVydmFsID0gdGltZW91dElu
dGVydmFsKCk7CisgICAgZGF0YS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMgPSBmaXJzdFBhcnR5Rm9y
Q29va2llcygpLmNvcHkoKTsKKyAgICBkYXRhLT5odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgpLmlz
b2xhdGVkQ29weSgpOworICAgIGRhdGEtPmh0dHBIZWFkZXJzID0gaHR0cEhlYWRlckZpZWxkcygp
LmNvcHlEYXRhKCk7CisgICAgZGF0YS0+cHJpb3JpdHkgPSBtX3ByaW9yaXR5OworICAgIGRhdGEt
PnJlcXVlc3RlciA9IG1fcmVxdWVzdGVyOwogCi0gICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpKTsK
KyAgICBkYXRhLT5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJh
eS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNv
ZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpKTsKICAgICBzaXplX3QgZW5jb2RpbmdBcnJheVNpemUg
PSBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUo
KTsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZW5jb2RpbmdBcnJheVNpemU7
ICsraW5kZXgpIHsKLSAgICAgICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheS5hcHBlbmQobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheVtpbmRleF0uaXNvbGF0ZWRDb3B5KCkpOworICAgICAgICBkYXRh
LT5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5hcHBlbmQo
bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVtpbmRleF0u
aXNvbGF0ZWRDb3B5KCkpOwogICAgIH0KICAgICBpZiAobV9odHRwQm9keSkKLSAgICAgICAgZGF0
YS0+bV9odHRwQm9keSA9IG1faHR0cEJvZHktPmRlZXBDb3B5KCk7Ci0gICAgZGF0YS0+bV9hbGxv
d0Nvb2tpZXMgPSBtX2FsbG93Q29va2llczsKKyAgICAgICAgZGF0YS0+aHR0cEJvZHkgPSBtX2h0
dHBCb2R5LT5kZWVwQ29weSgpOworICAgIGRhdGEtPmFsbG93Q29va2llcyA9IG1fYWxsb3dDb29r
aWVzOwogICAgIHJldHVybiBhc1Jlc291cmNlUmVxdWVzdCgpLmRvUGxhdGZvcm1Db3B5RGF0YShX
VEY6Om1vdmUoZGF0YSkpOwogfQogCkBAIC0xNTEsNyArMTUxLDcgQEAgUmVzb3VyY2VSZXF1ZXN0
Q2FjaGVQb2xpY3kgUmVzb3VyY2VSZXF1ZQogewogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgp
OyAKICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xp
Y3k+KG1fY2FjaGVQb2xpY3kpOworICAgIHJldHVybiBtX2NhY2hlUG9saWN5OwogfQogCiB2b2lk
IFJlc291cmNlUmVxdWVzdEJhc2U6OnNldENhY2hlUG9saWN5KFJlc291cmNlUmVxdWVzdENhY2hl
UG9saWN5IGNhY2hlUG9saWN5KQpAQCAtNDM4LDcgKzQzOCw3IEBAIFJlc291cmNlTG9hZFByaW9y
aXR5IFJlc291cmNlUmVxdWVzdEJhc2UKIHsKICAgICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsK
IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRQcmlvcml0eT4obV9wcmlvcml0
eSk7CisgICAgcmV0dXJuIG1fcHJpb3JpdHk7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6c2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCkBAIC00NDksNyAr
NDQ5LDYgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRQcmlvcml0eShSZQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX3ByaW9yaXR5ID0gcHJpb3JpdHk7Ci0gICAgQVNTRVJUKHN0YXRp
Y19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihtX3ByaW9yaXR5KSA9PSBwcmlvcml0eSk7IC8v
IE1ha2Ugc3VyZSBpdCBmaXRzIGluIHRoZSBiaXRmaWVsZC4KIAogICAgIGlmICh1cmwoKS5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9
IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
cXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzAsMTUgKzE3MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIC8vIFVzZWQgd2hlbiBSZXNvdXJjZVJlcXVlc3QgaXMgaW5pdGlhbGl6ZWQgZnJv
bSBhIHBsYXRmb3JtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXF1ZXN0CiAgICAgICAgIFJlc291
cmNlUmVxdWVzdEJhc2UoKQotICAgICAgICAgICAgOiBtX3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQo
ZmFsc2UpCi0gICAgICAgICAgICAsIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCh0cnVlKQotICAg
ICAgICAgICAgLCBtX3Jlc291cmNlUmVxdWVzdEJvZHlVcGRhdGVkKGZhbHNlKQorICAgICAgICAg
ICAgOiBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQodHJ1ZSkKICAgICAgICAgICAgICwgbV9wbGF0
Zm9ybVJlcXVlc3RCb2R5VXBkYXRlZCh0cnVlKQotICAgICAgICAgICAgLCBtX3JlcG9ydFVwbG9h
ZFByb2dyZXNzKGZhbHNlKQotICAgICAgICAgICAgLCBtX3JlcG9ydExvYWRUaW1pbmcoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1fcmVwb3J0UmF3SGVhZGVycyhmYWxzZSkKLSAgICAgICAgICAgICwg
bV9oaWRkZW5Gcm9tSW5zcGVjdG9yKGZhbHNlKQotICAgICAgICAgICAgLCBtX3ByaW9yaXR5KFJl
c291cmNlTG9hZFByaW9yaXR5TG93KQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTkzLDE0
ICsxODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fYWxsb3dDb29r
aWVzKFJlc291cmNlUmVxdWVzdEJhc2U6OmRlZmF1bHRBbGxvd0Nvb2tpZXMoKSkKICNlbmRpZgog
ICAgICAgICAgICAgLCBtX3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQodHJ1ZSkKLSAgICAgICAgICAg
ICwgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX3Jlc291
cmNlUmVxdWVzdEJvZHlVcGRhdGVkKHRydWUpCi0gICAgICAgICAgICAsIG1fcGxhdGZvcm1SZXF1
ZXN0Qm9keVVwZGF0ZWQoZmFsc2UpCi0gICAgICAgICAgICAsIG1fcmVwb3J0VXBsb2FkUHJvZ3Jl
c3MoZmFsc2UpCi0gICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKLSAgICAg
ICAgICAgICwgbV9yZXBvcnRSYXdIZWFkZXJzKGZhbHNlKQotICAgICAgICAgICAgLCBtX2hpZGRl
bkZyb21JbnNwZWN0b3IoZmFsc2UpCi0gICAgICAgICAgICAsIG1fcHJpb3JpdHkoUmVzb3VyY2VM
b2FkUHJpb3JpdHlMb3cpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0yMTcsMTcgKzIwMywx
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXAgbV9odHRwSGVh
ZGVyRmllbGRzOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3Jlc3BvbnNlQ29udGVudERpc3Bv
c2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5OwogICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IG1f
aHR0cEJvZHk7Ci0gICAgICAgIHVuc2lnbmVkIG1fY2FjaGVQb2xpY3kgOiAzOwotICAgICAgICB1
bnNpZ25lZCBtX2FsbG93Q29va2llcyA6IDE7Ci0gICAgICAgIG11dGFibGUgdW5zaWduZWQgbV9y
ZXNvdXJjZVJlcXVlc3RVcGRhdGVkIDogMTsKLSAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3Bs
YXRmb3JtUmVxdWVzdFVwZGF0ZWQgOiAxOwotICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fcmVz
b3VyY2VSZXF1ZXN0Qm9keVVwZGF0ZWQgOiAxOwotICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1f
cGxhdGZvcm1SZXF1ZXN0Qm9keVVwZGF0ZWQgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX3JlcG9y
dFVwbG9hZFByb2dyZXNzIDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9yZXBvcnRMb2FkVGltaW5n
IDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9yZXBvcnRSYXdIZWFkZXJzIDogMTsKLSAgICAgICAg
dW5zaWduZWQgbV9oaWRkZW5Gcm9tSW5zcGVjdG9yIDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9w
cmlvcml0eSA6IDQ7CisgICAgICAgIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IG1fY2FjaGVQ
b2xpY3kgeyBVc2VQcm90b2NvbENhY2hlUG9saWN5IH07CisgICAgICAgIGJvb2wgbV9hbGxvd0Nv
b2tpZXMgeyBmYWxzZSB9OworICAgICAgICBtdXRhYmxlIGJvb2wgbV9yZXNvdXJjZVJlcXVlc3RV
cGRhdGVkIHsgZmFsc2UgfTsKKyAgICAgICAgbXV0YWJsZSBib29sIG1fcGxhdGZvcm1SZXF1ZXN0
VXBkYXRlZCB7IGZhbHNlIH07CisgICAgICAgIG11dGFibGUgYm9vbCBtX3Jlc291cmNlUmVxdWVz
dEJvZHlVcGRhdGVkIHsgZmFsc2UgfTsKKyAgICAgICAgbXV0YWJsZSBib29sIG1fcGxhdGZvcm1S
ZXF1ZXN0Qm9keVVwZGF0ZWQgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fcmVwb3J0VXBsb2Fk
UHJvZ3Jlc3MgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fcmVwb3J0TG9hZFRpbWluZyB7IGZh
bHNlIH07CisgICAgICAgIGJvb2wgbV9yZXBvcnRSYXdIZWFkZXJzIHsgZmFsc2UgfTsKKyAgICAg
ICAgYm9vbCBtX2hpZGRlbkZyb21JbnNwZWN0b3IgeyBmYWxzZSB9OworICAgICAgICBSZXNvdXJj
ZUxvYWRQcmlvcml0eSBtX3ByaW9yaXR5IHsgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB9Owog
ICAgICAgICBSZXF1ZXN0ZXIgbV9yZXF1ZXN0ZXIgeyBSZXF1ZXN0ZXI6OlVuc3BlY2lmaWVkIH07
CiAKICAgICBwcml2YXRlOgpAQCAtMjQ1LDIyICsyMzEsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oUmVzb3VyY2VSZXF1ZXN0JiBhLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQogCiAgICAgc3RydWN0IENy
b3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YUJhc2UgewotICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGFCYXNlKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBDcm9zc1RocmVhZFJlc291cmNlUmVx
dWVzdERhdGFCYXNlKCkgeyB9Ci0gICAgICAgIFVSTCBtX3VybDsKLQotICAgICAgICBSZXNvdXJj
ZVJlcXVlc3RDYWNoZVBvbGljeSBtX2NhY2hlUG9saWN5OwotICAgICAgICBkb3VibGUgbV90aW1l
b3V0SW50ZXJ2YWw7Ci0gICAgICAgIFVSTCBtX2ZpcnN0UGFydHlGb3JDb29raWVzOwotCi0gICAg
ICAgIFN0cmluZyBtX2h0dHBNZXRob2Q7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1Ro
cmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBtX2h0dHBIZWFkZXJzOwotICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5Owot
ICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IG1faHR0cEJvZHk7Ci0gICAgICAgIGJvb2wgbV9hbGxv
d0Nvb2tpZXM7Ci0gICAgICAgIFJlc291cmNlTG9hZFByaW9yaXR5IG1fcHJpb3JpdHk7Ci0gICAg
ICAgIFJlc291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3RlciBtX3JlcXVlc3RlcjsKKyAgICAgICAg
VVJMIHVybDsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3k7
CisgICAgICAgIGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWw7CisgICAgICAgIFVSTCBmaXJzdFBhcnR5
Rm9yQ29va2llczsKKyAgICAgICAgU3RyaW5nIGh0dHBNZXRob2Q7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBodHRwSGVhZGVyczsKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXk7CisgICAgICAgIFJlZlB0cjxGb3JtRGF0YT4gaHR0cEJvZHk7CisgICAgICAgIGJv
b2wgYWxsb3dDb29raWVzOworICAgICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eTsK
KyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKICAgICB9
OwogICAgIAogICAgIHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3Vu
dFBlckhvc3QoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCShyZXZpc2lvbiAxODM0Njcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENG
TmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDEwICszOTksMTAgQEAgdW5zaWduZWQgaW5p
dGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbgogICAgIGlmICghUmVzb3VyY2VSZXF1ZXN0Ojpy
ZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBtYXhpbXVtSFRUUENv
bm5lY3Rpb25Db3VudFBlckhvc3Q7CiAKLSAgICB3a1NldEhUVFBSZXF1ZXN0TWF4aW11bVByaW9y
aXR5KHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0
KSk7CisgICAgd2tTZXRIVFRQUmVxdWVzdE1heGltdW1Qcmlvcml0eSh0b1BsYXRmb3JtUmVxdWVz
dFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoZXN0KSk7CiAjaWYgIVBMQVRGT1JN
KFdJTikKICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzkzNzU2MDk+IEltcGxlbWVudCBt
aW5pbXVtIGZhc3QgbGFuZSBwcmlvcml0eSBzZXR0aW5nIG9uIFdpbmRvd3MKLSAgICB3a1NldEhU
VFBSZXF1ZXN0TWluaW11bUZhc3RMYW5lUHJpb3JpdHkodG9QbGF0Zm9ybVJlcXVlc3RQcmlvcml0
eShSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bSkpOworICAgIHdrU2V0SFRUUFJlcXVlc3RNaW5p
bXVtRmFzdExhbmVQcmlvcml0eSh0b1BsYXRmb3JtUmVxdWVzdFByaW9yaXR5KFJlc291cmNlTG9h
ZFByaW9yaXR5OjpNZWRpdW0pKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIHVubGltaXRlZFJlcXVl
c3RDb3VudDsKQEAgLTQxOCw4ICs0MTgsOCBAQCB2b2lkIGluaXRpYWxpemVIVFRQQ29ubmVjdGlv
blNldHRpbmdzT25TCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHByZWZlcnJlZENvbm5lY3Rp
b25Db3VudCA9IDY7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZhc3RMYW5lQ29ubmVjdGlv
bkNvdW50ID0gMTsKICAgICB3a0luaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBl
ckhvc3QocHJlZmVycmVkQ29ubmVjdGlvbkNvdW50KTsKLSAgICB3a1NldEhUVFBSZXF1ZXN0TWF4
aW11bVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdCk7Ci0gICAgd2tTZXRIVFRQ
UmVxdWVzdE1pbmltdW1GYXN0TGFuZVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVt
KTsKKyAgICB3a1NldEhUVFBSZXF1ZXN0TWF4aW11bVByaW9yaXR5KHRvUGxhdGZvcm1SZXF1ZXN0
UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2hlc3QpKTsKKyAgICB3a1NldEhUVFBS
ZXF1ZXN0TWluaW11bUZhc3RMYW5lUHJpb3JpdHkodG9QbGF0Zm9ybVJlcXVlc3RQcmlvcml0eShS
ZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtKSk7CiAgICAgX0NGTmV0d29ya0hUVFBDb25uZWN0
aW9uQ2FjaGVTZXRMaW1pdChrSFRUUE51bUZhc3RMYW5lcywgZmFzdExhbmVDb25uZWN0aW9uQ291
bnQpOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlUmVxdWVzdENGTmV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5oCShyZXZpc2lvbiAxODM0Njcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENG
TmV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDMzICs0NiwzMyBAQCBpbmxpbmUgUmVzb3VyY2VM
b2FkUHJpb3JpdHkgdG9SZXNvdXJjZUxvCiAgICAgc3dpdGNoIChwcmlvcml0eSkgewogICAgIGNh
c2UgLTE6CiAgICAgY2FzZSAwOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlW
ZXJ5TG93OworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c7CiAg
ICAgY2FzZSAxOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3c7CisgICAg
ICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OwogICAgIGNhc2UgMjoKLSAgICAg
ICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtOworICAgICAgICByZXR1cm4gUmVz
b3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bTsKICAgICBjYXNlIDM6Ci0gICAgICAgIHJldHVybiBS
ZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2g7CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlv
cml0eTo6SGlnaDsKICAgICBjYXNlIDQ6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlv
cml0eVZlcnlIaWdoOworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlI
aWdoOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3dlc3Q7CisgICAgICAgIHJldHVybiBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6TG93ZXN0OwogICAgIH0KIH0KIAogaW5saW5lIGludCB0b1BsYXRm
b3JtUmVxdWVzdFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQogewogICAg
IHN3aXRjaCAocHJpb3JpdHkpIHsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxv
dzoKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93OgogICAgICAgICByZXR1
cm4gMDsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5TG93OgorICAgIGNhc2UgUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OkxvdzoKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBSZXNvdXJj
ZUxvYWRQcmlvcml0eU1lZGl1bToKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpNZWRp
dW06CiAgICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdo
OgorICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2g6CiAgICAgICAgIHJldHVybiAz
OwotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaDoKKyAgICBjYXNlIFJlc291
cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDoKICAgICAgICAgcmV0dXJuIDQ7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MSwxNSArMTMxLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGlubGluZSBTb3VwTWVzc2FnZVBy
aW9yaXR5IHRvU291cE1lc3NhZ2VQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0
eSkKIHsKICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7Ci0gICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlv
cml0eVZlcnlMb3c6CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdzoKICAg
ICAgICAgcmV0dXJuIFNPVVBfTUVTU0FHRV9QUklPUklUWV9WRVJZX0xPVzsKLSAgICBjYXNlIFJl
c291cmNlTG9hZFByaW9yaXR5TG93OgorICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6Okxv
dzoKICAgICAgICAgcmV0dXJuIFNPVVBfTUVTU0FHRV9QUklPUklUWV9MT1c7Ci0gICAgY2FzZSBS
ZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bToKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5
OjpNZWRpdW06CiAgICAgICAgIHJldHVybiBTT1VQX01FU1NBR0VfUFJJT1JJVFlfTk9STUFMOwot
ICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoOgorICAgIGNhc2UgUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OkhpZ2g6CiAgICAgICAgIHJldHVybiBTT1VQX01FU1NBR0VfUFJJT1JJVFlfSElH
SDsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g6CisgICAgY2FzZSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2g6CiAgICAgICAgIHJldHVybiBTT1VQX01FU1NBR0Vf
UFJJT1JJVFlfVkVSWV9ISUdIOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjEsMTcgKzQ2MSwxNyBAQCB2b2lkIElu
dGVybmFsczo6c2V0T3ZlcnJpZGVDYWNoZVBvbGljeShjCiBzdGF0aWMgUmVzb3VyY2VMb2FkUHJp
b3JpdHkgc3RyaW5nVG9SZXNvdXJjZUxvYWRQcmlvcml0eShjb25zdCBTdHJpbmcmIHBvbGljeSkK
IHsKICAgICBpZiAocG9saWN5ID09ICJSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3ciKQotICAg
ICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93OworICAgICAgICByZXR1cm4g
UmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c7CiAgICAgaWYgKHBvbGljeSA9PSAiUmVzb3Vy
Y2VMb2FkUHJpb3JpdHlMb3ciKQotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlM
b3c7CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OwogICAgIGlmIChw
b2xpY3kgPT0gIlJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtIikKLSAgICAgICAgcmV0dXJuIFJl
c291cmNlTG9hZFByaW9yaXR5TWVkaXVtOworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJp
b3JpdHk6Ok1lZGl1bTsKICAgICBpZiAocG9saWN5ID09ICJSZXNvdXJjZUxvYWRQcmlvcml0eUhp
Z2giKQotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoOworICAgICAgICBy
ZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2g7CiAgICAgaWYgKHBvbGljeSA9PSAiUmVz
b3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaCIpCi0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQ
cmlvcml0eVZlcnlIaWdoOworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZl
cnlIaWdoOwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBSZXNvdXJjZUxv
YWRQcmlvcml0eUxvdzsKKyAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsKIH0K
IAogdm9pZCBJbnRlcm5hbHM6OnNldE92ZXJyaWRlUmVzb3VyY2VMb2FkUHJpb3JpdHkoY29uc3Qg
U3RyaW5nJiBwcmlvcml0eSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzUzMSkKKysrIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisy
MDE1LTA0LTI4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXNvdXJjZUxvYWRQcmlvcml0eSBzaG91bGQgYmUgZW51bSBjbGFzcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzI2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisKKyAg
ICAgICAgICAgIFJlbW92ZSB0aGlzIHVudXNlZCBtZXNzYWdlLgorCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om1ha2VTdG9yZURlY2lzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6cmV0cmlldmUpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1tOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrU2V0dGluZ3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6CisKIDIwMTUtMDQtMjggIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIE5ldHdvcmsgQ2FjaGU6IERv
IG5vdCBjcmVhdGUgYSBTaGFyZWRCdWZmZXIgZm9yIG1hcHBlZCByZXNvdXJjZXMgdW5sZXNzIGV4
cGxpY2l0bHkgcmVxdWVzdGVkCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCShy
ZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw5ICsxNTEs
NiBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRECiAgICAgbG9hZGVy
LT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7CiB9CiAKLXZvaWQgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKHVpbnQzMl90KQotewotfQogCiB2b2lk
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgJKHJldmlzaW9u
IDE4MzQ2NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlbW92ZUxvYWRJZGVudGlmaWVyKFJlc291cmNlTG9hZElkZW50aWZpZXIp
OwogICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBib29s
KTsKICAgICB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpVUkwmIHJlZGlyZWN0VVJMKTsKLSAgICB2b2lkIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKHVpbnQzMl90IHJlc291cmNlTG9hZFByaW9yaXR5KTsKICAgICB2b2lk
IHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wpOwogICAgIHZvaWQgc3RhcnREb3dubG9hZChX
ZWJDb3JlOjpTZXNzaW9uSUQsIHVpbnQ2NF90IGRvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOwogICAgIHZvaWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25s
b2FkKHVpbnQ2NF90IG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyLCB1aW50NjRfdCBkb3dubG9h
ZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbgkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDkgKzI4LDcgQEAgbWVzc2FnZXMgLT4gTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2NlcwogICAgIFBlcmZvcm1TeW5jaHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciBlcnJvciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgVmVj
dG9yPGNoYXI+IGRhdGEpIERlbGF5ZWQKICAgICBSZW1vdmVMb2FkSWRlbnRpZmllcih1aW50NjRf
dCByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQogICAgIFNldERlZmVyc0xvYWRpbmcodWludDY0X3Qg
cmVzb3VyY2VMb2FkSWRlbnRpZmllciwgYm9vbCBkZWZlcnMpCi0gICAgCi0gICAgU2VydmVQZW5k
aW5nUmVxdWVzdHModWludDMyX3QgcmVzb3VyY2VMb2FkUHJpb3JpdHkpCi0gICAgCisgICAgICAg
IAogICAgIFNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgLT4gKCkKIAogICAg
IFN0YXJ0RG93bmxvYWQoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3QgZG93
bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJ
KHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCw3ICszMDAsNyBAQCBzdGF0
aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNpc2lvbihjCiAgICAgfQogCiAgICAgYm9vbCBp
c01haW5SZXNvdXJjZSA9IG9yaWdpbmFsUmVxdWVzdC5yZXF1ZXN0ZXIoKSA9PSBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKLSAgICBib29sIHN0b3JlVW5jb25kaXRp
b25hbGx5Rm9ySGlzdG9yeU5hdmlnYXRpb24gPSBpc01haW5SZXNvdXJjZSB8fCBvcmlnaW5hbFJl
cXVlc3QucHJpb3JpdHkoKSA9PSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlIaWdo
OworICAgIGJvb2wgc3RvcmVVbmNvbmRpdGlvbmFsbHlGb3JIaXN0b3J5TmF2aWdhdGlvbiA9IGlz
TWFpblJlc291cmNlIHx8IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpID09IFdlYkNvcmU6OlJl
c291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDsKICAgICBpZiAoIXN0b3JlVW5jb25kaXRpb25h
bGx5Rm9ySGlzdG9yeU5hdmlnYXRpb24pIHsKICAgICAgICAgYXV0byBub3cgPSBzdGQ6OmNocm9u
bzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKICAgICAgICAgYm9vbCBoYXNOb25aZXJvTGlmZXRpbWUg
PSAhcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgJiYgV2ViQ29yZTo6Y29t
cHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9ySFRUUEZhbWlseShyZXNwb25zZSwgbm93KSA+IDBfbXM7
CkBAIC0zNDIsNyArMzQyLDcgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6
UmVzbwogICAgIH0KIAogICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9j
bG9jazo6bm93KCk7Ci0gICAgdW5zaWduZWQgcHJpb3JpdHkgPSBvcmlnaW5hbFJlcXVlc3QucHJp
b3JpdHkoKTsKKyAgICBpbnQgcHJpb3JpdHkgPSBzdGF0aWNfY2FzdDxpbnQ+KG9yaWdpbmFsUmVx
dWVzdC5wcmlvcml0eSgpKTsKIAogICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwg
cHJpb3JpdHksIFt0aGlzLCBvcmlnaW5hbFJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyLCBzdGFy
dFRpbWUsIHN0b3JhZ2VLZXksIHdlYlBhZ2VJRF0oc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U6OlJl
Y29yZD4gcmVjb3JkKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbQkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpwbGF0ZgogICAgICAgICBSZXNvdXJjZVJlcXVlc3Q6OnNldEhUVFBQ
aXBlbGluaW5nRW5hYmxlZChwcmVmVmFsdWUpOwogCiAgICAgaWYgKFJlc291cmNlUmVxdWVzdDo6
cmVzb3VyY2VQcmlvcml0aWVzRW5hYmxlZCgpKSB7Ci0gICAgICAgIFdLU2V0SFRUUFJlcXVlc3RN
YXhpbXVtUHJpb3JpdHkodG9QbGF0Zm9ybVJlcXVlc3RQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlv
cml0eUhpZ2hlc3QpKTsKLSAgICAgICAgV0tTZXRIVFRQUmVxdWVzdE1pbmltdW1GYXN0TGFuZVBy
aW9yaXR5KHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRp
dW0pKTsKKyAgICAgICAgV0tTZXRIVFRQUmVxdWVzdE1heGltdW1Qcmlvcml0eSh0b1BsYXRmb3Jt
UmVxdWVzdFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoZXN0KSk7CisgICAgICAg
IFdLU2V0SFRUUFJlcXVlc3RNaW5pbXVtRmFzdExhbmVQcmlvcml0eSh0b1BsYXRmb3JtUmVxdWVz
dFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5OjpNZWRpdW0pKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjM3LDcgKzYzNyw2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldENTU0Nv
bXBvc2l0aW5nRW4KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJl
cXVlc3RzKCkKIHsKLSAgICByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2VydmVQZW5kaW5nUmVx
dWVzdHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0NCwxNiArMjQ0LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNyb3Nz
T3JpZwogICAgIC8vIFdlIG92ZXJyaWRlIHRoaXMgY2FsbCBpbiB0aGUgV2ViUHJvY2VzcyB0byBt
YWtlIGl0IGEgbm8tb3AuCiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCit2
b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3Vy
Y2VMb2FkUHJpb3JpdHkpCiB7Ci0gICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nl
c3MpIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMiKTsKLSAg
ICAKLSAgICAvLyBUaGUgTmV0d29ya1Byb2Nlc3Mgc2NoZWR1bGVyIGlzIGdvb2QgYXQgbWFraW5n
IHN1cmUgbG9hZHMgYXJlIHNlcnZpY2VkIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHBlbmRpbmcg
cmVxdWVzdHMuCi0gICAgLy8gSWYgdGhpcyBXZWJQcm9jZXNzIGlzbid0IGV4cGVjdGluZyByZXF1
ZXN0cyB0byBiZSBzZXJ2ZWQgdGhlbiB3ZSBjYW4gaWdub3JlIG1lc3NhZ2luZyB0aGUgTmV0d29y
a1Byb2Nlc3MgcmlnaHQgbm93LgotICAgIGlmIChtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3Vu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29y
a0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6U2VydmVQZW5kaW5nUmVxdWVzdHMobWluaW11bVByaW9yaXR5KSwg
MCk7CiB9CiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1Jl
cXVlc3RzKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE4MzQ2NykK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqLCBib29s
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVk
KFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6VVJMJiByZWRpcmVjdFVS
TCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3Rz
KFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IFdlYkNvcmU6
OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHNlcnZlUGVuZGluZ1JlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5IG1pbmlt
dW1Qcmlvcml0eSkgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0cygpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVQZW5kaW5nUmVxdWVz
dHMoKSBvdmVycmlkZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251943</attachid>
            <date>2015-04-29 03:56:03 -0700</date>
            <delta_ts>2015-04-29 09:06:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>resourceloadpriority-enum-class-5.patch</filename>
            <type>text/plain</type>
            <size>45371</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE1LTA0LTI4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZUxvYWRQcmlvcml0
eSBzaG91bGQgYmUgZW51bSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ0MzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MpOgorICAgICAgICAqIGxvYWRlci9MaW5rTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtMb2FkZXI6OmxvYWRMaW5rKToKKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5m
b3JtYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0
SW5mb3JtYXRpb246OnByaW9yaXR5VG9JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6c2NoZWR1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6
aGFzUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpI
b3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uOjpyZXF1ZXN0c1BlbmRpbmcpOgorCisgICAgICAgICAgICBNb2Rl
cm5pemUgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIGNvZGUgYSBiaXQgd2hpbGUgc3dpdGNoaW5nIHRv
IGVudW0gY2xhc3MuCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKToKKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAg
ICogbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uTG9h
ZGVyOjpzdGFydExvYWRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVBVkZSZXNvdXJjZUxvYWRlcjo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5Lmg6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yLS0pOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZG9wdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3RCYXNlOjpjYWNoZVBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpwcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpz
ZXRQcmlvcml0eSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmg6CisKKyAgICAgICAgICAgIFJlbW92ZSBiaXRmaWVsZHMuIFJlc291cmNlUmVxdWVzdHMg
YXJlIG5vdCBwcmVzZW50IGluIGxhcmdlIGVub3VnaCBudW1iZXJzIHRvIHJlcXVpcmUgdGhpcyBr
aW5kIG9mIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIFVzZSBtb2Rlcm4gaW5pdGlhbGl6YXRp
b24gc3ludGF4LgorCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXNv
dXJjZVJlcXVlc3RCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzVGhyZWFkUmVzb3VyY2VS
ZXF1ZXN0RGF0YUJhc2U6OkNyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YUJhc2UpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNv
dW50UGVySG9zdCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplSFRUUENvbm5lY3Rpb25T
ZXR0aW5nc09uU3RhcnR1cCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZVJlcXVlc3RDRk5ldC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZXNvdXJjZUxvYWRQcmlvcml0
eSk6CisgICAgICAgIChXZWJDb3JlOjp0b1BsYXRmb3JtUmVxdWVzdFByaW9yaXR5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjp0b1NvdXBNZXNzYWdlUHJpb3JpdHkpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJu
YWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmluZ1RvUmVzb3VyY2VMb2FkUHJpb3JpdHkp
OgorCiAyMDE1LTA0LTI4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2UgYSBub24tc3RhdGljIHZlcnNpb24gb2YgRnJhbWVWaWV3Ojp5UG9zaXRp
b25Gb3JSb290Q29udGVudExheWVyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQg
SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKCkKICAgICAgICAgLy8gTG9hZCBzdHlsZXNoZWV0cyB0
aGF0IGFyZSBub3QgbmVlZGVkIGZvciB0aGUgcmVuZGVyaW5nIGltbWVkaWF0ZWx5IHdpdGggbG93
IHByaW9yaXR5LgogICAgICAgICBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4gcHJpb3Jp
dHk7CiAgICAgICAgIGlmICghaXNBY3RpdmUpCi0gICAgICAgICAgICBwcmlvcml0eSA9IFJlc291
cmNlTG9hZFByaW9yaXR5VmVyeUxvdzsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gUmVzb3VyY2VM
b2FkUHJpb3JpdHk6OlZlcnlMb3c7CiAgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1
ZXN0KFJlc291cmNlUmVxdWVzdChkb2N1bWVudCgpLmNvbXBsZXRlVVJMKHVybCkpLCBjaGFyc2V0
LCBwcmlvcml0eSk7CiAgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKHRoaXMpOwogICAgICAg
ICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnJlcXVl
c3RDU1NTdHlsZVNoZWV0KHJlcXVlc3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xp
bmtMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9h
ZGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgYm9vbCBMaW5rTG9h
ZGVyOjpsb2FkTGluayhjb25zdCBMaW5rUmVsQQogICAgICAgICBpZiAocmVsQXR0cmlidXRlLmlz
TGlua1N1YnJlc291cmNlKSB7CiAgICAgICAgICAgICAvLyBXZSBvbmx5IG1ha2Ugb25lIHJlcXVl
c3QgdG8gdGhlIGNhY2hlZCByZXNvdXJjZSBsb2FkZXIgaWYgbXVsdGlwbGUgcmVsIHR5cGVzIGFy
ZSBzcGVjaWZpZWQ7CiAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBoaWdoZXIgcHJpb3JpdHks
IHdoaWNoIHNob3VsZCBvdmVyd3JpdGUgdGhlIGxvd2VyIHByaW9yaXR5LgotICAgICAgICAgICAg
cHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdzsKKyAgICAgICAgICAgIHByaW9yaXR5
ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsKICAgICAgICAgICAgIHR5cGUgPSBDYWNoZWRS
ZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOwogICAgICAgICB9CiAgICAgICAgIENhY2hlZFJlc291
cmNlUmVxdWVzdCBsaW5rUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QoZG9jdW1lbnQuY29tcGxldGVV
UkwoaHJlZikpLCBwcmlvcml0eSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3MSwxOSArMTcxLDE5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxv
YWQKICAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkg
JiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1ZXN0cygpKSB7CiAgICAgICAgIC8vIFNlcnZlIGFs
bCByZXF1ZXN0cyBhdCBvbmNlIHRvIGtlZXAgdGhlIHBpcGVsaW5lIGZ1bGwgYXQgdGhlIG5ldHdv
cmsgbGF5ZXIuCiAgICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29kZSBkbyBhbnl0aGluZyB1
c2VmdWwsIGdpdmVuIHRoYXQgd2UgYWxzbyBzZXQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3Qg
dG8gZWZmZWN0aXZlbHkgdW5saW1pdGVkIG9uIHRoZXNlIHBsYXRmb3Jtcz8KLSAgICAgICAgc2Vy
dmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93KTsKKyAg
ICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZl
cnlMb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKICNpZiBQTEFURk9STShJ
T1MpCi0gICAgaWYgKChwcmlvcml0eSA+IFJlc291cmNlTG9hZFByaW9yaXR5TG93IHx8ICFyZXNv
dXJjZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkudXJsKCkucHJvdG9jb2xJc0luSFRUUEZh
bWlseSgpIHx8IChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyAmJiAhaGFkUmVx
dWVzdHMpKSAmJiAhaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3RzKCkpIHsKKyAgICBpZiAoKHBy
aW9yaXR5ID4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPmlP
U09yaWdpbmFsUmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJp
b3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyAmJiAhaGFkUmVxdWVzdHMpKSAmJiAh
aXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3RzKCkpIHsKICAgICAgICAgLy8gVHJ5IHRvIHJlcXVl
c3QgaW1wb3J0YW50IHJlc291cmNlcyBpbW1lZGlhdGVseS4KICAgICAgICAgc2VydmVQZW5kaW5n
UmVxdWVzdHMoaG9zdCwgcHJpb3JpdHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vsc2UK
LSAgICBpZiAocHJpb3JpdHkgPiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyB8fCAhcmVzb3VyY2VM
b2FkZXItPnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVz
b3VyY2VMb2FkUHJpb3JpdHlMb3cgJiYgIWhhZFJlcXVlc3RzKSkgeworICAgIGlmIChwcmlvcml0
eSA+IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cgfHwgIXJlc291cmNlTG9hZGVyLT51cmwoKS5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9y
aXR5OjpMb3cgJiYgIWhhZFJlcXVlc3RzKSkgewogICAgICAgICAvLyBUcnkgdG8gcmVxdWVzdCBp
bXBvcnRhbnQgcmVzb3VyY2VzIGltbWVkaWF0ZWx5LgogICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1
ZXN0cyhob3N0LCBwcmlvcml0eSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI1NiwxNCArMjU2LDkg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZwogICAgIHNlcnZlUGVu
ZGluZ1JlcXVlc3RzKG1fbm9uSFRUUFByb3RvY29sSG9zdCwgbWluaW11bVByaW9yaXR5KTsKIAog
ICAgIFZlY3RvcjxIb3N0SW5mb3JtYXRpb24qPiBob3N0c1RvU2VydmU7Ci0gICAgbV9ob3N0cy5j
aGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9ob3N0cy5l
bmQoKTsKLSAgICBmb3IgKEhvc3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2hvc3RzLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGhvc3RzVG9TZXJ2ZS5hcHBlbmQoaXRlci0+
dmFsdWUpOwotCi0gICAgaW50IHNpemUgPSBob3N0c1RvU2VydmUuc2l6ZSgpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEhvc3RJbmZvcm1hdGlvbiogaG9z
dCA9IGhvc3RzVG9TZXJ2ZVtpXTsKKyAgICBjb3B5VmFsdWVzVG9WZWN0b3IobV9ob3N0cywgaG9z
dHNUb1NlcnZlKTsKKworICAgIGZvciAoYXV0byogaG9zdCA6IGhvc3RzVG9TZXJ2ZSkgewogICAg
ICAgICBpZiAoaG9zdC0+aGFzUmVxdWVzdHMoKSkKICAgICAgICAgICAgIHNlcnZlUGVuZGluZ1Jl
cXVlc3RzKGhvc3QsIG1pbmltdW1Qcmlvcml0eSk7CiAgICAgICAgIGVsc2UKQEAgLTI3NSw4ICsy
NzAsOSBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nCiB7CiAgICAg
TE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5n
UmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+bmFtZSgpLmxhdGlu
MSgpLmRhdGEoKSk7CiAKLSAgICBmb3IgKGludCBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9y
aXR5SGlnaGVzdDsgcHJpb3JpdHkgPj0gbWluaW11bVByaW9yaXR5OyAtLXByaW9yaXR5KSB7Ci0g
ICAgICAgIEhvc3RJbmZvcm1hdGlvbjo6UmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcgPSBo
b3N0LT5yZXF1ZXN0c1BlbmRpbmcoUmVzb3VyY2VMb2FkUHJpb3JpdHkocHJpb3JpdHkpKTsKKyAg
ICBhdXRvIHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2hlc3Q7CisgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgSG9zdEluZm9ybWF0aW9uOjpSZXF1ZXN0UXVldWUmIHJlcXVl
c3RzUGVuZGluZyA9IGhvc3QtPnJlcXVlc3RzUGVuZGluZyhwcmlvcml0eSk7CiAKICAgICAgICAg
d2hpbGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVzdHNQZW5kaW5nLmZpcnN0KCk7
CkBAIC0yODYsNyArMjgyLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVu
ZGluZwogICAgICAgICAgICAgLy8gYW5kIHdlIGRvbid0IGtub3cgYWxsIHN0eWxlc2hlZXRzIHll
dC4KICAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlc291cmNlTG9hZGVyLT5mcmFt
ZUxvYWRlcigpID8gcmVzb3VyY2VMb2FkZXItPmZyYW1lTG9hZGVyKCktPmZyYW1lKCkuZG9jdW1l
bnQoKSA6IDA7CiAgICAgICAgICAgICBib29sIHNob3VsZExpbWl0UmVxdWVzdHMgPSAhaG9zdC0+
bmFtZSgpLmlzTnVsbCgpIHx8IChkb2N1bWVudCAmJiAoZG9jdW1lbnQtPnBhcnNpbmcoKSB8fCAh
ZG9jdW1lbnQtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKSk7Ci0gICAgICAgICAgICBpZiAoc2hv
dWxkTGltaXRSZXF1ZXN0cyAmJiBob3N0LT5saW1pdFJlcXVlc3RzKFJlc291cmNlTG9hZFByaW9y
aXR5KHByaW9yaXR5KSkpCisgICAgICAgICAgICBpZiAoc2hvdWxkTGltaXRSZXF1ZXN0cyAmJiBo
b3N0LT5saW1pdFJlcXVlc3RzKHByaW9yaXR5KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgIHJlcXVlc3RzUGVuZGluZy5yZW1vdmVGaXJzdCgpOwpAQCAtMjk5LDYgKzI5
NSw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmcKICNlbmRpZgog
ICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7CiAgICAgICAgIH0KKyAgICAgICAg
aWYgKHByaW9yaXR5ID09IG1pbmltdW1Qcmlvcml0eSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgLS1wcmlvcml0eTsKICAgICB9CiB9CiAKQEAgLTMzOCwxNCArMzM3LDMwIEBAIFJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjoKIAogUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5mb3JtYXRpb24oKQogewotICAgIEFTU0VSVCht
X3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5KCkpOwotICAgIGZvciAodW5zaWduZWQgcCA9IDA7IHAg
PD0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBwKyspCi0gICAgICAgIEFTU0VSVChtX3Jl
cXVlc3RzUGVuZGluZ1twXS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7
CiB9Ci0gICAgCisKK3Vuc2lnbmVkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0
aW9uOjpwcmlvcml0eVRvSW5kZXgoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCit7Cisg
ICAgc3dpdGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZl
cnlMb3c6CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OkxvdzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6
TWVkaXVtOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5
OjpIaWdoOgorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5
OjpWZXJ5SGlnaDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCiB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6
SG9zdEluZm9ybWF0aW9uOjpzY2hlZHVsZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIs
IFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQogewotICAgIG1fcmVxdWVzdHNQZW5kaW5n
W3ByaW9yaXR5XS5hcHBlbmQocmVzb3VyY2VMb2FkZXIpOworICAgIG1fcmVxdWVzdHNQZW5kaW5n
W3ByaW9yaXR5VG9JbmRleChwcmlvcml0eSldLmFwcGVuZChyZXNvdXJjZUxvYWRlcik7CiB9CiAg
ICAgCiB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2Fk
SW5Qcm9ncmVzcyhSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCkBAIC0zNTksMTEgKzM3
NCwxMCBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0CiAgICAgaWYg
KG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNvdXJjZUxvYWRlcikpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBmb3IgKGludCBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5SGln
aGVzdDsgcHJpb3JpdHkgPj0gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3dlc3Q7IC0tcHJpb3JpdHkp
IHsgIAotICAgICAgICBSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdHNQZW5k
aW5nW3ByaW9yaXR5XS5lbmQoKTsKLSAgICAgICAgZm9yIChSZXF1ZXN0UXVldWU6Oml0ZXJhdG9y
IGl0ID0gbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHldLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgIGZvciAoYXV0byYgcmVxdWVzdFF1ZXVlIDogbV9yZXF1ZXN0c1BlbmRpbmcpIHsK
KyAgICAgICAgZm9yIChhdXRvIGl0ID0gcmVxdWVzdFF1ZXVlLmJlZ2luKCksIGVuZCA9IHJlcXVl
c3RRdWV1ZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoKml0ID09
IHJlc291cmNlTG9hZGVyKSB7Ci0gICAgICAgICAgICAgICAgbV9yZXF1ZXN0c1BlbmRpbmdbcHJp
b3JpdHldLnJlbW92ZShpdCk7CisgICAgICAgICAgICAgICAgcmVxdWVzdFF1ZXVlLnJlbW92ZShp
dCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0zNzQsOCArMzg4LDggQEAgYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1h
dAogewogICAgIGlmICghbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBmb3IgKHVuc2lnbmVkIHAgPSAwOyBwIDw9IFJlc291cmNlTG9hZFByaW9y
aXR5SGlnaGVzdDsgcCsrKSB7Ci0gICAgICAgIGlmICghbV9yZXF1ZXN0c1BlbmRpbmdbcF0uaXNF
bXB0eSgpKQorICAgIGZvciAoYXV0byYgcmVxdWVzdFF1ZXVlIDogbV9yZXF1ZXN0c1BlbmRpbmcp
IHsKKyAgICAgICAgaWYgKCFyZXF1ZXN0UXVldWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM4Myw3ICszOTcsNyBAQCBi
b29sIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0CiAKIGJvb2wgUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgcHJpb3JpdHkpIGNvbnN0IAogewotICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJj
ZUxvYWRQcmlvcml0eVZlcnlMb3cgJiYgIW1fcmVxdWVzdHNMb2FkaW5nLmlzRW1wdHkoKSkKKyAg
ICBpZiAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cgJiYgIW1fcmVx
dWVzdHNMb2FkaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJu
IG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSA+PSAocmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPmlz
U2VyaWFsTG9hZGluZ0VuYWJsZWQoKSA/IDEgOiBtX21heFJlcXVlc3RzSW5GbGlnaHQpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAko
cmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNj
aGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkZXJPcHRpb25zLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
QEAgLTU2LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2Fk
aW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2lu
UmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRlciosIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwp
OwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1
ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQ
cmlvcml0eVZlcnlMb3cpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXJ2ZVBl
bmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgCkBAIC05MywxNyArOTQsMTkgQEAg
cHJpdmF0ZToKICAgICAgICAgfkhvc3RJbmZvcm1hdGlvbigpOwogICAgICAgICAKICAgICAgICAg
Y29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgICAgIHZv
aWQgc2NoZWR1bGUoUmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZUxvYWRQcmlvcml0eSA9IFJlc291
cmNlTG9hZFByaW9yaXR5VmVyeUxvdyk7CisgICAgICAgIHZvaWQgc2NoZWR1bGUoUmVzb3VyY2VM
b2FkZXIqLCBSZXNvdXJjZUxvYWRQcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5
TG93KTsKICAgICAgICAgdm9pZCBhZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxvYWRlciopOwog
ICAgICAgICB2b2lkIHJlbW92ZShSZXNvdXJjZUxvYWRlciopOwogICAgICAgICBib29sIGhhc1Jl
cXVlc3RzKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgbGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQ
cmlvcml0eSkgY29uc3Q7CiAKICAgICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8UmVzb3VyY2VM
b2FkZXI+PiBSZXF1ZXN0UXVldWU7Ci0gICAgICAgIFJlcXVlc3RRdWV1ZSYgcmVxdWVzdHNQZW5k
aW5nKFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KSB7IHJldHVybiBtX3JlcXVlc3RzUGVu
ZGluZ1twcmlvcml0eV07IH0KKyAgICAgICAgUmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmco
UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIHsgcmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5n
W3ByaW9yaXR5VG9JbmRleChwcmlvcml0eSldOyB9CiAKLSAgICBwcml2YXRlOiAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgIFJlcXVlc3RRdWV1ZSBtX3JlcXVlc3RzUGVuZGluZ1tSZXNvdXJj
ZUxvYWRQcmlvcml0eUhpZ2hlc3QgKyAxXTsKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMg
dW5zaWduZWQgcHJpb3JpdHlUb0luZGV4KFJlc291cmNlTG9hZFByaW9yaXR5KTsKKyAgICAgICAg
CisgICAgICAgIHN0ZDo6YXJyYXk8UmVxdWVzdFF1ZXVlLCBzdGF0aWNfY2FzdDxpbnQ+KFJlc291
cmNlTG9hZFByaW9yaXR5OjpIaWdoZXN0KSArIDE+IG1fcmVxdWVzdHNQZW5kaW5nOwogICAgICAg
ICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFJlc291cmNlTG9hZGVyPj4gUmVxdWVzdE1hcDsKICAg
ICAgICAgUmVxdWVzdE1hcCBtX3JlcXVlc3RzTG9hZGluZzsKICAgICAgICAgY29uc3QgU3RyaW5n
IG1fbmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMzcgKzY4LDM3IEBA
IHN0YXRpYyBSZXNvdXJjZUxvYWRQcmlvcml0eSBkZWZhdWx0UHJpb3IKIHsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6Ci0gICAgICAg
IHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlIaWdoOworICAgICAgICByZXR1cm4gUmVz
b3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlIaWdoOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNT
U1N0eWxlU2hlZXQ6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2g7Cisg
ICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6SGlnaDsKICAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpTY3JpcHQ6CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6CiAjZW5kaWYKICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpGb250UmVzb3VyY2U6CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6
Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bTsKKyAgICAgICAgcmV0
dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpNZWRpdW07CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TG93
OworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsKICNpZiBFTkFCTEUo
WFNMVCkKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgotICAgICAgICBy
ZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoOworICAgICAgICByZXR1cm4gUmVzb3VyY2VM
b2FkUHJpb3JpdHk6OkhpZ2g7CiAjZW5kaWYKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdE
b2N1bWVudFJlc291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3c7
CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OwogI2lmIEVOQUJMRShM
SU5LX1BSRUZFVENIKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKLSAg
ICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdzsKKyAgICAgICAgcmV0dXJu
IFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93OwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkxpbmtTdWJyZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5VmVy
eUxvdzsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93OwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRl
eHRUcmFja1Jlc291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3c7
CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OwogI2VuZGlmCiAgICAg
fQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlv
cml0eUxvdzsKKyAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsKIH0KIAogc3Rh
dGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRl
cnZhbEZvclJlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlKQpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwCShyZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTYsNyArNDk2LDcgQEAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhYwogewogICAgIFVSTCB1cmwg
PSByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwogICAgIAotICAgIExPRyhSZXNvdXJj
ZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlICclcycsIGNo
YXJzZXQgJyVzJywgcHJpb3JpdHk9JWQsIGZvclByZWxvYWQ9JXUiLCB1cmwuc3RyaW5nQ2VudGVy
RWxsaXBzaXplZFRvTGVuZ3RoKCkubGF0aW4xKCkuZGF0YSgpLCByZXF1ZXN0LmNoYXJzZXQoKS5s
YXRpbjEoKS5kYXRhKCksIHJlcXVlc3QucHJpb3JpdHkoKSA/IHJlcXVlc3QucHJpb3JpdHkoKS52
YWx1ZSgpIDogLTEsIHJlcXVlc3QuZm9yUHJlbG9hZCgpKTsKKyAgICBMT0coUmVzb3VyY2VMb2Fk
aW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSAnJXMnLCBjaGFyc2V0
ICclcycsIHByaW9yaXR5PSVkLCBmb3JQcmVsb2FkPSV1IiwgdXJsLnN0cmluZ0NlbnRlckVsbGlw
c2l6ZWRUb0xlbmd0aCgpLmxhdGluMSgpLmRhdGEoKSwgcmVxdWVzdC5jaGFyc2V0KCkubGF0aW4x
KCkuZGF0YSgpLCByZXF1ZXN0LnByaW9yaXR5KCkgPyBzdGF0aWNfY2FzdDxpbnQ+KHJlcXVlc3Qu
cHJpb3JpdHkoKS52YWx1ZSgpKSA6IC0xLCByZXF1ZXN0LmZvclByZWxvYWQoKSk7CiAgICAgCiAg
ICAgLy8gSWYgb25seSB0aGUgZnJhZ21lbnQgaWRlbnRpZmllcnMgZGlmZmVyLCBpdCBpcyB0aGUg
c2FtZSByZXNvdXJjZS4KICAgICB1cmwgPSBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJZGVu
dGlmaWVySWZOZWVkZWQodXJsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0lj
b25Mb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0lj
b25Mb2FkZXIuY3BwCShyZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
aWNvbi9JY29uTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lk
IEljb25Mb2FkZXI6OnN0YXJ0TG9hZGluZygpCiAKICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdChSZXNvdXJjZVJlcXVlc3QobV9mcmFtZS5sb2FkZXIoKS5pY29uKCkudXJsKCkpLCBS
ZXNvdXJjZUxvYWRlck9wdGlvbnMoU2VuZENhbGxiYWNrcywgU25pZmZDb250ZW50LCBCdWZmZXJE
YXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERvTm90QXNrQ2xpZW50Rm9yQW55Q3Jl
ZGVudGlhbHMsIERvU2VjdXJpdHlDaGVjaywgVXNlRGVmYXVsdE9yaWdpblJlc3RyaWN0aW9uc0Zv
clR5cGUsIERvTm90SW5jbHVkZUNlcnRpZmljYXRlSW5mbykpOwogCi0gICAgcmVxdWVzdC5tdXRh
YmxlUmVzb3VyY2VSZXF1ZXN0KCkuc2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3cp
OworICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldFByaW9yaXR5KFJlc291
cmNlTG9hZFByaW9yaXR5OjpMb3cpOwogICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKGNhY2hlZFJl
c291cmNlUmVxdWVzdEluaXRpYXRvcnMoKS5pY29uKTsKIAogICAgIG1fcmVzb3VyY2UgPSBtX2Zy
YW1lLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkucmVxdWVzdFJhd1Jlc291cmNl
KHJlcXVlc3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL2NmL1dlYkNvcmVBVkNGUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9XZWJDb3JlQVZD
RlJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL1dlYkNvcmVBVkNGUmVzb3VyY2VMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgV2ViQ29yZUFWQ0ZS
ZXNvdXJjZUxvYWRlcjo6c3RhcnRMb2EKIAogICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1
ZXN0KFJlc291cmNlUmVxdWVzdChyZXF1ZXN0VVJMKSwgUmVzb3VyY2VMb2FkZXJPcHRpb25zKFNl
bmRDYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBCdWZmZXJEYXRhLCBEb05vdEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMsIERvTm90QXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscywg
RG9TZWN1cml0eUNoZWNrLCBVc2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSwgRG9O
b3RJbmNsdWRlQ2VydGlmaWNhdGVJbmZvKSk7CiAKLSAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJj
ZVJlcXVlc3QoKS5zZXRQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyk7CisgICAgcmVx
dWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkuc2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJp
b3JpdHk6Okxvdyk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IG1fcGFyZW50
LT5wbGF5ZXIoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKICAgICBtX3Jlc291cmNlID0gbG9h
ZGVyID8gbG9hZGVyLT5yZXF1ZXN0UmF3UmVzb3VyY2UocmVxdWVzdCkgOiAwOwogICAgIGlmICht
X3Jlc291cmNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNvcmVB
VkZSZXNvdXJjZUxvYWRlci5tbQkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9h
ZGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgV2ViQ29yZUFWRlJl
c291cmNlTG9hZGVyOjpzdGFydExvYWQKIAogICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1
ZXN0KFJlc291cmNlUmVxdWVzdChyZXF1ZXN0VVJMKSwgUmVzb3VyY2VMb2FkZXJPcHRpb25zKFNl
bmRDYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBCdWZmZXJEYXRhLCBEb05vdEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMsIERvTm90QXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscywg
RG9TZWN1cml0eUNoZWNrLCBVc2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSwgRG9O
b3RJbmNsdWRlQ2VydGlmaWNhdGVJbmZvKSk7CiAKLSAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJj
ZVJlcXVlc3QoKS5zZXRQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyk7CisgICAgcmVx
dWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkuc2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJp
b3JpdHk6Okxvdyk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IG1fcGFyZW50
LT5wbGF5ZXIoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKICAgICBtX3Jlc291cmNlID0gbG9h
ZGVyID8gbG9hZGVyLT5yZXF1ZXN0UmF3UmVzb3VyY2UocmVxdWVzdCkgOiAwOwogICAgIGlmICht
X3Jlc291cmNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUxvYWRQcmlvcml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VMb2FkUHJpb3JpdHkuaAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxvYWRQcmlvcml0eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCwxNiArMjgsMjggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVt
IFJlc291cmNlTG9hZFByaW9yaXR5IHsKLSAgICBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3cs
Ci0gICAgUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3csCi0gICAgUmVzb3VyY2VMb2FkUHJpb3JpdHlN
ZWRpdW0sCi0gICAgUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoLAotICAgIFJlc291cmNlTG9hZFBy
aW9yaXR5VmVyeUhpZ2gsCi0gICAgUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3dlc3QgPSBSZXNvdXJj
ZUxvYWRQcmlvcml0eVZlcnlMb3csCi0gICAgUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0ID0g
UmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaCwKK2VudW0gY2xhc3MgUmVzb3VyY2VMb2FkUHJp
b3JpdHkgeworICAgIFZlcnlMb3csCisgICAgTG93LAorICAgIE1lZGl1bSwKKyAgICBIaWdoLAor
ICAgIFZlcnlIaWdoLAorICAgIExvd2VzdCA9IFZlcnlMb3csCisgICAgSGlnaGVzdCA9IFZlcnlI
aWdoLAogfTsKIAoraW5saW5lIFJlc291cmNlTG9hZFByaW9yaXR5IG9wZXJhdG9yKysoUmVzb3Vy
Y2VMb2FkUHJpb3JpdHkmIHByaW9yaXR5KQoreworICAgIEFTU0VSVChwcmlvcml0eSAhPSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6SGlnaGVzdCk7CisgICAgcmV0dXJuIHByaW9yaXR5ID0gc3RhdGlj
X2Nhc3Q8UmVzb3VyY2VMb2FkUHJpb3JpdHk+KHN0YXRpY19jYXN0PGludD4ocHJpb3JpdHkpICsg
MSk7Cit9CisKK2lubGluZSBSZXNvdXJjZUxvYWRQcmlvcml0eSBvcGVyYXRvci0tKFJlc291cmNl
TG9hZFByaW9yaXR5JiBwcmlvcml0eSkKK3sKKyAgICBBU1NFUlQocHJpb3JpdHkgIT0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6Okxvd2VzdCk7CisgICAgcmV0dXJuIHByaW9yaXR5ID0gc3RhdGljX2Nh
c3Q8UmVzb3VyY2VMb2FkUHJpb3JpdHk+KHN0YXRpY19jYXN0PGludD4ocHJpb3JpdHkpIC0gMSk7
Cit9CisKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDE4MzQ2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDMyICs1MSwzMiBAQCBpbmxpbmUgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiBSZXNvdXJjZVJlCiBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VSZXF1ZXN0PiBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjphZG9wdChzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRSZXNv
dXJjZVJlcXVlc3REYXRhPiBkYXRhKQogewogICAgIGF1dG8gcmVxdWVzdCA9IHN0ZDo6bWFrZV91
bmlxdWU8UmVzb3VyY2VSZXF1ZXN0PigpOwotICAgIHJlcXVlc3QtPnNldFVSTChkYXRhLT5tX3Vy
bCk7Ci0gICAgcmVxdWVzdC0+c2V0Q2FjaGVQb2xpY3koZGF0YS0+bV9jYWNoZVBvbGljeSk7Ci0g
ICAgcmVxdWVzdC0+c2V0VGltZW91dEludGVydmFsKGRhdGEtPm1fdGltZW91dEludGVydmFsKTsK
LSAgICByZXF1ZXN0LT5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhkYXRhLT5tX2ZpcnN0UGFydHlG
b3JDb29raWVzKTsKLSAgICByZXF1ZXN0LT5zZXRIVFRQTWV0aG9kKGRhdGEtPm1faHR0cE1ldGhv
ZCk7Ci0gICAgcmVxdWVzdC0+c2V0UHJpb3JpdHkoZGF0YS0+bV9wcmlvcml0eSk7Ci0gICAgcmVx
dWVzdC0+c2V0UmVxdWVzdGVyKGRhdGEtPm1fcmVxdWVzdGVyKTsKKyAgICByZXF1ZXN0LT5zZXRV
UkwoZGF0YS0+dXJsKTsKKyAgICByZXF1ZXN0LT5zZXRDYWNoZVBvbGljeShkYXRhLT5jYWNoZVBv
bGljeSk7CisgICAgcmVxdWVzdC0+c2V0VGltZW91dEludGVydmFsKGRhdGEtPnRpbWVvdXRJbnRl
cnZhbCk7CisgICAgcmVxdWVzdC0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZGF0YS0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMpOworICAgIHJlcXVlc3QtPnNldEhUVFBNZXRob2QoZGF0YS0+aHR0cE1l
dGhvZCk7CisgICAgcmVxdWVzdC0+c2V0UHJpb3JpdHkoZGF0YS0+cHJpb3JpdHkpOworICAgIHJl
cXVlc3QtPnNldFJlcXVlc3RlcihkYXRhLT5yZXF1ZXN0ZXIpOwogCiAgICAgcmVxdWVzdC0+dXBk
YXRlUmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgcmVxdWVzdC0+bV9odHRwSGVhZGVyRmllbGRzLmFk
b3B0KFdURjo6bW92ZShkYXRhLT5tX2h0dHBIZWFkZXJzKSk7CisgICAgcmVxdWVzdC0+bV9odHRw
SGVhZGVyRmllbGRzLmFkb3B0KFdURjo6bW92ZShkYXRhLT5odHRwSGVhZGVycykpOwogCi0gICAg
c2l6ZV90IGVuY29kaW5nQ291bnQgPSBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9u
RW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKTsKKyAgICBzaXplX3QgZW5jb2RpbmdDb3VudCA9
IGRhdGEtPnJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNp
emUoKTsKICAgICBpZiAoZW5jb2RpbmdDb3VudCA+IDApIHsKLSAgICAgICAgU3RyaW5nIGVuY29k
aW5nMSA9IGRhdGEtPm1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXlbMF07CisgICAgICAgIFN0cmluZyBlbmNvZGluZzEgPSBkYXRhLT5yZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVswXTsKICAgICAgICAgU3RyaW5nIGVu
Y29kaW5nMjsKICAgICAgICAgU3RyaW5nIGVuY29kaW5nMzsKICAgICAgICAgaWYgKGVuY29kaW5n
Q291bnQgPiAxKSB7Ci0gICAgICAgICAgICBlbmNvZGluZzIgPSBkYXRhLT5tX3Jlc3BvbnNlQ29u
dGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5WzFdOworICAgICAgICAgICAgZW5j
b2RpbmcyID0gZGF0YS0+cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXlbMV07CiAgICAgICAgICAgICBpZiAoZW5jb2RpbmdDb3VudCA+IDIpCi0gICAgICAgICAg
ICAgICAgZW5jb2RpbmczID0gZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29k
aW5nRmFsbGJhY2tBcnJheVsyXTsKKyAgICAgICAgICAgICAgICBlbmNvZGluZzMgPSBkYXRhLT5y
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsyXTsKICAgICAg
ICAgfQogICAgICAgICBBU1NFUlQoZW5jb2RpbmdDb3VudCA8PSAzKTsKICAgICAgICAgcmVxdWVz
dC0+c2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoZW5j
b2RpbmcxLCBlbmNvZGluZzIsIGVuY29kaW5nMyk7CiAgICAgfQotICAgIHJlcXVlc3QtPnNldEhU
VFBCb2R5KGRhdGEtPm1faHR0cEJvZHkpOwotICAgIHJlcXVlc3QtPnNldEFsbG93Q29va2llcyhk
YXRhLT5tX2FsbG93Q29va2llcyk7CisgICAgcmVxdWVzdC0+c2V0SFRUUEJvZHkoZGF0YS0+aHR0
cEJvZHkpOworICAgIHJlcXVlc3QtPnNldEFsbG93Q29va2llcyhkYXRhLT5hbGxvd0Nvb2tpZXMp
OwogICAgIHJlcXVlc3QtPmRvUGxhdGZvcm1BZG9wdChXVEY6Om1vdmUoZGF0YSkpOwogICAgIHJl
dHVybiByZXF1ZXN0OwogfQpAQCAtODQsMjMgKzg0LDIzIEBAIHN0ZDo6dW5pcXVlX3B0cjxSZXNv
dXJjZVJlcXVlc3Q+IFJlc291cmMKIHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFJlc291cmNl
UmVxdWVzdERhdGE+IFJlc291cmNlUmVxdWVzdEJhc2U6OmNvcHlEYXRhKCkgY29uc3QKIHsKICAg
ICBhdXRvIGRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0
RGF0YT4oKTsKLSAgICBkYXRhLT5tX3VybCA9IHVybCgpLmNvcHkoKTsKLSAgICBkYXRhLT5tX2Nh
Y2hlUG9saWN5ID0gY2FjaGVQb2xpY3koKTsKLSAgICBkYXRhLT5tX3RpbWVvdXRJbnRlcnZhbCA9
IHRpbWVvdXRJbnRlcnZhbCgpOwotICAgIGRhdGEtPm1fZmlyc3RQYXJ0eUZvckNvb2tpZXMgPSBm
aXJzdFBhcnR5Rm9yQ29va2llcygpLmNvcHkoKTsKLSAgICBkYXRhLT5tX2h0dHBNZXRob2QgPSBo
dHRwTWV0aG9kKCkuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgZGF0YS0+bV9odHRwSGVhZGVycyA9IGh0
dHBIZWFkZXJGaWVsZHMoKS5jb3B5RGF0YSgpOwotICAgIGRhdGEtPm1fcHJpb3JpdHkgPSBwcmlv
cml0eSgpOwotICAgIGRhdGEtPm1fcmVxdWVzdGVyID0gbV9yZXF1ZXN0ZXI7CisgICAgZGF0YS0+
dXJsID0gdXJsKCkuY29weSgpOworICAgIGRhdGEtPmNhY2hlUG9saWN5ID0gbV9jYWNoZVBvbGlj
eTsKKyAgICBkYXRhLT50aW1lb3V0SW50ZXJ2YWwgPSB0aW1lb3V0SW50ZXJ2YWwoKTsKKyAgICBk
YXRhLT5maXJzdFBhcnR5Rm9yQ29va2llcyA9IGZpcnN0UGFydHlGb3JDb29raWVzKCkuY29weSgp
OworICAgIGRhdGEtPmh0dHBNZXRob2QgPSBodHRwTWV0aG9kKCkuaXNvbGF0ZWRDb3B5KCk7Cisg
ICAgZGF0YS0+aHR0cEhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCkuY29weURhdGEoKTsKKyAg
ICBkYXRhLT5wcmlvcml0eSA9IG1fcHJpb3JpdHk7CisgICAgZGF0YS0+cmVxdWVzdGVyID0gbV9y
ZXF1ZXN0ZXI7CiAKLSAgICBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2Rp
bmdGYWxsYmFja0FycmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9yZXNwb25zZUNvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkpOworICAgIGRhdGEtPnJlc3Bv
bnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJh
eS5zaXplKCkpOwogICAgIHNpemVfdCBlbmNvZGluZ0FycmF5U2l6ZSA9IG1fcmVzcG9uc2VDb250
ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpOwogICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBlbmNvZGluZ0FycmF5U2l6ZTsgKytpbmRleCkgewotICAg
ICAgICBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5LmFwcGVuZChtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5W2luZGV4XS5pc29sYXRlZENvcHkoKSk7CisgICAgICAgIGRhdGEtPnJlc3BvbnNlQ29udGVu
dERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LmFwcGVuZChtX3Jlc3BvbnNlQ29udGVu
dERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5W2luZGV4XS5pc29sYXRlZENvcHkoKSk7
CiAgICAgfQogICAgIGlmIChtX2h0dHBCb2R5KQotICAgICAgICBkYXRhLT5tX2h0dHBCb2R5ID0g
bV9odHRwQm9keS0+ZGVlcENvcHkoKTsKLSAgICBkYXRhLT5tX2FsbG93Q29va2llcyA9IG1fYWxs
b3dDb29raWVzOworICAgICAgICBkYXRhLT5odHRwQm9keSA9IG1faHR0cEJvZHktPmRlZXBDb3B5
KCk7CisgICAgZGF0YS0+YWxsb3dDb29raWVzID0gbV9hbGxvd0Nvb2tpZXM7CiAgICAgcmV0dXJu
IGFzUmVzb3VyY2VSZXF1ZXN0KCkuZG9QbGF0Zm9ybUNvcHlEYXRhKFdURjo6bW92ZShkYXRhKSk7
CiB9CiAKQEAgLTE1MSw3ICsxNTEsNyBAQCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBSZXNv
dXJjZVJlcXVlCiB7CiAgICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7IAogICAgIAotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeT4obV9jYWNoZVBvbGlj
eSk7CisgICAgcmV0dXJuIG1fY2FjaGVQb2xpY3k7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6c2V0Q2FjaGVQb2xpY3koUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xp
Y3kpCkBAIC00MzgsNyArNDM4LDcgQEAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgUmVzb3VyY2VSZXF1
ZXN0QmFzZQogewogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwogCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihtX3ByaW9yaXR5KTsKKyAgICByZXR1cm4g
bV9wcmlvcml0eTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRQcmlvcml0eShS
ZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKQEAgLTQ0OSw3ICs0NDksNiBAQCB2b2lkIFJl
c291cmNlUmVxdWVzdEJhc2U6OnNldFByaW9yaXR5KFJlCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1fcHJpb3JpdHkgPSBwcmlvcml0eTsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8UmVzb3VyY2VM
b2FkUHJpb3JpdHk+KG1fcHJpb3JpdHkpID09IHByaW9yaXR5KTsgLy8gTWFrZSBzdXJlIGl0IGZp
dHMgaW4gdGhlIGJpdGZpZWxkLgogCiAgICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1p
bHkoKSkKICAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuaAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxNSArMTcw
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgLy8gVXNl
ZCB3aGVuIFJlc291cmNlUmVxdWVzdCBpcyBpbml0aWFsaXplZCBmcm9tIGEgcGxhdGZvcm0gcmVw
cmVzZW50YXRpb24gb2YgdGhlIHJlcXVlc3QKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZSgp
Ci0gICAgICAgICAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZChmYWxzZSkKLSAgICAgICAg
ICAgICwgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkKHRydWUpCi0gICAgICAgICAgICAsIG1fcmVz
b3VyY2VSZXF1ZXN0Qm9keVVwZGF0ZWQoZmFsc2UpCisgICAgICAgICAgICA6IG1fcGxhdGZvcm1S
ZXF1ZXN0VXBkYXRlZCh0cnVlKQogICAgICAgICAgICAgLCBtX3BsYXRmb3JtUmVxdWVzdEJvZHlV
cGRhdGVkKHRydWUpCi0gICAgICAgICAgICAsIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3MoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKLSAgICAgICAgICAgICwg
bV9yZXBvcnRSYXdIZWFkZXJzKGZhbHNlKQotICAgICAgICAgICAgLCBtX2hpZGRlbkZyb21JbnNw
ZWN0b3IoZmFsc2UpCi0gICAgICAgICAgICAsIG1fcHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3Jp
dHlMb3cpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xOTMsMTQgKzE4Niw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9hbGxvd0Nvb2tpZXMoUmVzb3VyY2VSZXF1
ZXN0QmFzZTo6ZGVmYXVsdEFsbG93Q29va2llcygpKQogI2VuZGlmCiAgICAgICAgICAgICAsIG1f
cmVzb3VyY2VSZXF1ZXN0VXBkYXRlZCh0cnVlKQotICAgICAgICAgICAgLCBtX3BsYXRmb3JtUmVx
dWVzdFVwZGF0ZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcmVzb3VyY2VSZXF1ZXN0Qm9keVVw
ZGF0ZWQodHJ1ZSkKLSAgICAgICAgICAgICwgbV9wbGF0Zm9ybVJlcXVlc3RCb2R5VXBkYXRlZChm
YWxzZSkKLSAgICAgICAgICAgICwgbV9yZXBvcnRVcGxvYWRQcm9ncmVzcyhmYWxzZSkKLSAgICAg
ICAgICAgICwgbV9yZXBvcnRMb2FkVGltaW5nKGZhbHNlKQotICAgICAgICAgICAgLCBtX3JlcG9y
dFJhd0hlYWRlcnMoZmFsc2UpCi0gICAgICAgICAgICAsIG1faGlkZGVuRnJvbUluc3BlY3Rvcihm
YWxzZSkKLSAgICAgICAgICAgICwgbV9wcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eUxvdykK
ICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTIxNywxNyArMjAzLDE3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgSFRUUEhlYWRlck1hcCBtX2h0dHBIZWFkZXJGaWVsZHM7CiAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0Zh
bGxiYWNrQXJyYXk7CiAgICAgICAgIFJlZlB0cjxGb3JtRGF0YT4gbV9odHRwQm9keTsKLSAgICAg
ICAgdW5zaWduZWQgbV9jYWNoZVBvbGljeSA6IDM7Ci0gICAgICAgIHVuc2lnbmVkIG1fYWxsb3dD
b29raWVzIDogMTsKLSAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3Jlc291cmNlUmVxdWVzdFVw
ZGF0ZWQgOiAxOwotICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fcGxhdGZvcm1SZXF1ZXN0VXBk
YXRlZCA6IDE7Ci0gICAgICAgIG11dGFibGUgdW5zaWduZWQgbV9yZXNvdXJjZVJlcXVlc3RCb2R5
VXBkYXRlZCA6IDE7Ci0gICAgICAgIG11dGFibGUgdW5zaWduZWQgbV9wbGF0Zm9ybVJlcXVlc3RC
b2R5VXBkYXRlZCA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3Mg
OiAxOwotICAgICAgICB1bnNpZ25lZCBtX3JlcG9ydExvYWRUaW1pbmcgOiAxOwotICAgICAgICB1
bnNpZ25lZCBtX3JlcG9ydFJhd0hlYWRlcnMgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2hpZGRl
bkZyb21JbnNwZWN0b3IgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX3ByaW9yaXR5IDogNDsKKyAg
ICAgICAgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgbV9jYWNoZVBvbGljeSB7IFVzZVByb3Rv
Y29sQ2FjaGVQb2xpY3kgfTsKKyAgICAgICAgYm9vbCBtX2FsbG93Q29va2llcyB7IGZhbHNlIH07
CisgICAgICAgIG11dGFibGUgYm9vbCBtX3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQgeyBmYWxzZSB9
OworICAgICAgICBtdXRhYmxlIGJvb2wgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkIHsgZmFsc2Ug
fTsKKyAgICAgICAgbXV0YWJsZSBib29sIG1fcmVzb3VyY2VSZXF1ZXN0Qm9keVVwZGF0ZWQgeyBm
YWxzZSB9OworICAgICAgICBtdXRhYmxlIGJvb2wgbV9wbGF0Zm9ybVJlcXVlc3RCb2R5VXBkYXRl
ZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9yZXBvcnRVcGxvYWRQcm9ncmVzcyB7IGZhbHNl
IH07CisgICAgICAgIGJvb2wgbV9yZXBvcnRMb2FkVGltaW5nIHsgZmFsc2UgfTsKKyAgICAgICAg
Ym9vbCBtX3JlcG9ydFJhd0hlYWRlcnMgeyBmYWxzZSB9OworICAgICAgICBib29sIG1faGlkZGVu
RnJvbUluc3BlY3RvciB7IGZhbHNlIH07CisgICAgICAgIFJlc291cmNlTG9hZFByaW9yaXR5IG1f
cHJpb3JpdHkgeyBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93IH07CiAgICAgICAgIFJlcXVlc3Rl
ciBtX3JlcXVlc3RlciB7IFJlcXVlc3Rlcjo6VW5zcGVjaWZpZWQgfTsKIAogICAgIHByaXZhdGU6
CkBAIC0yNDUsMjIgKzIzMSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShSZXNvdXJjZVJlcXVlc3QmIGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
YikgeyByZXR1cm4gIShhID09IGIpOyB9CiAKICAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJj
ZVJlcXVlc3REYXRhQmFzZSB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENyb3NzVGhy
ZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YUJhc2UpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YUJhc2UoKSB7
IH0KLSAgICAgICAgVVJMIG1fdXJsOwotCi0gICAgICAgIFJlc291cmNlUmVxdWVzdENhY2hlUG9s
aWN5IG1fY2FjaGVQb2xpY3k7Ci0gICAgICAgIGRvdWJsZSBtX3RpbWVvdXRJbnRlcnZhbDsKLSAg
ICAgICAgVVJMIG1fZmlyc3RQYXJ0eUZvckNvb2tpZXM7Ci0KLSAgICAgICAgU3RyaW5nIG1faHR0
cE1ldGhvZDsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1h
cERhdGE+IG1faHR0cEhlYWRlcnM7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVzcG9uc2VD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk7Ci0gICAgICAgIFJlZlB0cjxG
b3JtRGF0YT4gbV9odHRwQm9keTsKLSAgICAgICAgYm9vbCBtX2FsbG93Q29va2llczsKLSAgICAg
ICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgbV9wcmlvcml0eTsKLSAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0QmFzZTo6UmVxdWVzdGVyIG1fcmVxdWVzdGVyOworICAgICAgICBVUkwgdXJsOworICAgICAg
ICBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZVBvbGljeTsKKyAgICAgICAgZG91Ymxl
IHRpbWVvdXRJbnRlcnZhbDsKKyAgICAgICAgVVJMIGZpcnN0UGFydHlGb3JDb29raWVzOworICAg
ICAgICBTdHJpbmcgaHR0cE1ldGhvZDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhy
ZWFkSFRUUEhlYWRlck1hcERhdGE+IGh0dHBIZWFkZXJzOworICAgICAgICBWZWN0b3I8U3RyaW5n
PiByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTsKKyAgICAg
ICAgUmVmUHRyPEZvcm1EYXRhPiBodHRwQm9keTsKKyAgICAgICAgYm9vbCBhbGxvd0Nvb2tpZXM7
CisgICAgICAgIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5OworICAgICAgICBSZXNvdXJj
ZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXIgcmVxdWVzdGVyOwogICAgIH07CiAgICAgCiAgICAgdW5z
aWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5l
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9S
ZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTksMTAgKzM5OSwxMCBAQCB1bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhU
VFBDb25uZWN0aW9uCiAgICAgaWYgKCFSZXNvdXJjZVJlcXVlc3Q6OnJlc291cmNlUHJpb3JpdGll
c0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIG1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVy
SG9zdDsKIAotICAgIHdrU2V0SFRUUFJlcXVlc3RNYXhpbXVtUHJpb3JpdHkodG9QbGF0Zm9ybVJl
cXVlc3RQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hlc3QpKTsKKyAgICB3a1NldEhU
VFBSZXF1ZXN0TWF4aW11bVByaW9yaXR5KHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3JpdHkoUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OkhpZ2hlc3QpKTsKICNpZiAhUExBVEZPUk0oV0lOKQogICAgIC8vIEZJ
WE1FOiA8cmRhcjovL3Byb2JsZW0vOTM3NTYwOT4gSW1wbGVtZW50IG1pbmltdW0gZmFzdCBsYW5l
IHByaW9yaXR5IHNldHRpbmcgb24gV2luZG93cwotICAgIHdrU2V0SFRUUFJlcXVlc3RNaW5pbXVt
RmFzdExhbmVQcmlvcml0eSh0b1BsYXRmb3JtUmVxdWVzdFByaW9yaXR5KFJlc291cmNlTG9hZFBy
aW9yaXR5TWVkaXVtKSk7CisgICAgd2tTZXRIVFRQUmVxdWVzdE1pbmltdW1GYXN0TGFuZVByaW9y
aXR5KHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1
bSkpOwogI2VuZGlmCiAKICAgICByZXR1cm4gdW5saW1pdGVkUmVxdWVzdENvdW50OwpAQCAtNDE4
LDggKzQxOCw4IEBAIHZvaWQgaW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblMKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJlZmVycmVkQ29ubmVjdGlvbkNvdW50ID0gNjsKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdExhbmVDb25uZWN0aW9uQ291bnQgPSAxOwogICAg
IHdrSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdChwcmVmZXJyZWRD
b25uZWN0aW9uQ291bnQpOwotICAgIHdrU2V0SFRUUFJlcXVlc3RNYXhpbXVtUHJpb3JpdHkoUmVz
b3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0KTsKLSAgICB3a1NldEhUVFBSZXF1ZXN0TWluaW11bUZh
c3RMYW5lUHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW0pOworICAgIHdrU2V0SFRU
UFJlcXVlc3RNYXhpbXVtUHJpb3JpdHkodG9QbGF0Zm9ybVJlcXVlc3RQcmlvcml0eShSZXNvdXJj
ZUxvYWRQcmlvcml0eTo6SGlnaGVzdCkpOworICAgIHdrU2V0SFRUUFJlcXVlc3RNaW5pbXVtRmFz
dExhbmVQcmlvcml0eSh0b1BsYXRmb3JtUmVxdWVzdFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9y
aXR5OjpNZWRpdW0pKTsKICAgICBfQ0ZOZXR3b3JrSFRUUENvbm5lY3Rpb25DYWNoZVNldExpbWl0
KGtIVFRQTnVtRmFzdExhbmVzLCBmYXN0TGFuZUNvbm5lY3Rpb25Db3VudCk7CiB9CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlUmVxdWVzdENGTmV0LmgJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsMzMgKzQ2LDMzIEBAIGlubGluZSBSZXNvdXJjZUxvYWRQcmlvcml0eSB0b1Jl
c291cmNlTG8KICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CiAgICAgY2FzZSAtMToKICAgICBjYXNl
IDA6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3c7CisgICAgICAg
IHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdzsKICAgICBjYXNlIDE6Ci0gICAg
ICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdzsKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlTG9hZFByaW9yaXR5OjpMb3c7CiAgICAgY2FzZSAyOgotICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHlNZWRpdW07CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0
eTo6TWVkaXVtOwogICAgIGNhc2UgMzoKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9y
aXR5SGlnaDsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOwogICAg
IGNhc2UgNDoKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g7Cisg
ICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2g7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBSZXNvdXJj
ZUxvYWRQcmlvcml0eUxvd2VzdDsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5
OjpMb3dlc3Q7CiAgICAgfQogfQogCiBpbmxpbmUgaW50IHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3Jp
dHkoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCiB7CiAgICAgc3dpdGNoIChwcmlvcml0
eSkgewotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93OgorICAgIGNhc2UgUmVz
b3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c6CiAgICAgICAgIHJldHVybiAwOwotICAgIGNhc2Ug
UmVzb3VyY2VMb2FkUHJpb3JpdHlMb3c6CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6
TG93OgogICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5TWVk
aXVtOgorICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bToKICAgICAgICAgcmV0
dXJuIDI7Ci0gICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2g6CisgICAgY2FzZSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6SGlnaDoKICAgICAgICAgcmV0dXJuIDM7Ci0gICAgY2FzZSBSZXNv
dXJjZUxvYWRQcmlvcml0eVZlcnlIaWdoOgorICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OlZlcnlIaWdoOgogICAgICAgICByZXR1cm4gNDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgJ
KHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDE1ICsxMzEsMTUgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogaW5saW5lIFNvdXBNZXNzYWdlUHJpb3JpdHkgdG9Tb3VwTWVz
c2FnZVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQogewogICAgIHN3aXRj
aCAocHJpb3JpdHkpIHsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdzoKKyAg
ICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93OgogICAgICAgICByZXR1cm4gU09V
UF9NRVNTQUdFX1BSSU9SSVRZX1ZFUllfTE9XOwotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3Jp
dHlMb3c6CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OgogICAgICAgICByZXR1
cm4gU09VUF9NRVNTQUdFX1BSSU9SSVRZX0xPVzsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9y
aXR5TWVkaXVtOgorICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bToKICAgICAg
ICAgcmV0dXJuIFNPVVBfTUVTU0FHRV9QUklPUklUWV9OT1JNQUw7Ci0gICAgY2FzZSBSZXNvdXJj
ZUxvYWRQcmlvcml0eUhpZ2g6CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6SGlnaDoK
ICAgICAgICAgcmV0dXJuIFNPVVBfTUVTU0FHRV9QUklPUklUWV9ISUdIOwotICAgIGNhc2UgUmVz
b3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaDoKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5
OjpWZXJ5SGlnaDoKICAgICAgICAgcmV0dXJuIFNPVVBfTUVTU0FHRV9QUklPUklUWV9WRVJZX0hJ
R0g7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZp
c2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2MSwxNyArNDYxLDE3IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRPdmVy
cmlkZUNhY2hlUG9saWN5KGMKIHN0YXRpYyBSZXNvdXJjZUxvYWRQcmlvcml0eSBzdHJpbmdUb1Jl
c291cmNlTG9hZFByaW9yaXR5KGNvbnN0IFN0cmluZyYgcG9saWN5KQogewogICAgIGlmIChwb2xp
Y3kgPT0gIlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdyIpCi0gICAgICAgIHJldHVybiBSZXNv
dXJjZUxvYWRQcmlvcml0eVZlcnlMb3c7CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlv
cml0eTo6VmVyeUxvdzsKICAgICBpZiAocG9saWN5ID09ICJSZXNvdXJjZUxvYWRQcmlvcml0eUxv
dyIpCi0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdzsKKyAgICAgICAgcmV0
dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3c7CiAgICAgaWYgKHBvbGljeSA9PSAiUmVzb3Vy
Y2VMb2FkUHJpb3JpdHlNZWRpdW0iKQotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlNZWRpdW07CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOwog
ICAgIGlmIChwb2xpY3kgPT0gIlJlc291cmNlTG9hZFByaW9yaXR5SGlnaCIpCi0gICAgICAgIHJl
dHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2g7CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxv
YWRQcmlvcml0eTo6SGlnaDsKICAgICBpZiAocG9saWN5ID09ICJSZXNvdXJjZUxvYWRQcmlvcml0
eVZlcnlIaWdoIikKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g7
CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2g7CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TG93Owor
ICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OwogfQogCiB2b2lkIEludGVybmFs
czo6c2V0T3ZlcnJpZGVSZXNvdXJjZUxvYWRQcmlvcml0eShjb25zdCBTdHJpbmcmIHByaW9yaXR5
KQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzNTMxKQorKysgU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTUtMDQtMjggIEFudHRp
IEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlTG9hZFByaW9y
aXR5IHNob3VsZCBiZSBlbnVtIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDQzMjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKTogRGVsZXRlZC4KKworICAgICAgICAgICAgUmVtb3Zl
IHRoaXMgdW51c2VkIG1lc3NhZ2UuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6bWFrZVN0b3JlRGVjaXNpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZXRyaWV2ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtTZXR0aW5ncyk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5n
UmVxdWVzdHMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaDoKKwogMjAxNS0wNC0yOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgTmV0d29yayBDYWNoZTogRG8gbm90IGNyZWF0ZSBhIFNo
YXJlZEJ1ZmZlciBmb3IgbWFwcGVkIHJlc291cmNlcyB1bmxlc3MgZXhwbGljaXRseSByZXF1ZXN0
ZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDE4MzQ2NykK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDkgKzE1MSw2IEBAIHZvaWQgTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNldEQKICAgICBsb2FkZXItPnNldERlZmVyc0xvYWRp
bmcoZGVmZXJzKTsKIH0KIAotdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2Vy
dmVQZW5kaW5nUmVxdWVzdHModWludDMyX3QpCi17Ci19CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OnNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAkocmV2aXNpb24gMTgzNDY3KQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVt
b3ZlTG9hZElkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllcik7CiAgICAgdm9pZCBzZXRE
ZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZElkZW50aWZpZXIsIGJvb2wpOwogICAgIHZvaWQgY3Jv
c3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OlVSTCYgcmVkaXJlY3RVUkwpOwotICAgIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMo
dWludDMyX3QgcmVzb3VyY2VMb2FkUHJpb3JpdHkpOwogICAgIHZvaWQgc2V0U2VyaWFsTG9hZGlu
Z0VuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBzdGFydERvd25sb2FkKFdlYkNvcmU6OlNlc3Npb25J
RCwgdWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7
CiAgICAgdm9pZCBjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQodWludDY0X3QgbWFp
blJlc291cmNlTG9hZElkZW50aWZpZXIsIHVpbnQ2NF90IGRvd25sb2FkSUQsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZp
c2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjgsOSAr
MjgsNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzCiAgICAgUGVy
Zm9ybVN5bmNocm9ub3VzTG9hZChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
IHJlc291cmNlTG9hZFBhcmFtZXRlcnMpIC0+IChXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9y
LCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4gZGF0YSkg
RGVsYXllZAogICAgIFJlbW92ZUxvYWRJZGVudGlmaWVyKHVpbnQ2NF90IHJlc291cmNlTG9hZElk
ZW50aWZpZXIpCiAgICAgU2V0RGVmZXJzTG9hZGluZyh1aW50NjRfdCByZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCBib29sIGRlZmVycykKLSAgICAKLSAgICBTZXJ2ZVBlbmRpbmdSZXF1ZXN0cyh1aW50
MzJfdCByZXNvdXJjZUxvYWRQcmlvcml0eSkKLSAgICAKKyAgICAgICAgCiAgICAgU2V0U2VyaWFs
TG9hZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSAtPiAoKQogCiAgICAgU3RhcnREb3dubG9hZChX
ZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW50NjRfdCBkb3dubG9hZElELCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAkocmV2aXNpb24gMTgzNDY3
KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDcgKzMwMCw3IEBAIHN0YXRpYyBTdG9yZURlY2lzaW9u
IG1ha2VTdG9yZURlY2lzaW9uKGMKICAgICB9CiAKICAgICBib29sIGlzTWFpblJlc291cmNlID0g
b3JpZ2luYWxSZXF1ZXN0LnJlcXVlc3RlcigpID09IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6
UmVxdWVzdGVyOjpNYWluOwotICAgIGJvb2wgc3RvcmVVbmNvbmRpdGlvbmFsbHlGb3JIaXN0b3J5
TmF2aWdhdGlvbiA9IGlzTWFpblJlc291cmNlIHx8IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgp
ID09IFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g7CisgICAgYm9vbCBzdG9y
ZVVuY29uZGl0aW9uYWxseUZvckhpc3RvcnlOYXZpZ2F0aW9uID0gaXNNYWluUmVzb3VyY2UgfHwg
b3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCkgPT0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3Jp
dHk6OlZlcnlIaWdoOwogICAgIGlmICghc3RvcmVVbmNvbmRpdGlvbmFsbHlGb3JIaXN0b3J5TmF2
aWdhdGlvbikgewogICAgICAgICBhdXRvIG5vdyA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
Om5vdygpOwogICAgICAgICBib29sIGhhc05vblplcm9MaWZldGltZSA9ICFyZXNwb25zZS5jYWNo
ZUNvbnRyb2xDb250YWluc05vQ2FjaGUoKSAmJiBXZWJDb3JlOjpjb21wdXRlRnJlc2huZXNzTGlm
ZXRpbWVGb3JIVFRQRmFtaWx5KHJlc3BvbnNlLCBub3cpID4gMF9tczsKQEAgLTM0Miw3ICszNDIs
NyBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgfQogCiAg
ICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKLSAg
ICB1bnNpZ25lZCBwcmlvcml0eSA9IG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpOworICAgIGlu
dCBwcmlvcml0eSA9IHN0YXRpY19jYXN0PGludD4ob3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCkp
OwogCiAgICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMs
IG9yaWdpbmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGltZSwgc3RvcmFnZUtl
eSwgd2ViUGFnZUlEXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiByZWNvcmQpIHsK
ICAgICAgICAgaWYgKCFyZWNvcmQpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyTWFjLm1tCShyZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDksOCArNDksOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnBsYXRmCiAgICAgICAgIFJlc291cmNlUmVxdWVzdDo6c2V0SFRUUFBpcGVsaW5pbmdFbmFibGVk
KHByZWZWYWx1ZSk7CiAKICAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJjZVByaW9yaXRp
ZXNFbmFibGVkKCkpIHsKLSAgICAgICAgV0tTZXRIVFRQUmVxdWVzdE1heGltdW1Qcmlvcml0eSh0
b1BsYXRmb3JtUmVxdWVzdFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdCkpOwot
ICAgICAgICBXS1NldEhUVFBSZXF1ZXN0TWluaW11bUZhc3RMYW5lUHJpb3JpdHkodG9QbGF0Zm9y
bVJlcXVlc3RQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bSkpOworICAgICAgICBX
S1NldEhUVFBSZXF1ZXN0TWF4aW11bVByaW9yaXR5KHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3JpdHko
UmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2hlc3QpKTsKKyAgICAgICAgV0tTZXRIVFRQUmVxdWVz
dE1pbmltdW1GYXN0TGFuZVByaW9yaXR5KHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3JpdHkoUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6Ok1lZGl1bSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHAJKHJldmlzaW9uIDE4MzQ2NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Mzcs
NyArNjM3LDYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0Q1NTQ29tcG9zaXRpbmdFbgogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQogewotICAg
IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0
d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShy
ZXZpc2lvbiAxODM0NjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDE2ICsyNDQs
OCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnCiAgICAgLy8gV2Ug
b3ZlcnJpZGUgdGhpcyBjYWxsIGluIHRoZSBXZWJQcm9jZXNzIHRvIG1ha2UgaXQgYSBuby1vcC4K
IH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3Rz
KFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSkK
IHsKLSAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyIpOwotICAgIAotICAgIC8vIFRoZSBO
ZXR3b3JrUHJvY2VzcyBzY2hlZHVsZXIgaXMgZ29vZCBhdCBtYWtpbmcgc3VyZSBsb2FkcyBhcmUg
c2VydmljZWQgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyByZXF1ZXN0cy4KLSAgICAv
LyBJZiB0aGlzIFdlYlByb2Nlc3MgaXNuJ3QgZXhwZWN0aW5nIHJlcXVlc3RzIHRvIGJlIHNlcnZl
ZCB0aGVuIHdlIGNhbiBpZ25vcmUgbWVzc2FnaW5nIHRoZSBOZXR3b3JrUHJvY2VzcyByaWdodCBu
b3cuCi0gICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpTZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhtaW5pbXVtUHJpb3JpdHkpLCAwKTsKIH0KIAogdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkocmV2aXNpb24gMTgzNDY3KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVm
ZXJzTG9hZGluZyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciosIGJvb2wpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpVUkwmIHJlZGlyZWN0VVJMKSBvdmVycmlkZTsKICAg
ICAKLSAgICB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJp
b3JpdHlWZXJ5TG93KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVx
dWVzdHMoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KSBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpIG92ZXJyaWRlOwo=
</data>
<flag name="review"
          id="276752"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>